【VBA】配列でセルの値を格納するやり方!基礎から応用までマスターできる完全ガイド

 

VBAの処理が遅くて困っている。。。大量データの処理に時間がかかりすぎる。。。

 

こんな悩みは、配列『Array』で解決できます。

 

セルの値を配列に格納するだけで、処理速度が10倍以上向上することも珍しくありません。

この記事では、VBA配列の基礎から実践的な応用テクニックまで、実際のエクセル業務で使っている技術を余すことなく公開します。

 

「配列って難しそう…」と思われるかもしれませんが、VBA初心者でも理解できるよう丁寧に解説し、すぐに使える実用的なコード例も豊富に掲載しました。

 

たった5分でマスターできる基本技術から、業務効率を劇的に改善する高度なテクニックまで、この一記事で完全習得できます。

 

目次

広告

VBA配列の基礎知識とセル値格納のメリット

配列を使ったセル値の格納は、VBAプログラミングにおいて非常に重要な技術です。

配列の基本概念を理解し、セルデータを効率的に扱うことで、Excelマクロの処理能力が格段に向上します。

 

配列とは?VBAにおける配列の基本概念

配列とは、複数の値をまとめて管理できる便利な入れ物のようなものです。

通常の変数が一つの値しか保存できないのに対し、配列は多くの値を順序立てて格納できるため、大量のセルデータを効率的に処理できます。

 

たとえば、

A1からA10までのセル値を処理する場合、10個の変数を用意する代わりに、一つの配列で全てのデータを管理できる

ということです。

 

 

' 通常の変数(一つの値のみ)
Dim cell1 As String
cell1 = Range("A1").Value

' 配列(複数の値を格納可能)
Dim cellArray(1 To 10) As String
cellArray(1) = Range("A1").Value
cellArray(2) = Range("A2").Value

 

この配列という仕組みを使うことで、コードがすっきりし、メモリ使用量も最適化されます。

 

セルの値を配列に格納する3つのメリット(処理速度向上・メモリ効率・コード簡潔化)

セルの値を配列に格納することで、処理速度が劇的に向上します。

これは、セルに直接アクセスする回数を減らせるためで、特に大量データを扱う際にその効果を実感できるでしょう。

 

エクセル業務では、1000行のデータ処理が数秒で完了することも珍しくありません。

一つ一つデータを変数に格納していては処理速度が遅くなってしまいます。

 

For~Next(繰り返し処理)を使ったサンプルコードがこちら

' 遅い方法:セルに直接アクセス
For i = 1 To 1000
Cells(i, 1).Value = Cells(i, 1).Value * 2
Next i

 

簡単に扱える分処理速度が遅くなります。

 

配列を使ったサンプルコードがこちら

' 速い方法:配列を使用
Dim dataArray As Variant
dataArray = Range("A1:A1000").Value
For i = 1 To 1000
dataArray(i, 1) = dataArray(i, 1) * 2
Next i
Range("A1:A1000").Value = dataArray

上記のコードは

1000行まであるA列の値を2倍にする

という内容です。

 

配列を使うことで、

メモリ効率も良くなり、コードも簡潔になるため、保守性の高いVBAコードが作成

できます。

 

配列の宣言方法とVariant型の重要性

配列を使いこなすには、適切な宣言方法を覚えることが重要です。

特にVariant型は、どんなデータ型でも格納できる万能な型として、セル値の格納に最適です。

 

セルには文字列、数値、日付など様々なデータが混在することが多いため、Variant型配列を使うようにしましょう。

 

 

' 固定配列の宣言
Dim fixedArray(1 To 10) As Variant

' 動的配列の宣言
Dim dynamicArray() As Variant
ReDim dynamicArray(1 To 5)

' セル範囲を直接配列に格納
Dim cellData As Variant
cellData = Range("A1:C10").Value

 

Variant型を使うことでデータ型を気にせずにセル値を配列に格納でき、エラーを防ぎながら効率的なプログラムを作成できます。

 

セルの値を配列に格納する基本的な方法

単一セルから範囲指定まで、様々なパターンでセル値を配列に取り込む技術を身につけることで、実際の業務で活用できる実践的なスキルが習得できます。

 

ここからは、最も基本的で重要な3つの方法について詳しく解説していきます。

 

単一セルの値を配列要素に格納する基本コード

単一セルの値を配列に格納することは、配列操作の基本中の基本です。

この方法をマスターすることで、個別のセルデータを配列で管理し、後から一括処理することが可能になります。

 

特定のセルからデータを取得して配列に保存する際は、インデックス番号を使って適切な位置に格納することが重要です。

 

単一セルの値を配列に格納するサンプルコードがこちら

Sub StoreSingleCellValue()
Dim myArray(1 To 5) As Variant

' A1セルの値を配列の1番目に格納
myArray(1) = Range("A1").Value
myArray(2) = Range("B1").Value
myArray(3) = Range("C1").Value

' 格納した値を確認
MsgBox "配列1番目の値: " & myArray(1)
End Sub

上記のコードは

A1セルからC1セルまでの値を配列に格納。配列の1つ目をメッセージボックスに表示する

という内容です。

 

実行結果はこちら

 

このコードでは、各セルの値を配列の指定した位置に個別に格納しており、データの整理と管理が効率的に行えます。

 

セル範囲の値を一括で配列に格納する方法

セル範囲の値を一括で配列に格納することで、処理効率が大幅に向上します。

 

Range.Valueプロパティを使用することで、

指定した範囲のセル値を一度に配列に取り込むことができ、大量データの処理時間を劇的に短縮が可能

です。

 

この方法は、データ分析や集計処理において特に威力を発揮します。

 

セル範囲の値を一括で配列に格納するVBAのサンプルコードがこちら

Sub StoreRangeValues()
Dim dataArray As Variant

' A1:C10の範囲を一括で配列に格納
dataArray = Range("A1:C10").Value

' 2行目3列目(C2セル)の値を表示
Debug.Print "C2セルの値: " & dataArray(2, 3)

' 配列の行数と列数を確認
Debug.Print "行数: " & UBound(dataArray, 1) & "、列数: " & UBound(dataArray, 2)
End Sub

 

上記のコードは

A1セルからC10セルの値を配列でdataArrayに格納。C2セルの値と配列の行数、列数を表示する

という内容です。

 

実行結果がこちら

範囲指定で配列に格納すると、二次元配列として扱われ、行と列のインデックスでデータにアクセスできます。

 

For文を使った複数セルからの値取得と格納

For文を使った繰り返し処理により、複数のセルから順次値を取得して配列に格納することができます。

 

この方法は、特定の条件に合うセル値のみを抽出したい場合や、飛び飛びのセル値を取得したい場合に有効です。

処理の流れを細かく制御できるため、複雑なデータ処理にも対応できます。

 

For文と配列を組み合わせたサンプルコードはこちら

Sub StoreMultipleCells()
Dim resultArray(1 To 10) As Variant
Dim i As Integer

' A1からA10までの値を順次配列に格納
For i = 1 To 10
resultArray(i) = Range("A" & i).Value
' 空白セルの場合は"空"と格納
If resultArray(i) = "" Then resultArray(i) = "空"
Next i

' 格納された値を確認
For i = 1 To 10
Debug.Print "配列(" & i & ") = " & resultArray(i)
Next i
End Sub

 

上記のコードは

A1セルからA10セルの値をFor文で配列に格納。セルが空白の場合、「空」を格納する

という内容です。

 

実行結果がこちら

For文を使うことで、柔軟な条件設定と効率的なデータ処理を同時に実現できます。

 

Array関数を使った効率的な配列への値格納テクニック

Array関数は、複数の値を一度に配列に格納できる便利な関数です。

セル値を配列に格納する際に、Array関数を活用することでコードがシンプルになり処理速度も向上します。

 

Array関数の基本的な使い方とコード例

Array関数を使うことで、複数の値を簡単に配列に格納できます。

特にセル値を直接指定して配列を作成するVBAは、従来の配列宣言と比べてコード量を大幅に削減でき可読性も向上します。

 

セルの値を配列で格納する、配列に直接値を格納するVBAのサンプルコードはこちら

Sub BasicArrayFunction()
Dim cellValues1 As Variant
Dim cellValues2 As Variant
' Array関数でセル値を直接配列に格納
cellValues1 = Array(Range("A1").Value, Range("B1").Value, Range("C1").Value)
' または、値を直接指定も可能
cellValues2 = Array("データ1", "データ2", "データ3")
' 配列の要素を確認(0から始まることに注意)
Debug.Print "1番目の値: " & cellValues1(0)
Debug.Print "2番目の値: " & cellValues2(1)
End Sub

上記のコードは

A1セルからC1セルの値をcellValues1に格納、テキストををcellValues2に格納する

という内容です。

 

実行結果がこちら

 

Array関数で作成された配列はインデックス番号が0から始まります。

 

バリアント型変数とArray関数の組み合わせ活用法

Variant型変数とArray関数を組み合わせることで、様々なデータ型が混在するセル値を柔軟に配列に格納できます。

Excelのセルには文字列、数値、日付、空白など多様なデータが存在するため、Variant型配列を使用することで、データ型を気にせずに処理を進められるのです。

 

バリアント型変数とArray関数を組み合わせたVBAのサンプルコードはこちら

Sub VariantArrayCombination()
Dim mixedData As Variant
Dim i As Integer

' 異なるデータ型のセル値を配列に格納
mixedData = Array(Range("A1").Value, Range("B1").Value, Range("C1").Value, Date)

' 各要素のデータ型を確認
For i = 0 To UBound(mixedData)
Debug.Print "要素" & i & ": " & mixedData(i) & " (型: " & TypeName(mixedData(i)) & ")"
Next i

' 配列サイズの動的確認
Debug.Print "配列要素数: " & (UBound(mixedData) + 1)
End Sub

6行目のコーdpは、A1セルからC1セルの値、日付を変数mixedDataに格納する

9行目から10行目のコードは、For文で格納した値と変数型を表示する

14行目のコードは、配列に格納した数量を表示する

という内容です。

 

実行結果がこちら

 

この方法により、データ型を意識せずに様々なセル値を効率的に配列で管理できます。

 

複数データタイプの値を一度に格納する実践例

実際の業務では、数値、文字列、日付、論理値など、複数のデータタイプが混在したセル値を扱うことが多くあります。

Array関数を使用することで、これらの異なるデータタイプを一度に配列に格納し、統一的に処理することが可能です。

 

種類の異なる変数を一度に格納するVBAのサンプルコードはこちら

Sub MultiDataTypeStorage()
Dim reportData As Variant
Dim summary As String

' 売上レポートの様々なデータを配列に格納
reportData = Array(Range("A2").Value, Range("B2").Value, Range("C2").Value, _
Range("D2").Value, Range("E2").Value)
' 例:商品名、単価、数量、売上、日付

' データの種類に応じた処理
summary = "商品: " & reportData(0) & vbCrLf & _
"単価: " & Format(reportData(1), "#,##0") & "円" & vbCrLf & _
"数量: " & reportData(2) & "個" & vbCrLf & _
"売上: " & Format(reportData(3), "#,##0") & "円"

MsgBox summary
End Sub

 

実行結果がこちら

 

このように、Array関数を活用することで、複雑なデータ構造も簡潔なコードで効率的に処理できます。

 

動的配列によるセル値格納の応用テクニック

動的配列は、実行時に配列のサイズを変更できる高度な機能です。

セルの値を格納する際に、データ量が事前にわからない場合や処理中に配列サイズを調整する必要がある場合に威力を発揮します。

 

ここからは、

ReDimステートメントやPreserveキーワードを使った動的配列の実践的な活用方法

をご紹介します。

 

ReDimステートメントを使った動的配列の作成方法

ReDimステートメントを使うことで、プログラム実行中に配列のサイズを動的に決定できます。

セルデータの量に応じて配列サイズを調整することで、メモリを効率的に使用し、柔軟なデータ処理が可能です。

 

ReDimステートメントを使ったサンプルコードはこちら

Sub DynamicArrayCreation()
Dim dynamicArray() As Variant
Dim lastRow As Long
Dim i As Long

' データが入力されている最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

' データ量に応じて配列サイズを動的に設定
ReDim dynamicArray(1 To lastRow)

' セル値を動的配列に格納
For i = 1 To lastRow
dynamicArray(i) = Range("A" & i).Value
Next i

Debug.Print "格納したデータ数: " & UBound(dynamicArray)
End Sub

 

上記のコードは、

変化するセルに範囲に合わせて配列に格納する範囲を変える

という内容です。

 

実行結果がこちら

 

変化するデータ量に合わせて配列サイズを最適化することで、効率的なメモリ使用が実現できます。

 

Preserveキーワードで既存データを保持しながら配列を拡張

Preserveキーワードを使用することで、既存の配列データを保持したまま配列サイズを拡張できます。

セル値を順次追加していく処理や段階的にデータを蓄積する場合に非常に有効な技術で、データを失うことなく配列を拡張できるため安全で確実なデータ処理が可能です。

 

Preserveキーワードを使ったサンプルコードはこちら

Sub PreserveArrayExpansion()
Dim growingArray() As Variant
Dim currentSize As Integer
Dim i As Integer

' 初期配列を作成
ReDim growingArray(1 To 3)
growingArray(1) = Range("A1").Value
growingArray(2) = Range("A2").Value
growingArray(3) = Range("A3").Value

' データを保持しながら配列を拡張
currentSize = UBound(growingArray)
ReDim Preserve growingArray(1 To currentSize + 2)

' 新しい要素にセル値を追加
growingArray(4) = Range("A4").Value
growingArray(5) = Range("A5").Value

' 全データの確認
For i = 1 To UBound(growingArray)
Debug.Print "配列(" & i & ") = " & growingArray(i)
Next i
End Sub

上記のコードは

A1セルからA3セルの配列情報を保護しながらA4セルからA5セルの情報を格納する

という内容です。

 

実行結果がこちら

 

Preserveキーワードにより、既存データを安全に保護しながら配列の拡張が可能です。

 

セル範囲のサイズに応じて自動的に配列サイズを調整する方法

セル範囲のサイズを自動的に検出し、それに応じて配列サイズを調整することで汎用性の高いプログラムを作成できます。

この技術により、どんなサイズのデータでも適切な処理が可能です。

 

配列サイズを調整するサンプルコードがこちら

Sub AutoAdjustArraySize()
Dim autoArray() As Variant
Dim dataRange As Range
Dim rowCount As Long, colCount As Long

' データ範囲を自動検出
Set dataRange = Range("A1").CurrentRegion
rowCount = dataRange.Rows.Count
colCount = dataRange.Columns.Count

' 検出したサイズに応じて配列を調整
ReDim autoArray(1 To rowCount, 1 To colCount)

' 範囲データを配列に一括格納
autoArray = dataRange.Value

' 結果の確認
Debug.Print "自動調整された配列サイズ: " & rowCount & "行 × " & colCount & "列"
Debug.Print "左上セルの値: " & autoArray(1, 1)
End Sub

 

上記のコードは

情報が入力されたセル範囲を検知し配列に格納する

という内容です。

 

実行結果がこちら

 

この自動調整機能により、データサイズの変化に柔軟に対応できる堅牢なプログラムが作成できます。

 

配列からセルへの値の出力・書き戻し方法

配列に格納したデータをセルに出力・書き戻しすることは、データ処理の最終段階として重要な技術です。

ここからは、単一セルから範囲出力まで様々な書き戻し方法をご紹介していきます。

 

配列の値を単一セルに出力する基本コード

配列に格納されたデータを単一のセルに出力することは、処理結果を特定の場所に表示する際の基本技術です。

配列の特定要素をセルに書き戻す方法を理解することで、計算結果や集計値を適切な位置に配置できます。

 

 

配列の値を単一セルに出力するサンプルコードはこちら

Sub OutputSingleCell()
Dim resultArray(1 To 5) As Variant
Dim i As Integer

' 配列にサンプルデータを格納
For i = 1 To 5
resultArray(i) = Range("A" & i).Value * 2
Next i

' 配列の値を単一セルに出力
Range("C1").Value = resultArray(1)
Range("C2").Value = resultArray(2)
Range("C3").Value = resultArray(3)

' 配列の合計値を計算してセルに出力
Dim total As Double
For i = 1 To 5
total = total + resultArray(i)
Next i
Range("C6").Value = total
End Sub

上記のコードは

A1セルからA5セルの値をセルに格納。格納した値の2倍の値をC列に表示し、合計値をC6セルに表示する

という内容です。

 

実行結果がこちら

 

このように、配列の各要素を個別にセルに出力することで、処理結果を適切に表示できます。

 

配列データをセル範囲に一括出力する方法

配列データをセル範囲に一括出力することで、大量データの処理効率が劇的に向上します。

Range.Valueプロパティを使用して配列全体を一度にセル範囲に書き込むことで、個別セルアクセスによる処理時間を大幅に短縮することが可能です。

 

配列データをセル範囲に一括出力するサンプルコードはこちら

Sub BulkOutputToRange()
Dim sourceArray As Variant
Dim outputArray(1 To 10, 1 To 3) As Variant
Dim i As Integer, j As Integer

' 元データを配列に取得
sourceArray = Range("A1:C10").Value

' データを加工して新しい配列に格納
For i = 1 To 10
For j = 1 To 3
If IsNumeric(sourceArray(i, j)) Then
outputArray(i, j) = sourceArray(i, j) * 1.1 ' 10%増し
Else
outputArray(i, j) = sourceArray(i, j)
End If
Next j
Next i

' 加工したデータを一括でセル範囲に出力
Range("E1:G10").Value = outputArray
End Sub

上記のコードは

A1セルからC10セルの値を配列に格納。格納した値を1.1倍した値をE1セルからG10セルに出力する

という内容です。

 

実行結果がこちら

 

一括出力により、処理速度が向上し、効率的なデータ処理が実現できます。

 

配列とセル間の双方向データ操作の実践例

配列への格納とセルへの出力を自由に操作できれば、複雑なデータ処理システムを構築できます。

 

セルからデータを取得し、配列で加工処理を行い、結果をセルに書き戻すという一連の流れを効率的に実行することが可能です。

 

配列への格納とセルへの出力を実行するサンプルコードがこちら

Sub BidirectionalDataOperation()
Dim originalData As Variant
Dim processedData As Variant
Dim i As Long, j As Integer

' セルデータを配列に取得
originalData = Range("A1:D20").Value
ReDim processedData(1 To UBound(originalData, 1), 1 To UBound(originalData, 2))

' データ処理(空白セルを"N/A"に変換、数値は四捨五入)
For i = 1 To UBound(originalData, 1)
For j = 1 To UBound(originalData, 2)
If originalData(i, j) = "" Then
processedData(i, j) = "N/A"
ElseIf IsNumeric(originalData(i, j)) Then
processedData(i, j) = Round(originalData(i, j), 2)
Else
processedData(i, j) = originalData(i, j)
End If
Next j
Next i

' 処理結果をセルに書き戻し
Range("F1:I20").Value = processedData
MsgBox "データ処理が完了しました。結果をF1:I20に出力しました。"
End Sub

上記のコードは

A1セルからD1セルの値を配列に格納。格納した値を2倍した値をF1セルかたI20セルに出力する。空欄セルの場合、N/Aを表示する

という内容です。

 

実行結果がこちら

 

この双方向操作により、高度なデータ処理システムを効率的に構築できます。

 

 

VBA初心者が『配列を使った効率化マクロ』を導入する方法

 

VBAなんて扱ったことないけど、大量のデータを瞬時に処理するマクロを導入したい!

 

こんな問題を解決する方法がこちら

  • マクロの開発を外注に依頼する
  • マクロが設定されたエクセルファイルをダウンロードする
  • 参考書やネットでVBAスキルを身に付ける

 

VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、

今では自分で効率化マクロをサクッと導入しちゃいます。

 

完成されたマクロを使ってエクセル業務を処理する

作業効率が2倍以上アップ!!

便利すぎて自分でもマクロを設定したいと考え始める

参考書やネットの情報でVBAスキルを身に付ける

マクロ開発を代行できる程のスキルを習得

 

 

VBAは

他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

という特徴があります。

 

外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。

いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。

 

あなたに合った方法で導入しちゃいましょう。

 

マクロ開発を外注に依頼する

マクロ開発を外注に依頼する方法は

VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法

です。

 

「大量のデータを瞬時に処理したい」「処理スピードが速い自動計算マクロを導入したい」

こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

 

ガッツポーズの人

完成まで本業に集中できるので効率的

 

 

デメリットは、費用がかかることだけ。

開発内容、依頼先によってかかる費用は大きく異なります。

私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

 

疑問がある人

ちょっと高くない。。。

 

ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。

開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、

費用が安い!スピード納期!!

でやらせてもらっています。

 

ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。

 

ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。

 

 

マクロが設定されたエクセルファイルをダウンロードする

VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、

すぐに使っているエクセルにマクロを導入することができます。

 

VBA初心者でも形になっているマクロをゲットできる、費用が安い、

というメリットがあります。

しかし、

想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要

というデメリットもあります。

 

ガッツポーズの人

お目当てのマクロが見つかればラッキー

 

個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。

 

今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。

 

 

 

参考書やネットでVBAスキルを身に付ける

先程も紹介しましたが、

VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

プログラミングです。

 

言い換えると、

情報量が豊富なので自分で勉強できちゃう

ということです。

 

私のVBAスキルはほとんど独学で身に付けたもので、

考えた処理のほとんどをVBAで表現できるレベルにまで到達した!

と思っています。

 

私の作ったマクロをプロのプログラマーが見れば、

お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!

と感じるはずです。

 

でも、

私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?

 

独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、

業務内容に合ったマクロを開発できるようになれます。

 

独学でVBAスキルを身に付けるコツは、

エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる

です。

 

とは言っても、全くの知識0の方は何をすればいいかわからないですよね。

 

VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。

 

VBAの知識0の方でもすいすい読み進められる内容になっています。

やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。

 

実際に私はこの参考書を読んでからVBAの勉強を始めました。

 

ひらめく人

VBA学習スタートのきっかけをくれた参考書


 

 

VBAの魅力を発見した後は、

ひたすら自動化したい内容のコードを書くだけ

です。

 

【VBA 配列】【VBA 配列格納】でネット検索すれば知りたいコードをすぐにゲットできます。

 

実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると

自然といろんなマクロが作れるようになっているはずです。

 

VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。