2017-01-12 11 views
0

レポートをフォーマットし、重要な値をブランクシートにコピーしようとしています。マスター参照リストに基づいて1つのシートから別のシートにコンテンツをコピーするVBA

重要な情報を判断するために参照のマスターリストを使用しています。各項目のユニークな参照は、B列の「マスターリスト」というシートに保存されています。このリストをスキャンし、「生データ」シートで一致するものが見つかるかどうかを確認し、 "レポート"シート。

私が試したのは最初の書式設定で問題はありませんが、最初のWhileコマンドにヒットしたときに失敗します。私はこれを行うためのいくつかの異なる方法を試してきました、そして、私はそれを動作させるように見えません。レイア姫の言葉では、あなたが事前に

Dim RD As Worksheet, Report As Worksheet, Masterlist As Worksheet 
Dim LSearchRow As Integer 
Dim LCopytoRow As Integer 
Dim rngFound As Range 
Dim SearchItem As String 


Set RD = Sheets("Raw Data") 
Set Report = Sheets("Report") 
Set Masterlist = Sheets("Master List") 


LCopytoRow = 1 
LSearchRow = 1 

RD.Select 
    Columns("A:A").Select 
    Selection.Delete Shift:=xlToLeft 

    Columns("B:D").Select 
    Selection.Delete Shift:=xlToLeft 

    Columns("D:Q").Select 
    Selection.Delete Shift:=xlToLeft 

    Columns("E:I").Select 
    Selection.Delete Shift:=xlToLeft 

    Columns("C:C").Select 
    Selection.ClearContents 


While Len(Range("A" * CStr(LSearchRow)).Value) > 0 
    SearchItem = Masterlist.Range("B" & k).End(xlUp).Row 
    If Range("A" & CStr(LSearchRow)).Value = Masterlist.Range("B" & CStr(LSearchRow)).Value Then 
     Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select 
     Selection.Cut 

     Report.Select 
     Rows(CStr(LCopytoRow) & ":" & CStr(LCopytoRow)).Select 
     ActiveSheet.Paste 

     LCopytoRow = LCopytoRow + 1 

     RD.Select 
    End If 

    LSearchRow = LSearchRow + 1 

Wend 

おかげで私の唯一の希望だスタックオーバーフロー私を助けて!

+0

それは 'MasterList.Range(「B」&K)'で見ているので、あなたは 'K 'を定義したことがないためです'k' =' 0'で、セルB0が存在しないのでエラーが発生しています。 – tigeravatar

+0

ああ、もともと私はそれを定義していましたが、構造化された方法を変えました!私は今それを変更し、それが役立つかどうかを見ます!ありがとうございました! – Chris

+0

しかし 'SearchItem'は意味がありません。(' Masterlist.Rows.Count'で 'k 'を置き換えると、常に同じSearchitemで終わるでしょうが、それは問題ではありませんもう一度 'SearchItem'を参照していないので、単にその行を削除してしまいます。 – tigeravatar

答えて

0

サンプルデータなしでテストするのは難しいが、このような何かがあなたのために働く必要があります。

Sub tgr() 

    Dim wb As Workbook 
    Dim wsMstr As Worksheet 
    Dim wsData As Worksheet 
    Dim wsRprt As Worksheet 
    Dim aMasterFilter As Variant 

    Set wb = ActiveWorkbook 
    Set wsMstr = wb.Sheets("Master List") 
    Set wsData = wb.Sheets("Raw Data") 
    Set wsRprt = wb.Sheets("Report") 

    wsData.Range("A:A,C:E,H:U,W:AA").EntireColumn.Delete xlToLeft 
    wsData.Columns("C").EntireColumn.ClearContents 
    wsData.AutoFilterMode = False 

    aMasterFilter = Application.Transpose(wsMstr.Range("B1", wsMstr.Cells(wsMstr.Rows.Count, "B").End(xlUp)).Value) 
    With wsData.Range("A1", wsData.Cells(wsData.Rows.Count, "A").End(xlUp)) 
     .AutoFilter 1, aMasterFilter, xlFilterValues 
     .EntireRow.Copy wsRprt.Range("A1") 
     .EntireRow.Delete xlShiftUp 
     .Parent.AutoFilterMode = False 
    End With 

End Sub 
+0

完了!ありがとうございました!私が認めたいと思う以上に長い時間を費やしてしまった、私の頭の中のロジックループに詰まってしまった – Chris

関連する問題