データをコピーして別のブックに貼り付けるマクロを作成する

データをコピーして別のブックに貼り付けるマクロを作成する

ワークブックが 2 つあります。1 つは電子メールで送信されたもので、日付 (11/01/10 から 11/30/10) が入力された列を含むグラフがあります。その日のグラフには 1 行のデータが入力されています。

2 番目のワークブックには、日付が入力された列があるグラフがあります。私が助けを求めているのは、ワークブック 2 の日付を調べて、その日付をメールで送信されたワークブック 1 と照合し、ワークブック 1 からデータの行をコピーして、同じ日付のワークブック 2 の行に貼り付けるマクロの作成です。マクロを作成したことがないので、どんな助けでも大歓迎です。

答え1

この場合、マクロよりも数式の方が簡単だと思いますVLOOKUP。列に数式を入力した後、COPY & PASTE.Values を実行して数式を削除します。

VLOOKUP の例で編集: ワークブック内の日付を、メールで送信されたワークブック内の日付と同じ表にする必要があります。状況に合わせて以下を調整してください。

A1 = 電子メールで値を取得するテーブルの検索値 (日付など)
[Example.xlsx] = 電子メールで送信したワークブックの名前
Sheet1! = データ テーブル
$A$1:$B$30 を含む電子メールで送信したワークブック内のスプレッドシートの名前 = 電子メールで送信したワークブック内のデータの完全な範囲
2 = 戻り値を取得するデータ範囲の列 (A と B の列 2)
FALSE = 電子メール データの検索値と完全に一致する値を取得したい

=VLOOKUP(A1,[Example.xlsx]Sheet1!$A$1:$B$30,2,FALSE)

ただし、シンプルにするために、データを受信するためのテンプレートとして 1 つのワークブックを保持することに抵抗がない場合は、次の方法で問題ありません。テンプレート ワークブックのモジュールに配置して保存するだけです。新しいメールを受信したら、テンプレートを開き、メール ワークブックを開いて、メール ワークブックからマクロをアクティブ化します。

コード内の仮定:
1: 電子メールで送信されたワークブックでは、データはセル A1 から始まります。
2: マクロ/テンプレート ワークブックでは、データはセル A1 から始まります。
これらの仮定のいずれかが正しくない場合は、L1 および/または Cells オブジェクトの開始値を調整します (最初の値 L1 は行で、2 番目の数値は列です。A = 1)

Sub CopyData()
    Dim All As New Collection
    Dim One As Variant, L1 As Integer, L2 As Integer
    Dim TW As Workbook, EW As Workbook

    Set TW = ThisWorkbook
    Set EW = ActiveWorkbook

    L1 = 15
    Do Until Cells(L1, 2).Value = ""
        ReDim One(0 To 1)
        One(0) = Cells(L1, 2).Value
        One(1) = Cells(L1, 3).Value
        All.Add One
        Erase One
        L1 = L1 + 1
    Loop

    TW.Activate
    L1 = 15
    Do Until Cells(L1, 2).Value = ""
        For L2 = 1 To All.Count
            One = All(L2)
            If One(0) = Cells(L1, 2).Value Then
                Cells(L1, 3).Value = One(1)
                Erase One
                Exit For
            Else
                Erase One
            End If
        Next L2
        L1 = L1 + 1
    Loop
End Sub

関連情報