• ベストアンサー

ACCESSで、DMax関数の条件の書き方

x0000xの回答

  • x0000x
  • ベストアンサー率52% (67/127)
回答No.3

こんにちは。#2です。 >nowMaxはStringではなくVariantにすべきでしょうか? YYYYMMnnnの数値のみであること。 nz(Dmax(),"")の様にNULL値を補正しているのであれば Stringで問題ないです。 ※ご提示したコードのNZ()未対応の際にVariantとした名残でした。

non23
質問者

お礼

なるほど。理由もよく理解することができました。今回はStringでいきたいと思います。 補足への回答ありがとうございました。

関連するQ&A

  • 条件付MAX値取得について

    ACCESS2000を使用しています。 このたび、グループごとに自動的に連番を採番する プログラムをVBAで組みたいと思っています。 そこで、下記のように作りました。 VBA初心者のためあまりつくりがよくないかもしれませんが、やりたかったことは、フォームと一致してる会社コードの中で会社テーブルの会社連番の最大値から1を足してをF会社連番に入れなさいって意味です。 このVBAを会社名を入力した後に実行するようにしています。 ところが、このVBAだとただしくMAX値を取得できず、 NULL値を取ってきてしまい、0が入ってしまいます。 長文になりましたが、数時間迷っているので、 手助けしていただけないでしょうか。 [会社テーブル] 会社コード・・・グループ化したいフィールド 会社連番・・・連番したいフィールド 会社名・・・会社の名前 [会社フォーム] F会社コード・・・会社コードと連結 F会社連番・・・会社連番と連結 F会社名・・・会社の名前と連結 Dim aa As Variant aa = DMax("会社連番", "会社テーブル", "会社コード = 'Form_会社フォーム!F会社コード'") If IsNull(aa) Then Me!F会社連番 = 0 Else Me!F会社連番 = aa + 1 End If

  • Access 文字+年ごとの自動採番

    Accessは全くの初心者です。 プログラマーさんのサイトや質問サイトを参考に、初めてデータベースを作っているのですが、 どうしても文字+年ごとの自動採番がうまくいきません。 挿入前処理で「営250001」のように漢字1文字+和暦2桁+4桁連番にして、 年が変わるごとに4桁連番を0001に戻したいのです。 今入力してあるコードは以下の通りです。 ----------------------------------------------------------------------------- Private Sub Form_BeforeInsert(Cancel As Integer)  Dim vDt As Variant  vDt = DMax("番号", "営テーブル", "番号 Like '" & Format(Date, "ee") & "*'")  If (IsNull(vDt)) Then   番号 = "営" & Format(Date, "ee") & "0001"  Else   番号 = "営" & Left(vDt, 2) & Format(Val(Right(vDt, 4)) + 1, "0000")  End If End Sub ----------------------------------------------------------------------------- この状態では、0001のまま採番が進まず、行き詰ってしまいました。 他の質問者さんが(Date,"ee")を(Now,"nn")に置き換えて、分ごとの採番を試していたのを参考に、 「"営"&」を取って、採番が進むところまでは確認できました。 使っているのはAccess2003です。 どうか、よろしくお願いします。

  • 日付からの曜日取得

    VB6を使っています。 取得した年月の一日の曜日を取得したいのですが うまくできません。formatもなぜかエラー出るんです・・・ どなたか教えてください Dim dtCurrent As Date Dim y As Integer Dim m As Integer Dim j as string Dim nWeek As Integer j=DateTime.Date() y = Mid(j, 1, 4)'年 m = Mid(j, 6, 2)'月 dtCurrent = Format(y&m&01, yyyy / mm / dd) Week = Weekday(dtCurrent) - 1 '曜日取得

  • 文字を含むIDの自動採番

    Access2013を使っています。 IDはテキスト型で、 A00000000 っていう書式なんですが、 新規レコード作成時のイベントで、ID自動採番(連番をふる)をしたいのですが、下記だと最初の1レコード(A00000001)以降がエラーになってしまいます。 Format(Nz(DMax("ID", "T_テーブル名"), 0) + 1, "\A00000000" ) もちろん、すでにあるIDがA00000001なので、DMaxが使えないんですが、どうやって分けてやったら良いのかわかりません。 やりたい結果は、新規レコード作成時に、IDが"A"&"8ケタの最大値+1"が自動に振られて、テーブルのIDフィールドにA00000001、A00000002・・・とデータ保持したいのです。 説明が判り辛くて恐縮ですが、ご教示お願いします。

  • ACCESS97のMAX関数について

    ACCESS97を使用しています。 "関数"の使い方が全くわかりません。 (というより、SQLも含めて…)  テーブル"TBL_A"の"項目B" から最大値を変数SDHSに取得したいのですが どうすればいいのでしょうか?  Dim db As DATABASE Dim RS As Recordset Dim SDHS, strSQL As String Set db = CurrentDb() strSQL = "SELECT Max(項目B) FROM TBL_A ;" Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) SDHS = Max(項目B)

  • アクセス2010 ナンバーリングのコードについて

    アクセス2010で取引台帳テーブルに連結した入力フォームを作り、件名を入力すると契約NOを自動で採番するように 下記のコードにして使っていました。 しばらくはちゃんと採番されていたのですが、分類をする時に使う、 2個あった区分を3個に追加して、 コードも2個から3個に追加しました。それから変になった気がします。 契約NOの最大値+1だと前回作られたNOと重複するようになってしまい、 契約NO+2だと、最後の最大値の次のNOが作れます。 なぜ突然こうなったのかが分かりません。 VBのコードをきちんと学んだ事がなく、本でサンプルを見たりしながら作っています。 わかりやすく教えていただきたく、お願いいたします。 契約NOは R-KS1305-0055 Rが区分 KSがコード 1305が年月2013/05 0055が連番で採番しています。 Private Sub 物件名_AfterUpdate() Me![契約NO] = Me![区分] & "-" & Me![コード] & Format(Me![入力日], "yymm") & "-" & Format(DCount("契約NO", "取引台帳") + 1, "0000")

  • INSERT INTO ステートメントに認識できないフィールド

    助けてください 下記のコードなのですが、新たに「監督費」のフィールドを追加したいのですが、認識してくれません 「INSERT INTO ステートメントに認識できないフィールド <フィールド名> があります。正しい名前を入力したかを確認して、もう一度操作してください。(Error 3127)」 とエラーメッセージが出てしまいます 何が原因なのかわかりません テーブルT物件情報とT共同受注には「監督費」フィールドは存在します cond = "NZ(B.結果,0) = 0 AND B.確度 IN ('B') AND " & _ "FORMAT(B.発注予定時期,""YYYY/MM"") " & _ "BETWEEN '" & 年月1 & "' AND '" & 年月3 & "' " Set db = CurrentDb Set qr = db.QueryDefs("QS_EIGYO_BC") qr.sql = "SELECT J.部署コード, FORMAT(B.発注予定時期,""YYYY/MM"") AS 年月, B.確度, " & _ "CCUR(NZ(J.受注金額,0)) AS 金額, CCUR(NZ(J.粗利,0)) AS 粗利, CCUR(NZ(J.監督費,0)) AS 監督費 " & _ "FROM T共同受注 AS J " & _ "INNER JOIN T物件情報 AS B ON J.物件番号 = B.物件番号 " & _ "WHERE " & cond & " " & _ "UNION ALL " & _ "SELECT E.部署コード, FORMAT(B.発注予定時期,""YYYY/MM"") AS 年月, B.確度, " & _ "CCUR(NZ(B.受注金額,0)) AS 金額, CCUR(NZ(B.粗利,0)) AS 粗利, CCUR(NZ(B.監督費,0)) AS 監督費 " & _ "FROM T物件情報 AS B " & _ "INNER JOIN Q部署担当者 AS E " & _ "ON B.責任者コード = E.担当者コード " & _ "WHERE " & cond & " AND " & _ "B.物件番号 NOT IN (SELECT 物件番号 FROM T共同受注)" DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * FROM __B;" '下記でエラー DoCmd.RunSQL "INSERT INTO __B SELECT * FROM QS_EIGYO_BC" DoCmd.SetWarnings True

  • 値渡し?参照渡し?をやりたい

    「#00B7EF」を「&HEFB700」にする関数を作ってるのですが 初心者のため躓いてしまいました。 コードは ++++++++++++++++++++++++++++++++++++++++++++++++++++ Sub 色コード() myStr = "#00B7EF" Debug.Print 色コード変換(myStr) End Sub Function 色コード変換() Dim myStr1 As String Dim myStr2 As String Dim myStr3 As String myStr1 = Mid(myStr, 2, 2) myStr2 = Mid(myStr, 4, 2) myStr3 = Mid(myStr, 6, 2) 色コード変換 = "&H" & myStr3 & myStr2 & myStr1 End Function ++++++++++++++++++++++++++++++++++++++++++++++++++++ を作ったのですが、 End Functionを過ぎてから 実行時エラー_型が一致しません。(Error13) になります。 Sub 色コード()の時に、型を宣言してないからでしょうか? しかし、 Function 色コード変換(as String) にすると赤くなってしまいます。 ご教授よろしくお願いします。

  • Access2010実行時エラー-21473525

    特定のレコードでボタンをクリックすると、以下のエラーが表示されて、「Me.チェック = True」が黄色に反転します。 実行時エラー ’-2147352567(8002009)’ データは変更されています。 文法的におかしなことをしていると思うのですが、エラーが出ない方法を教えていただければ助かります。 よろしくお願いいたします。 Dim dbs As Database Dim strSQL As String Set dbs = CurrentDb strSQL = "UPDATE マスター " & _ "SET 在庫数 = NZ(在庫数) + " & Nz(Me.入庫数量, 0) & " " & _ "WHERE コード = '" & Me.コード & "'" dbs.Execute strSQL Me.チェック = True

  • GetLongPathName関数について

    VB6でTempフォルダをGetTempPath関数で取得するとショートファイル名でパスが返るので、 取得したショートファイル名をGetLongPathName関数でロングファイル名にしようと しているのですが上手く出来ません。 Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _ (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Private Declare Function GetLongPathName Lib "kernel32" Alias _ "GetLongPathNameA" (lpszShortPath As String, lpszLongPath As String, _ cchBuffer As Long) As Long Dim nName As String Dim Ret As Long Dim Buf As String nName = String$(260, vbNullChar) Ret = GetTempPath(Len(nName), nName) nName = Left$(nName, InStr(nName, vbNullChar) - 1) Buf = String$(260, vbNullChar) Ret = GetLongPathName(nName, Buf, 260) Buf = Left$(Buf, InStr(Buf, vbNullChar) - 1) Tempフォルダはショートファイル名(C:\DOCUME~1\Owner\LOCALS~1\Temp\)は 取得されますがGetLongPathName関数でロングファイル名が 返りません、戻り値は0が返ってしまいます。 コードが間違えているのか、元々取得出来ないのか分かりませんが ご存知の方教えて下さいますようお願い致します。 尚、可能ならばFindFirstFile関数でロングファイル名を取得するのではでなくて GetLongPathNameで取得したいと思っています。