- 締切済み
エクセルVBAで日付の部分一致
F列に日付があります。2012年~2015年まで大量に。 書式設定はユーザー定義でm"月"d"日"になっており、表示的には8月26日などに見えます 入力する時には「8/26」と入力しています これをF列が特定の「年月」2015年の8月などだったら その行のP列に本日の日付を入力するという処理をしたく、下記のように組んでみましたが 型の関係でエラーが起き、実行できません・・・ 特定の年月の指定は変わる為、インプットボックスで指定しようとしてます ⇒ちなみに年と月だけを指定したいが、日を除く指定の仕方がわからない為・・・日もダミーで入力するという処理をしています・・・ どこが悪いのでしょうか? Sub テスト() Dim DV As String Dim YDB As String Dim MDB As String DV = InputBox("月を選んでください(例:2015/3/14)", "確認") YDB = Year(DV) MDB = Month(DV) With Worksheets("sheet1") .Activate Dim i As Long Dim KYDB As String For i = 4 To Cells(Rows.Count, 6).End(xlUp).Row KYDB = Cells(i, 6) If Cells(i, 16) = "" And KYDB = YDB And KYDB = MDB Then Cells(i, 16).Formula = "=TODAY()" End If Next i End With End Sub
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- dogs_cats
- ベストアンサー率38% (278/717)
KYDB = Cells(i, 6) KYDBが日付データで無い場合のifステートメントです。 日付データで無い場合にどうしたいのか説明が無かったのでメッセージボックス表示にしました。 データ修正を促すならメッセージを表示してexit subでsubを抜ける。 そのセルはskipして次に進むのならGoToステートメントでnext iの前にskipさせるかでしょう。 If Not IsDate(KYDB) Then msgbox "F"& I &"データは日付データではありません" end if GoToステートメント http://www.vba-ie.net/statement/goto.html
- dogs_cats
- ベストアンサー率38% (278/717)
変数宣言 stringは文字列なのでdate,integerに変更。変数は全て冒頭に纏めましょう。 各セルのyear,monthの取得がされていませんでした。 空白はemptyを使用でエラー回避。 Sub テスト() Dim DV As Date Dim YDB As Integer Dim MDB As Integer Dim i As Long Dim KYDB As Date DV = InputBox("月を選んでください(例:2015/3/14)", "確認") YDB = Year(DV) MDB = Month(DV) With Worksheets("sheet1") For i = 4 To Cells(Rows.Count, 6).End(xlUp).Row KYDB = Cells(i, 6).Value If KYDB <> Empty And Year(KYDB) = YDB And Month(KYDB) = MDB Then Cells(i, 16).Formula = "=TODAY()" End If Next i End With End Sub
お礼
ありがとうございます。 試してみたのですが、 「KYDB = Cells(i, 6).Value」の所で黄色くなり 型が違うと言われます・・・
補足
すみません!!! 色々と調べた結果F列に日付以外が入っていた場合 エラーが起こってしまうようです。 何かの拍子なのかF列に「a」などの文字列は入っていたのが発覚しました。 この場合、根本的な解決ではないですが 日付以外が入っている場合は無視する もしくは、日付以外が入っている場合はその事を教えてくれる・・・ というのはできるのでしょうか?