2016-04-18 15 views
0

私持っているVBAマクロ以下 - 基本的エクセルVBAは - に「最初の行の場合は0」を追加する既存のマクロ

Sub CopyData() 

Application.ScreenUpdating = False 

Dim CRow As Integer 
Dim CColBRange As String 
Dim PColBRange As String 
Dim Continue As Boolean 

'Select Sheet1 
With Sheets("KG9New") 
    .Select 

'Initialize variables 
Continue = True 
CRow = 1 

While Continue = True 

CRow = CRow + 1 

'Test B2: 
If CRow = 2 And Cells(CRow, 2).Value = 0 Then 
    Range("A" & CStr(CRow) & ":C" & CStr(CRow)).Copy 
    Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues 
    CRow = CRow + 1 
End If 

CColBRange = "B" & CStr(CRow) 
PColBRange = "B" & CStr(CRow - 1) 

    'Break loop upon finding blank cell. 
    If Len(Range(CColBRange).Value) = 0 Then 
    Continue = False 
    End If 

    'Copy first instance of each changing Value in MachineRunning. 
    If Range(CColBRange).Value <> Range(PColBRange).Value Then 
    Range("A" & CStr(CRow) & ":C" & CStr(CRow)).Copy 
    Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues 
    End If 

Wend 

End With 

Application.ScreenUpdating = True 

End Sub 

、これは新しいシートときに渡って私のテーブルとコピーの値の列Bを経由スキャン値が1から0または0に変更されます。

私の問題は、最初の値(B2)が1になると仮定していることです。B2 = 0の場合はRow 2の値を返すことをお勧めします。

初期化されたCRowを1に変更しようとしましたが、これは1または2であるかどうかにかかわらず2行目を返します(ヘッダーと異なるためです)。

誰かが私を助けてくれますか?

答えて

1

あなたの考えたようにCRowを1に変更してください。あなたがそのセルにいない場合は、B2をテストすることはできません。次に、IFステートメントを実行するだけです。

Sub CopyData() 

    Application.ScreenUpdating = False 

    Dim CRow As Integer 
    Dim CColBRange As String 
    Dim PColBRange As String 
    Dim Continue As Boolean 

    'Select Sheet1 
    Sheets("KG9New").Select 

    'Initialize variables 
    Continue = True 
    CRow = 1 

    While Continue = True 

     CRow = CRow + 1 

     'Test B2: 
     If CRow=2 and Cells(CRow, 2).value = 0 Then 
      CRow = 3 
     End if 

     CColBRange = "B" & CStr(CRow) 
     PColBRange = "B" & CStr(CRow - 1) 


     'Break loop upon finding blank cell. 
     If Len(Range(CColBRange).Value) = 0 Then 
     Continue = False 
     End If 

     'Copy first instance of each changing Value in MachineRunning. 
     If Range(CColBRange).Value <> Range(PColBRange).Value Then 
     Range("A" & CStr(CRow) & ":C" & CStr(CRow)).Copy 
     Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues 
     End If 

    Wend 

    Application.ScreenUpdating = True 

End Sub 

追加If文はちょうど私たちが行2上にあり、それがある場合は、その値が0である場合、その後、3からCRowを変更し、それが継続するかどうかを確認するためにテストします。

また、余分なWithブロックを削除しました。私はそのフォーマットが使われていたマクロの他の場所を見ることができませんでした。

+0

ありがとう@JNevill。それはまさに私が必要とした助けです。自分のニーズに合ったわずかな変更でオリジナルの質問にコードを追加しました。 – Jamsandwich

関連する問題