- ベストアンサー
エクセルでマクロを書きたい
A B C D E ・・・ 1 1 2 3 ・・・ 31 2 氏名 月 火 水 木 ・・・ 3 田中 1 1 4 中村 1 5 鈴木 1 6 ・ ・ ・ 上記のように1ヶ月ごとの顧客の来店予定日に1が入力されています。このデータを元に、日にちごとの来客予定リストを作成したいです。 来客予定リストは1週間毎にカレンダーのような形で表にしますので、抽出したリストを該当する日にちの列に書き込むのが理想ですが、まずは、日にちごとの利用者を別のシートに書き出すマクロを教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
マクロのコードを書いてくれというのは、丸投げで規約違反です。 これを認めたら、このコーナーがプログラム作成の下請け部門になってしまう。この程度のものは、自分で勉強のこと。 ーー 日付順の日付ー氏名対応行のリストがほしいらしい。 各セルを繰り返して、1かどうか聞いて、1ならSheet2の行に日付ー氏名を書き出していく。 ーー 繰り返しを終わらせるのは、行ではデータ最終行、行方向では月末最終日 それらは#1の回答に出ている。 ーー 書き出すSheet2は1行書くと、次は直ぐ下の行に書かないといけないから、行を示す変数を用意し、書き出した都度+1して置く。 例 データ Sheet1 ーー 1 2 3 氏名 月 火 水 田中 1 1 中村 1 鈴木 1 1 ーー 標準モジュールに Sub test01() d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row r = Worksheets("Sheet1").Range("IV2").End(xlToLeft).Column k = 2 'Sheet2の行ポインター For j = 2 To r For i = 3 To d If Worksheets("Sheet1").Cells(i, j) = 1 Then Worksheets("Sheet2").Cells(k, "A") = Worksheets("Sheet1").Cells(1, j) Worksheets("Sheet2").Cells(k, "B") = Worksheets("Sheet1").Cells(2, j) Worksheets("Sheet2").Cells(k, "C") = Worksheets("Sheet1").Cells(i, 1) k = k + 1 End If Next i Next j End Sub ーーー 結果 Sheet2 1 月 田中 1 月 中村 1 月 鈴木 2 火 田中 3 水 鈴木
その他の回答 (1)
- Trick--o--
- ベストアンサー率20% (413/2034)
Sub clist() r = Worksheets("Sheet1").Range("A65536").End(xlUp).Row c = Worksheets("Sheet1").Range("IV2").End(xlToLeft).Column For i = 2 To c buf = "" For j = 3 To r If Worksheets("Sheet1").Cells(j, i) = 1 Then buf = buf & Worksheets("Sheet1").Cells(j, 1) & " " End If Next j Worksheets("Sheet2").Cells(i, 3) = buf Next i End Sub -------------------------- Excel2000で作ったマクロ。動作結果は添付図参照。 Worksheets("Sheet2").Cells(i, 3) = buf が出力部分なので、配置などは調整すること。
お礼
早速の回答ありがとうございました。
お礼
丸投げだとか言いながら応用の利く気の聞いた回答をありがとうございました。