『別シートの数値を日付が変わるごとに自動更新したい』(てっちゃん) 初めまして。 こんばんは、すみません、Excelの初心者なのですが、 数式もしくはVBAになるかと思いますが、教えていただけますと 幸いです。 AシートとBシートがあり BシートのA1に日付、A2に個数、B3に売上が入っているとします。 このシートは毎日更新し、入力する場所は固定になっているのですが、 Aシートの日付ごとにBシートの数値を自動更新したいと考えております。 (Bシートに日付、個数、売上が入れば自動で、Aシートに 更新される) この場合、どのような数式を使うべきでしょうか? ちなみに、Aシートは A1に日付B1に次の日の日付・・・という感じで、 列ごとに日付がすでに入っており、 Bシートの日付が変われば列が右に更新していく感じです。 わかりにくくてすみません・・・ 例)BシートのA1 2021/9/18 A2 46,986 A3 \36,049,187 AシートのA1 2021/9/18←ここにはすでに日付が列ごとに入力されています。        A2 BシートのA2の数字が自動で入る       A3 BシートのA3の数字が自動で入る まったくのエクセルは素人なためよろしくお願い致します。 また、わかりずらくてすみません。 < 使用 Excel:Excel2010、使用 OS:Windows10 > ---- Bシートは1行目しか入力しないという理解で正しいですか? 入力ごとにB1の日付が書き換わりAシートに移動したいということなら マクロになります。 そうではなく、Bシートも1行ごとに追記していくのだ、ということなら vlookupで対処可能と思います。 (*) 2021/09/28(火) 09:29 ---- ありがとうございます。bシートは、一行目のみの入力となります。 入力ごとにB1の日付が書き換わりAシートに移動したいと思っております。 よろしければマクロのやり方を教えていただけますと助かります。 (てっちゃん) 2021/09/28(火) 10:01 ---- マクロのやり方、というのがVBAの使い方からだという認識で一旦書きます。 https://www.excelspeedup.com/vbapuroguramusaisyo/ 上記URLを参考にまずはVBAを使用できる状態にしてください。 その上で質問ですが、日付を入力した瞬間に自動で転記したいのですか? この場合、BシートのA2,A3は先に入力してA1の日付は最後に入力という形にしないといけなくなります。 それでもよろしければ、以下の記事の「ちょっと応用」以下にほとんど答えが載っています。 https://daitaideit.com/vba-sheet-event-change/ ただし、うっかりA2,A3の更新を忘れていても転記されてしまうので注意してください。 (*) 2021/09/28(火) 10:39 ---- ありがとうございます。 日付を入力した瞬間で大丈夫です。 確認致します。 とても助かりました。 (てっちゃん) 2021/09/28(火) 10:47 ---- 私は、イベントプロシージャは避けた方がよいと思います。 ご指摘のように、項目ごとの入力の順序によりますし、 色々な副作用に神経を使う必要があります。 (例えば、取消や修正等ですね。) イベントプロシージャは経験がある程度必要です。 私のお薦めは、シートを分けずに直接書き込むことですが、 どうしても、ということであれば、  ・マクロをボタンに登録したうえで、  ・必要な時に、ボタンを意識して押す ことで転記するのが確実だと思います。 <> A列 B C 1 日付 個数 売上 2 2021/9/28 10 50000 <> A列 B C 1 日付 個数 売上 2 2021/9/25 1 3000 3 2021/9/26 1 5000 4 2021/9/27 2 30000 5 2021/9/28 10 50000 ←ここに転記したい 6 2021/9/29 Sub test() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim r Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") r = Application.Match(ws1.Range("A2"), ws2.Columns(1), 0) If Not IsError(r) Then ws2.Cells(r, 2) = ws1.Range("B2") ws2.Cells(r, 3) = ws1.Range("C2") Else MsgBox "日付がみつかりません" End If End Sub 書き込もうとするところが既に記入済であれば、 警告を出すとかも必要かもしれません。(日付を間違っていたとか) いったん入力したものを消してしまうと再現できませんから。 (γ) 2021/09/28(火) 10:58 ---- ありがとうございます!ちょっと挑戦してみます。 本当に助かりました。ありがとうございます。 (てっちゃん) 2021/09/28(火) 18:18 ---- こんにちは。 何度も大変申し訳ございません。 昨日はありがとうございました。 昨日いただいた、下記の分ですが、 <> A列 B C 1 日付 個数 売上 2 2021/9/28 10 50000 <> A列 B C 1 日付 個数 売上 2 2021/9/25 1 3000 3 2021/9/26 1 5000 4 2021/9/27 2 30000 5 2021/9/28 10 50000 ←ここに転記したい 6 2021/9/29 Sub test() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim r Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") r = Application.Match(ws1.Range("A2"), ws2.Columns(1), 0) If Not IsError(r) Then ws2.Cells(r, 2) = ws1.Range("B2") ws2.Cells(r, 3) = ws1.Range("C2") Else MsgBox "日付がみつかりません" End If End Sub こちらを、下記のようにするにはどのようにすればよろしいでしょうか? <> A列 B 1 日付 2021/9/28 2 個数    10 3 売上 50000 <>            ↓ここに転記したい  A列 B 1 日付 2021/9/27 2021/9/28 2 個数 5 10 3  売上 25000    5000 何度も大変申し訳ございません。 よろしくお願い致します。 (てっちゃん) 2021/09/29(水) 13:17 ---- こうですか? Sub test() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim c Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") c = Application.Match(ws1.Range("B1"), ws2.Rows(1), 0) If Not IsError(c) Then ws2.Cells(2, c) = ws1.Range("B2") ws2.Cells(3, c) = ws1.Range("B3") Else MsgBox "日付がみつかりません" End If End Sub (正直申し上げると、これくらいはご自分でトライしてもらいたいですね) 参考までに申し上げると、私の提示したようなフォーマットのほうが 一般的ではないですかね。 データベース関連でも、 ・項目は各列に配置して、 ・ひつひとつのデータは行にして、 行が増える方向にデータを追加していく というのが一般的でしょう。 (γ) 2021/09/29(水) 13:47 ---- すみません。ありがとうございました。 助かりました!ご迷惑をおかけいたしました。 (てっちゃん) 2021/09/29(水) 14:11