質問: excelセルにvbaでindex関数を入力 excelでindex関数とmatch関数で"b11:e13"セルに以下の数式データがあります。 数式は "b11"=if(iserror(index($a$1:$a$9,match(1,b$15:b$23,0))),"",index($a$1:$a$9,match(1,b$15:b$23,0))) "b12"=if(iserror(index($a$1:$a$9,match(2,b$15:b$23,0))),"",index($a$1:$a$9,match(2,b$15:b$23,0))) "b13"=if(iserror(index($a$1:$a$9,match(3,b$15:b$23,0))),"",index($a$1:$a$9,match(3,b$15:b$23,0))) "c11"==if(iserror(index($a$1:$a$9,match(1,c$15:c$23,0))),"",index($a$1:$a$9,match(1,c$15:c$23,0))) "b15~b23"に数値1~3を入力した場合イニシャルa~i が入力される式ですが、列を連続で入力できるような処理をvbaのworksheetfunctionで行うにはどのようにコードを記述すればよいのでしょうか。 ご回答のほどよろしくお願いします。
回答: no.1です! >worksheetfunctionで行うにはどのように・・・ を見逃していました。 worksheetfunctionでもできなくはないですが、数式を入れる範囲の行・列の変数を宣言し for~nextでループしてやる必要があるのではないかと思います。 sub sample2() dim i as long, j as long for j = 2 to 5 for i = 1 to 3 cells(i + 10, j) = worksheetfunction.index(range("a1:a9"), worksheetfunction.match _ (i, range(cells(15, j), cells(23, j)), false)) next i next j end sub といった具合です。 エラー処理はしていません。 それよりもno.1のようにワークシート関数をそのまま利用するほうが簡単だと思います。 ただし、前回のコードでは実データではなく関数によって表示されているデータになりますので、 実データにする場合は↓のコードに変更してみてください。 sub sample1() with range("b11:e13") .formula = "=if(iserror(index($a$1:$a$9,match(row(a1),b$15:b$23,0))),"""",index($a$1:$a$9,match(row(a1),b$15:b$23,0)))" .value = .value end with end sub 何度も失礼しました。m(_ _)m