私はVBAを初めて使用するので、助けが必要です。
範囲が常に10列になるスプレッドシートがありますが、行数はX個になる可能性があります。この範囲を反復処理し、各セルから値を抽出するVBAスクリプトを作成しようとしています。
たとえば、2つの行がある場合、A1、B1、C1..J1が必要であり、次にA2、B2、C2...J2が必要です。次回は5行、次に3行にすることができます。
これを機能させるためにループを設定するにはどうすればよいですか?
私はVBAを初めて使用するので、助けが必要です。
範囲が常に10列になるスプレッドシートがありますが、行数はX個になる可能性があります。この範囲を反復処理し、各セルから値を抽出するVBAスクリプトを作成しようとしています。
たとえば、2つの行がある場合、A1、B1、C1..J1が必要であり、次にA2、B2、C2...J2が必要です。次回は5行、次に3行にすることができます。
これを機能させるためにループを設定するにはどうすればよいですか?
何かのようなもの
Dim lastRow as long
lastRow = UsedRange.Rows.Count 'or some other way of determining the last row used
for i = 1 to lastRow 'loop through all used rows
'ActiveSheet.Cells(i, 1).value 'column A
'ActiveSheet.Cells(i, 2).value 'column B
'ActiveSheet.Cells(i, 3).value 'column C
next i
動的な名前付き範囲を使用して、それをループすることもできます。より良い例については、このリンクまたはグーグルを参照してください。動的な名前の範囲は、特にグラフの場合に強力です。
この例では、名前範囲参照を;に設定します。
=OFFSET(Sheet1!$A$1,0,0,COUNT(Sheet1!$A:$A),10) '10 is the width and will go to column J
列Aにテーブルの真の最大行があると仮定します。
それで;
Dim arr() As Variant
arr = Range("YourRangeName")
For x = 1 To UBound(arr,1) 'Finds the max number of rows in the array, UBound(arr,2) finds the total columns.
'Do some code here where x steps through the array arr
' = arr(x, 1) 'column a
' = arr(x,2) 'column b
' = arr(x,3) ....
Next x
ほとんどの場合、コードでできる限り多くの処理を行う方が優れています。つまり、Excelで範囲を配列に割り当ててから、セルを参照するのではなく、配列をループします(特にループ内)。