MW211 EXIT

devlog
ExcelVBA/For Each文で値は変更できない
2018年11月03日
┌──────────────────────────────────────┐
│Dim 配列 As Variant, 要素 As Variant                                        │
│For Each 要素 In 配列                                                       │
│   MsgBox 要素                                                              │
│Next 要素                                                                   │
└──────────────────────────────────────┘
For Each文は上記のように値を参照できるのだが、
以下のように値を代入したりはできない。
┌──────────────────────────────────────┐
│Dim 配列 As Variant, 要素 As Variant                                        │
│For Each 要素 In 配列                                                       │
│   要素 = "値を変更"                                                        │
│Next 要素                                                                   │
│For Each 要素 In 配列                                                       │
│   MsgBox 要素                                                              │
│Next 要素                                                                   │
└──────────────────────────────────────┘
上記における変数「要素」は一時変数のようなもので、
次から次へと配列の要素が上書されるので、値を変えても効果はない。

PHPではアドレス参照にする方法もあるが、ExcelVBAではそれがないので
もしも値を変えたい場合には、スカラ配列ならばFor文でループする。
┌──────────────────────────────────────┐
│Dim 配列 As Variant, 要素 As Variant                                        │
│Dim i As Long                                                               │
│For i = LBound(配列) To UBound(配列)                                        │
│   配列(i) = "z"                                                            │
│Next i                                                                      │
│For Each 要素 In 配列                                                       │
│   MsgBox 要素                                                              │
│Next 要素                                                                   │
└──────────────────────────────────────┘
分類:ExcelVBA