2017-05-16 17 views
3

トランザクションのリストで未処理のデータを取得するレポートを作成する必要があります。 C列のポートフォリオ名を基にしたそれぞれのシート1つのセル値に基づいて行をコピーし、別のセル値を参照して新しいシートに貼り付けます。

私はこれを行うように指示しましたが、今はノキア - キャッシュの下に貼り付けるために、下の参照シートから '現金'

Raw Data Workbook UPDATED

Reference Sheet

誰かが私のコードの2番目の部分を構築して、C = NokiaとJ = Semi PaidをNokia Cashに移行するのに役立つことができますか?

+0

シート21はブックブックの一部ですか? – 0m3r

+1

そして、「オフィス用品」というカテゴリーを「オフィス」とだけ変えて、コード内のものをハードコードすることなく、目的のシート名をカードとカテゴリーで判別できるようにすることは可能ですか? – YowE3K

+0

"Master Card - Office"というシートは同じ理由で "Mastercard - Office"という名前に変更できますか? – YowE3K

答えて

0

これは私が答えた前の質問に似ています。

シートの作成と名前付けに心配する必要はありません。コードはそれを処理します。また、リファレンスシートに記載されていない項目はスキップします。

それはあなたのリファレンスシートに項目と記述項目と一致し、その後、関連するシートに名前を付けるためにマッチしたアイテムのカテゴリ名カード名をconcats。このシートが存在しない場合は、行データを作成して渡します。それ以外の場合は単純に行データを渡します。

Sub MyClients() 
Dim lastrow As Long, lastcol As Long, matchrow As Long, i As Long, j As Long 
Dim wsname As String 
lastrow = Worksheets("Raw").Cells(Worksheets("Raw").Rows.Count, 1).End(xlUp).Row 
lastcol = Worksheets("Raw").Cells(1, Worksheets("Raw").Columns.Count).End(xlToLeft).Column 

Application.ScreenUpdating = False 
For i = 2 To lastrow 
    On Error Resume Next 
    matchrow = Application.WorksheetFunction.Match(Worksheets("Raw").Cells(i, 10).Value, Worksheets("Reference").Range("A:A"), 0) 
    If Err.Number = 1004 Then 
     MsgBox "Couldn't find item: '" & Worksheets("Raw").Cells(i, 10).Value & "' within reference sheet. Skipping row no: " & i 
     GoTo skip: 
    End If 
    wsname = Worksheets("Raw").Cells(i, 3).Value & " - " & Worksheets("Reference").Cells(matchrow, 2).Value 
    On Error Resume Next 
    Worksheets(wsname).Cells(Worksheets(wsname).Rows.Count, 1).End(xlUp).Offset(1, 0) = Worksheets("Raw").Cells(i, 1).Value 
    For j = 1 To lastcol - 1 
     Worksheets(wsname).Cells(Worksheets(wsname).Rows.Count, 1).End(xlUp).Offset(0, j) = Worksheets("Raw").Cells(i, j).Value 
    Next j 
    If Err.Number = 9 Then 
     Sheets.Add(After:=Sheets(Sheets.Count)).Name = wsname 
     For j = 1 To lastcol 
      Worksheets(wsname).Cells(1, j) = Worksheets("Raw").Cells(1, j).Value 
     Next j 
     Worksheets(wsname).Cells(Worksheets(wsname).Rows.Count, 1).End(xlUp).Offset(1, 0) = Worksheets("Raw").Cells(i, 1).Value 
     For j = 1 To lastcol - 1 
      Worksheets(wsname).Cells(Worksheets(wsname).Rows.Count, 1).End(xlUp).Offset(0, j) = Worksheets("Raw").Cells(i, j).Value 
     Next j 
    End If 
skip: 
Next i 
Worksheets("Raw").Activate 
Application.ScreenUpdating = True 
End Sub 
+0

こんにちは!これは完全に機能しました。悲しいことに、コードは私が編集するには強すぎます。私が以前に与えたシートの詳細は、ほんの一例であり、要件ごとにコードを修正できると思ったが、できなかった。 実際のワークブックと一致するようにコードを編集してもらえますか? 私のワークブックを反映するためにオリジナルの投稿を編集しました –

+0

列EとIの間のデータは何ですか、それらもコピーする必要がありますか?列Jの後のデータは何ですか?それも必要ですか? – Tehscript

+0

私は実際に列Jを表示するためにそれらを非表示にします。私はその行のすべてのデータをコピーする必要があります。 –

関連する問題