質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

771閲覧

VBAで一覧を複数条件をループし、条件に合った行末にOKと出力したい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/08/06 07:35

編集2020/08/07 01:59

前提・実現したいこと

VBAを勉強中なのですが、数日たっても思ったものが作れず質問させてください。
下記のようなファイルがあります。
シート1(スケジュール一覧)
A列:スケジュール名 
B列:周期(日次、月次と記載)
C列:周期の詳細(実行日を記載(営業日と毎月1日などの指定日)) ex第1営業日、毎月1日など

スケジュール名周期詳細判定
1Schedule1月次第1営業日
2Schedule2月次毎月1日
3Schedule3日次1:00
2Schedule4月次毎月5日
1Schedule5月次第3営業日

シート2(営業日カレンダー)
A列:1年分の日付(mm/dd)
B列:営業日 exdai1営業日など
C列:日付 ex毎月1日など

日付営業日
2020/8/1休み毎月1日
2020/8/2休み毎月2日
2020/8/3第1営業日毎月3日
2020/8/4第2営業日毎月4日

例えば8月3日~8月4日という期間で検索を行います。
その期間に該当するスケジュールがあった場合、D列の行にOKと返したいです。
毎時や日次は必然的に該当するため「OK」と返し、月次の場合は日付の意味合いによって
シート2を検索する必要があるのですが条件を作ることができません。

ジョブ一覧の行数は都度変わる想定です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

3日間の成果を示してください。

例えば8月3日~8月4日という期間で検索を行います。該当する場合、D列の行にOKと返したいです。
月次の場合は日付の意味合いによってシート2を検索する必要がある

少し意味がわかりません・・。月次じゃない場合はシート1で完結できるのですか?
表でサンプルをお示しください。

なんとなくですが、mm/ddではなく、yyyy/mm/ddというデータにしないと日付型として
範囲指定が難しいような気がします。

下記はサンプルです。

日付判定
2020/1/1
2020/1/2
2020/1/3
2020/1/4
2020/1/5
2020/1/6
2020/1/7
2020/1/8
2020/1/9
2020/1/10

VBA

1Sub test() 2Dim myday As Date 3Dim maxrow As Double 4 5maxrow = Range("A1").End(xlDown).Row 6 7For i = 2 To maxrow 8 9 myday = Range("A" & i).Value 10 11 If DateValue("2020/1/4") <= myday And myday <= DateValue("2020/1/7") Then 12 13 Range("B" & i).Value = "●" 14 End If 15 16Next 17 18End Sub

投稿2020/08/06 10:11

編集2020/08/06 10:52
mako1972

総合スコア383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/07 01:59

表のサンプルを記載しました。 質問も不慣れでお見苦しく申し訳ありません。 検索期間は日のみで時間は見ていないので、月次以外はシート1で判断できる想定です。 なのでシート1のみで月次かそれ以外かの判定はできました。 下記状態から月次の何日目、何営業日を取得するループを追加するのはわかるのですが、どのように書き足せば実現できるのか悩んでいます。 Set ws1 = ThisWorkbook.Worksheets("スケジュール一覧") Set ws2 = ThisWorkbook.Worksheets("営業日カレンダー)") i = 2 With ws1 Do Until .Cells(i, 1).Value = "" If Not .Cells(i, 2).Value = "月次" Then .Cells(i, 4) = "OK" End If i = i + 1 Loop End With
退会済みユーザー

退会済みユーザー

2020/08/07 03:23

プログラミング自体経験がないので質問の仕方も不慣れです。 不快にさせたなら申し訳ありませんでした。 回答をくださったこと感謝いたします。
mako1972

2020/08/07 06:05 編集

質問修正すればするほど、迷走して何を言いたいのかわからいことに気づいていないみたいですね。 月次って毎月あるわけで。シート1(スケジュール一覧)に西暦月くらいないとダメなんでは。
mako1972

2020/08/08 10:14 編集

ご自身は、質問の内容修正して、どうだ的な感じなのでしょうけど・・。 せめてレスつくといいんだけどな・・。 という問題提起だけ(再度:レスありますように)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問