アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

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

と置き換えるとわかりやすいと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/30 22:24

まず全体を処理する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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!