添付のような表があります。(実際は100行くらいあります)
例えばAさんは1/13,14,15と滞在する予定になっていますが、
日ごとに何人が滞在しているかカウントするマクロが作りたいです。
ボタンを押すと、1/13は何人、1/14は何人、、と結果が出てくるのが理想です。
また、(これはできればなのですが)BさんのようにD列に「前泊」という文字がある人については出発日の翌日から滞在としたいです。例えばBさんは1/15~17で滞在ということになります。
マクロ初心者なのですが調べようにもなんて調べたらいいのかも分からず、得意な方がいらっしゃれば教えていただきたいですm(__)m
ボタンの作り方や変数の定義など基本的な部分はネットで調べて分かるようになりました
No.10ベストアンサー
- 回答日時:
No9です。
No9は、急いで作ったので、整理されていませんでした。
整理しなおしたものを、下記のURLにアップしました。
要件を見直すと、滞在予定表を2度スキャンする必要がなくなりましたので、
1度のスキャンで終わるようにしました。
又、エラー発生時のメッセージを、エラー箇所がわかりやすくなるようにしました。集計結果は、No9と同じ内容になります。
https://ideone.com/RKWY0C
No.8
- 回答日時:
ほぼ、状況はわかりました。
当初と仕様が変わってますので、仕様の確認から行います。1.出発日と帰宅日です。
出発日 帰宅日
記入 記入 ・・・①
未記入 記入 ・・・②
記入 未記入 ・・・③
未記入 未記入 ・・・④
当初は①のみOKで、ほかのケースはNGということでしたが、
今回②のケースもOKとなりました。
③、④のケースは、どうなりますか。OKでしょうか、NGでしょうか。
②のケースの場合の人数カウントの方法ですが、どのようにしたいのでしょうか。
集計開始日 2025/1/1
集計終了日 2025/1/5
でAさんが(Aさんのみとします)
出発日 未記入
帰宅日 2015/1/2
のとき、
日付 人数
2025/1/1 1
2025/1/2 1
2025/1/3 0
2025/1/4 0
2025/1/5 0
となれば、よいのでしょうか。(D列は前泊でも、空白でも同じ結果となる)
もし、そうでないなら、例を挙げて示してください。
③、④のケースをOKとしたい場合は、人数のカウントの方法を②のケースのように提示してください。
2.集計開始日と集計終了日です。
以下のような集計開始日~集計終了日の範囲外に出発日と帰宅日があるケースの人数のカウント方法です。
集計開始日 2025/1/1
集計終了日 2025/1/5
の時、
氏名 前泊か否か 出発日 帰宅日
A 前泊 2024/12/30 2024/12/31・・・①
B 2025/1/6 2025/1/7・・・・②
C 前泊 2025/1/4 2025/1/7・・・・③
D 2024/12/30 2025/1/1・・・・④
①のケースは、2025/1/1~2025/1/5の間、人数カウントしない。
②のケースは、2025/1/1~2025/1/5の間、人数カウントしない。
③のケースは、2025/1/1~2025/1/4の間、人数カウントしない。
2025/1/5のみ1名分カウントする。
④のケースは、2024/12/30~2024/12/31の間、人数カウントしない。
2025/1/1のみ1名分カウントする。
上記のようなカウント方法で良いでしょうか。
3.最終行数を決定する列について
現在は、B列のNoが記入されている行を最終行にしています。
これで、よいのでしょうか。
それとも、C列の氏名が記入されている行を最終行にしたいのでしょうか。
4.歯抜けのある行について
現在は、歯抜けのある行は、エラーにしています。
この仕様で問題ないでしょうか。それとも、歯抜けのある行は、スキップして処理するようにしたいのでしょうか。その場合、歯抜けのある行についての定義を再確認する必要があります。
上記について、補足をお願いします。又、上記外に仕様が変わっているとこがあれば、それも提示してください。
No.7
- 回答日時:
>実際のファイルで実行したところ、↓でエラーが発生しました
>(start_date '集計開始日)
>(end_date '集計終了日)
>(sdate '滞在者の滞在開始日)
>(edate '滞在者の滞在終了日)
>For wdate = sdate To EDate
>'集計結果の行番号を算出する
>row2 = wdate - start_date + 2
>'算出した行に1加算する
>ws2.Cells(row2, "B").Value = ws2.Cells(row2, "B").Value + 1
>考えたところ、実際のファイルには過去データが存在することが原因かなと>思いました。(滞在開始日<集計開始日の行あり)
>予め伝えずに質問したのが悪いのですが、解決するのは結構おおがかりにな>りそうでしょうか
エラー発生時の、エラーメッセージの内容を提示してください。
エラー発生時、デバッグ状態になり、マクロのどこかの行で停止しますが、
上記のどの行で停止していますか。(停止した行は黄色になります)
滞在開始日<集計開始日の行あり・・・とのことですが、
滞在開始日の最も小さい値(最も古い日付)を集計開始日
にしているので、この事象は発生しないはずですが、滞在予定シートにはどのような記入をされているのでしょうか。
No.6
- 回答日時:
No4です。
添付図のように、行の歯抜けがあると、エラーが発生します。
7行目が歯抜けの行なので、その場合、E7のセルの日付が不正な日付になります。行の歯抜けは想定していません。もし、歯抜けが存在するようでしたら、その旨、補足してください。
No.5
- 回答日時:
No4です。
「滞在予定」シートの最終行は、B列の最終行で判断しています。
B列の添付図のようになっていると、9行目が最終行と判断します。
そのため、E9のセルは、空白なので日付不正になります。
もし、このような状態であれば、以下の対策を施してください。
対策案1又は対策案2の何れかを実施すればOKです。
対策案1:
8行目が実質的な最終行なので、B列の9行目以降を空白にする。
対策案2:
C列(氏名)で最終行の判断をする。
その場合は、
lastRow = ws1.Cells(Rows.count, "B").End(xlUp).Row 'B列最終行取得
を
lastRow = ws1.Cells(Rows.count, "C").End(xlUp).Row 'C列最終行取得
に変えてください。
No.4
- 回答日時:
>↓の部分で「日付不正」と出てきてしまいます。
表の位置など変えておりません。考えられる対策はありますでしょうかこの日付不正のメッセージが表示されると、その不正なセルを選択して、マクロが止まります。
その選択されたセルの内容は、どうなっていますか?
そのセルの内容が日付としておかしい場合に、エラーが発生します。
その選択されたセルには、何が表示されていますでしょうか。
No.3
- 回答日時:
こんばんは
マクロは多分No1様が作成してくれるでしょうから、別の方法での例です。
スピル機能が使えるバージョンでの例ですが・・
添付図では、I3セルに
=MAP(H3:H99,LAMBDA(d,IF(d="","",SUMPRODUCT(((E3:E99+(D3:D99="前泊"))<=d)*(d<=F3:F99)))))
の関数式を入力してあります。
これによって、H列に任意の日付を入力すると、その日付に応じた滞在人数がI列に表示されるようになります。
※ マクロの場合は、毎回計算を実行させる必要がありますが、関数の
場合は即時に反映してくれます。
※ シート内の「日付」は全てシリアル値(=エクセルの日付型の数値)
であるものと仮定しています。
ご参考にでもなれば。
No.2
- 回答日時:
下記にアップしました。
標準モジュールに登録してください。
https://ideone.com/CR1YW2
「滞在予定」シートは提示されたレイアウト通りであることが前提です。
空の「集計結果」のシートをあらかじめ作成しておいてください。
集計結果のA列に日付、B列に人数を出力します。
「滞在予定」シートのD列は、空白か前泊となります。(前泊以外の文字があるとエラーとなります)
No.1
- 回答日時:
1.日ごとに何人が滞在しているかをどのような表に出力したいのでしょうか。
そのレイアウトを提示していただけませんでしょうか。2.日ごとに何人が滞在しているかを出力するシートと、客の滞在予定の表が、異なるシートなら、それぞれのシート名も提示してください。
3.出発日と帰宅日は、ともに日付が必ず設定されてますでしょうか。
(どちらかの日付が空欄のようなケースはない。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 倫理・人権 入管施設で死亡のウィシュマさんに関する維新議員の発言に批判……でも、この問題も語ることが必要かな? 9 2023/05/18 07:34
- その他(悩み相談・人生相談) 軽自動車税の事でお聞きします。 友人の軽自動車が車検で車検中判明したのですが 令和6年度分は収めてい 4 2024/07/12 10:19
- Visual Basic(VBA) csvファイルを列数ごとに分割するExcelマクロが書けずに困っています 8 2023/10/09 12:12
- Excel(エクセル) Excel 、この式はどのように解釈すればいいのでしょうか 4 2023/02/03 08:53
- 数学 何日で出られますか。 7 2023/04/20 13:55
- 日本語 敬語の使い方: 「おります、おりません」と「おられます、おられません」 7 2024/12/02 17:31
- ヨーロッパ 娘婿が出張でハンガリーに行きます。 1ケ月半程滞在する予定です。人並みに心配です。食べ物は日本人の好 6 2023/05/13 18:32
- 北アメリカ 初めまして 突然の質問なのですが アメリカに3ヶ月滞在する場合おいくらかかるかご存知の方はいらっしゃ 7 2024/05/12 13:33
- ヨーロッパ シェンゲン協定について、全く分かりません。質問が多くなっています。分かる範囲だけでもお願いします。 2 2023/02/08 14:27
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
ExcelVBA修正のお願い
Visual Basic(VBA)
-
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
-
4
VBA 2次元配列の出力
Visual Basic(VBA)
-
5
VBA Application.Matchについての質問です
Visual Basic(VBA)
-
6
VBAコードのインデント表示
Visual Basic(VBA)
-
7
ExcelVBAマクロで実行した時の疑問
Visual Basic(VBA)
-
8
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
9
EXCEL vbaでシート上に配置したボタンの移動については
Visual Basic(VBA)
-
10
[Excel VBA]特定の条件で文字を削除&残す処理をするファイルを作成したいです
Visual Basic(VBA)
-
11
不要項目の行削除方法について
Visual Basic(VBA)
-
12
VBA 入力箇所指定方法
Visual Basic(VBA)
-
13
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
14
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
15
VBAで特定の文字が入った行をコピーして貼り付けたい
Visual Basic(VBA)
-
16
VBAで大量のファイルをシート名ごとに転記やらいろいろしたい!
Visual Basic(VBA)
-
17
VBA 複数のエクセルから一つのエクセルに貼り付ける
Visual Basic(VBA)
-
18
Excel VBA 選択範囲の罫線色の変更プロージャの動作速度の改善について
Visual Basic(VBA)
-
19
Excel_VBAについて質疑です。(for~next)
Visual Basic(VBA)
-
20
サブフォルダに格納されているファイルを、ファイル名ごとに条件分岐させたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAから書き込んだ条件付き初期...
-
【VBA】 結合セルに複数画像と...
-
Excel VBAについて。こんな動作...
-
Excel VBA 定義されたプロージ...
-
VBAでエクセルのテキストデータ...
-
Vba SelStart、SelLen教えてく...
-
VBA 最終行の取得がうまくいか...
-
VB.net 文字列から日付型へ変更...
-
【ExcelVBA】値を変更しながら...
-
[VB.net] ボタン(Flat)のEnable...
-
VB.net(VB)で、フォームにExcel...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
Excelのマクロについて教えてく...
-
不要項目の行削除方法について
-
【マクロ】オートフィルターに...
-
Excelのマクロについて教えてく...
-
VBA 同じフォルダ内のすべての...
-
vba Windowオブジェクト(Window...
-
ExcelのVBAコードについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAについて教えて下さい
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
【ExcelVBA】5万行以上のデー...
-
VBA Application.Matchについて...
-
Excelのマクロについて教えてく...
-
Excel VBAについて。こんな動作...
-
Excelの数式について教えてくだ...
-
ExcelのVBAコードについて教え...
-
VBA 同じフォルダ内のすべての...
-
不要項目の行削除方法について
-
Vba 型が一致しません(エラー1...
-
【マクロ】オートフィルターに...
-
【VBA】 結合セルに複数画像と...
-
VBAで特定の文字が入った行をコ...
-
ExcelのVBAコードについて教え...
-
VBAでセルの書式を変えずに文字...
-
VBAのエラー表示の対処法について
-
Excelのマクロについて教えてく...
-
Excel マクロについて詳しい方...
おすすめ情報
1.レイアウトは何でもいいと思っています。列が二つあって1列目が日付(今回でいうと1/13,1/14・・・)2列目が人数という表ができあがればよいかなと思っています。
2.滞在予定の表があるシートが「滞在予定」人数をカウントするシートが「集計結果」としようと思っています。
3.必ず設定されています
よろしくお願い致します・・・!
ありがとうございます、
すみません、実際に実行してみて質問なのですが、
↓の部分で「日付不正」と出てきてしまいます。表の位置など変えておりません。考えられる対策はありますでしょうか
'出発日チェック
If IsDate(ws1.Cells(row1, "E").Value) = False Then
Call err_proc(ws1, ws1.Cells(row1, "E"), "日付不正")
End If
'帰宅日チェック
If IsDate(ws1.Cells(row1, "F").Value) = False Then
Call err_proc(ws1, ws1.Cells(row1, "F"), "日付不正")
End If
親切な回答ありがとうございます。教えていただいた内容で1つ1つ解決してます
実際のファイルで実行したところ、↓でエラーが発生しました
(start_date '集計開始日)
(end_date '集計終了日)
(sdate '滞在者の滞在開始日)
(edate '滞在者の滞在終了日)
For wdate = sdate To EDate
'集計結果の行番号を算出する
row2 = wdate - start_date + 2
'算出した行に1加算する
ws2.Cells(row2, "B").Value = ws2.Cells(row2, "B").Value + 1
考えたところ、実際のファイルには過去データが存在することが原因かなと思いました。(滞在開始日<集計開始日の行あり)
予め伝えずに質問したのが悪いのですが、解決するのは結構おおがかりになりそうでしょうか
アプリケーション定義またはオブジェクト定義のエラーです、というメッセージが出て
ws2.Cells(row2, "B").Value = ws2.Cells(row2, "B").Value + 1
ここで止まりました。
sdateに過去日付が入り、start_dateが1/13なのでrow2がマイナスの値になっていたことが気になりました。
関係あるか分からないのですが出発日が未記入の行も存在したためFor分の前にIf IsDate(sdate) Thenを追加しました(最初にsdateの型の定義をしているとIsDateがすべてTRUEになってしまうと思ったので最初のDim~みたいなのはコメントアウトしました)
すみません、連続の投稿になります。
画像のようなボタンを作って↓のように集計開始日をセットしたのが原因でした。。
start_date = ws1.Cells(1, "AG").Value
end_date = ws1.Cells(2, "AG").Value
当初基本的な動きだけ教えてもらい、あとの細かい仕様は自分で考えようと思っていたのですが
全然うまくいきませんでした。
結局また仕様の確認をしていただくことになってしまいすみませんm(__)m
1.①~④、まですべてOKになります。
>②のケースの場合の人数カウントの方法ですが、どのようにしたいのでしょうか。
→➁~④のすべてのケースの場合は処理をスキップしたいです。(前泊という文字があっても0人としてよい)
2.記載いただいたカウント方法で合っています。
3.C列の名前が入っている行を最終行にしたいです。
4.歯抜けのある行はエラーになる仕様で問題ありません。
関係ないかもしれませんが、先ほど貼った画像のようなボタンはws1に作成しました。