全く同じ形式の複数のシートからVLOOKUPのように要素を抽出して、
同じ形式の”貼り付け先”シートに転記するマクロを組んでいます。
その中で、下記のコードの中の➀、➁の順番を逆にしたいと考えています。
理由は、先にii = ii + 1と書いてしまうと、➁の実行時にスキップされてしまう
セルが出てくるためです。
その場合、If IsError(i) Thenの部分(→(i)が真の場合、という内容にしたい)、
およびそれ以降の
ii = ii + 1
Else
.Cells(ii, 10).Value = prefRng(i).Offset(, 4).Value
End If
の部分は、どのように書き換えたら良いでしょうか。
お手数ですが、ぜひご教示頂きたく、お願い致します。
-------------------------------------------------------------------------------
Sub Test()
Dim prefRng As Range
Dim i, ii As Long
Dim K As Long
Dim Worksheet As Worksheet
For K = 4 To Worksheets.Count
Worksheets(K).Activate
Set prefRng = ActiveSheet.Range(Cells(10, 4), Cells(Rows.Count, 4).End(xlUp))
With ThisWorkbook.Worksheets.Item("貼り付け先")
For ii = 10 To .Cells(Rows.Count, 1).End(xlUp).Row
i = Application.match(.Cells(ii, 4).Value, prefRng, 0)
If IsError(i) Then
ii = ii + 1 …➀
Else
.Cells(ii, 10).Value = prefRng(i).Offset(, 4).Value …②
End If
Next
End With
Next K
End Sub
No.1ベストアンサー
- 回答日時:
条件にNotを付けてひっくり返せば良いのではと思います。
If Not IsError(i) Then ' エラーじゃなかったら
.Cells(ii, 10).Value = prefRng(i).Offset(, 4).Value …②
Else
ii = ii + 1 …➀
End If
No.2
- 回答日時:
コードをそのまま活かして書いてみました。
全体的には、コードは良く分かっていないかもしれませんので、間が抜けているかもしれません。
ii=ii+1 をループ内でおいたら、読み出しが、スキップしてしまいます。だから、ループ内で、カウンター変数をインクリメントを行うことはできませんね。別の変数を置いてやるしかないと思います。
'//
Sub Test2()
Dim prefRng As Range
Dim i, ii As Long, j As Long
Dim K As Long
''Dim Worksheet As Worksheet '不要
j = 10 '貼り付け先の書き出しの初期値
For K = 4 To Worksheets.Count
With Worksheets(K)
Set prefRng = .Range(.Cells(10, 4), .Cells(Rows.Count, 4).End(xlUp))
End With
With Worksheets("貼り付け先")
For ii = 10 To .Cells(Rows.Count, 1).End(xlUp).Row
i = Application.Match(.Cells(ii, 4).Value, prefRng, 0)
If Not IsError(i) Then
.Cells(j, 10).Value = prefRng(i).Offset(, 4).Value '
j = j + 1 '貼り付け行のインクリメント
End If
Next
End With
Next K
End Sub
ありがとうございます!
どうしても、スキップされてしまうセルがあり、困っておりました。
教えて頂いたコードを試してみたら、その部分も、きっちり解消されていました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
GIFアニメをループさせたくない
-
VB2010でCSVファイルの読み込み
-
ListBox 複数選択 で オートフ...
-
Escキーを押すと、中断する時と...
-
範囲指定したセルを1つずつ飛...
-
VisualStudioにてモザイクの画...
-
多重ループの抜けだし方
-
乱数の桁数指定、または範囲指定。
-
VBA for文が止まらない
-
Do whileでExitせず、ループの...
-
UWSCに制限時間を付けたいです
-
DOSコマンドのループ内のTIMEコ...
-
vb.netです。2次元配列の要素を...
-
CSVファイルの特定の行だけを読...
-
UWSCの終了の仕方
-
Excel vba でコンボボックスの...
-
DoEventsが必要な理由について
-
vbscriptでIE自動入力(途中で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
UWSCの終了の仕方
-
DoEventsが必要な理由について
-
VBAで3秒だけ時間を止めたい
-
範囲指定したセルを1つずつ飛...
-
Escキーを押すと、中断する時と...
-
DOSコマンドのループ内のTIMEコ...
-
vbscriptでIE自動入力(途中で...
-
乱数の桁数指定、または範囲指定。
-
GIFアニメをループさせたくない
-
プログラミングについて。 1つ...
-
エクセルの当番表を作っていま...
-
テキストボックスの名前に変数...
-
ループフリー
-
vb.netからエクセル関数書き込み
-
CSVファイルの特定の行だけを読...
-
VBA for i=1 to lastrow
-
どなたかこのプログラミングを...
-
Do whileでExitせず、ループの...
おすすめ情報