こんばんは
Excel VBAの初心者です。
Do Until Loopを使って
B列の値が変わるところ(下記の表だと、空白からコスモスに変わる、4行目。コスモスからチューリップに変わる6行目。チューリップから菊に変わる8行目。)に行を挿入させたいと思い、下記のマクロを組んだのですが、Do Until Loopが理解できませんでした。
どうしたら良いのか教えて頂けないでしょうか。
宜しくお願い致します。
Excelのシート
B1 項目
B2 空白
B3 空白
B4 コスモス
B5 コスモス
B6 チューリップ
B7 チューリップ
B8 菊
Sub 行の挿入()
Dim y As String
Cells(2, 2).Select
y = Cells(2, 2).Value
Do Until Cells(2, 2).Value <> y
ActiveCell.Offset(1).Select
Selection.EntireRow.Select
Selection.Insert shift:=xlDown
Loop
End Sub
No.1
- 回答日時:
Do Until 式
コード
Loop
『式がFalseである場合にコードを実行し、Doへ戻れ』
これは
Do While 式 = False
Loop
または
Do While Not 式
Loop
と同じです。
Do Until Cells(2, 2).Value <> y
の場合、式は「セル(2, 2)の値がYと一致しない」ですので
『「セル(2, 2)の値がYと一致しない」がFalseである場合に、コードを実行し、Doに戻れ』
・・・となりますが、二重否定構文になっているのでややこしいです。
(Not 式 = False) は (式 = True) となるので
Do While Cells(2, 2).Value = y
Loop
と置き換えるとわかりやすいと思います。
最近VBAがわかってきたと思っていたのですが、
制御文になるとなかなか理解できませんでした。
細部まで教えてください。ありがとうございました。
No.2ベストアンサー
- 回答日時:
まず全体を処理するLoopが必要
そのloopのなかでキーをセットしキーが変わるまでというloop
キーが変わったところで(loopの次の行)で挿入処理
>Do Until Cells(2, 2).Value <> y
Cells(2, 2)も yもLoopの中で変化しないので何時までも終わらない
offsetは記述が長くなるので不適
VBAのコードの中では範囲をselectする必要はない場合が多い。
Sub 行の挿入()
Dim i As Long
Dim y As String
i = 2
Do Until Cells(i, 2) = ""
y = Cells(i, 2).Value
Do Until Cells(i, 2).Value <> y
i = i + 1
Loop
Cells(i, 2).EntireRow.Insert shift:=xlDown
i = i + 1
Loop
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBA初心者です。 2 2022/10/10 11:52
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルが空白だったら、そ...
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
VBAでセルをクリックする回...
-
Excelのハイパーリンクにマクロ...
-
【Excel VBA】指定行以降をクリ...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
EXCELで変数をペーストしたい
-
Excel vbaで特定の文字以外が入...
-
Sub 要具ライフ() ActiveSheet....
-
TODAY()で設定したセルの日付...
-
【VBA】指定したセルと同じ値で...
-
エクセル マクロで セルの範...
-
VBAの計算で@が出てしまう件
-
DataGridViewのセル編集完了後...
-
任意フォルダから画像をすべて...
-
セルに抜けた番号の代わりに空...
-
DataGridViewで右寄せ左寄せが...
-
”戻り値”が変化したときに、マ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報