• ベストアンサー

vb 日付の判断

こんにちは。vb2005で日付の判断をしたいのですが、 スマートな方法がわかりません。 Dim y() as string ~ dim y(0) には 20081231 が入る ~ Dim wk As String = y(i).Insert(4, "/") wk = wk.Insert(7, "/") If IsDate(wk) Then ひづけ有効な場合 処理 とりあえずこれで、日付として成立するかを判断しているのですが、 もうすこしスマートな方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

IsDateの代わりにDateTimeのTryParseExactを使うとか。 Dim s As String = "20081231" Dim d As New DateTime If DateTime.TryParseExact(s, "yyyyMMdd", DateTimeFormatInfo.CurrentInfo, DateTimeStyles.None, d) = True Then   ひづけ有効な場合 処理 End If

gonchin01
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • tom11
  • ベストアンサー率53% (134/251)
回答No.2

こんにちは、 http://homepage1.nifty.com/rucio/main/dotnet/Samples/dnSampleStringToDate.htm このような方法もあるみたいです。

gonchin01
質問者

お礼

できました。ありがとうございました。

関連するQ&A

  • VBで「”」文字を取り除く方法

    VB6で「”」(全角)があった場合、それを取り除く処理を行ないたいのですが、 うまくいかずエラーの赤色表示になってしまいます。 どのように記述すればうまくいくのでしょうか?教えて下さい。 ちなみに半角の場合は、InStr(wk_kensa, """") でうまくいきました。 以下が、そのエラーとなってしまう部分の記述です。 dim wk_kensa as string, wk_kensa1 as string wk_kensa = "例えば ”を取り除く" If InStr(wk_kensa, "”") > 0 Then wk_kensa1 = Mid(wk_kensa, 1, InStr(wk_kensa, "”") - 1) wk_kensa = wk_kensa1 & Mid(wk_kensa, InStr(wk_kensa, "”") + 1, 50) end if よろしくお願いします。

  • 数値かどうかを取得したい IsNumberではダメ

    Sub Macro2() Dim mystr As String mystr = "1" If IsDate(mystr) = False Then MsgBox "NO" End If End Sub これなら日付型かどうかを取得できるのに、 Sub Macro1() Dim mystr As String mystr = "1" If IsNumber(mystr) = False Then MsgBox "NO" End If End Sub だと、IsNumberがコンパイルエラーになります。 変数に入っている値が数値として評価できるかを取得する方法を教えてください。

  • VB.net 登録されている日付の連続性のチェック

    VB.netについて質問です。 下記のようにデータがあったとします。 _________ 日付、コード 1/1、****** 1/1、****** 1/2、****** 1/2、****** 1/2、****** 1/4、****** 1/4、****** 1/7、****** 1/11、****** ・ ・ ・ _______ 登録されていない日付があったときにメッセージを出したいです。 下記のコーディングでは 1/4~1/7の間で(2日連続登録されていない) 1/5、1/6は登録されていません。まで出すのが精一杯です。 ______________________________ '登録されていない日があったときメッセージを出す For i = 0 To DataGridView.RowCount - 2 Dim kyou As Date = DataGridView.Rows(i).Cells(0).Value Dim tsugi As Date = DataGridView.Rows(i + 1).Cells(0).Value Dim ashita As Date = kyou.AddDays(1) Dim asatte As Date = ashita.AddDays(1) Dim shiasatte As Date = asatte.AddDays(1) '2日連続登録データが抜けていたときまでのチェック If kyou = tsugi Or tsugi = ashita Then Else If tsugi = asatte Then MsgBox(ashita & "が未登録です") Else If tsugi = shiasatte Then MsgBox(ashita & "と" & asatte & "が未登録です") End If End If End If Next ______________________________ どんなに日にち離れていても対応できるようなコーディングを教えて欲しいです。 よろしくお願いいたします。

  • 日付の差を求めるには

    VB6.0で開発しています。 DBに時刻の列名「YEARMONTHDAY」「HOUR」(1~24)がNUMBER型として入っています。 DBより取得した「YEARMONTHDAY」と「HOUR」で日付の差を求めたいのですが, HOURに24の値がきた際,DATE型の範囲以上の為エラーになってしまいます。 なにか日付の差を求める良い方法があればご教授下さい。 (例) Dim pdtm_RecTime As Date Dim str_wk As String '// EOFまでループ Do Until objDynaset.EOF '// 記録日取得 str_wk = Format$(CStr(YEARMONTHDAY.Value) & Format(CStr(HOUR.value), "00") & "00", "0000/00/00 00:00") pdtm_RecTime = CDate(str_wk) ________________________________________________________________________________ 上記のPGだとHOURが24の場合にDateの範囲を超える為エラーになる。 '// 日付差チェック pVar_Diff = DateDiff("h", DateAdd("h", pInt_Hour, gDtm_GrpSDate), pdtm_RecTime) '// データがまだ存在する場合次のレコードに移動 If (objDynaset.EOF = False) Then objDynaset.MoveNext End If pInt_Hour = pInt_Hour + 1 Loop

  • VBをVBAに ソースコードあり

    二度ほど こちらを利用させていただき、一歩ずつ理解してきているのですが、回りにVB、VBAを使っている方がいなく、相談出来る所がここしかなく また投稿させて頂きました 今回 迷っている事は VBのソースコードがあり それをVBAで実行する場合、どこで宣言すればいいのか という事です VBの~ソースコード~ メインふぉーむ データ受信関数 Private Sub RF720CLib_RFIDMessage(ByVal Message As String, ByVal MessageSize As Long) Dim code As String Dim cmd As String Dim body As String code = RF720CLib.GetResponseCode(Message, MessageSize) cmd = RF720CLib.GetCmdCode(Message, MessageSize) body = RF720CLib.GetResponseBody(Message, MessageSize) If code = "00" Then If cmd = "RD" Then For cnt = 0 To csvline - 1 If Vegetable(cnt).m_ID = body Then End If Next End If If cmd = "IS" Then ReadStep = ReadStep + 1 End If End If End Sub ↑ こちらで RF720CLib ライブラリーを使い  RD リードなどを行ってるとは思うのですが VBAの場合 フォームをロード時に イベントとして宣言すればいいのでしょうか? それとも 上記のはVBですので VBAで使う場合 また新しく作り変えなければいけないのでしょうか? VBとVBAは全く違うもの として考えた方がいいのでしょうか RF720CLibは アクティブXコントロールでVBAでも使えました とても 困っております 宜しくお願いします

  • VBでの日付入力値のフォーマットに関して

    教えて下さい。 環境:Visual Basic 2008 画面上にテキスト入力エリアを設け、日付を入力させたいと考えています。 その際に、あらかじめ"/"(スラッシュ)が表示されていて、そこへ数字のみを 入力し、例えば・・・20110101と入力された場合、2011/11/01と変換されて表示される ような形にしたいと考えています。 そこで、以下のようなサンプルを入手し、実行していますが、どうもうまくFormatが できません。 何が原因でしょうか??? Private Sub FRM_発注入力_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TXT_発注日.MaxLength = 10 End Sub Function SetDateStyle(ByVal myStr As String) As String Dim Temp As String Temp = Replace(myStr, "/", "") If Len(Temp) = 8 Then SetDateStyle = Format$(Temp, "YY/MM/DD") If IsDate(SetDateStyle) = False Then Beep() SetDateStyle = "" End If Else SetDateStyle = myStr End If End Function Private Sub TXT_発注日_TextChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TXT_発注日.TextChanged TXT_発注日.Text = SetDateStyle(TXT_発注日.Text) End Sub TXT_発注日というテキスト入力エリアに入力され、変更があった場合に処理をするような 形となっています。 初歩的な質問で申し訳ありませんが、教えて下さい。 よろしくお願いします。

  • 日付が同じなら削除

    すみません、誰か教えて頂けませんでしょうか。 A列に日付と時間が記入されているのですが、日付だけを比較して 同じなら削除したいのですが、誰かご教授頂けませんでしょうか。 A列 2013/8/14 8:00 2013/8/14 8:15 2013/8/14 10:00 2013/8/15 8:00 2013/8/16 8:00 2013/8/17 8:00 2013/8/17 20:00 2013/8/18 8:00 2013/8/18 9:00 A列 2013/8/14 8:00 2013/8/15 8:00 2013/8/16 8:00 2013/8/17 8:00 2013/8/18 8:00 Sub 削除 () Dim r As Long Dim y As Long r = Cells(Rows.Count,1).End(xlUp).Row For y = r To 1 Step -1 If Cells(y,1).Value = Cells(y,1).Offset(1,0) Then 'この比較がわかりません。 Cells(y,1).Offset(1,0).Delete(xlUp) End If Next y End Sub すみませんが、宜しくお願いします。

  • 【VBA】セルの中身を日付形式に変換したい

    w列のセルの中に20140701のように入っているセルを2014/07/01に変換するマクロを作っております。 それで以下のように書いてみたのですが、「型が一致しません」と出てしまい、先に進めずにおります…。お力借りられますと幸いです。 Dim org As String Dim buf As String Dim i As Long i = 1 Do Until Cells("w", i) = "" Cells("w", i).Select With ActiveCell org = .Value If Len(org) = 8 Then buf = _ Mid(org, 1, 4) & "/" & _ Mid(org, 5, 2) & "/" & _ Mid(org, 7, 2) If IsDate(buf) = True Then .Value = buf .NumberFormatLocal = "yyyy年m月d日" End If End If End With i = i + 1 Loop

  • VB2008 2バイト文字の化け字は当然! Yes or No?

    Function FileGetChar(ByVal f As String, ByVal p As Integer) As String   Dim n As Integer = FreeFile()   Dim c As Char = “”   If File.Exists(f) Then     FileOpen(n, f, OpenMode.Random, OpenAccess.Read, , 1)     Seek(n, p)     If Not EOF(n) Then       FileGet(n, c)     End If     FileClose(n)   End If   Return c End Function このようにSeek関数とFileGet関数を利用する限りでは2バイト文字の化け字は避けられない! 一体、この私の判断は正しいのでしょうか? VB2008 Express Edition

  • フォームを閉じないようにする VB6 SP6

    VB6 でプログラムを作成中です。 プログラムを実行して、フォームが立ち上がった所で右上の×を押し、画面を閉じようとします。 そこで以下のコードで、もし×が押されたらvbYesNoメッセージボックスを表示させ、もし「いいえ」が押されたらフォームを閉じないようにし、実行画面を維持したいのです。 しかし、Exit Sub ですとプログラムが終了してしまい、困っています。宜しくお願い致します。 Private Sub Form_Unload(Cancel As Integer) 'フォームを閉じる Dim last As String last = MsgBox(" プログラムを終了させますか?", vbYesNo, "終了確認1") If (last = vbYes) Then Dim last2 As String last2 = MsgBox(" 本当にプログラムを終了させますか?", vbYesNo, "終了確認2") If (last2 = vbNo) Then Exit Sub End If End If If (last = vbNo) Then Exit Sub End If End Sub

専門家に質問してみよう