条件付MAX値取得について

このQ&Aのポイント
  • ACCESS2000を使用しています。このVBAでは正しくMAX値を取得できず、NULL値を取ってきます。
  • 会社テーブルの会社連番の最大値から1を足してF会社連番に入れるVBAを作りましたが、正しく動作しません。
  • 数時間迷っているため、助けていただけないでしょうか?
回答を見る
  • ベストアンサー

条件付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

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

  • ベストアンサー
  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.1

aa = DMax("会社連番", "会社テーブル", "会社コード = 'Form_会社フォーム!F会社コード'") ↑これでは、『会社コードが「Form_会社フォーム!F会社コード」という「文字列」と等しい』という条件になってしまっています(>_<) 『会社コードが「Form_会社フォーム!F会社コード」の「値」と等しい』という条件でやりたいのですから、 aa = DMax("会社連番", "会社テーブル", "会社コード = '" & Form_会社フォーム!F会社コード & "'") ↑このようにしてください。 会社コードが数値型の場合は、 aa = DMax("会社連番", "会社テーブル", "会社コード = " & Form_会社フォーム!F会社コード) ↑です。 頑張ってください(^o^)丿

7_11shop
質問者

お礼

私も昨日その方法でうまくいきました。 VBAは難しい。。ありがとうございました。

関連するQ&A

  • (ACCESS)連番取得について

    アクセスで顧客管理をしています。 DMax関数を用いて、レコードを追加する度に自動で連番を振る設定に したいと思っていますが、上手くいかないため質問させてください。 【テーブル名】T_顧客一覧 【入力用のフォーム名】F_顧客登録 【連番を入力させたい項目(フィールド名)】No(テーブルでは主キーに設定) とし、フォームの”No”の既定値に   =DMax("No","T_顧客一覧")+1 と入力するのですが、フォームには1としか表示されません。 非常に初歩的な質問だとは思うのですが、 何か原因として考えられることがありますでしょうか? 情報が足りないようでしたら補足させていただきます。 よろしくお願いします。

  • 定義域関数の抽出と連結表示について

    Win XP Access2002を使用しております。 クエリ上でrinkというフィールドに同一種別groupで20個のcodeを抽出して半角スペースを入れ連結したいのですがどのような関数を使えばよろしいのでしょうか。 同一種別の中で抽出し常時最大20個(10個の場合有り)のデータが必要です。 codeは、欠番を含め30000件くらいあります。 何となく Mid  DMax かなと思っているのですが、 レコードの連結は出来てもフィールドの検索方法が解かりません。 VBAもしくはSQLは基本のみでユーザー定義関数がやっと出来る程度なので 出来ることであれば簡単な関数を望んでいるのですが・・・・・・・ テーブル名 T_code フィルード名1 ID  (データ型・・・オートナンバー) フィルード名2 code (データ型・・・数値) フィルード名3 種別group (データ型・・・数値) 選択クエリ名 C_code フィールド名1 code : [T_code]![code] フィールド名2 rink : ?????? 表示フィールド最終表示例 種別01で20個のデータ抽出後の連結 (" "&" "&・・・・・・・・・) code code code code code code code code code code code code code code code 例1 種別 01 が連番の場合 00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 欠番発生時詰めて20個の抽出 00001 00002 00003 00005 00006 00007 00009 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 例2 種別 012 が連番の場合 00101 00102 00103 00104 00105 00106 00107 00108 00109 00110 00111 00112 00113 00114 00115 00116 00117 00118 00119 00120 欠番発生時詰めて20個の抽出 00102 00103 00104 00105 00106 00107 00108 00110 00111 00112 00113 00115 00118 00119 00121 00122 00123 00125 00128 00130 ご教授願えれば光栄です。よろしくお願いいたします。

  • ACCESS標準モジュールでテーブルの主キー採番したい。

    ACCESS標準モジュールでテーブルの主キー採番したい。 フォームが (1) [Fメインメニュー] (2) [F会社] "(1)(2)全て非連結のtxtbox" と2つあり、(1)のコマンドボタンから(2)のフォームを開く時に (2)のtxtboxに現在下記のコードで採番しています。 If DCount("*", "T会社") = 0 Then Forms("F会社").txt会社コード = "001" Else Forms("F会社").txt会社コード = _ Format(DMax("会社コード", "T会社") + 1, "000") End If これを標準モジュールで行いたいのですが、良い方法を教えて下さい。 宜しくお願いいたします。

  • アクセス2000で番号をふりたいです。

    アクセス2000の質問です。よろしくお願いします。 VBAが初めてなので、本を見ながらやってるんですけど なかなか理解できずに困ってます。 今、フォームで番号をふりたいんですけど、連番で 2007001でもH19001でもいいんですが、年&3桁の番号にしたいです。 現状はテーブルが「sheet5」、フォームの番号を出すテキストボックス の所が「連番」にしてあります。ボタン式にしました。 んで自分で考えて打ち込んだのが Private Sub コマンド77_Click() If "連番" / 1000 Is Date Then Me!連番 = DMax("連番", "sheet5") + 1 Else Me!連番 = Format(Date * 1000, "yyyy" & "001") End If End Sub こんな感じでいれたのですが、さっぱり動きません。 きっと見てる方は笑ってると思いますが、私の実力じゃ こんなのしか出来ません。 同じような質問もあったのですが、理解不能でした。 詳しい方、教えてください。

  • Accessで主キーの最終番号を取得したい

    Access2000を使用しています。 以下のようなテーブルを作成し、町内毎に 実施したアンケートを集計しようと思います。 *************************************** 「アンケートテーブル」 --------------------------------------- 町内    テキスト  3バイト   入力連番  数値    4バイト 設問1   テキスト  1バイト (主キー= 町内+入力連番(7バイト)) **************************************** これに対し入力用のフォームを作成しました。 非連結のテキストボックスに町内名を入れると自動的に 町内ごとの入力連番の最終番号を取得し、「町内」と「入力連番」 のテキストボックスに町内名と入力連番(の最終番号)を表示させ 「設問1」のテキストボックスにフォーカスを移動させたいのですが 主キーが2つ以上のフィールドを組み合わせてできている場合の最終 番号の取得のやり方とテキストボックスに表示させるやり方がよく 分かりません。 Dmaxを駆使すればよいのだと思いますが、どなたか解説していただけ ばありがたいのですが・・・・。 どうぞよろしくお願いいたします。

  • 条件別に自動連番にするには

    たとえば会員マスターのような会員のデータを入力するためのテーブルおよびフォームを作成したいのですが、そのとき男性なら1000→1001という連番を振り、女性なら2000→2001というように連番を振っていきたいのですが、その際どうやったらできるのでしょうか? 単に連番を振るのなら、Dmax関数でできるのですが、条件が入ってきたらわからなくなってしまいました。 Access2000 または 2002を利用しています。

  • accessvba 複数条件でFilterをしたい

    テーブル1 --------------------------------------- ID フィールド1 フィールド2 1 あ A 2 い B 3 う C 4 え D 5 お E --------------------------------------- を作成し、そのテーブルをもとに、帳票フォームを作成しました。 そのフォームに非連結のテキストボックス ID_テキスト フィールド1_テキスト フィールド2_テキスト 3つを設置しました。 行いたい事をクエリ(SQL文)で例えると、 --------------------------------------- SELECT テーブル1.ID, テーブル1.フィールド1, テーブル1.フィールド2 FROM テーブル1 WHERE (((テーブル1.ID) Like "*" & Forms!テーブル1!ID_テキスト & "*") And ((テーブル1.フィールド1) Like "*" & Forms!テーブル1!フィールド1_テキスト & "*") And ((テーブル1.フィールド2) Like "*" & Forms!テーブル1!フィールド2_テキスト & "*")); --------------------------------------- なのですが、 これをクエリを作成せずに、VBAで行いたいです。 各非連結のテキストボックスには、 更新後処理:[イベント プロシージャ] としています。 --------------------------------------- Private Sub ID_テキスト_AfterUpdate() Me.Form.Filter = _ "ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub --------------------------------------- は、問題なくできるのですが、 Private Sub ID_テキスト_AfterUpdate() Me.Form.Filter = _ "ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" and & _ "フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub にすると、エラーになります。 andの繋げ方が良くないと思うのですが、どうすればいいでしょうか? 最終的には、 Private Sub ID_テキスト_AfterUpdate() Me.Form.Filter = _ "ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" "フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'" "フィールド2 like '" & "*" & Me.フィールド2_テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub のような感じにしたいです。 ご回答よろしくお願いします。

  • アクセス2003で検索条件と検索キーワード検索

    アクセス2003で検索機能を作りたいです。 まずプルダウンで検索条件を選び、さらに検索キーワードを手入力し、その条件に見合ったものを抽出するという形。 検索条件とは、フィールド名。検索キーワードは、フィールドの中にある言葉。 質問 (1)マクロのフィルタの実行のwhere条件式において 〔フィールド名〕like~と入れているのですが、この頭のフィールド名をいじくれば良いのか? (2)ある識者に伺ったところ、次のVBA(イベントビルダ)を教わりましたが、オブジェクトに値を代入できませんと出てきました。 Me.filter=""&Me.![テキスト名1]&"like'"&"*"&Me![テキスト名2]&"*"&"'" Me.filterOn=True このテキスト名1をコンボに変更しました(非連結)。検索条件となるあるテーブルを値ソースとしています。何か自分が間違っていますか? できれば、クエリを使うことなく行きたい。 アクセスのつくりとしては、 基幹となるテーブルAとそれに1対多にあるテーブルBそしてテーブルBと1対1にあるテーブルCの3つをクエリを用いて1つのフォームに表しています。 その中のいくつかのフィールドを選択条件とし(プルダウンで選ぶ)、キーワード入力する。 小職、アクセスを始めたばかりです。どうかよろしくお願いいたします

  • サブフォームで自動採番

    お世話になります。ACCESS2000で制作しています 主テーブル(マスタ)に顧客コード(主キー)、 サブテーブル(トラン)に顧客コードと枝番 というフィールドがあります。 顧客コードでリレーションシップを結んでいます。 それぞれのテーブルからクエリを経てフォームをつくり (Q_マスタ→F_マスタ、Q_トラン→F_トラン) また、検索フォームも別に作っています。 F_トランはF_マスタに埋め込んでいます。 検索フォームで検索して該当するデータが無い場合 DoCmd.OpenForm "F_マスタ", , , , acFormAdd で新規フォームを呼び出します。 このときサブフォームの枝番に自動的に「1」を入れたいのですが (開く時でも読み込み時でもいつでもいいのですが) どうしたら良いのでしょうか? ちなみに今は サブフォームのプロシージャで Private Sub Form_Open(Cancel As Integer)  If Me.NewRecord Then   Me![枝番] = 1  Else   Me![枝番] = DMax("枝番", "Q_トラン") + 1  End If End Sub としています。 こうするとQ_マスタの一番上のデータが 例えばQ_トランレコードを2つ持っていると 「3」と出てしまいます。 どのようにすればいいのでしょうか。 よろしくお願いします。

  • Accessの連番(文字+日付+文字)2 (泣)

    先だって下記の質問をさせていただいた際には回答いただいてありがとうございました ≪質問≫ 下記のような連番を振る方法を教えてください "Eyymmdd A "E"は固定で yy(西暦2ケタ)mm(月)dd(日)A(Aから始め、同じ日だとB,C,…と最大26(Z)まで)振っていく。日が変わるとまたAから始まる 「テーブル名」連絡文書E 「クエリ名」連絡文書Eクエリ 「フォーム名」連絡文書E 「フィールド名」管理番号(テキスト型) E110105 A E110130 A E110130 B E110130 C E110202 A… と"E"を固定 yy(西暦2ケタ)mm(月)dd(日)Aから始まり、同日であればB,C~と 日が変わるとAからまた始まるという連番をふりたいです ≪いただいた回答≫ Function getNewSeq()   If Format(Date, "yymmdd") = Mid(DMax("管理番号", "連絡文書E"), 2, 6) Then     If Right(DMax("管理番号", "連絡文書E"), 1) = "Z" Then       MsgBox "Zまで一杯です"       Exit Function     End If     getNewSeq = "E" & Format(Date, "yymmdd") & " " & _           Chr(Asc(Right(DMax("管理番号", "連絡文書E"), 1)) + 1)   Else     getNewSeq = "E" & Format(Date, "yymmdd") & " " & "A"   End If End Function さらに、フォームでも デザインビューでフォームのプロパティのイベントの、「レコード移動時」に Private Sub Form_Current() If Me.NewRecord Then Me!管理番号 = getNewSeq End If End Sub 補足をさせていただいたデバックも何度かテーブルからやり直し できるようになりました!! 本当に助かりました しかし、新たにわからない事態が起きてしまいました ご教示下さい フォームを単票形式で作成して、上記の連番が振れるようになりました しかし、データシート(形式)でフォームを作成したところ連番が振られなくなってしまいました 同じAccess内でではなく、新規作成したり、同じAccess内でのフォーム新規作成をしてみましたが、できません データシートでの連番は無理なのでしょうか? 「テーブル名」連絡文書E 「クエリ名」連絡文書Eクエリ 「フォーム名」連絡文書E2 「フィールド名」管理番号(テキスト型) テーブルとクエリは前回と同じものを使いました 何卒ご教示お願いいたします

専門家に質問してみよう