• ベストアンサー
  • 困ってます

EXCELでいうシリアル値をACCESSで出したい

質問タイトルの通りです。VBAでFORM中の2つの日付を比較し、処理を分岐させたいのです。 自分なりに作っては見たのですが、ちゃんと動きません。どこが悪いんでしょう。 ' Dim hiduke As Integer: hiduke = CInt(IsDate(Forms![F_売上伝票]![日付])) ' Dim open_date As Integer: open_date = CInt(CDate("#2003 / 5 / 5#")) ' If hiduke <= open_date Then '正しい日付が入っていない場合には、 ' Forms![F_売上伝票]![入力日] = Date ' MsgBox "OPEN前です", vbInformation ' End If

noname#9808
noname#9808

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数2383
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.2
  • Gin_F
  • ベストアンサー率63% (286/453)

> 日付型で大小判定が出来るかどうか分からなかったので、 できます。 注意すべきことは、時刻データまで持っているかどうか?ぐらいですね。 日付/時刻型は、内部的には日付部分を整数で、時刻部分を 小数で管理しています。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

本当に有り難うございました。解決しました。 結局、下記のようにしました。 Dim hiduke As Date: hiduke = CDate(Forms![F_売上伝票]![日付]) Dim open_date As Date: open_date = CDate("2003 / 5 / 5") If hiduke < open_date Then '正しい日付が入っていない場合には、 MsgBox "OPEN前です。修正します。", vbInformation Forms![F_売上伝票]![日付] = CDate(Forms!F_売上伝票!入力日) '正しい日付をSETします。 End If またお訊きすると思いますが、よろしくお願いします。

質問者からの補足

回答有り難うございます。 >日付/時刻型は、内部的には日付部分を整数で、時刻部分を >小数で管理しています。 これがExcelでいうシリアル値ですよね。これを数値として扱えないですかね。勿論整数部分だけで.... 日付型でそのまま比較出来るなら、試して見ます。

その他の回答 (1)

  • 回答No.1
noname#29107
noname#29107

今ちょっとACCESSの検証出来る環境がないので、ソースを見せてもらっただけです。参考意見として聞いてください。 一番問題かなと思うのは、hiduke = CInt(IsDate(Forms![F_売上伝票]![日付]))の部分で、IsDate関数の結果をCInt関数の引数にしているところです。 IsDate関数の結果は、TrueまたはFalse(数値としては-1と0)を返します。ですからCInt関数は、フォームで指定した値を返しません。 フォームで入力した値が日付として有効かどうかの判断は、hidukeへの代入より前に、If文で行いましょう。 あと日付が内容の変数をIntegerで確保するのも意図がよく理解できないです。日付型でいいのでは?

共感・感謝の気持ちを伝えよう!

質問者からの補足

回答有り難うございます。 >一番問題かなと思うのは、hiduke = CInt(IsDate(Forms![F_売上伝票]![日付]))の部分で、IsDate関数の結果をCInt関数の引数にしているところです。 ここは、他の箇所(日付が正しくない時はリセットする箇所)を良く見もせずにコピペしたところです。動くわけ無いですね。 >あと日付が内容の変数をIntegerで確保するのも意図がよく理解できないです。日付型でいいのでは? これについては、日付型で大小判定が出来るかどうか分からなかったので、Excelでいうシリアル値に変換したいと思っての事です。そのまま出来れば良いのですが....

関連するQ&A

  • エクセルでプロシージャが終了しません。

    ユーザーフォームのボタンをクリックしたら、特定のセルに現在の時刻を入力するマクロを作っています。 入力するところまではうまくいったのですが、プロシージャが終了しないので保存することができません。 どこが違うのかわからないので、わかる方よろしくお願いいたします。 Private Sub cmd1_Click() Dim hiduke As Date Dim hiduke2 As Integer hiduke = Now() hiduke2 = CInt(Day(hiduke)) If chk1.Value = True Then Cells(4, 1).Select Do Until ActiveCell.Value = hiduke2 ActiveCell.Offset(1, 0).Select Loop ActiveCell.Offset(0, 2).Value = hiduke Else Cells(4, 1).Select Do Until ActiveCell.Value = hiduke2 ActiveCell.Offset(1, 0).Select Loop ActiveCell.Offset(0, 8).Value = hiduke End If End Sub

  • Access

    Access97を使用してるのですが、ある個所でダブルクリックした時に前日の日付が出るようにしたいのですが、そのある場所をクリックしたときにはその日(今日の日付)がでるようにしたのですが、その場合は Private Sub Form_Open(Cancel As Integer) Me.txt処理日 = Date といったように”Date"をいれますよね? では、前日といった場合は何を入れたらよいのでしょうか?

  • EXCEL VBA---IsDate

    お知恵をお貸し下さい。 VBAでフォームを作成し、テキストボックスに数字(日付)を入力 (入力→10/7, 表示→2005/10/07) それを、IsDateで日付かどうかチェックさせたいのですが 下記のコードでは、例えば10月35日と入力してもエラーになりません。 (入力→10/35, 表示→1935/10/01) 2005/10/35と入力すればエラーになってくれるのですが やはりこの方法しかないのでしょうか? もし、良い方法がありましたらお教え下さい。 よろしくお願いします。 ----------------------------------------------------------------- Sub Test() Dim Data As Variant Data = TextBox16.Text If IsDate(Data) Then TextBox16.Value = CDate(Data) Else MsgBox ("正しい日付を入力してください。") End if End sub -----------------------------------------------------------------

  • マクロの質問!

    こんにちは、違うサイトで見つけたマクロなんですけど、そのマクロについての質問です。以下がそのマクロです。 Sub MakeNippo() Dim StartDy As Date Dim EndDy As Date Dim Celldy As Date Dim i As Integer Dim Sh As Worksheet Dim ShNum As Integer Dim Wdy As Integer Set Sh = Worksheets("日報1") StartDy = CDate(Range("A2")) EndDy = CDate(Range("C2")) Celldy = StartDy Wdy = Format(StsrtDy, "w") ShNum = 1 Do While Celldy < EndDy For i = 4 + Wdy To 11 Sh.Cells(i, 1).Value = Format(Celldy, "ggge年mm月dd日") Celldy = Celldy + 1 If Celldy > EndDy Then Exit For Next If Celldy < EndDy Then Worksheets("原紙").Copy after:=Sh ShNum = ShNum + 1 Set Sh = ActiveSheet Sh.Visible = xlSheetVisible Sh.Name = "日報" & ShNum Wdy = 1   End If Loop End Sub 日付をA2とC2に入れるとその間の日付が1週間づつシートに出力されるマクロなのですが、このまま実行するとA5,A6,A7,A8,A9,A10,A11に日付が出力されます。 これをA7,A14,A21,A28,A35,A42,A49に(7行おきに)日付を出力したいのですが このマクロのどの部分を変えれば良いのでしょうか?当方マクロは何の事やらさっぱり解らないのでどなたか助けていただけないでしょうか?よろしくお願いします

  • 日付を元にカウンター~質問に追加です

    先ほど質問して、ベストアンサーまで選択してしまいました。が追加で質問させてください。  先ほどの質問  WinXp Excel2003 のVBAです。(初心者なので言葉足らずのときは申し訳ありません) 請求書の番号を日付が変更したら、”0”に戻す方法で悩んでいます。 モジュールで、パブリック宣言して Public Sub 初期設定() Dim 本日, 受付1, 受付2 As String, 採番 As Integer 本日 = Today() End Sub ここで行き詰ってしまいました。本日変数ひ日付を代入して、日付が変わったものと比較するのに、 どの段階で比較すればいいのか? パソコンのスイッチを切ってしまったら、変数はクリアになってしまってう・・・等々考えていくうちに わからなくなってしまいました。 多分単純なことなのだと思います。(いろいろネットで調べてみましたが、似たようなものがなかったので、どなたか、似たような参考でもけっこうですので、教えていただけないでしょうか? その回答が    Function 請求書番号取得(ByVal 本日 As Date) As Integer With Worksheets("Sheet1") If CDate(.Range("A1").Text) = 本日 Then '日付が変わっていない場合 .Range("B1").Text = CInt(.Range("B1").Text) + 1 '請求書番号を+1 Else '日付が変わった場合 .Range("A1") = 本日 '日付情報を更新 .Range("B1").Text = 1 '請求書番号をリセット End If 日付確認 = CInt(.Range("B1").Text) End With ActiveWorkbook.SaveAs End Function こんな感じでどうでしょう? Sheet1という名前のシートのA1セルに日付、B1セルに請求書番号を保存します。 そして、本日の日付がSheet1のA1セルと違っていた場合は、A1セルの日付を本日に書き換えてB1セルの請求書番号をリセットします。 このルーチンを使いたい場合は、 Dim Count As Integer '請求書番号 Count = 請求書番号取得(Date) で追加質問です。 日付確認 = CInt(.Range("B1").Text)とあるのですが、”B1”には請求番号がはいっているんですよね また日付確認は変数ですか? 変数宣言したとして、Dateでしょうか? Integer でいいのでしょうか? またFunction からのルーチンはモジュール内でいいでしょうか 基本的なことで申し訳ありませんが、よろしくお願い致します。

  • 私が変更したいようにできるか、ぜひお力添えをお願いします。

    Sub Prep_Calendar() Dim 入力 As String Dim 開始日 As Date, 日付 As Date Dim 今月 As Integer Dim i As Integer, j As Integer 入力 = InputBox("年月を yyyy/m の形式で入力") If IsDate(入力) = True Then 開始日 = CDate(入力) Else MsgBox ("正しい日付を入力") Exit Sub End If Range("B2").Value = Year(開始日) Range("D2").Value = Month(開始日) 今月 = Month(開始日) 日付 = 開始日 - Weekday(開始日) + 1 For i = 1 To 11 Step 2 For j = 1 To 7 If 今月 = Month(日付) Then Cells(i + 3, j + 1).Value = Day(日付) Cells(i + 3, j + 1).Interior.ColorIndex = 2 Cells(i + 4, j + 1).Interior.ColorIndex = 2 Else Cells(i + 3, j + 1).Value = "" Cells(i + 3, j + 1).Interior.ColorIndex = 35 Cells(i + 4, j + 1).Interior.ColorIndex = 35 End If 日付 = 日付 + 1 Next Next End Sub まず、インプットボックスにて2003/9と入力すると、B2に2003、D2に9と入力されます。 元から作成してあるエクセルの3列目には、B3からC3,D3…と、日月火…土と入っております。 B4からH5までがカレンダーになっており、当月分以外の欄は、緑色でセルに色がつきます。 1行飛ばしで日付が入力されるようになっているのですが、これを1行飛ばしではなく、3行飛ばしに変更したいです。 また、試験日が分かっていたら、その日から逆算させて日付の最終行に「試験まであと○日」などと表示ができたら文句ないです。 初心者です。 意味不明点など、補足要求をお願いします。

  • 日付型変数を検索する方法

    シート内にある日付型の変数を検索させる処理をしたいのですが、以下のように記述したところ、 ================================== Dim hiduke As Date Dim lngYLine As Long Dim intXLine As Integer hiduke = Cells(1, 3).Value 'セルの値取得 Set Obj = Worksheets("Sheet1").Cells.Find(hiduke) If Obj Is Nothing Then MsgBox "該当の日付" & hiduke & "は、ありません。" Else lngYLine = Worksheets(newSh).Cells.Find(hiduke).Row intXLine = Worksheets(newSh).Cells.Find(hiduke).Column     MsgBox hiduke"は、" + CStr(lngYLine) + "行目の" _ + CStr(intXLine) + "列目にあります" End If ================================== Set Obj = Worksheets("Sheet1").Cells.Find(hiduke) で「実行時エラー"9" インデックスが有効範囲にありません」のエラーになります。 ワークブック内には Worksheets("Sheet1")存在しますし、なぜこのようなエラーがでるのか? また、どうしたら解消できるのか?について、教えていただきたく・・・ よろしくお願いいたします。

  • Access 日付範囲の条件指定

    いつも質問ばかりですいません。 指定の日付範囲外の値に対してメッセージを出して再入力させたいのですが上手くいきません。 《条件》 今日より先は NG 今日より2日以上前は NG 1日前:OK 今日:OK Dim txt01 As Date ' Dim txt02 As String ' Dim txt03 As Integer Dim ckDate As Date ckDate = Date - 2 '日付のチェック If IsNull(Me.txt01) Then 'Nullチェック MsgBox "txt01=Null" Me.txt01.SetFocus Exit Sub ElseIf IsDate(Me.txt01) <> True Then MsgBox "日付形式ではありません。" Me.txt01.SetFocus Exit Sub ElseIf Me.txt01.Value < Date Then '前チェック Debug.Print Me.txt01.Value MsgBox "今日より先" Me.txt01.SetFocus Exit Sub ElseIf Me.txt01.Value <= ckDate Then MsgBox "2日以上前!" Me.txt01.SetFocus Exit Sub End If 2番目の、Elseifからの日付範囲の条件設定が上手くいきません。 Me.txt01.valueの後ろを"<"を">"にしたり、"="を付けたりしましたが、希望通りになりません。 多分、もっとスマートな書き方が有るとは思うのですが、あとあとメンテナンスしやすい書き方をお教え頂けたら幸いです。

  • Excel VBA 計算結果の表示方法

    ExcelのVBAでコマンドボタンを押すと以下のようなプログラムを考えています。 '変数宣言 Dim MIN As Integer Dim MAX As Integer Dim i As Integer MIN = CInt(TextBox1.Text) MAX = CInt(TextBox2.Text) 'ループ For i = MIN To MAX If i Like "*3" Or i Like "3*" Or i Mod 3 = 0 Then End If Next i と、ここまでは考えたのですが、結果の表示方法を一つのメッセージボックスで カンマ区切りで表示させる方法が調べてもわかりませんでした。 If i Like....の結果を一つにまとめてそれを表示するのかな。。。? なんて考えておるのですが、皆様のご教授を承りたく思います。 宜しくお願いします。 ※テキストボックス、コマンドボタンはユーザーフォーム上にあります。

  • 「何年と何日前」と表示したい

    Sub test1() Dim dtm日付 As Date Dim i As Integer dtm日付 = #1/1/2010# i = Date - dtm日付 MsgBox i & "日前" End Sub これで、何日前かは取得できたのですが 何年と何日形式にするにはどうすればいいでしょうか