[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別シートの数値を日付が変わるごとに自動更新したい』(てっちゃん)
初めまして。
こんばんは、すみません、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
よろしければマクロのやり方を教えていただけますと助かります。
(てっちゃん) 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
私は、イベントプロシージャは避けた方がよいと思います。 ご指摘のように、項目ごとの入力の順序によりますし、 色々な副作用に神経を使う必要があります。 (例えば、取消や修正等ですね。) イベントプロシージャは経験がある程度必要です。
私のお薦めは、シートを分けずに直接書き込むことですが、 どうしても、ということであれば、 ・マクロをボタンに登録したうえで、 ・必要な時に、ボタンを意識して押す ことで転記するのが確実だと思います。
<<Sheet1>>
A列 B C
1 日付 個数 売上
2 2021/9/28 10 50000
<<Sheet2>>
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
<<Sheet1>>
A列 B C
1 日付 個数 売上
2 2021/9/28 10 50000
<<Sheet2>>
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
こちらを、下記のようにするにはどのようにすればよろしいでしょうか?
<<Sheet1>>
A列 B
1 日付 2021/9/28
2 個数 10
3 売上 50000
<<Sheet2>>
↓ここに転記したい
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
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.