2016-12-05 13 views
0

このスクリプトを見つけて、自分のニーズに合わせていくつか修正しました。しかし、私は列Aにスペースを挿入し、任意の行で列Bと一致しない場合、その後の比較は、上記の1行を追加し続ける、だからではなく、行全体のセルの値に基づいてセルを上に挿入

Sub BlankLine() 
    Dim Col As Variant 
    Dim Col2 As Variant 
    Dim BlankRows As Long 
    Dim LastRow As Long 
    Dim R As Long 
    Dim StartRow As Long 

    Col = "A" 
    Col2 = "B" 
    StartRow = 2 
    BlankRows = 1 

    LastRow = Cells(Rows.Count, Col).End(xlUp).Row 

    Application.ScreenUpdating = False 

    With ActiveSheet 
    For R = LastRow To StartRow + 1 Step -1 
     If .Cells(R, Col) <> .Cells(R, Col2) Then 
     .Cells(R, Col2).EntireRow.Insert Shift:=xlUp 
     End If 
    Next R 
    End With Application.ScreenUpdating = True 
End Sub 

を一つのセルを挿入する方法を見つけ出すことはできません偽の値。

Example: 1 1 
     2 3 
     3 4 

Becomes: 1 1 
     2 
     3 3 
      4 

ご協力いただければ幸いです!

+0

変更する場合.Cells(R、COL)<> .Cells(R、Col2に)そして .Cells(R、col2が)シフト.EntireRow.Insert: へ= xlUpを場合.Cells(R、COL) <> .Cells(R、Col2)Then .Cells(R、Col2)。挿入Shift:= xlDown 注文と一緒に再生する必要があります。他に誰もいなくても、私は働くことができます。 –

+0

R = StartRow To LastRowはデータセットによっては問題が発生する可能性がありますが、よりうまくいくようです。 –

+0

ColとCol2は実際にはVariantではありません...文字列として使用しています。 – Rdster

答えて

1
.Cells(R, Col2).Insert Shift:=xlDown 
+0

私はそれを試みました... "実行時エラー '1004' Rangeクラスのメソッドが失敗しました " – TylerYoc

+2

それは私のために働いた... – Rdster

+1

@TylerYoc - エラーを出したときのRとCol2の値は何でしたか? (私はエラー**が変更された行にあったと仮定します) – YowE3K

0

あなたはからあなたのループを変更する必要があります: - :

Example: 1 3 
     2 1 
     3 2 

For R = StartRow To LastRow 
    If .Cells(R, Col).Value <> .Cells(R, Col2).Value Then 
     .Cells(R, Col2).Insert Shift:=xlDown 
    End If 
Next R 

警告の言葉に

For R = LastRow To StartRow + 1 Step -1 
    If .Cells(R, Col) <> .Cells(R, Col2) Then 
     .Cells(R, Col2).EntireRow.Insert Shift:=xlUp 
    End If 
Next R 

あなたのデータはこのように見える場合次のようになります。

Becomes: 1 
     2 
     3 3 
      1 
      2 

これを使用する前に、データが適切な順序であることを確認してください。

+0

はい、間違いなくそこに問題があります。それは期待どおりに機能しました。どうもありがとうございました。 – TylerYoc

関連する問題