web-dev-qa-db-ja.com

VBAを使用してセル値の範囲を変数の配列に割り当てる

私はここで私と耐えるために、VBAに非常に新しいです。

変数のセットに範囲のセットの値を割り当てたい。簡単なコードを実行して、次を簡素化します

Dim Sample 1 as string
Sample1 = activeworksheet.range("C17").value

Dim Sample 2 as string
Sample2 = activeworksheet.range("C18").value}

等々

Excelfunctions.netチュートリアルに従って、宣言を次のように短縮できることを知っています

Dim Sample(1 to 20) as a string

しかし、チュートリアルはそれをそこにドロップします(名前に関するチュートリアルであるため)、次のように入力することを提案します

sample(1)=activesheet.range("C7").value
sample(2)=activesheet.range("C7").value

等々

私の探求に答えるために、以下の議論が正しい道にあることがわかりましたが、それを自分の状況に適用するのに苦労しています。 ( ループのExcel VBA配列範囲

フォローアップノートとして、私は最終的に、毎回宣言して割り当てるのではなく、次の手順で使用するためにこれらの変数に値を割り当てようとしています。

ありがとう!

6
SydneyJ

あなたがすべき :

  • データを取得する範囲を定義します
  • 範囲の各セルについて、データを取得します

    dim tab() As string, cell as range, i as integer
    i = 0
    redim tab(0)
    for each cell in ActiveWorksheet.Range("C1:C20")
        tab(i) = cell
        i = i + 1
        redim preserve tab(i)
    next
    

編集:コードをインデントして正しく表示する

5
Maxime Porté

次のようなものを試してください:

Sub test()
Dim sampleArr(1 To 20) As String
Dim i As Integer
Dim rng As Range, cel As Range

i = 1
Set rng = Range("C1:C20") 

For Each cel In rng
    sampleArr(i) = cel.Value
    i = i + 1
Next cel
For i = LBound(sampleArr) To UBound(sampleArr)
    Debug.Print sampleArr(i)
Next i

また、配列に入れたい範囲がわかっている場合は、単純に配列をその範囲に設定できます。

Sub test()
Dim sampleArr() As Variant
Dim i As Integer
Dim rng As Range, cel As Range

i = 1
Set rng = Range("C1:C20") ' Note, this creates a 2 Dimensional array

sampleArr = rng ' Right here, this sets the values in the range to this array.

For i = LBound(sampleArr) To UBound(sampleArr)
    Debug.Print sampleArr(i, 1) ' you need the ",1" since this is 2D.
Next i

End Sub
6
BruceWayne

上記の追加の方法は、次のもののみ使用できます。

_Arr = ActiveWorksheet.Range("C1:C20").Value
_

その後、直接使用できます:

Arr(i,1)ここで、iはC1からC20の範囲です!

0