• ベストアンサー

Excel VBA のDo Until Loopについて

こんばんは 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

質問者が選んだベストアンサー

  • ベストアンサー
  • rivoisu
  • ベストアンサー率36% (97/264)
回答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

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答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 と置き換えるとわかりやすいと思います。

mugigohan
質問者

お礼

最近VBAがわかってきたと思っていたのですが、 制御文になるとなかなか理解できませんでした。 細部まで教えてください。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A