Excel VBA 質問スレッド №1932 (未解決)
日付けが検索されない
投稿者 : セイ 投稿日時 : 2024/06/15(Sat) 06:58:21 OS : 未指定 EXCEL : 未指定
2024/4/1 16:00
のような日付けデータを検索してくれません。
何が間違えているのでしょうか。
式を修正して教えてください
Sub CalculateAndSetValue() Dim ws応募 As Worksheet Dim ws集計 As Worksheet Dim lastRow As Long Dim countインスタ4月 As Long Dim countインスタ5月 As Long Dim i As Long Dim axValue As String Dim beValue As Variant Dim beDate As Date ' シートを指定 Set ws応募 = Worksheets("応募") Set ws集計 = Worksheets("集計") ' 最終行を取得(ここではAX列の最終行を取得します) lastRow = ws応募.Cells(ws応募.Rows.Count, "AX").End(xlUp).Row ' 件数の初期化 countインスタ4月 = 0 countインスタ5月 = 0 ' 件数をカウント For i = 2 To lastRow ' 1行目はヘッダー行として2行目からループ開始 axValue = ws応募.Cells(i, "AX").Value beValue = ws応募.Cells(i, "BE").Value ' 日付の取得とフォーマット On Error Resume Next beDate = DateValue(beValue) On Error GoTo 0 ' 2024年4月の場合 If Year(beDate) = 2024 And Month(beDate) = 4 Then If InStr(axValue, "インスタ") > 0 Then countインスタ4月 = countインスタ4月 + 1 End If End If ' 2024年5月の場合 If Year(beDate) = 2024 And Month(beDate) = 5 Then If InStr(axValue, "インスタ") > 0 Then countインスタ5月 = countインスタ5月 + 1 End If End If Next i ' 件数に20000を掛けた値をシート集計のA5およびA6セルに設定 ws集計.Cells(5, 1).Value = countインスタ4月 * 20000 ws集計.Cells(6, 1).Value = countインスタ5月 * 20000 End Sub上記指示だと
2024/4/1 16:00
のような日付けデータを検索してくれません。
何が間違えているのでしょうか。
式を修正して教えてください
スポンサーリンク
[返信 1] Re : 日付けが検索されない
投稿者 : ピロリ 投稿日時 : 2024/06/15(Sat) 08:07:46
■[質問] セイさん(2024-06-15 06:58:21)の記事
> 2024/4/1 16:00
> のような日付けデータを検索してくれません。
とは、例えば、
BE2セルが 2024/4/1 16:00 にもかかわらず、If Year(beDate) = 2024 And Month(beDate) = 4 Then が
成立しないってことでしょうか? それとも、こちらは成立したのだが、
AX2セルに「インスタ」って文字列が含まれているのに、If InStr(axValue, "インスタ") > 0 Then が
成立しないってことでしょうか?
私の環境(Widows10、Excel365)では、上手く「countインスタ4月」が更新できているのですが・・・
ステップ実行して、不正動作時の各データを確認してみて下さい。
■[質問] セイさん(2024-06-15 06:58:21)の記事
> 2024/4/1 16:00
> のような日付けデータを検索してくれません。
とは、例えば、
BE2セルが 2024/4/1 16:00 にもかかわらず、If Year(beDate) = 2024 And Month(beDate) = 4 Then が
成立しないってことでしょうか? それとも、こちらは成立したのだが、
AX2セルに「インスタ」って文字列が含まれているのに、If InStr(axValue, "インスタ") > 0 Then が
成立しないってことでしょうか?
私の環境(Widows10、Excel365)では、上手く「countインスタ4月」が更新できているのですが・・・
ステップ実行して、不正動作時の各データを確認してみて下さい。
[返信 2] Re : 日付けが検索されない
投稿者 : ピロリ 投稿日時 : 2024/06/15(Sat) 08:47:32
ちなみに、On Error Resume Next は、On Error Goto にした方が良いと思います。
↓こんな感じ。(★印のところを修正)
ちなみに、On Error Resume Next は、On Error Goto にした方が良いと思います。
↓こんな感じ。(★印のところを修正)
Sub CalculateAndSetValue() ' 【前略】 ' 件数をカウント For i = 2 To lastRow ' 1行目はヘッダー行として2行目からループ開始 axValue = ws応募.Cells(i, "AX").Value beValue = ws応募.Cells(i, "BE").Value ' 日付の取得とフォーマット 'On Error Resume Next '★削除 On Error GoTo LABEL_NEXT '★追加 beDate = DateValue(beValue) 'On Error GoTo 0 '★削除 ' 【中略】 LABEL_NEXT: '★追加 Next i ' 件数に20000を掛けた値をシート集計のA5およびA6セルに設定 ws集計.Cells(5, 1).Value = countインスタ4月 * 20000 ws集計.Cells(6, 1).Value = countインスタ5月 * 20000 End Sub
[返信 3] Re : 日付けが検索されない
投稿者 : ピロリ 投稿日時 : 2024/06/15(Sat) 09:37:33
先程の[返信 2]の↓ここは、
'On Error Resume Next '★削除
On Error GoTo LABEL_NEXT '★追加
beDate = DateValue(beValue)
'On Error GoTo 0 '★削除
↓こちらでお願いします。 失礼しました。
On Error Resume Next
beDate = DateValue(beValue)
If Err.Number <> 0 Then GoTo LABEL_NEXT '★追加
On Error GoTo 0
先程の[返信 2]の↓ここは、
'On Error Resume Next '★削除
On Error GoTo LABEL_NEXT '★追加
beDate = DateValue(beValue)
'On Error GoTo 0 '★削除
↓こちらでお願いします。 失礼しました。
On Error Resume Next
beDate = DateValue(beValue)
If Err.Number <> 0 Then GoTo LABEL_NEXT '★追加
On Error GoTo 0
[返信 4] Re : 日付けが検索されない
投稿者 : てらてら 投稿日時 : 2024/06/15(Sat) 09:41:58
こんにちは。
32行目に、以下のように書いてみてください。
Debug.Print i & " " & beDate & " <-- " & beValue
beDateが初期化されないで、前の値を引きずっているのが問題だとわかります。
27行目あたりで、beDate を初期化すれば問題なのですが、日付型の初期は、
beDate = #1/1/1900#
とかになるので気持ち悪い。
そもそも日付かどうかを判断するのなら IsDate関数が順当でしょう。
こんにちは。
32行目に、以下のように書いてみてください。
Debug.Print i & " " & beDate & " <-- " & beValue
beDateが初期化されないで、前の値を引きずっているのが問題だとわかります。
27行目あたりで、beDate を初期化すれば問題なのですが、日付型の初期は、
beDate = #1/1/1900#
とかになるので気持ち悪い。
そもそも日付かどうかを判断するのなら IsDate関数が順当でしょう。
Sub CalculateAndSetValue2() Dim ws応募 As Worksheet Dim ws集計 As Worksheet Dim lastRow As Long Dim countインスタ4月 As Long Dim countインスタ5月 As Long Dim i As Long Dim axValue As String Dim beDate As Date ' シートを指定 Set ws応募 = Worksheets("応募") Set ws集計 = Worksheets("集計") ' 最終行を取得(ここではAX列の最終行を取得します) lastRow = ws応募.Cells(ws応募.Rows.Count, "AX").End(xlUp).Row ' 件数の初期化 countインスタ4月 = 0 countインスタ5月 = 0 ' 件数をカウント For i = 2 To lastRow ' 1行目はヘッダー行として2行目からループ開始 axValue = ws応募.Cells(i, "AX").Value ' 日付の取得とフォーマット If IsDate(ws応募.Cells(i, "BE").Value) Then beDate = ws応募.Cells(i, "BE") 'Debug.Print i & " " & beDate ' 2024年4月の場合 If Year(beDate) = 2024 And Month(beDate) = 4 Then If InStr(axValue, "インスタ") > 0 Then countインスタ4月 = countインスタ4月 + 1 End If End If ' 2024年5月の場合 If Year(beDate) = 2024 And Month(beDate) = 5 Then If InStr(axValue, "インスタ") > 0 Then countインスタ5月 = countインスタ5月 + 1 End If End If End If Next i ' 件数に20000を掛けた値をシート集計のA5およびA6セルに設定 ws集計.Cells(5, 1).Value = countインスタ4月 * 20000 ws集計.Cells(6, 1).Value = countインスタ5月 * 20000 End Sub
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-07-02 16:43:10 )