Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


716 / 13645 ツリー ←次へ | 前へ→

【78793】変数と変数の結合(連結) ちょろすけ 17/1/29(日) 19:07 質問[未読]
【78794】Re:変数と変数の結合(連結) β 17/1/29(日) 19:23 発言[未読]
【78795】Re:変数と変数の結合(連結) ちょろすけ 17/1/29(日) 19:43 お礼[未読]

【78793】変数と変数の結合(連結)
質問  ちょろすけ  - 17/1/29(日) 19:07 -

引用なし
パスワード
   宜しくお願い致します。
例えば以下のマクロを実行した際に、EXCELのシートに入力される値の希望は
111,222,333,なのですが、1,2,3,となってしまいます。
何か良い方法は無いでしょうか?

Sub test()

  Dim i As Long, MyQty1 As Long, MyQty2 As Long, MyQty As Long
  
  MyQty1 = 111
  MyQty2 = 222
  MyQty3 = 333
  
  For i = 1 To 3
  
  ActiveCell.Offset(0, 1).Select
  ActiveCell.Value = MyQty + i
  
  Next i

End Sub

【78794】Re:変数と変数の結合(連結)
発言  β  - 17/1/29(日) 19:23 -

引用なし
パスワード
   ▼ちょろすけ さん:

MyQty + i を MyQty1 だったり MyQty2 だったり MyQty3 だったり、
そう【期待】してますね?

残念ながら、エクセルVBAは、そう解釈してくれません。


つまり、MyQty + i は MyQty という名前のLong型変数に入っている値 + i とみなされますから
ループの中で 1 -> 2 -> 3 となっていきます。

"MyQty" という文字列 と i という数字を組み合わせた MyQty1 や MyQty2 や MyQty3 というものを
取得する方法は無きにしも非ずですが、コンパイラーの盲点をつく、トリッキーなコードになりますので
紹介しません。(ご存じだったとしても使わないほうがいいと思います)

ですから、ここは、MyQty1 等々を直接指定して参照するべきです。
この処理をするのに、いちいちセルをSelectする必要はありませんが、そこは
そちらのコードのままにしてあります。

Sub Sample1()

  Dim MyQty1 As Long, MyQty2 As Long, MyQty3 As Long
  Dim d As Variant
  
  MyQty1 = 111
  MyQty2 = 222
  MyQty3 = 333
  
  For Each d In Array(MyQty1, MyQty2, MyQty3)
 
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = d
 
  Next d

End Sub

Sub Sample2()

  Dim i As Long, MyQty1 As Long, MyQty2 As Long, MyQty3 As Long
  
  MyQty1 = 111
  MyQty2 = 222
  MyQty3 = 333
  
  For i = 1 To 3
 
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = Array(MyQty1, MyQty2, MyQty3)(i - 1)
 
  Next i

End Sub

【78795】Re:変数と変数の結合(連結)
お礼  ちょろすけ  - 17/1/29(日) 19:43 -

引用なし
パスワード
   βさん:

おぉ〜
Arrayを使えば似た処理が出来るのですね!

EXCELでは自分が期待していた処理をしない方が良い事も勉強になりましたし、
出来るだけプログラムを短くしたかったので、満足する事が出来ました。
早々の回答で助かりました、本当にありがとうございました。

716 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free