2016-11-04 9 views
0

私は比較的VBAを初めて使っていて、ゆっくりと学習しています。文字列を検索して特定の列の別のワークシートにコピーして貼り付けます

私は私の最初のワークシート上の列Cに単語PASSを探し、その後もPASS呼ばれる二次ワークシートに行全体をコピーする非常に基本的なマクロを持っています。

A:Eからその行のデータのみをコピーして貼り付けようとしています。以下は私の現在のコードです。私は.range("A:E")を追加しようとしましたが、何もしません。

この特定の行の列A-Eの情報のみをコピーする方法については、ご了承ください。

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim C As Range 

    If Intersect(Target, Me.Range("C:C")) Is Nothing Then Exit Sub 
    For Each C In Intersect(Target, Me.Range("C:C")).Cells 
    If C.Text = "PASS" Then 
     C.EntireRow.Copy Worksheets("PASS").Cells(Rows.Count, "C").End(xlUp).Offset(1).EntireRow 
    End If 
    Next 
End Sub 
+0

あなたは範囲を参照するときに、行番号と同様に列を指定する必要があります。 'range(" A:E ")'は列を指定するだけです。 'range(" a54:e54 ")のようなものでなければなりません。 –

+0

@Scott Marcus - 効率的ではありませんが、そのような列全体を参照できます。 – SJR

答えて

0

私はあなたのコードを適応して、次のように変更しました。この

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim C As Range 

    If Intersect(Target, Me.Range("C:C")) Is Nothing Then Exit Sub 
    For Each C In Intersect(Target, Me.Range("C:C")).Cells 
    If C.Text = "PASS" Then 
     cells(C.Row,1).resize(,5).Copy Worksheets("PASS").Cells(Rows.Count, "C").End(xlUp).Offset(1).EntireRow 
    End If 
    Next 
End Sub 
+0

これは完全に機能します。どうもありがとうございます! –

1

をお試しください:

  • 変更がでた場合
  • コードに簡単に維持するために、いくつかのRangeの変数を定義しました列Cの場合、Targetセルは行を返します
  • 最後の行を取得することによりPASSシート上のターゲット行を見つける+ 1
  • E
  • Targetの列が、列Aを使用してコピーされるデータは、定義対象範囲の最初のセルを取得し、次に行いますここでは、コードです

コピー:

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim rngSource As Range 
    Dim lngTargetRow As Long 
    Dim rngTarget As Range 

    'was change in column C ? 
    If Intersect(Target, Me.Range("C:C")) Is Nothing Then 
     Exit Sub 
    End If 

    'change was in column C - was PASS entered 
    If Target.Text = "PASS" Then 
     'get row to copy to on PASS sheet 
     lngTargetRow = Worksheets("PASS").Cells(Rows.Count, "C").End(xlUp).Row + 1 
     'get source range 
     Set rngSource = Me.Range("A" & Target.Row & ":E" & Target.Row) 
     'set target range 
     Set rngTarget = Worksheets("PASS").Cells(lngTargetRow, 1) 
     'do the copy 
     rngSource.Copy Destination:=rngTarget 
    End If 

End Sub 
+0

ありがとうございます。これも動作します!私は初心者の方が理解しやすく、コードを理解して理解できるので、SJRからの最初の回答に行くつもりです。これは私のマクロのほんの一部ですので、できるだけ基本的なものにしておきたいと思います。 –

関連する問題