0

列 B に「CL」が含まれている行を範囲外に切り取り、その切り取りを別のワークシートに挿入しようとしています。それは美しくやっていますが、列 B に「CL」が含まれていない場合、何もしない代わりに空白の行がスプレッドシートに挿入されます。空白行が挿入される理由がわかりません。ここにコードがあります

With Sheets("Data")
    .Select
    ViewMode = ActiveWindow.View
    ActiveWindow.View = xlNormalView
    .DisplayPageBreaks = False
    Firstrow = .UsedRange.Cells(1).Row
    Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
    For Lrow = Lastrow To Firstrow Step -1
        With .Cells(Lrow, "B")

            If Not IsError(.Value) Then

                    If .Value = "CL" Then .EntireRow.Cut
                        Sheets("Sheet1").Select
                        Rows("10:10").Select
                        Selection.Insert Shift:=xlDown

               End If

           End With

       Next Lrow

   End With

End Sub
4

1 に答える 1

3

EntireRow.CutCL をヒットした場合 にのみ実行していますが、(CL が見つからなくても) 常に挿入を実行しています。

インデントにより、一見すると、すべて条件付きでカット、選択、および挿入を行っているように見えますが、実際には単一行の if フォームを使用しています。この形式ではthen、行末までの部分のみが条件付きです。後続の行は条件付きではありません。

インデントを修正すると、次のようになります。

With .Cells(Lrow, "B")
    If Not IsError(.Value) Then
        If .Value = "CL" Then .EntireRow.Cut     '<--- this is a single-line if

        Sheets("Sheet1").Select                  '<--- this, and the next two lines, will always run if .Value is not an error value
        Rows("10:10").Select
        Selection.Insert Shift:=xlDown
    End If  
End With

if代わりに複数行を試してください:

With .Cells(Lrow, "B")
    If Not IsError(.Value) Then
        If .Value = "CL" Then
            .EntireRow.Cut     '<--- everything from here to the "End If" will run when you hit a CL
            Sheets("Sheet1").Select
            Rows("10:10").Select
            Selection.Insert Shift:=xlDown
        End If
    End If
End With
于 2013-07-02T19:50:57.670 に答える