📊連載第7回！初心者のためのExcel VBA入門：配列とFor Eachで大量データ処理を効率化！📈

# Excel VBAにおける配列とFor Eachの基本

私はVBAの活用経験を通じて得た知識を整理し、共有する目的で記事を作成しているプログラミング歴1年半になるエンジニアです。前回は、Excel VBAにおける繰り返し処理の基本テクニックについて解説しました。今回は、大量データ処理に欠かせない配列と、コレクション（複数のデータの集まり）操作を簡潔に記述できる `For Each` 構文について説明します。これらのテクニックを習得することで、より効率的なVBAプログラミングが可能になります。

- [第1回: Excel VBAの基礎知識とセキュリティ設定](https://qiita.com/CodeLeaf/items/2d3e3185a725480fecc3)
- [第2回: Excel VBAの基本操作とオブジェクトの理解](https://qiita.com/CodeLeaf/items/c65d2531908aaf53649d)
- [第3回: Excel VBAにおける変数と定数の基本](https://qiita.com/CodeLeaf/items/3b36eddf7b5a8b5c5d99)
- [第4回: Excel VBAにおけるシート操作の基本とエラー処理](https://qiita.com/CodeLeaf/items/573fb7c61a756aa123ea)
- [第5回: Excel VBAにおける条件分岐](https://qiita.com/CodeLeaf/items/8be52d682baa097a65c1)
- [第6回: Excel VBAにおける繰り返し処理の基本](https://qiita.com/CodeLeaf/items/5bc6c961a090e550bca9)
- 第7回: Excel VBAにおける配列とFor Eachの活用（本記事）
- [第8回: Excel VBAにおけるFormulaとValueの使い分けとユーザー入力の取得](https://qiita.com/CodeLeaf/items/ecf312a53f7ede91bce9)
- [第9回: Excel VBAにおけるファイル操作とフォルダ管理の基本](https://qiita.com/CodeLeaf/items/e5520321e760364f6aae)
- [第10回: Excel VBAにおけるFileSystemObjectを活用した高度なファイル操作](https://qiita.com/CodeLeaf/items/a78e9c7dd2b7e68f1d9e)
- [第11回: Excel VBAにおけるFileSystemObjectを活用した高度なファイル操作 応用編](https://qiita.com/CodeLeaf/items/4607db0151dddfb7f458)
- [第12回: Excel VBAにおけるStrConv関数の活用と応用テクニック](https://qiita.com/CodeLeaf/items/4f6358548bced6c047e0)
- [第13回: Excel VBAにおけるワークブックの安全な操作と管理テクニック](https://qiita.com/CodeLeaf/items/cf136898dd41c7dd5d9f)
- [第14回: Excel VBAにおけるFunction（関数）の作成と活用テクニック](https://qiita.com/CodeLeaf/items/a299f465bdcb1957e2be)
- [第15回: Excel VBAにおける配列を返す関数の作成と活用テクニック](https://qiita.com/CodeLeaf/items/711a93ac86b5c4150e13)
- [第16回: Excel VBAにおけるコレクションの活用と応用テクニック](https://qiita.com/CodeLeaf/items/6a28c65d5f8d19964664)
- [第17回: Excel VBAにおける辞書型（Dictionary）の活用と応用テクニック](https://qiita.com/CodeLeaf/items/5f85b2029e8d51eaa788)
- [第18回: Excel VBAにおけるEnum型を活用した関数設計と実装テクニック](https://qiita.com/CodeLeaf/items/3e91ef9556799d96aeea)
- [第19回: Excel VBAにおけるユーティリティ関数の作成と活用テクニック](https://qiita.com/CodeLeaf/items/bc156b6a9cadd7b10601)
- [第20回: Excel VBAにおける正規表現を活用したファイル名解析テクニック](https://qiita.com/CodeLeaf/items/86284498dee42aab731e)


## 目次
[はじめに](#はじめに)
[静的配列](#静的配列)
[動的配列](#動的配列)
[多次元配列](#多次元配列)
[配列の操作関数](#配列の操作関数)
[For Each...Nextステートメント](#for-eachnextステートメント)
[まとめ](#まとめ)

## はじめに

配列とは、同じデータ型の複数の値をひとつの変数で管理する仕組みです。例えば、100名の社員データを処理する場合、100個の変数を用意するのではなく、1つの配列変数で効率的に管理できます。また、`For Each` はコレクションや配列の各要素に対して同じ処理を簡潔に記述できる便利な構文です。

この記事を読むことで、以下のことができるようになります。
- 配列の基本的な使い方を理解し、大量データを効率的に扱えるようになる
- 配列の宣言、初期化、操作方法を習得する
- 多次元配列を使って表形式のデータを効率的に処理できるようになる
- `For Each` 構文を使って、コレクションや配列の要素に対する処理をシンプルに記述できるようになる

実務では、売上データの集計、顧客情報の一括処理、複数シートの操作など、様々な場面で配列とFor Eachが活躍します。これらのテクニックを身につけることで、VBAプログラミングの幅が大きく広がるでしょう。

## 静的配列

静的配列とは、プログラムの中であらかじめ決められた固定サイズの配列のことです。一度サイズを決めると、そのサイズはプログラムの実行中に変えることができません。静的配列は通常、データの量が事前にわかっている場合に使用します。メモリの使用効率が良く、処理速度が速いという特徴があります。

### 配列の宣言

配列は通常の変数と同様に宣言しますが、括弧 `()` を追加して配列であることを示します。

```vb
' 基本的な配列の宣言
Dim 変数名(インデックス) As データ型

' 例：10個の整数を格納できる配列
Dim numbers(9) As Long

' 例：配列のインデックスの範囲を指定
Dim scores(1 To 10) As Long
```

:::note info
### 配列のインデックス（要素数）について
- 配列は、デフォルトでは0から始まります（0基点）
    つまり、10個の要素を持つ配列の番号は0から9になります
- `Option Base 1` を宣言部に記述すると、1から始まる配列（1基点）になります
- 明示的に範囲を指定する場合は `Dim array(1 To 10) As Long` のように書きます
- 実務では混乱を避けるため、明示的に範囲を指定する方法が推奨されます
:::

### 配列の初期化と値の設定

配列の宣言後、各要素に値を設定できます。

```vb
' 配列の宣言。3つの要素を持つ "String" 型の配列
Dim fruits(2) As String
fruits(0) = "りんご"
fruits(1) = "バナナ"
fruits(2) = "オレンジ"

' 配列の要素に値を設定
Dim numbers(1 To 5) As Long
numbers(1) = 10
numbers(2) = 20
numbers(3) = 30
numbers(4) = 40
numbers(5) = 50
```

### 配列の要素にアクセスする

配列の各要素には、インデックスを使ってアクセスします。

```vb
Dim fruits(1 To 3) As String
fruits(1) = "りんご"
fruits(2) = "バナナ"
fruits(3) = "オレンジ"

' 要素の値を取得して表示
Debug.Print fruits(2) ' "バナナ" が表示される

' 要素の値を変更
fruits(3) = "ぶどう"
Debug.Print fruits(3) ' "ぶどう" が表示される
```

### 配列のサイズを取得する

配列のサイズ（要素数）を取得するには、`LBound` 関数と `UBound` 関数を使用します。

:::note info
#### 関数の説明
- `LBound` 関数: 「Lower Bound」（下限値）の略で、配列の「最初の番号」を教えてくれる関数
- `UBound` 関数: 「Upper Bound」（上限値）の略で、配列の「最後の番号」を教えてくれる関数
:::


```vb
Dim numbers(1 To 10) As Long

' 配列の下限（最小インデックス）を取得
Dim lowerBound As Long
lowerBound = LBound(numbers)                      ' 1 が代入される

' 配列の上限（最大インデックス）を取得
Dim upperBound As Long
upperBound = UBound(numbers)                      ' 10 が代入される

' 配列の要素数を計算
Dim arraySize As Long
arraySize = UBound(numbers) - LBound(numbers) + 1 ' 10 が代入される（10 - 1 + 1）
```

:::note info
### 配列操作のベストプラクティス
- 配列の範囲を超えるインデックスにアクセスするとエラーが発生します
- 処理前に必ず `LBound` と `UBound` を使って配列の範囲を確認しましょう
- 配列のループ処理では、`For i = LBound(array) To UBound(array)` のように記述すると安全です
:::

### 配列の実用例：セルデータの一括処理

以下は、A列のデータを配列に読み込み、処理して結果をB列に出力する例です。

```vb
' 10個の文字列を格納できる配列
Dim data(1 To 10) As String

' ループカウンタ用の変数
Dim i As Long

' A1:A10のデータを配列に読み込む
For i = 1 To 10
    ' A列のi行目の値を配列に保存
    data(i) = Cells(i, 1).Value
Next i

' 配列内のデータを処理（すべて大文字に変換）
For i = 1 To 10
    ' 配列の各要素を大文字に変換
    data(i) = UCase(data(i))
Next i

' 処理結果をB1:B10に出力
For i = 1 To 10
    ' 配列のi番目の要素をB列のi行目のセルに入力
    Cells(i, 2).Value = data(i)
Next i
```

## 動的配列

動的配列は、プログラムの実行中に必要に応じてサイズを変更できる配列のことです。この柔軟性があるため、データの量がどれくらいか、前もってわからない状況で便利です。メモリを柔軟に使用できますが、配列の要素数を変更する処理が必要な分、静的配列より少し遅いという特徴があります。

### 動的配列の宣言

動的配列は、最初は要素数を指定せずに宣言します。

```vb
' 動的配列の宣言（要素数は指定しない）
Dim dynamicArray() As String
```

### ReDim ステートメント

`ReDim` ステートメントを使用して、動的配列のサイズを設定したり変更したりできます。

```vb
' 動的配列の宣言
Dim numbers() As Long

' 初期サイズの設定
ReDim numbers(1 To 3)

' 配列に値を設定
numbers(1) = 10
numbers(2) = 20
numbers(3) = 30

' 配列のサイズを変更（既存の値は消去される）
' numbers(1)以降すべて0
ReDim numbers(1 To 10)

' Preserveステートメントを使用すると、既存の値を保持したままサイズを変更できる
' - numbers(1)は10のまま
' - numbers(2)は20のまま
' - numbers(3)は30のまま
' - numbers(4)以降は0（新しく追加された要素）
ReDim Preserve numbers(1 To 10)
```

:::note warn
### 動的配列の注意点
- `ReDim` だけを使うと、既存のデータはすべて消去されます
- `ReDim Preserve` を使うと、既存のデータを保持したままサイズを変更できます
- `Preserve` を使用する場合、最後の次元（通常は要素数）のみ変更可能です
- 頻繁なサイズ変更は、処理効率を低下させる可能性があるため、最初に十分なサイズを確保しておくことをおすすめします
:::

### 動的配列の実用例：データの逐次追加

次の例では、ユーザーが入力したデータを動的配列に追加していきます。

```vb
' ユーザーの入力データを格納するための文字列配列
Dim userData() As String

' ユーザーの入力を一時的に格納する変数
Dim userInput As String

' 収集したデータの数を追跡するための変数
Dim itemCount As Long

' 収集データの数を0に設定
itemCount = 0

' ユーザー入力を受け付ける
Do
    userInput = InputBox("データを入力してください。キャンセルで終了します。", "データ入力")
    
    ' キャンセルボタンが押された場合はループを抜ける
    If userInput = "" Then
        ' ループを終了
        Exit Do
    End If
    
    ' 配列のサイズを拡張
    itemCount = itemCount + 1

    ' 配列のサイズを1つ大きくする
    ReDim Preserve userData(1 To itemCount)
    
    ' 入力データを配列に格納
    userData(itemCount) = userInput
Loop

' ループカウンタ用の変数
Dim i As Long

' 収集したデータを表示
For i = 1 To itemCount
    ' i行1列のセルに、userData配列のi番目の要素の値を入力
    Cells(i, 1).Value = userData(i)
Next i

' 完了メッセージを表示
MsgBox "データの収集が完了しました。" & itemCount & "件のデータを取得しました。"
```

:::note info
#### InputBoxについて
ユーザーからの入力を受け取るための基本的な関数です。この関数を使えば、ユーザーに対して入力ダイアログを表示し、その入力をスクリプト（プログラム内）で活用できます。
`InputBox` 関数は2つの引数を取ります。最初の引数はユーザーに入力を促すためのメッセージで、もう一つはタイトル（ダイアログボックスの上部に表示されるバーのタイトル）です。
詳しくは、今後の記事で解説します。
:::

## 多次元配列

多次元配列は、複数の次元（軸）を持つ配列です。一般的には、2次元の表形式データや3次元の立体的なデータを扱う場合に使用します。

### 2次元配列の宣言と操作

2次元配列は、行と列を持つ表のようなデータ構造です。

```vb
' 2次元配列の宣言（3行4列の表を表現）
Dim matrix(1 To 3, 1 To 4) As Long

' 値の設定
matrix(1, 1) = 11
matrix(1, 2) = 12
matrix(1, 3) = 13
matrix(1, 4) = 14

matrix(2, 1) = 21
matrix(2, 2) = 22
matrix(2, 3) = 23
matrix(2, 4) = 24

matrix(3, 1) = 31
matrix(3, 2) = 32
matrix(3, 3) = 33
matrix(3, 4) = 34

' 配列の値にアクセス
Debug.Print matrix(2, 3)  ' 23 が表示される
```

### 多次元配列の処理

多次元配列の値を処理するには、入れ子になった `For` ループを使用します。

```vb
' 3行4列の2次元配列
Dim matrix(1 To 3, 1 To 4) As Long

' ループ用の変数
Dim i As Long, j As Long

' 配列に値を設定
For i = 1 To 3                    ' 1から3まで行のループを開始
    For j = 1 To 4                ' 1から4まで列のループを開始
        matrix(i, j) = i * 10 + j ' 配列の各要素に、行番号 × 10 + 列番号の値を代入
    Next j                        ' 列のループを終了
Next i                            ' 行のループを終了

' 配列の値を表示
For i = 1 To 3                    ' 1から3まで行のループを開始
    For j = 1 To 4                ' 1から4まで列のループを開始
        Debug.Print matrix(i, j)  ' 配列の値を順番に表示
    Next j                        ' 列のループを終了
    
    Debug.Print ""                ' 行の区切りとして空行を挿入
Next i                            ' 行のループを終了
```

:::note info
### 多次元配列のメリット
- 表形式のデータを直感的に扱える
- セルの個別アクセスよりも大幅に処理速度が向上
- 大量データの一括処理に最適
- Excelの範囲を直接配列として読み書きできる
:::

### 多次元配列の実用例：シートデータの高速読み書き

シートのデータを一度に配列に読み込み、処理して一度に書き戻す方法は、セルごとの読み書きよりも大幅に高速です。

```vb
' A1:D10のセル範囲を2次元配列として読み込む
Dim data As Variant
data = Range("A1:D10").Value

' 配列内のデータを処理（例：各セルの値を2倍にする）
Dim i As Long, j As Long
For i = LBound(data, 1) To UBound(data, 1)     ' 配列の行を順に処理するループ
    For j = LBound(data, 2) To UBound(data, 2) ' 配列の列を順に処理するループ
        If IsNumeric(data(i, j)) Then          ' セルの値が数値であるか確認
            data(i, j) = data(i, j) * 2        ' 数値の場合、値を2倍にする
        End If
    Next j                                     ' 列のループを終了
Next i                                         ' 行のループを終了

' 処理した配列をF1:I10に一度に書き込む
Range("F1:I10").Value = data

MsgBox "データ処理が完了しました。"
```

:::note info
#### 多次元配列におけるUBound関数、LBound関数

多次元配列の場合は、第1引数に対象となる**配列名**を、第2引数に調べる**配列の次元**（1が行、2が列）を指定します。
:::


#### Variant型について

上記のコードで使われている `Variant` 型は、さまざまなデータ型を一つの変数で扱える特殊な型です。[第3回: Excel VBAにおける変数と定数の基本](https://qiita.com/CodeLeaf/items/3b36eddf7b5a8b5c5d99)では `Variant` 型は「非推奨」と記載しておりますが、今回のようにExcelの範囲をそのまま配列として扱う場合、とても便利です。

実務では処理のスピードとコーディングの簡便さが重要です。このような場面では、`Variant` 型の柔軟さを活かすことで、コードをよりシンプルにできるという利点があります。

```vb
' Variant型を使用した場合（シンプルな記述）
Dim data As Variant
data = Range("A1:D10").Value           ' シートの範囲を直接配列として取得できる

' Variant型を使用しない場合（複雑な記述）
Dim data(1 To 10, 1 To 4) As String    ' 配列のサイズを事前に決める必要がある

Dim i As Long, j As Long               ' ループ用の変数

For i = 1 To 10                        ' 1から10まで行のループを開始
    For j = 1 To 4                     ' 1から4まで列のループを開始
        data(i, j) = Cells(i, j).Value ' セルごとに個別に値を取得
    Next j                             ' 列のループを終了
Next i                                 ' 行のループを終了
```

ただし、`Variant` 型を使用すると、変数の型が明確になりづらく、多くのメモリを消費する可能性があるため、意図せず使用するのは避けましょう。今回はその利便性と必要性から使用しており、明確な目的の範囲内での使用は適切と言えます。

:::note info
##### Variantの使用が推奨される場合
- シートデータの一括読み込み・書き込み
- 異なるデータ型が混在するデータの処理
- パフォーマンスが重要な大規模データの処理
- Excelの範囲と配列間のデータ受け渡し
:::

## 配列の操作関数

配列を効率的に操作するために、VBAには便利な関数が用意されています。ここでは、よく使用される配列操作関数について説明します。

### Array関数

`Array` 関数は、簡単に配列を作成する便利な関数です。特に、初期化された値を持つ小規模な配列の作成に便利です。

```vb
' Variant型の変数を必ず使用
Dim fruits As Variant

' Array関数で配列を作成（" , " 区切りで単語を記載）
fruits = Array("りんご", "バナナ", "オレンジ", "ぶどう", "いちご")

' 作成した配列の要素にアクセス
Debug.Print fruits(0) ' "りんご" が表示される
Debug.Print fruits(1) ' "バナナ" が表示される
Debug.Print fruits(4) ' "いちご" が表示される
```

:::note warn
#### Array関数の注意点
- 戻り値は必ず `Variant` 型
- インデックスは0から開始
- 異なるデータ型を混在させることが可能
:::

### Erase 関数

`Erase` 関数は、配列の要素を削除するために使用します。

- **静的配列の場合**
配列の要素はすべて初期値にリセットされます。数値型であれば 0、文字列型であれば空文字 "" になります。

- **動的配列の場合**
配列のメモリ領域が解放され、配列は存在しない状態になります。

```vb
' 静的配列の宣言と初期化
Dim staticArray(1 To 2) As String
staticArray(1) = "りんご"
staticArray(2) = "バナナ"

' 静的配列の要素を削除
Erase staticArray

' 各要素を確認すると、空文字になっている
Debug.Print staticArray(1) ' 改行される
Debug.Print staticArray(2) ' 改行される


' 動的配列の宣言と初期化
Dim dynamicArray() As Long
ReDim dynamicArray(1 To 2)
dynamicArray(1) = 100
dynamicArray(2) = 200

' 動的配列の要素を削除
Erase dynamicArray

' 配列は存在しない状態になるため、アクセスするとエラーになる
Debug.Print dynamicArray(1) ' エラーが発生する
```

:::note warn
#### Erase関数の注意点
- 静的配列：要素を初期値にリセット（数値→0、文字列→""）
- 動的配列：配列を完全に解放
- 配列の型によって動作が異なるため、使用前に配列の種類を確認
- 大きな配列のメモリ解放に有効 
:::

### IsArray関数

`IsArray` 関数は、変数が配列かどうかを確認するための関数です。配列であれば `True`、そうでなければ `False` を返します。配列の確認時に使用します。

```vb
' 配列と通常の変数を宣言　　
Dim numbers(1 To 3) As Long                             ' 配列を宣言
Dim normalVar As Long                                   ' 通常の変数を宣言

' 配列かどうかを判定して結果を表示
Debug.Print "numbersの判定結果: " & IsArray(numbers)     ' True が表示される
Debug.Print "normalVarの判定結果: " & IsArray(normalVar) ' False が表示される
```

:::note warn
#### IsArray関数の注意点
- 配列の存在確認のみ可能で、要素数は確認できない
- 動的配列が未初期化でも `True` を返す
- エラー処理と組み合わせて使用すると効果的 
:::

## For Each...Nextステートメント

`For Each...Next` 構文は、配列やコレクションの各要素に対して繰り返し処理を行う便利な方法です。通常の `For` ループよりも簡潔に記述でき、特に、要素が何個あるか分からなくても簡単に扱えるため、非常に便利です。

### 基本構文

```vb
For Each 要素変数 In コレクションまたは配列
    ' 各要素に対する処理
Next 要素変数
```

### 配列での使用例

```vb
' 配列の宣言と初期化
Dim fruits As Variant
fruits = Array("りんご", "バナナ", "オレンジ", "ぶどう", "いちご")

' For Eachを使って配列の各要素を処理
Dim fruit As Variant

' fruitsの左から順に繰り返す
For Each fruit In fruits
    Debug.Print fruit
Next fruit
```

:::note info
### For EachとFor Nextの違い
- `For Each` は要素の値に直接アクセスでき、インデックスを管理する必要がない
- `For Next` はインデックスを使った操作が必要（例：配列の特定位置の要素を変更する場合）
- `For Each` はコレクションオブジェクトに対して特に効果的
- `For Each` はコードが簡潔になり、可読性が向上する

#### 使い分けのポイント
- `For Next`: インデックスが必要な時や特定の間隔で処理を行う時
- `For Each`: 全要素を順番に処理したい時やインデックスが不要な時 
:::

### Worksheetsコレクションの操作

Excel VBAでは、ワークシートやセル範囲などのオブジェクトはコレクションとして管理されています。`For Each` を使うと、これらのコレクションを簡単に操作できます。

```vb
'ワークシートを格納するための変数
Dim ws As Worksheet

' すべてのワークシートに対して処理を実行
For Each ws In ThisWorkbook.Worksheets
    ' 各シートのA1セルに現在の日付を入力
    ws.Range("A1").Value = Date
    
    ' シート名をB1セルに入力
    ws.Range("B1").Value = ws.Name
    Next ws 

MsgBox "すべてのシートの処理が完了しました。"
```

### セル範囲の操作

```vb
' セルを格納する変数
Dim cell As Range

' 選択されたセル範囲の各セルに対して処理を実行
For Each cell In Selection
    ' 数値セルの場合、値を2倍にする
    If IsNumeric(cell.Value) Then
        cell.Value = cell.Value * 2
    ' 文字列セルの場合、大文字に変換
    ElseIf TypeName(cell.Value) = "String" Then
        cell.Value = UCase(cell.Value)
    End If
Next cell

MsgBox "選択セルの処理が完了しました。"
```

### Exit For の使用

`For Each` ループも `Exit For` を使って途中で抜け出すことができます。

```vb
' セルを格納する変数
Dim cell As Range

'検索する値を格納する変数
Dim searchValue As String

' 検索する特定の値を設定
searchValue = "特定の値"

' A1:Z100の範囲で特定の値を検索
For Each cell In Range("A1:Z100")
    'セルの値が検索値と一致するかチェック
    If cell.Value = searchValue Then
        ' 見つかったセルを選択して背景色を黄色に
        cell.Select
        cell.Interior.Color = vbYellow
        MsgBox "値「" & searchValue & "」が見つかりました。セル: " & cell.Address
        Exit For  ' 最初に見つかった時点でループを抜ける
    End If
Next cell
```

:::note info
### 大量データ処理のパフォーマンス向上テクニック
- セルの個別アクセスよりも配列を使った一括処理を優先する
- 必要な範囲だけを配列に読み込み、不要なデータは含めない
- 頻繁な配列のリサイズ（サイズ変更）を避け、必要なサイズを事前に確保する
:::

## まとめ

配列は、VBAプログラミングにおいてデータを効率的に管理・処理するための重要な要素です。静的配列と動的配列は、それぞれの特性を活かして使い分けることで、より効率的で柔軟性の高いプログラムを作成することができます。特に、データ量が事前に把握できる場合は静的配列を、実行時にサイズ変動の可能性がある場合は動的配列を使用するという使い分けを意識することで、より最適化されたコードを実現できます。また、多次元配列やセル範囲の一括処理を活用することで、処理速度を大幅に向上させることができます。

実務では、売上データの分析、社員情報の一括処理、複数シートの比較など、様々な場面でこれらのテクニックが活躍します。特に大量データを扱う場合は、セルの個別アクセスよりも配列を使った一括処理が圧倒的に高速です。

もし記事の内容で不明な点や、より詳しく知りたい部分がありましたら、コメントでお知らせください。また、実務での配列や `For Each` の活用例や、より効率的な実装方法など、皆様のノウハウもぜひ共有していただければ幸いです。

次回は、`Formula` と `Value` の使い分け、`InputBox` 関数、そしてワークシート関数の利用について詳しく解説する予定です。これらの機能を理解することで、Excel VBAの活用範囲がさらに広がるでしょう。どうぞお楽しみに！