Excel VBA 質問スレッド №1932 (未解決)

日付けが検索されない

投稿者 : セイ     投稿日時 : 2024/06/15(Sat) 06:58:21     OS : 未指定     EXCEL : 未指定
 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月」が更新できているのですが・・・
ステップ実行して、不正動作時の各データを確認してみて下さい。

[返信 2] Re : 日付けが検索されない
投稿者 : ピロリ     投稿日時 : 2024/06/15(Sat) 08:47:32
ちなみに、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

[返信 4] Re : 日付けが検索されない
投稿者 : てらてら     投稿日時 : 2024/06/15(Sat) 09:41:58
こんにちは。

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 )
タイトルとURLをコピーしました