2016-05-10 18 views
0

(vba参照)問題でいくつかの問題があります。セルの値に基づいて、対象シートの行をセルの値に基づいてコピーします。

私はそれぞれ、別々のシートに固有の請求書番号をコピーした異なる請求書のデータの複数の行を有するシート(シート3)(データの各行は、それが関係する請求書番号を含む)Data sheet

を持ち請求書はそれ自身のシートを持ち、請求書番号はセルB1にあります。 invoice sheet

私がしたいのは、データシートのすべての行を、一致する請求書番号のシートにコピーすることです。

私の現在のコードは、これは私の別々の請求書ページリンクで、Vbaを使用してそれらを作成するのではなく、さまざまな他の書式設定やFormulrsがページ上にありますので、

Private Sub CommandButton1_Click() 
    Dim s1 As Worksheet, s2 As Worksheet 
    Set s1 = Sheets("sheet3") 
    Set s2 = Sheets("Bill Date") 
    s1.Range("F:G").Copy s2.Range("A:B") 
    s2.Range("A:B").RemoveDuplicates Columns:=1, Header:=xlNo 
    End Sub 

あなたの助けが理解されるであろう

おかげ

あなたのVBAマクロで
+3

(http://stackoverflow.com/help/how-to-askを)[依頼する方法]を参照してください。 – findwindow

+2

この特定の質問は、このサイトや他の多くのサイトで何度も答えられています。 Googleにあなたのタイトルを置くだけで、それらの多くが戻ってきました。 –

答えて

1

は、forループの中に次の操作を行います。

Sub copyData() 
    Dim invNo As String 
    Dim lastRow As Integer 
    Dim sourceSht As Worksheet 
    Dim targSht As Worksheet 

    Set sourceSht = Worksheets("Sheet3") 

    'evaluates every data item from row 2 to last populated row 
    For Row = 2 To sourceSht.Cells(sourceSht.Rows.Count, 1).End(xlUp).Row 

     invNo = sourceSht.Range("F" & Row).Value 

     'if invNo blank, skip 
     If invNo <> "" Then 
      'try to find the sheet, make if does not exist 
      invNo = invNo & "_INV" 
      On Error Resume Next 
      Set targSht = Worksheets(invNo) 
      If targSht Is Nothing Then 
       Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = invNo 
       Set targSht = Worksheets(invNo) 
       'SetHeader 
      End If 

      'find first empty row in targSht 
      lastRow = targSht.Cells(targSht.Rows.Count, 1).End(xlUp).Row + 1 

      'copy row of data 
      sourceSht.Range("A" & Row & ":L" & Row).Copy 
      targSht.Range("A" & lastRow & ":L" & lastRow).Select 
      targSht.Paste 

      'must do to make more sheets 
      Set targSht = Nothing 
     End If 
    Next 
End Sub 

は、私は賛成であなた仕様の一部を変更しましたより簡単なアプローチ。私はあなたが私に示した12のコラムは、あなたが持っているものすべてであると仮定しました。純粋に数値のシート名でエラーが発生する可能性があるため、請求書シートの最後に「_INV」を追加しました。私はまた、データの行を新しいシートにそのまま貼り付けています。現在のヘッダーを保持している場合は、順序を変更する必要があります。 targShtヘッダーの変更を検討して簡単にすることができます。 SetHeaderは、targShtのヘッダー行を設定するコードブロックのプレースホルダーです。これで問題が解決された場合は、正しく記入してください。 (請求書のヘッダーなし)

デモ: Before Run After Run

+0

これまでのご協力ありがとうございます!上記の画像とコードをいくつか追加しました。 あなたが見ることができるように、データシート内のすべての請求書番号は列Fにあります。これは、請求書ページIDのB1と同じ行IDをコピーし、行2から始まる請求書ページに貼り付けるこれらのシートに既に存在するデータを削除しないようにしてください)。 – Fcarboni

+0

追加情報を提供できる場合、私はあなたに良い答えを得ることができます。私はあなたが探しているものを予期しようとするために編集を行います。 –

+0

まず、請求書名の形式は何ですか?私は今、 "Bill Date"はプレースホルダであり、あなたのシート名は請求書番号であると仮定しています。 –

関連する問題