0

IF ステートメントを使用してデータを抽出し、データ行をスキャンするコードを作成しようとしています。データがある場合は、それとすべての関連データをコピーします。何もしない場合。

私の現在の計画はこれです

  1. セル X にデータがある場合、そのデータとすべての関連データを、最新のエントリの後にマスター シートにコピーします。次に、次の行に移動して同じことを行います。
  2. コードを作成して、マクロ全体を一定量の列でオフセットします (抽出しているデータが月単位であるため、Quarters 列ではこれが難しくなります)
  3. 最初のワークシート タブではないマスター シート タブの後のすべてのタブからデータを取得するマクロを作成します。

これが私のエクセルファイルです。stackoverflow にアップロードする場所があるかどうかはわかりませんが、ここでは送信スペースにあります。これは、私がデータを取得する正確な形式です。これは、60 以上のデータ タブを含む、はるかに大きな作業ファイルの一部です。 http://www.sendspace.com/file/3irz5n

これまでのところ、動作しない私のコードは次のとおりです。私はいくつかの構文が間違っていると思います。

編集:いくつかの問題を修正しました。この 1 つの問題を除いて、コードは正常に実行されます。

これが私の現在のコードです。ソース データの空白セルに問題があります。空白のセルがあると、何もコピーされず、マスター シートのデータがオフセットされます。たとえば、列 A1 のデータが 200 の場合、A2 は 300 です。B2 にあるはずのデータは B1 に移動します。B1 は空白だったからです。問題のコードは「セルをマスターシートにコピー」で始まります

Sub Test()

Dim imaxrow As Double
Dim ws As Worksheet

For Each ws In Worksheets
    'Need to find a way to take data from sheets AFTER macro test sheet
    If ws.Name <> "Macro Test Sheet" Then
    'Rows of data to be extracted
    imaxrow = 22 'Max rows
    'Use to offset columns to next dataset
        For Each E In Array(0, 11)
        'Starting row to copy data
        For iRow = 10 To imaxrow
            If ws.Cells(iRow, 21).Value = "" Then
                'Nothing in this cell.
                'Do nothing.
                Else
                ' Copy Cell data to mastersheet
                ws.Cells(iRow, 21 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "F").End(xlUp).Offset(1, 0)
                ws.Cells(iRow, 22 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "G").End(xlUp).Offset(1, 0)
                ws.Cells(iRow, 23 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "H").End(xlUp).Offset(1, 0)
                ws.Cells(iRow, 24 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "I").End(xlUp).Offset(1, 0)
                ws.Cells(iRow, 4).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "C").End(xlUp).Offset(1, 0)
                ws.Cells(iRow, 3).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
                ws.Cells(5, 1).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
                ws.Cells(6, 21 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "D").End(xlUp).Offset(1, 0)
                ws.Cells(7, 21 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "E").End(xlUp).Offset(1, 0)
            End If
        Next iRow
        Next E
     End If
    Next ws

End Sub

ヘルプとヒントをありがとうございました。

4

1 に答える 1

0

「構文が間違っていると思います」は役に立ちません。受け取ったエラー メッセージと、このエラーが参照している行をお知らせください。

しかし、これはおそらく間違っています:

WS.Range(.Cells(10, 7))

.Cells(10, 7)たまたまセルアドレスが含まれていない限り。

さらにサポートが必要な場合は、特定の質問をする必要があります。

追加した

If Cells(10, 7) = "" Then

これは「マクロ テスト シート」を参照する必要があるため、ドットを前に付ける必要があります。それ以外の場合は、現在のアクティブ シートを参照します。

于 2013-07-21T10:43:08.580 に答える