ExcelVBAで、index、match関数を使用して、 Cells(c, r) = .Index(myrng, .Match(key, Range("a2:a11"), 0), l)、Cells(c, r) = .Index(myrng, .Match(key, Range("a2:a11"), 0), l)c、r、lの2~3重ループで、同じ色の列で出力できるように、a2:f12→h2:m12、出力したのですが、上手くいきません。大変お手数ですが、どなたか、分かる方、教えて頂けないでしょうか?
初心者なので、意味不明かもしれません。ご了承下さい。
コード↓
Sub i_m3()
Dim myrng As Range
Dim c, r, k, l As Long
Dim key As Variant
Dim maxrow As Long
Set myrng = Range(Cells(2, 1), Cells(11, 6))
maxrow = Cells(Rows.Count, 1).End(xlUp).Row
For c = 2 To maxrow
For r = 8 To 13
For k = 2 To 11
l = 1 '←for l= 1 to 6 にしたかったのですが、4重ループになり分からなくなりそうなので、forにしませんでした
key = Cells(k, 1)
With Application
Cells(c, r) = .Index(myrng, .Match(key, Range("a2:a11"), 0), l) '←ここの部分です
c = c + 1
If c = 12 Then
Exit For
End If
End With
Next
Next
Next
' Next
End Sub
No.1
- 回答日時:
こんばんは
コードを見ると
For c = 2 To maxrow のカウント変数cをなぜループ内で
c = c + 1 しているのでしょうか?
If c = 12 Then
Exit For
End If
をしているところを見るとmaxrow行まで処理したら
次みたいにしたいのでしょうか?
ちなみに現状の場所でExit ForしてもFor kを抜けるだけなので
変数cの値は増えると思います
kは要りますか?
セルのインデックスを決める変数・・・c r
ループと変数を少し整理(見直)して
ループのカウント変数をステップ実行などで観察してみては如何でしょう
ありがとうございます。c=c+1ではなく、r=r+1が正しいですね。トータル8時間近く、調べて、色々やってるんですが、やっぱり、分かりません。
No.2
- 回答日時:
こんにちは
ループ処理の学習だと思います。簡単なサンプルを下に書きますので
ステップ実行で処理方向、カウント変数の挙動を確認してみてください
Sub i_m3_Test()
Dim myrng As Range
Dim c, r, k, l As Long
Dim key As Variant
Dim maxrow As Long
Set myrng = Range(Cells(2, 1), Cells(11, 6))
maxrow = Cells(Rows.Count, 1).End(xlUp).Row
For c = 2 To maxrow '行方向ループ 2~最終行
key = Cells(c, 1) 'Matchのキーワード A2~最終行
'(11行までに限定したい場合は別変数でmaxrow>11の時の定義などをする)
l = 1 'for c の初めに変数lを初期化
For r = 8 To 13 '列方向のループ
With Application
Cells(c, r) = .Index(myrng, .Match(key, Range("a2:a11"), 0), l)
l = l + 1 'Index関数の取得列を出力列移動ごとに変更
End With
Next r
Next c
End Sub
この例は、列方向に出力した後 下行に移動していきます
ご質問の場合もFor c = 2 To maxrowが外側の繰り返し処理になっているので同じような出力順序になります
しかし、少し違うような処理手順になっているようですね・・
そこを検証してみてください
F8は既に知っていました。F8のクリックを何十回とループの動きを確認しながら、やっていたんですが、全然、答えには辿り着けませんでした。key(k,1)=cells(k,1)ではなく、key=cells(c,1)と、For c = 2 to maxrowと同じにcにすれば良かったんですね。それと、 For l = 2 To 11の余計なForがあり、ループが上手く回らず、l=1 l=l+1とすれば、いいですね。c,rの2重ループで回せばいいですね。For分を3重ループにしたから、頭が混乱して、どうしていいか分からなくったのもあると思います。あともう一つ工夫すれば、完成したかもしれませんが、なかなか思うようにはいきませんでした。コメント+α、理屈を分かりやすく記載してあり、また、親切に答えて頂き、本当に有難うございました。超長丁場、やっと、分かったー、という感じです。大変、助かりました。重ね重ねになるんですが、有難うございました。大感謝です。
No.3ベストアンサー
- 回答日時:
追記します
ステップ実行 ステップイン
https://www.239-programing.com/excel-vba/basic/b …
対象シート(出力部分)とVBE(エディター) が両方目視できるように
ディスプレイに配置して
VBEの コード(プロシージャ)内にカーソルを置き F8キーで実行します
F8キーを押す度に1行ずつ実行されます
止まっている行は実行されていません
止まっている行で変数などにカーソルポインターを持っていくと格納されている値を見る事が出来ると思います
ステップインは簡易的な検証でイミディエイトウィンドウやローカルウィンドウなどを使うとさらに詳しく変数などの確認が出来ます
VBAのデバッグについてはVBEの操作と共に最も基本的な事になると思いますが、知らずにコードを書いている人が多いようですので 念のため・・
VBEの機能やデバッグ方法を学習すれば、今後のスキルアップに違いが出ますので是非覚えてください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) ExcelVBAの転記について 1 2022/03/23 20:13
- Visual Basic(VBA) ExcelVBAで、型が一致しませんのエラーについて 3 2023/06/20 09:51
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSCに制限時間を付けたいです
-
エクセルの当番表を作っていま...
-
画面を強制的に再描画させる方法
-
プログラムの機能を変えずに高...
-
VBA for i=1 to lastrow
-
UWSCの終了の仕方
-
DoEventsが必要な理由について
-
どなたかこのプログラミングを...
-
テキストボックスの名前に変数...
-
vb.netからエクセル関数書き込み
-
pythonでファイルのコメント行...
-
GIFアニメをループさせたくない
-
無限ループの防ぐ方法
-
WHILE (CHKIMG(”A.bmp”)=FALSE)...
-
UWSCのスクリプトで行き詰って...
-
uwsc条件並列とそれの抜け方
-
VBAでの一時停止と再開の方法
-
VBAで3秒だけ時間を止めたい
-
配列について
-
レインボー色ってどうやって表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
-
アクティブセルから、A列最終行...
-
DoEventsが必要な理由について
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
流れ図(フローチャート)が分か...
-
乱数の桁数指定、または範囲指定。
-
テキストボックスの名前に変数...
-
CSVファイルの特定の行だけを読...
-
vbscriptでIE自動入力(途中で...
おすすめ情報
写真添付の為
気分を選ぶ