
私は Excel 2007 を使用しています。シート 1 のセル A1 に日付が表示され、セル B1 に金額が表示される Excel ファイルがあります。シート 2 のデータベースで、A1 の日付と B1 の金額を自動的に更新する必要があります。シート 2 のデータベースは、A1 の日付を検索値として選択して Vlookup を使用し、シート 1 のセル A1 と B1 にリンクされています。Excel ファイルは毎日使用され、セル A1 と B1 の内容は毎日変わります。シート 2 では、セル A1 と B1 の 1 年間のすべての日付と金額を記録する必要があります。
問題:
1. A1 の日付は毎日入力されるため変化し続けるため、A1 と B1 の以前の日付と金額を毎日取得するデータベースを構築するにはどうすればよいでしょうか。
例えば :-
2015 年 3 月 14 日 (セル A1) のセル B1 の数字は 3,333 ドルです。したがって、データベースは、日付 2015 年 3 月 14 日と 3,333 ドルをデータベースのシート 2 にキャプチャします。
翌日の2015年3月15日には、セルA1の内容が2015年3月15日に変更され、B1には5,555ドルの数字が表示されます。
私の課題は、現在の日付と値のみを 1 つしか取得できないため、データベースのシート 2 に日付と値の両方をどのように保持するかということです。
正直に言うと、私は VBA を知りません。
答え1
2つのセルをコピーしたいので、これは少しだけトリッキーになります。通常、Worksheet_Change
イベントを使用してセルが変更されるたびにキャッチできます。ただし、両方のセルが変更されるまで待機する必要があります。正しい順序で変更する必要があるというルールを適用して最後のセルを監視するのではなく、C1
代わりにセルが変更されるのを待つようにこれを記述しました。私の考えでは、ユーザーは編集してA1
からB1
入力できます。何でもでC1
、コードが実行されます。データの入力規則を使用して、"実行" のようなオプションが 1 つだけあるドロップダウンを に追加できます。以下のコードは、 の値が変更されるたびに、 &の値をシート 2 の最後の行にC1
コピーし、 からその値をクリアします。A1
B1
C1
C1
VBA エディタを開きます ( Alt+F11は 1 つの方法です)。左側のプロジェクト エクスプローラー ウィンドウでシート 1 を探します (開いているすべてのワークブックとその中のワークシートを示すツリー メニューがすでに表示されているはずです)。シートをダブルクリックしてコード ウィンドウを開きます。以下のコードをコピーして貼り付けます ( Worksheets("Sheet2")
「Sheet2」がデータをコピーする 2 番目のワークシートの実際の名前でない場合は、行を編集する必要がある場合があります)。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long
If Not Intersect(Target, Range("C1")) Is Nothing Then
With Worksheets("Sheet2")
r = .Range("A" & .Rows.Count).End(xlUp).Row + 1
.Range("A" & r).Value = Range("A1").Value
.Range("B" & r).Value = Range("B1").Value
End With
Application.EnableEvents = False
Range("C1").ClearContents
Application.EnableEvents = True
End If
End Sub
(VBA に詳しい皆さんへ: 私は通常、Cells
を より使う方が好きですRange
が、すぐに理解できるものではないので を使いましたRange
。)
答え2
作業を行うためのツールを知らず、習得できない場合は、手動で行うしかありません。
次に、手動で実行する必要があった手順を書き留めます。これが、自動化する方法の概要になります。
次に、書き留めた手順を自動化する簡単な VBA マクロを作成する方法を Google で検索します。