2010年のMicrosoft ExcelでVBAを使用して配列変数
Excel VBAアレイの使用方法は?
マクロは、カーソルをマクロに置いてF5キーを押してVisual Basic Editorから実行するか、Excelから[マクロ]ダイアログボックス(ALT + F8)を開いて実行するマクロを選択し、[実行]をクリックして実行できます。これらのマクロは、[デバッグ]> [ステップイン](F8キーを押す)を使用してVisual Basic Editorから実行することをお勧めします。これにより、マクロの動作を確認できます。手順[開発者]タブがリボンにない場合..Excelを開きます。
-
VBAエディターに移動します(Alt + F11を押します)
-
イミディエイトウィンドウに移動します。 (Ctrl + G)
-
以下のコードを書いてください。
Application.ShowDevTools = True
ExcelにVBAコードを挿入する方法
[開発者]タブ> [コードグループ]> * Visual Basic
に移動します
[挿入]> [*モジュール]をクリックします。
-
空のモジュールが開きます。
-
そのモジュールに提供されたコードを書き込む/貼り付ける
ExcelでVBAコードを実行する方法
コード間の任意の場所を選択します。* Sub…EndSub
Run&Run Sub *または
をクリックします=== F5
静的配列変数情報を格納するためにいくつかの一意の変数を使用する代わりに、配列変数を使用できます。
配列に格納する必要のある要素の数がわかっている場合は、次のような静的配列変数を使用できます:
コード Sub TestStaticArray() 'は、ワークブックの10個の名前を配列変数MyNames()に格納します。DimMyNames(1 To 10)As String’は、静的配列変数Dim iCount As Integer For iCount = 1 ToThisWorkbookを宣言します。 Sheets.Count MyNames(iCount)= ThisWorkbook.Sheets(iCount).Name Debug.Print MyNames(iCount)Next iCount Erase MyNames() 'は変数の内容を削除し、メモリを解放しますEnd Sub
==== デコード
Dim MyNames(1 to 10)As String
単一の検証可能なMyNameを文字列としてディメンション化し、10個のアイテムを保持できます。したがって、検証可能なMyNamesは配列型です。
Dim iCount As Integer
単一の変数iCountを整数として宣言しました。これは、数値整数型の値のみを保持できます
For iCount = 1 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets.Countは、ワークブックのシート数を示します。
ThisWorkbookは、コードが記述されたワークブックを指します。
MyNames(iCount)= ThisWorkbook.Sheets(iCount).Name
ループを使用して、各シートの名前をMyNamesと呼ばれる単一の検証可能ファイルに割り当てます。 MyNamesは検証可能な配列型であるため、各シート名を配列の各項目に格納します。
Debug.Print MyNames(iCount)
配列の各項目に値を割り当てた直後に、ImmediateWindowに同じ値が出力され、デフォルトではVBAウィンドウの下部に出力されます。
各値の割り当てを表示し、その値をImmediateWindowに表示できます。
次のiCount
Nextは、Excel VBAのForループに、ワークブックでiCountが合計シート数に達するまでiCountカウンターを増やして、同じタスクを再度繰り返すように指示するために使用されます。
動的配列変数動的配列変数は、情報を格納する必要のある要素の数が事前にわからない場合に役立ちます。
動的配列変数は、配列サイズに関する情報を提供しないことを除いて、静的配列変数と同じように宣言します。
上記の例(Dim MyNames(1 to 10)As String)で、シート数が10を超えると、MyNamesは10を超えるアイテムを格納できないため、エラーが発生します。
コード Sub TestDynamicArray() 'は、ワークブック内のすべての名前を配列変数MyNames()に格納します。DimMyNames()As String’は、動的配列変数Dim iCount As Integer Dim Max As Integer Max = ThisWorkbook.Sheetsを宣言します。 Count 'は最大配列サイズを検索しますReDimMyNames(1 To Max)'必要なサイズの配列変数を宣言しますForiCount = 1 To Max MyNames(iCount)= ThisWorkbook.Sheets(iCount).Name MsgBox MyNames(iCount)Next iCount Erase MyNames() 'は変数の内容を削除し、メモリを解放しますEnd Sub
==== デコード
Dim MyNames()As String
単一の検証可能なMyNameを文字列として次元化します。これは、検証可能な名前の後にParanthesisを開いたり閉じたりするため、配列型ですが、UpperLevelを提供していないため、データを格納できません。
ReDim MyNames(1 To Max)
Redimは、配列を再ディメンション化するために使用されます。これで、配列タイプVeriableの上位レベルが割り当てられます。
この場合、ブック内のシートの総数(Max = ThisWorkbook.Sheets.Count)
===
MsgBox MyNames(iCount)
最後の例では、イミディエイトウィンドウの変数の値を出力しましたが、今回は、次のように表示されるメッセージボックスに値を出力します。
1000項目の配列変数が必要になることがわかっている場合は、静的変数を使用してください。欠点は、10アイテムの情報しか保存しない場合でも、毎回1000アイテムのメモリを使用することです。動的配列変数を使用すると、メモリをより効率的に使用できます。
配列変数の大きさを計算できない場合があります。このような場合、配列変数のサイズを必要に応じて増やす必要があります。 ReDimステートメントを使用して配列変数のサイズを変更すると、ReDim Preserveステートメントを使用する必要がある配列変数をRedimするときに変数の内容が削除されないように、変数の内容も消去されます。
コード Sub GetFileNameList() 'は、すべてのファイル名を現在のフォルダーに格納しますDim FolderFiles()As String’は、動的配列変数Dim tmp As String、fCount As Integer fCount = 0 tmp = Dir(" D:\ Test \。 ")while tmp <> Empty fCount = fCount + 1 ReDim Preserve FolderFiles(1 To fCount) 'は、配列変数を再度宣言します(size + 1)FolderFiles(fCount)= tmp tmp = Dir Wend MsgBox fCount&"ファイル名はフォルダ「&CurDir Erase FolderFiles」で見つかったものは、変数の内容を削除し、メモリを解放しますEnd Sub
==== デコード
Dim FolderFiles()As String
検証可能な名前の後にParanthesisを開いたり閉じたりするため、単一の検証可能なFolderFilesを配列型である文字列として次元化しますが、UpperLevelを提供していないため、データを格納できません。
tmp = Dir( “D:\ Test \。”)
Dirコマンドはエクスプローラーとして機能し、ディレクトリ内のすべてのファイルとフォルダーの名前を保持できます。すべてのファイルを特定の基準に制限することもできます。 Dir( “D:\ Test \ *。pdf”)は、すべてのファイルからPDFファイルまたは拡張子のみに制限されます。
tmp <>空の場合
今回は、Excel VBAのループの場合、Excel VBA WHILE LOOPを使用して同じアクションを繰り返します。ここで、ループを終了する基準は、空ではないtmpとして設定されています。したがって、tmp veriableに値が存在するまで、ループは
ReDim Preserve FolderFiles(1 To fCount)
配列の検証可能なFolderFilesには、開始位置に上位レベルがありません。ただし、繰り返しごとに上位レベルがあります。 ReDimコマンドで上位レベルを上げます。最初に1を実行し、次に2 ..というように、fCountまで実行します。ただし、上位レベルを上げるたびに、すでに割り当てられているすべての変数が失われます。Preserveコマンドを使用すると、またはを保持できます。すでに割り当てられている値を格納します。
Wend
VBAのForループに、基準が満たされるまで同じタスクを再度繰り返すように指示するために使用されるWend。
MsgBox fCount& “ファイル名はフォルダ”&CurDirにあります
繰り返すたびに、fcoutは+1で増加し、最終的な値はそのディレクトリ/フォルダで見つかったファイルの数になります。 CurDirコマンドは、現在のディレクトリの名前を示します。この場合、「D:\ Test」