- ベストアンサー
エクセルマクロで日付を検索し入力する方法
- エクセル2003マクロを使用して日付を検索し入力する方法について教えてください。
- 日付の入力用フォームを作成し、マクロを使用してその日付をシート上の日付欄に自動的に入力する方法を知りたいです。
- 複数人が入力するため、簡単に行えるマクロを作成したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
不明な部分が多すぎだけど、適当に推測で作成しています。 適宜修正してください。 仮定条件 ・入力行は1行のみ ・集計用のシートの日付欄には重複がない ・入力データの日付と集計シートの日付は同じ形式の値 (Dateシリアル または 文字列など) ・集計シートに日付が存在しない場合は、最終行に追記 ・入力データはコピーしても良い(書式がコピーされる) その他、#1様の疑問など運用面での条件なども不明ですが参考までに。 Sub test() Dim stS As Worksheet, stD As Worksheet, dt Dim rw As Long, r As Long, r0 As Long, rg As String Const stsorce = "Sheet1" '←入力データのあるシート名" Const stdest = "Sheet2" '←集計用シートのシート名 Const rng = "A2:E2" '←入力データの範囲1行(一番左が日付) Set stS = Worksheets(stsorce) Set stD = Worksheets(stdest) rg = Range(rng).Rows(1).Address dt = stS.Range(rg).Cells(1, 1).Value If dt <> "" Then rw = stD.Cells(Rows.Count, 1).End(xlUp).Row r0 = 0 For r = 1 To rw If stD.Cells(r, 1).Value = dt Then r0 = r: Exit For Next r If r0 = 0 Then r0 = rw + 1 rw = stS.Range(rg).Row stS.Range(rg).Copy stD.Range(rg).Offset(r0 - rw) End If End Sub
その他の回答 (1)
- mt2008
- ベストアンサー率52% (885/1701)
「別シートに入力用フォームを作成し、飛ばしています」と、言うのがどのような状態なのか良く判りませんが、要するに複数名が入力するのですよね? 同じ日のデータを複数回入力された場合、どうしたいのですか? 値を加算?上書き?
補足
別シートの入力フォームと言うのは、別のシートに入力しやすいようにスピンボタンを作って数字を入力し、そのデータをこのシートにコピーしています。分かり難い文章ですいません。また、同じ日にデータが複数回入力された場合は、上書きを考えています。よろしくお願いします。
お礼
その後、回答いただきました内容を試行錯誤の上、一部変更して、何とか希望の形にすることが出来ました。ありがとうございました。
補足
丁寧な回答をいただき、ありがとうございました。さっそく入力を行ったところスムーズな入力が出来、感動しました。 しかし、再度見直したところ、初めの私の質問に不備があり、運用として以下のように出来ればと思います。 A B C D E 1 日付 商品A 商品B 商品C 商品D 2 5/26 5 1 ←その日のデータ(毎日変わる) 3 5/26 6 3 ←上と同日で入力する商品が違う。 入力ボタンを作成し、それを押すことにより ↓ 6 5/1 7 ・ 8 ・ 9 5/26 5 6 1 3 10 ・ ↑日付が予め入力された表 と言う感じで、例えばAさんが始めに商品Aと商品Cを入力し、それが、入力ボタンで上記例の9行目に反映され、 その後Bさんが商品Bと商品Dを入力しても、初めにAさんが入力したデータは消えずに、集計用の表の同じ日に収まる と言う感じに出来ればと思います。fujillinさんの仮定条件の「入力行は1行のみ」と言う部分のみ変える方法は、 どのように行ったらよいでしょうか。よろしければ教えてください。