• ベストアンサー

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

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

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

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

noname#9808
質問者

お礼

本当に有り難うございました。解決しました。 結局、下記のようにしました。 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 またお訊きすると思いますが、よろしくお願いします。

noname#9808
質問者

補足

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

その他の回答 (1)

noname#29107
noname#29107
回答No.1

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

noname#9808
質問者

補足

回答有り難うございます。 >一番問題かなと思うのは、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

  • 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 -----------------------------------------------------------------

  • アクセス モジュールの意味

    下記はどうゆう意味なのですか?考えたのですが、よく分かりません。 private sub form open(cancel As Integer)・・・開いたとき ●If Forms!F_Main!検索条件 = 4 Then・・・???   これで分かりますか?? 宜しくお願いします。

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

    シート内にある日付型の変数を検索させる処理をしたいのですが、以下のように記述したところ、 ================================== 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")存在しますし、なぜこのようなエラーがでるのか? また、どうしたら解消できるのか?について、教えていただきたく・・・ よろしくお願いいたします。

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

    先ほど質問して、ベストアンサーまで選択してしまいました。が追加で質問させてください。  先ほどの質問  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 からのルーチンはモジュール内でいいでしょうか 基本的なことで申し訳ありませんが、よろしくお願い致します。

  • 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....の結果を一つにまとめてそれを表示するのかな。。。? なんて考えておるのですが、皆様のご教授を承りたく思います。 宜しくお願いします。 ※テキストボックス、コマンドボタンはユーザーフォーム上にあります。

  • Excel VBA :2回目以降実行で貼り付けるセルが変わる

    いつもお世話になっております。 ExcelのVBAでご質問があります。 指定した日付のデータを抽出して 別のシートに貼り付けるサブプロシージャなのですが、 下記のようなコードを書きましたところ、 貼り付けるセルが何故か("BH2")になってしまいます。 コードの一部を変えて、実行するとコード通り ("BH3")のセルに貼り付けてくれるのですが、 もう一度別の日付を入力して実行すると ("BH2")のセルに貼り付けてしまうのです。 何が原因なのでしょうか・・・? ちなみに最初にコードを書いたときは 貼り付け先は("BH2")のセルにしていましたが 途中で間違いに気づき、("BH3")に書き換えました。 これが関係あるのでしょうか。 何卒よろしくお願いします。 ------------------------------------------------------ Sub 予定表() Application.ScreenUpdating = False 'ファイルオープン Dim i As Integer For i = 1 To Workbooks.Count If (Workbooks(i).Name = "予定表.xls") Then Exit For End If Next If (i > Workbooks.Count) Then Workbooks.Open Filename:="\\Dress\予定表.xls" ' 予定表の取り込み Dim date1 As Date Dim fmt As String Dim objList1 As ListObject Dim wb1 As Workbook Dim wb2 As Workbook Dim Rng As Range Dim sh1 As Worksheet Dim sh4 As Worksheet '----------------------------------------------------------------------- Set wb1 = Workbooks("製品.xls") Set wb2 = Workbooks("予定表.xls") Set sh1 = wb1.Worksheets("Sheet1 (3)") Set sh4 = wb2.Worksheets("1") '------------------------------------------------------------------------- sh1.Range("BH3:BN20").ClearContents '日付のチェック Do date1 = Application.InputBox("日を入力して下さい。", "印刷日入力", Type:=2) If VarType(date1) = vbBoolean Then Exit Sub If IsDate(date1) = False Then MsgBox date1 & " は、日付ではありません。" Loop Until IsDate(date1) With sh4 Set objList1 = .ListObjects("予定") fmt = .Range("A2").NumberFormatLocal '書式を取る date1 = Format(date1, fmt) '入力文字の書式変更 objList1.Range.AutoFilter Field:=1, Criteria1:=date1 Set Rng = objList1.Range.SpecialCells(xlCellTypeVisible) Rng.Copy sh1.Range("BH3") objList1.Range.AutoFilter Field:=1 End With Application.CutCopyMode = False Range("R3").Value = date1 Set Rng = Nothing Set objList1 = Nothing Set wb1 = Nothing Set wb2 = Nothing Set sh1 = Nothing Set sh4 = Nothing 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行おきに)日付を出力したいのですが このマクロのどの部分を変えれば良いのでしょうか?当方マクロは何の事やらさっぱり解らないのでどなたか助けていただけないでしょうか?よろしくお願いします

  • ExcelVBAでSQLサーバの日付時刻型参照

    Excel/VBA(Excel2003)で開発しています。 SQL Server上のデータをSQLで参照する際、WHERE条件句に日付を範囲指定するのですが、 全く無視され、全日付のデータが読まれてしまいます。   ・SQL Server上のデータテーブル:MEISAI       日付項目名:伝票日付 (データ型 = 日付/時刻, サイズ = 8)   ・範囲指定もとデータ:inpDate1,inpDate2 AS String inpDate1 の内容 = "2011/06/01" (FormのDateTimePickerで指定する。) inpDate2 の内容 = "2011/06/10" (同上) の時、SQL文は下記の通りです。 SELECT * FROM MEISAI WHERE 伝票日付 >= '" & inpDate1 & _ "' AND 伝票日付 <= '" & inpDate2 & "' ; " また、inpDate1,inpDate2をいったん Date型に変換し、 Dim Dt1 AS Date DimDt2 AS Date Dt1 = CDate(inpDate1) Dt2 = Cdate(inpDate2) SELECT * FROM MEISAI WHERE 伝票日付 >= " & Dt1 & " AND 伝票日付 <= " & Dt2 & " ; " としても、結果は同じでした。 いろいろ試してみたのですが、どうしてもうまく行かず困っています。 どなたかおわかりの方おられましたら、教えて下さい。

  • 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の後ろを"<"を">"にしたり、"="を付けたりしましたが、希望通りになりません。 多分、もっとスマートな書き方が有るとは思うのですが、あとあとメンテナンスしやすい書き方をお教え頂けたら幸いです。