ワークブックが 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