• ベストアンサー

エクセルで日毎のデータの蓄積

シートBにその日のデータを入力し、そのデータをシートAに蓄積していきたいです。 手作業ならば、 1.入力されたシートBのその日のデータをコピー 2.シートAの同じ日付の行を探し、値のみペースト とするのでしょうが、これを自動化したいです。 セル参照だと、毎日、同じ行にデータが上書きされていくため 無理っぽいし、マクロを使わないとできませんか? コピーとペーストはできそうですけど、「同じ日付の行を探し」というところが難しそうだなぁと思いました。。。 すみませんが、よろしくお願いします。 シートA(データ蓄積用) 日付   データ 12/1   データ1 12/2 ・ ・ 12/31 シートB(データ入力用) 日付   データ 12/2   データ2 ↑日付が変われば、同じ行にデータを上書き

noname#66230
noname#66230

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

シート名「シートB」の シート名タブを右クリックして「コードの表示」 出てきたVBE画面にコピペします。 シートB の B2セルに書き込みをするとシート名「シートA」に書き込みをします。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r, tr As Range Set tr = Target.Cells(1, 1) If tr.Address = "$B$2" Then   With Worksheets("シートA")   Set r = .Range("A:A").Find(tr.Offset(0, -1).Value, _         .Range("A65536"), xlFormulas, xlWhole)     If r Is Nothing Then       .Range("A65536").End(xlUp).Offset(1, 0).Value = tr.Offset(0, -1).Text       .Range("B65536").End(xlUp).Offset(1, 0).Value = tr.Value     Else       r.Offset(0, 1).Value = tr.Value     End If   End With End If End Sub

noname#66230
質問者

お礼

ありがとうございます。 Findを使って該当セルを探すのですね。 流れはわかりました。 もうちょっと勉強してみます。 今回は早速のご回答ありがとうございました。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

ブックを保存する前に当日のデータ(データ2)をデータ蓄積用シートに書き込むようにしました。 マクロ中のシート名は実際の名前に変更してください(質問にあるとおりのシートA、シートBとしています)。また当日分のデータが書かれているセルアドレスがB2以外であれば、これも3行目を変更してください なお、データ蓄積用シートの日付はA列、データはB列としてマクロを書きました。違うのであれば補足してください。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim RES Const Adr As String = "B2" '← 当日のデータのセルアドレス With Worksheets("シートB")  RES = Application.Match(.Range(Adr).Offset(0, -1).Value * 1, _      Worksheets("シートA").Range("A1:A10000"), 0)  If IsError(RES) Then   MsgBox ("合致する日付が見つからないため" & Chr(13) & _        "本日のデータは書き込みできません")  Else   Worksheets("シートA").Cells(RES, "B") = .Range(Adr).Value  End If End With End Sub マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラ」の「ThisWorkBookを右クリック」→「コードの表示」で表示される画面にペーストして下さい。ブック保存時に自動実行されます。

noname#66230
質問者

お礼

丁寧なご回答ありがとうございました。 No.1さんのFindに対し、Matchを使うのですね。 参考にさせていただきます。 ありがとうございました。

関連するQ&A

  • 行コピーして、今日の日付の行に貼り付けるマクロ

    こんにちは、エクセルマクロについて、助けて頂きたく質問させていただきました。 添付しました画像のような表があり、 セルA2に「=TODAY()」が入っていて、セルB2から右は別シートのデータを参照しています。 マクロを実行すると、2行目を行コピーし、セルA3以下の日付からセルA2の日付(今日の日付)を探し出して、行貼り付けしてほしいです。 行コピーや値で貼り付けはマクロの記録を使って、詳しくない私でもなんとか作ることはできるのですが、 今日の日付を探し出して、そこに貼り付ける。というマクロは作れませんでした・・・。 お助け下さい、宜しくお願いします! ※補足します セルA2の今日の日付は便宜上入力しているだけです。無い方がマクロを組みやすいのなら、無くせます。

  • エクセルのマクロについて質問です。

    エクセルのマクロについて質問です。 マクロを発動した時に、あるセルに入力してある数値を参照し、その行のX列目に数値を張り付けるものを作成しようとしています。 例えば シート「1」の A1に日付を入力 B1にある数字を入力 シート「2」の A列にA1→1~A31→31の日付が入力されている時 マクロ発動時にシート「1」A1の日付と一致する シート「2」のB列にシート「1」のB1の値を貼り付け ↑たとえばシート「1」のA1が1日でB1が500だった場合 シート「2」の1日(A1)と同じ行でB列(B1に500を 貼り付けるものです。 かなり下手な説明だと自覚しておりますが、解読できる方 どうかご教授ねがいます。

  • エクセルでデータを蓄積させるには?

    エクセルで、入力用雛形シートと、蓄積用リストシートを作ります。入力雛形にデータを入力すると、リスト画面に蓄積されるにはどうすればいいでしょうか?保存ボタンを押すと入力したデータがリストに順々に保存されていくという形にしたいのですが・・・入力雛形はリスト画面に蓄積された(保存ボタンを押した)後、クリアさせるようにもしたいです。マクロは初心者です。教えて下さい。

  • Excelセルの参照

    Excelにdataとnという2シートがあります。dataシートのA列3行目~22行目にデータが縦入力されており、以降B列、C列とデータ入力が繰り返されます。 nシートでdataシートの入力値参照のため、あらかじめdataシートの参照リンクを貼っておきたいのですが、nシートのデータは横並びであるせいか、参照リンクをうまくコピーすることができません。 dataセルのA3セルの値をnシートのD1に=data!A3と貼り付けて、W1(=data!A22)まで数式を自動コピーできないでしょうか。また、D2~W2まで=data!B3~=data!B22など参照リンクをコピーで作成できないでしょうか。 よろしくお願いいたします。 横並びに参照する必要があるのですが、

  • Excelで別sheetの参照について

    エクセルで別sheetの参照についての質問です。 画像のようにsheet1の値を参照してsheet2表示させたいのですが、これを約100件分作成したいのですがコピー&ペーストをすると参照セルがずれてしまいます。 sheet2のA1をコピーしてA4に張り付け=Sheet1!A2&Sheet1!B2&Sheet1!C2としたいのですが、A4に張り付けを行うと=Sheet1!A4&Sheet1!B4&Sheet1!C4となってしまいます。 複数行あけてペーストする場合に参照セルを1行ずつずらして参照する方法はありますでしょうか?

  • エクセルマクロ 別シートへ行列を入れ替えてコピペ

    下記内容のエクセルのマクロをご教示いただきたいと存じます。 ①「data」シートのB2からデータが入力されている最終行までをコピー(20行目までデータが入力されていたとすると、B2~B20をコピー。最終行は不定) ②「result」シートのE列のデータが入力されている最終行の次行に①のデータを行列を入れ替えてペースト(E列のデータが19行目まで入力されていたとすると、「E20」セルに①のデータ<この場合だと、「data」シートのB2~B20のデータ>を行列を入れ替えてペースト。「result」シートのE列の最終行は不定)

  • Excelの日付をコピーし、貼り付けると1日ずれます

    Excelに入っている日付データをコピーし、別のファイル、又は別のシートのセルに貼り付けると、不思議なことに、日付が1日ずれた形でコピーされてしまいます。 例えば 2005.9.22 10:00:00 と入っているセルをコピーし、貼り付けると 2005.9.23 10:00:00 と貼り付けられてしまうのです。 但し、これが同じシート内の場合は同じ日付でペーストされます。 どうやっても1日ずれてしまうので、困っています。 どうすれば同じ日付が貼り付けられるでしょうか?

  • エクセルデータの列と行を入れ替える方法をご存知の方、教えて下さい。

    エクセルデータの列と行を入れ替える方法をご存知の方、教えて下さい。 今、A列(1行目から1,000行目位まで)に日付、B~F列にそれぞれ数値のデータを入れていますが、それを1行目に日付、2~6行目に数値のデータと言うように、いわゆるタテとヨコを入れ替えたいのですが、何か良い方法は無いでしょうか。 1,000日分位のデータがあるため、手で打ち換えるのもちょっと・・・ データは日付列が1列、データ列が5列、数値のみで数式などは入っていませんし、セル結合もしていません。単純に6列×1,000行位のエクセルデータです。 また、入れ替えるのでなく別のシートに入力し直す方法でも、同じシートの未使用スペースにコピーアンドペーストする方法でも構いませんし、(エクセルが何列使えるか知りませんが)1,000列使えないようなら幾つかに分割しても構いません。 ご存知の方がおられましたらよろしくお願いします!

  • EXCEL 2007 VBAによる時系列データの更新について

    EXCEL 2007 VBAによる時系列データの更新について 当方初心者です。意外と簡単に解決できるものかは分かりませんが質問させて頂きます。 どなたかご教授頂ければと思います。 "A.xls"の"Sheet1"に 2010/10/4 6:00   100   101   100   101 2010/10/5 6:00   102   103   101   102 2010/10/6 6:00   103   104   100   103 2010/10/7 6:00   103   105   100   102 2010/10/8 6:00   103   105   100   102 2010/10/11 6:00   102   107   100   102 2010/10/12 6:00   102   106   100   103 というように毎日蓄積されたデータを1行ごとに保存してあります。 そして"B.xls"の"Sheet1"には 2010/10/8 6:00   103   105   100   102 2010/10/11 6:00   102   107   100   102 2010/10/12 6:00   102   106   100   103 2010/10/13 6:00   101   104   100   102 2010/10/14 6:00   100   102   100   100 2010/10/15 6:00   101   103   100   100 のように最新のデータが保存されてあり、このデータを蓄積してある データ("A.xls"の"Sheet1")にVBAによってコピーしたいのです。 ただしこの場合、既に保存してある期間のデータよりも以降 (上記例では両データ共にA列に日付データが入力されてあり、 2010/10/13 6:00以降)のデータを"A.xls"の"Sheet1"の 2010/10/12 6:00   102   106   100   103 の次の行からコピーしていきたいのですが、どのような方法で 可能なのでしょうか? まだ初心者ですがどなたか教えていただければと存じます。 宜しくお願い申し上げます。

  • EXCEL セル内のデータを置き換えたい

    うまく説明できないのですが、 Sheet1のA列とB列に、1つのセルに複数のデータが以下のように入っています。(データの間に「,」があります。)     A列             B列 1行 6599A,6599B,6599C  6599A 2行 6599B,6599C      3行              6599A,6599C これは商品コードでして、Sheet2に明細があります。 A列    B列 りんご  6599A メロン   6599B みかん  6599B Sheet1のデータを、「りんご」「メロン」「みかん」に置き換えたいのです。 データの数が、たくさんあるので、コピー、ペーストでは対応できません。 よい方法をお教えください。よろしくお願いいたします。

専門家に質問してみよう