- ベストアンサー
Vlookup関数で行と列を両方Loopで回したい
- エクセル2010でVlookup関数を使用して行と列を両方Loopで回したいです。1列ごとに50列まで書いていますが、列のLoop方法がわかりません。どうすれば良いでしょうか?
- エクセル2010でVlookup関数を使用して行と列を両方Loopで回したい場合、1列ごとに50列まで書く方法がありますが、列のLoop方法が分かりません。どのようにすれば良いでしょうか?
- エクセル2010でVlookup関数を使用して行と列を両方Loopで回したいのですが、列のLoop方法が分からず、1列ごとに50列まで書いています。どのようにすれば良いでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
検索対象はB列固定みたいなのでVLookupのRangeはRangeのままでいいです。 ちょっと説明の仕方が悪かったですね。 For j = 2 To 51 For i = i_start To i_end myV = Application.VLookup(Range("B" & i).Value, 範囲, j, False) If IsError(myV) Then Cells(i, j + 1).Value = 0 Else Cells(i, j + 1).Value = myV End If Next i Next j でも、改めて処理内容をみてみると、C列以降は同じ行をコピーしてるだけなのでこっちの方がシンプルです。 For i = i_start To i_end Set myV = Worksheets("2月").Range("B7:B20").Find(Range("B" & i)) If myV Is Nothing Then Range("C" & i).Resize(1, 50) = 0 Else myV.Offset(0, 1).Resize(1, 50).Copy Range("C" & i) End If Next i
その他の回答 (1)
- root8110
- ベストアンサー率30% (6/20)
Cells(i,j)で、i行j列のセルが参照できます。 列のjも数字で、例えばRange("B1")はCells(1,2)、Range("C4")はCells(4,3)です。 Range("B"&i)のところをCells(i,j)に置き換えて、 For j=j_start To j_end For i=i_start To i_end ・・・Cells(i,j)・・・ Next i Next j こんな感じでどうでしょうか。
補足
root8110さん、ありがとうございます。 いろいろ考えたのですが myV = Application.VLookup(Cells(i, j + 1).Value, 範囲, j, False) If IsError(myV) Then Cells(i, j + 1).Value = "0" Else Cells(i, j + 1).Value = myV End If 全部”0”表示になってしまいます。 どこが違うのでしょうか? 申し訳ございません、よろしくお願いいたします。
お礼
root8110さん、ありがとうございました。 両方、希望通りに動きました。速度も速いです! Range("B" & i)も、検索の列が動かないようにということですね。 やっとわかりました。 ありがとうございました。