【簡単エクセル Excel VBA マクロ】配列を使って繰り返し処理を高速化する方法|ワンポイントテクニック #003

アフィリエイト広告を利用しています。
QRコード
【QRコード】PC<-->スマホの切り替えにご利用ください
アイキャッチ画像
運営者・ポテ

いつもありがとうございます!

ノンプログラマー向け「Excel VBA マクロ ワンポイントテクニック解説シリーズ」へようこそ。

本稿では、「配列を使って繰り返し処理を高速化する方法」を解説します。

Information
  • ノンプログラマー
    プログラミングを専門にしていない人たちのことです。
  • VBAとマクロの違い
    VBAは、Visusal Basic for Application の略で、プログラミング言語のことです。マクロは、VBAを使って作成される「機能」のことです。

VBAマクロで大規模なデータを処理する場合、通常のFor...Next ループなどの繰り返し処理を用いて、"セルをひとつずつ操作していく"ような方法では、残念ながら時間がかかりすぎるんです。これが、困るんですね。

通常、1回の処理で10分とか、20分とかは待ってられないんですよ。

ユーザーAさん

へ?自動処理なのに、なんでこんなに時間がかかるんじゃ!キィー!

とか、

ユーザーBさん

あれ、いま動いてる?フリーズしてる?どうなっとんじゃ!

となって、

作成者Cさん

ヒィー!帰りたいー

となるんです。(諸説あり)

つまり、大規模なデータを扱う場合には、処理速度を改善することが"必須"になってくるんですね。

このような処理速度の問題を解決してくれるのが、ずばり「配列」です!

ただ配列はですね、正直、ちょっと難しいんです。

でも、ちょっとです。決して理解出来ないことはありません。

少し時間を取ってこの記事を読んでいただければ、きっと理解できます。

配列を理解して、処理速度を考慮したコードが書けるかどうか、これは間違いなく初級者と中級者を分けるポイントのひとつですね。

本稿では、「そもそも配列とは?」という基本から、実際のコードを交えた解説までを、分かりやすい内容でお届けします。

VBAを活用して、自分やコミュニティに合ったアプリを作成し、仕事量は半分に、成果は2倍にしていきましょう!

運営者・ポテ

成果を増やす!効率化に取り組む皆さんを全力で応援させてください!

そもそも配列とは?

配列とは、複数の値をまとめて扱うことができるデータの入れ物です。

イメージとしては、Excelの連続したセル範囲(例: A1:E10)に似ています。ただし、配列はセルではなくメモリ上に確保された領域として存在します。ワークシート上に表示されるセルとは異なり、画面には直接見えないデータ領域です。

運営者・ポテ

もう少し説明します!

メモリとは、プログラムがデータを一時的に置いて作業するための作業台のようなものです。配列は、その作業台の上に整然と並べられた箱のような入れ物です。そして、それぞれの箱には、作業に使う素材(データ)が格納されています。

通常、セルをひとつずつ操作しながら値の取得や書き込みを行いますが、配列を使うとメモリ上でデータを一括処理できます。

配列には2つの種類がある:静的配列と動的配列

配列には、静的配列と動的配列の2つの種類があります。これらは、簡単に言うと、言葉のニュアンス通りなのですが、静的は"変化しない"動的は"変化する"、という特性をもつ配列のことです。

運営者・ポテ

言葉の意味の通りのイメージです!

静的配列(要素数が変化しない)

静的配列は、あらかじめ要素数を指定して宣言する配列です。

後から要素数の変更はできません。あらかじめ決められた範囲内でのみデータを格納します。

静的配列は、あらかじめ要素の数が決定している場合に使用します。

' 例

Dim arr(4) As Long    ' 要素数5(0~4)

' 配列に要素を格納
arr(0) = 10
arr(1) = 10
arr(2) = 10
arr(3) = 10
arr(4) = 50 ' 設定可能
' arr(5) = 100 ' エラー(範囲外)

動的配列(要素数が変化する)

動的配列は、配列の要素数を後から変更できるタイプの配列のことです。

宣言時にはサイズを指定せず、コードの中でReDim または、Redim Preserve ステートメントを使って要素数を変更します。なお、Redim は要素数変更時に既存のデータを消去しますが、Redim Preserve は既存のデータを保持します。ただし、二次元配列においてはRedim Preserveで変更できるのは二次元目の要素数のみです。一次元目の要素数は変更できません。

動的配列は、宣言時には要素の数が決定しておらず、コードの中で要素数を動的に取得する場合に使用します。

' 例

Dim arr() As Long    ' 動的配列の宣言時は括弧の中に引数を設定しない

' 配列のサイズを変更(初期化)
ReDim arr(2) ' 要素数3(0~2)
arr(0) = 10
arr(1) = 20
arr(2) = 30

' 配列のサイズを変更
' Redim "Preserve" は既存データ保持する指定
' Redim だけの場合、既存のデータは消去される
ReDim Preserve arr(4) ' 要素数5に拡張

' 配列に要素を格納
arr(3) = 40
arr(4) = 50
運営者・ポテ

そうなんです!少し難しいんです!でも、ゆっくり読めば大丈夫!

配列には次元がある:一次元配列と二次元配列

VBAの配列には、一次元配列と二次元配列があります。

運営者・ポテ

このあたりから、さらにややこしくなるんです!でも、落ち着いてゆっくり読めば、十分理解できる内容です!

一次元配列

一次元配列は、1列で並んだデータのことです。次のようなイメージです。

一次元配列 (リスト形式)のイメージ
[ 10, 20, 30, 40, 50 ]

使用例を示します。

' 例

Dim arr(4) As Integer ' 要素数5(0~4)
arr(0) = 10
arr(1) = 20
arr(2) = 30

この場合、arr(0) から arr(4) まで 1列でデータを格納 します。単純なデータのリストを扱うのに手適してします。

二次元配列

二次元配列 は、表(行と列)形式のデータ のことです。次のようなイメージです。

' 二次元配列のイメージ
10  20  30  40  
50  60  70  80  
90 100 110 120  

使用例を示します。

' 例

Dim arr(2, 3) As Long ' 3行4列(0~2行, 0~3列)
arr(0, 0) = 10
arr(0, 1) = 20
arr(1, 0) = 30
arr(2, 3) = 40

二次元配列は、行と列のインデックス(座標)でデータを管理 できるため、Excelの表のようなデータを扱うのに便利です。

ここに注意!Excelのセル範囲を配列に格納すると自動的に二次元配列になるよ!

運営者・ポテ

ここに注意が必要です!

Excelのセル範囲を配列に格納 すると、たとえ 1列や1行のデータ であっても、自動的に二次元配列になります。これは、Excelのセルが 「行」と「列」 の概念を持つためです。

例を示します。

' 例

Dim arr As Variant
arr = Range("A1:A5").Value

これは二次元配列になります。下表のようにデータが格納されます。

インデックス(座標)
arr(1,1)A1の値
arr(2,1)A2の値
arr(3,1)A3の値
arr(4,1)A4の値
arr(5,1)A5の値
運営者・ポテ

ここがコードを書いているときにつまずくポイントのひとつです!思い当たる節がないのに、「インデックスが有効範囲にありません」と怒られたら、配列の次元を疑ってみましょう

ここで、するどい読者の皆さんには、ひとつ違和感がありますよね。Dim arr As Variant と括弧なしで宣言しているところです。これは、配列の宣言じゃないのでは?と思いますよね。その通りです。ただの Variant 型の変数として宣言されています。

ただ、これで問題ないんです。Variant 型はどんなデータでも受け取れるからです。
Range().Value は基本的に "Variant 型の二次元配列" を返しますが、1セルだけを指定すると "単一の値" を返します。Dim arr As Variant としておけば、どちらのケースでも問題なく受け取れます。

一方で、Dim arr() As Variant のように括弧あり、つまり配列とし宣言しても問題ありません。今回の場合、Range().Value の戻り値は配列 ですので、そのまま代入できます。また、Dim arr() As Variant は「動的配列」として宣言されていますが、この場合は ReDim で明示的に初期化する必要はありません。これは、Range().Value の戻り値が すでにサイズの決まった配列であるため、代入時に自動的に適切なサイズの配列になるからです。

もし、後に配列 として使うことを明示的に示したいのであれば、Dim arr() As Variant と括弧ありで宣言しても良いでしょう。ただし、型を Variant 型以外(例: Dim arr() As Long)にするとエラーが発生しますので注意してください。

で、なぜ配列にすると処理速度が向上する?

簡単に言うと

オーバーヘッドとレンダリングの負担が減るため

オーバヘッド?レンダリング?専門用語の雰囲気丸出しですが、心配ありません!ただの言葉です!

運営者・ポテ

説明させてください!

VBAでセルをひとつずつ操作する場合、各処理ごとに「オーバーヘッド」と呼ばれる準備作業が発生します。これは、Excelのセルからデータを取得したり、書き込んだりする際に、Excelとの間で発生するやり取りのことです。こうした作業が繰り返されることで、全体の処理速度が低下します。

配列を使うと、一度にデータをメモリ上に読み込み、メモリ内で操作を完結させられます。これによりExcelとのやり取りが減ります。つまり、オーバーヘッド(準備作業)も大幅に削減されるため、処理速度が向上するのです。

さらに、セルごとにデータを操作すると、そのたびに画面の描画が発生します。ここでは、この画面描画をレンダリングと言います。Excelはセルの内容が更新されるたびに、画面に変化を反映させるため、描画の処理に時間がかかるのです。配列を使えば、VBA上で全ての操作を完了させた後にまとめてセルに戻せるため、レンダリング(画面描画)が一度で済み、処理速度が向上するのです。

つまり、配列を使うことでオーバーヘッド(準備作業)とレンダリング(画面描画)の負担が減るため、処理速度が向上するんですね!

VBAの配列を使って繰り返し処理を高速化する方法

シナリオの説明

運営者・ポテ

ここからは、具体例を挙げて解説させてください!!

A列の値を10倍にしてB列に書き出すコードを作成します。ワークシートのA列には、次のように10,000行分のランダムな数値が入力されています。

コード比較:配列なし vs 配列あり

まず、「配列を使わない方法」と「配列を使う方法」のコードの比較をしていきます。

配列を使わない方法

最初に、配列を使わずに、セルを1つずつ走査する方法を見ていきましょう。

Sub ProcessWithoutArray()


    ' 変数宣言
    Dim wb As Workbook               ' 現在のブックを参照するオブジェクト変数
    Dim ws As Worksheet              ' 処理対象のワークシートを参照するオブジェクト変数
    Dim row_idx As Long              ' ループ用の行インデックス変数


    ' 現在のブックと最初のシートを変数に設定
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)


    ' 処理開始時刻を表示(処理時間の計測用)
    Debug.Print "開始時刻: " & Now


    ' 各セルの値を10倍にしてB列に出力(セルを直接操作するためオーバーヘッドが発生)
    For row_idx = 1 To 10000

        ws.Cells(row_idx, 2).Value = ws.Cells(row_idx, 1).Value * 10  ' B列に書き出し

    Next row_idx


    ' 処理終了時刻を表示(処理時間の計測用)
    Debug.Print "終了時刻: " & Now


End Sub

この方法では、A列の値を1つずつ読み取り、10倍にしてB列に書き出しています。しかし、セルへのアクセスが1回ずつ行われるため、処理に時間がかかります。つまり、Excelとのやり取りにかかる「オーバーヘッド」と、各セル操作後の「レンダリング(画面更新)」の負担が大きい状態です。

配列を使う方法

次に配列を使う方法を見ていきましょう。

Sub ProcessWithArray()


    ' 変数宣言
    Dim wb As Workbook               ' 現在のブックを参照するオブジェクト変数
    Dim ws As Worksheet              ' 処理対象のワークシートを参照するオブジェクト変数
    Dim data_array() As Variant      ' データを格納する配列
    Dim row_idx As Long              ' ループ用の行インデックス変数
    Dim target_range As Range        ' 対象範囲を参照する変数


    ' 現在のブックと最初のシートを変数に設定
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)


    ' 対象範囲を変数に設定
    Set target_range = ws.Range(ws.Cells(1, 1), ws.Cells(10000, 1))


    ' 処理開始時刻を表示(処理時間の計測用)
    Debug.Print "開始時刻: " & Now


    ' 対象範囲のデータを配列に取り込む(Rangeから代入することでサイズが確定され、静的配列として扱われる)
    data_array = target_range.Value


    ' 配列内の値を10倍にしてB列用の配列に準備
    For row_idx = 1 To UBound(data_array, 1)

        data_array(row_idx, 1) = data_array(row_idx, 1) * 10

    Next row_idx


    ' 計算結果をB列に一括で書き出し
    ws.Range(ws.Cells(1, 2), ws.Cells(10000, 2)).Value = data_array


    ' 処理終了時刻を表示(処理時間の計測用)
    Debug.Print "終了時刻: " & Now
    

End Sub

この方法では、A列のデータを配列に一括で取り込み、メモリ上で計算を行います。計算結果は配列に保持され、処理が終わったら一度だけB列に書き戻します。この方法では、セルごとのやり取り(オーバーヘッド)が大幅に減り、レンダリングも最小限に抑えられます。

運営者・ポテ

次のセクションで、それぞれのコードの詳細な解説をしていきます!

コードの詳細な解説

配列を使わない方法

繰り返しになりますが、まずコード全文を次に示します。

Sub ProcessWithoutArray()


    ' 変数宣言
    Dim wb As Workbook               ' 現在のブックを参照するオブジェクト変数
    Dim ws As Worksheet              ' 処理対象のワークシートを参照するオブジェクト変数
    Dim row_idx As Long              ' ループ用の行インデックス変数


    ' 現在のブックと最初のシートを変数に設定
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)


    ' 処理開始時刻を表示(処理時間の計測用)
    Debug.Print "開始時刻: " & Now


    ' 各セルの値を10倍にしてB列に出力(セルを直接操作するためオーバーヘッドが発生)
    For row_idx = 1 To 10000

        ws.Cells(row_idx, 2).Value = ws.Cells(row_idx, 1).Value * 10  ' B列に書き出し

    Next row_idx


    ' 処理終了時刻を表示(処理時間の計測用)
    Debug.Print "終了時刻: " & Now


End Sub
運営者・ポテ

解説していきます!

    ' 変数宣言
    Dim wb As Workbook               ' 現在のブックを参照するオブジェクト変数
    Dim ws As Worksheet              ' 処理対象のワークシートを参照するオブジェクト変数
    Dim row_idx As Long              ' ループ用の行インデックス変数

ここでは、コード内で使用する変数が宣言されています。変数は Dim 変数名 As データ型 の構文で宣言します。これにより、各変数は As 以降で指定したデータ型のデータを格納できるようになります。

ここでは、コード内で使用する変数が宣言されています。変数は Dim 変数名 As データ型 の構文で宣言します。これにより、各変数は As 以降で指定したデータ型のデータを格納できるようになります。

Information

変数
「値」を入れておく「箱」のようなものです。変数は、その名の通りコード内の指示によって値を変えることができます。

    ' 現在のブックと最初のシートを変数に設定
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)

ここでは、オブジェクト変数 wbws に、それぞれワークブックオブジェクトとワークシートオブジェクトを代入しています。なお、ThisWorkbook は現在のワークブック、つまりこのコードが記述されているワークブックを指します。Worksheets(1) は、ブック内の最初のシートを指します。

Information

オブジェクト
特定の役割を持つ道具のようなものです。

    ' 処理開始時刻を表示(処理時間の計測用)
    Debug.Print "開始時刻: " & Now

ここでは、処理の開始時刻をイミディエイトウィンドウに出力しています。Debug.Printは、デバッグ用の出力コマンドで、Nowを使って現在の日時を表示します。これにより、コードの実行時間を確認することができ、開始時刻と終了時刻の差から処理時間を把握できます。

これは、コードの機能には直接関係ありませんが、この記事をご覧の多くの方は処理時間を把握したいと考えていると思いますので、参考として追加しています。本番のコードでは不要ですので、削除もしくはコメントアウトしておきましょう。

Information

今回の例ではデータが10,000行ありますが、処理内容がシンプルですので、配列を使う方法でも、使わない方法でも、それほど処理時間に差は生じません。

なお、イミディエイトウィンドウとはデバッグ出力用の画面で、デフォルトでは画面下の方に表示されます。

イミディエイトウィンドウ

表示メニューから表示させることができます。

表示メニューからイミディエイトウィンドウを表示する
    ' 各セルの値を10倍にしてB列に出力(セルを直接操作するためオーバーヘッドが発生)
    For row_idx = 1 To 10000

        ws.Cells(row_idx, 2).Value = ws.Cells(row_idx, 1).Value * 10  ' B列に書き出し

    Next row_idx

ここでは、A列の各セルの値を10倍にし、その結果をB列に出力しています。

ループで1行目から10,000行目までを順に処理し、各行のA列の値を10倍にしてB列に書き込んでいます。このようにセルを1つずつ操作すると、Excelとのやり取りが繰り返されるため、オーバーヘッドが発生して処理速度が低下します。

    ' 処理終了時刻を表示(処理時間の計測用)
    Debug.Print "終了時刻: " & Now

ここでは、処理の終了時刻をイミディエイトウィンドウに出力しています。Debug.Printは、デバッグ用の出力コマンドで、Nowを使って現在の日時を表示します。これにより、コードの実行時間を確認することができ、開始時刻と終了時刻の差から処理時間を把握できます。

これは、コードの機能には直接関係ありませんが、この記事をご覧の多くの方は処理時間を把握したいと考えていると思いますので、参考として追加しています。本番のコードでは不要ですので、削除もしくはコメントアウトしておきましょう。

以上が、配列を使わないオーソドックスな方法です。シンプルですが、処理速度に課題がある場合には、次に解説する配列を活用した方法も検討してみてください。

配列を使う方法

コード全文を示します。

Sub ProcessWithArray()


    ' 変数宣言
    Dim wb As Workbook               ' 現在のブックを参照するオブジェクト変数
    Dim ws As Worksheet              ' 処理対象のワークシートを参照するオブジェクト変数
    Dim data_array() As Variant      ' データを一時的に格納する配列(Rangeから代入するため静的配列として扱われる)
    Dim row_idx As Long              ' ループ用の行インデックス変数
    Dim target_range As Range        ' 対象範囲を参照する変数


    ' 現在のブックと最初のシートを変数に設定
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)


    ' 対象範囲を変数に設定
    Set target_range = ws.Range(ws.Cells(1, 1), ws.Cells(10000, 1))


    ' 処理開始時刻を表示(処理時間の計測用)
    Debug.Print "開始時刻: " & Now


    ' 対象範囲のデータを配列に取り込む(Rangeから代入することでサイズが確定され、静的配列として扱われる)
    data_array = target_range.Value


    ' 配列内の値を10倍にしてB列用の配列に準備
    For row_idx = 1 To UBound(data_array, 1)

        data_array(row_idx, 1) = data_array(row_idx, 1) * 10

    Next row_idx


    ' 計算結果をB列に一括で書き出し
    ws.Range(ws.Cells(1, 2), ws.Cells(10000, 2)).Value = data_array


    ' 処理終了時刻を表示(処理時間の計測用)
    Debug.Print "終了時刻: " & Now
    

End Sub
運営者・ポテ

解説していきます!

    ' 変数宣言
    Dim wb As Workbook               ' 現在のブックを参照するオブジェクト変数
    Dim ws As Worksheet              ' 処理対象のワークシートを参照するオブジェクト変数
    Dim data_array() As Variant      ' データを一時的に格納する配列(Rangeから代入するため静的配列として扱われる)
    Dim row_idx As Long              ' ループ用の行インデックス変数
    Dim target_range As Range        ' 対象範囲を参照する変数

ここでは、コード内で使用する変数が宣言されています。変数は Dim 変数名 As データ型 の構文で宣言します。これにより、各変数は As 以降で指定したデータ型のデータを格納できるようになります。

ここでは、コード内で使用する変数が宣言されています。変数は Dim 変数名 As データ型 の構文で宣言します。これにより、各変数は As 以降で指定したデータ型のデータを格納できるようになります。

    ' 現在のブックと最初のシートを変数に設定
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)

ここでは、オブジェクト変数 wbws に、それぞれワークブックオブジェクトとワークシートオブジェクトを代入しています。

ThisWorkbook は現在のワークブック、つまりこのコードが記述されているワークブックを指します。Worksheets(1) は、ブック内の最初のシートを指します。

これで、wsを使ってシート上のセルを操作できます。

    ' 対象範囲を変数に設定
    Set target_range = ws.Range(ws.Cells(1, 1), ws.Cells(10000, 1))

ここでは、target_range変数に対象のセル範囲(A列の1行目から10,000行目)を代入しています。ws.Range(ws.Cells(1, 1), ws.Cells(10000, 1))は、ワークシートws上のセル範囲を指定しており、A1セルからA10000セルまでの範囲を表しています。

この設定により、target_rangeを通じて指定した範囲をまとめて扱えるようになります。このように範囲を変数として定義することで、コードが見やすくなり、範囲を柔軟に変更できる利点もあります。

    ' 処理開始時刻を表示(処理時間の計測用)
    Debug.Print "開始時刻: " & Now

ここでは、処理の開始時刻をイミディエイトウィンドウに出力しています。Debug.Printは、デバッグ用の出力コマンドで、Nowを使って現在の日時を表示します。これにより、コードの実行時間を確認することができ、開始時刻と終了時刻の差から処理時間を把握できます。

これは、コードの機能には直接関係ありませんが、この記事をご覧の多くの方は処理時間を把握したいと考えていると思いますので、参考として追加しています。本番のコードでは不要ですので、削除もしくはコメントアウトしておきましょう。

    ' 対象範囲のデータを配列に取り込む(Rangeから代入することでサイズが確定され、静的配列として扱われる)
    data_array = target_range.Value

ここでは、target_range(A列の1行目から10,000行目)のデータを、data_arrayという配列に一括で取り込んでいます。これにより、Excelとやり取りすることなく、data_array内でデータをメモリ上で処理することが可能になります。

なお、data_array は、 Dim data_array() で宣言しているので、一見すると動的配列のように見えますが、これは動的配列ではなく静的配列です。なぜならば、Rangeからデータを直接代入することで、data_arrayのサイズが自動的に決定されるためです。一度サイズが確定すると、data_arrayは動的にサイズ変更できないため、静的配列として扱われます。

今回、data_arrayDim data_array() As Variantと括弧付きで宣言していますが、Dim data_array As Variantのようにただの Variant型変数として宣言しても問題ありません。対象範囲のデータを格納するときに、自動的に配列化されるためです。しかし、今回は配列として使うことを明示的に示すために括弧付きで宣言しています。

    ' 配列内の値を10倍にしてB列用の配列に準備
    For row_idx = 1 To UBound(data_array, 1)

        data_array(row_idx, 1) = data_array(row_idx, 1) * 10

    Next row_idx

ここでは、data_array内の各要素に10を掛ける処理を行っています。Forループを使用して、data_arrayの先頭から最後まで順に処理し、A列の値を10倍に変換しています。UBound(data_array, 1)は、配列の最終行番号を表します。data_array(row_idx, 1)row_idx は配列の行番号のインデックス、1は列番号のインデックスを表します。

このように、配列上で計算を行うことで、Excelシートとやり取りすることなく、メモリ上で効率的にデータを処理し、B列用のデータを作成しています。

    ' 計算結果をB列に一括で書き出し
    ws.Range(ws.Cells(1, 2), ws.Cells(10000, 2)).Value = data_array

このコードでは、data_arrayに格納した10倍の計算結果を、B列に一括で書き出しています。ws.Range(ws.Cells(1, 2), ws.Cells(10000, 2)).Value = data_arrayにより、B列の1行目から10,000行目までの範囲に配列data_arrayのデータをまとめて出力します。

このように、一度に範囲を指定してデータを書き出すことで、各セルに個別に書き込む場合に比べ、処理速度が大幅に向上します。ExcelとVBAの間のやり取りを最小限に抑えることができるため、オーバーヘッドが減り、効率的なデータ操作が可能になります。

    ' 処理終了時刻を表示(処理時間の計測用)
    Debug.Print "終了時刻: " & Now

ここでは、処理の終了時刻をイミディエイトウィンドウに出力しています。Debug.Printは、デバッグ用の出力コマンドで、Nowを使って現在の日時を表示します。これにより、コードの実行時間を確認することができ、開始時刻と終了時刻の差から処理時間を把握できます。

これは、コードの機能には直接関係ありませんが、この記事をご覧の多くの方は処理時間を把握したいと考えていると思いますので、参考として追加しています。本番のコードでは不要ですので、削除もしくはコメントアウトしておきましょう。

以上が、配列を使ってVBAコードの処理速度を向上させる方法です。配列を活用することで、ExcelとVBA間のやり取りを最小限に抑え、大量データを効率的に処理できます。ぜひ参考にして、実際の業務でも活用してみてください。

運営者・ポテ

以上で解説は終了です。ありがとうございました!

関連記事

本稿と関連の深い記事です。もしよろしければ、合わせてご活用ください。

VBAプログラミングスキルアップのための参考情報

ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。

VBAプログラミングのスキルアップ

学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。



入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。

甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。

\チェックしてみよう/

\チェックしてみよう/

\チェックしてみよう/


VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。



プログラミングの一般教養

「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。


こちらの記事でも紹介しております。もしよろしければご覧ください。

QRコード
【QRコード】PC<-->スマホの切り替えにご利用ください

おわりに

運営者・ポテ

ご覧いただきありがとうございました!

今回の記事では、「配列を使って繰り返し処理を高速化する方法」を解説いたしました。

お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。

皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。

なお、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。

この記事を書いた人

運営者・ポテ
■人生を追求する凡人■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢■光学・機械系エンジニア(歴20年、内マネジメント10年、特許数件権利化)/副業フリーランスエンジニア■読書・文学愛好■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を研究。■VBAアプリ開発サービス提供中(業務委託 / VBA使用経験20年)■Python愛好(歴5年)■VBAエキスパート「Excel VBA スタンダード」(上級者向け資格)/ Python 3 エンジニア認定基礎(経済産業省「ITスキル標準(ITSS)」に掲載)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です