Access VBAのFindFirstでIDとID2の一致を判定する方法

このQ&Aのポイント
  • Access VBAのFindFirstを使用して、入力されたIDと既存のIDとの一致判定を行いたいです。さらに、ID2との一致も判定して処理を行う方法について教えてください。
  • FindFirstを使用してIDとID2の一致判定を行いたいです。具体的には、新しく入力されたIDと既存のID、およびID2と比較し、一致した場合に処理を行いたいです。
  • Access VBAのFindFirstを使用して、既存のIDと新しいID、およびID2の一致判定を行いたいです。一致した場合には処理を実行する必要があります。さらに、AND演算子を使用してIDとID2の両方の一致を判定する方法についても教えてください。
回答を見る
  • ベストアンサー

FindFirst(ACCESS VBA)についての質問

あるシステムをつくっているのですが、 FindFirstですでに入力されているIDと今入力されたIDとを比べて、 ~.FindFirst("ID=" & newID) If ~.nomatch=false then 処理 endif というように 一致したら処理をするのですが、このFIndFirst文でIDだけでなくID2というのも一致しないと処理を行わないというのにするにはどのようにすればいいでしょうか? たぶんANDを使えばいいのではないかと私は思うのですが、どのように記述してもいいのかわかりません。 あと、上に記述されているコードにももっとこうしたほうがいいなどというアドバイスをいただけたら幸いです。 みなさんよろしくお願いします。

noname#10904
noname#10904

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

アクセスは詳しくないけど、、、  mySearch = "ID = " & newID & " AND ID2 =" & newID2  ~.FindFirst mySearch  If Not ~.NoMatch Then    MsgBox "あった"  End If のような感じとか。 条件がマッチするレコードが複数ある場合は、FindNextでLoop

関連するQ&A

  • FindFirst複数条件

    access 超初心者です。 フォームに2つのコンボボックス(COM_A,COM_B)があり そのコンボボックスで条件を2つ設定し、テーブル(TBL)から 条件の一致したレコードを検索したいのですが、うまくいきません。 TBLのフィールド AAA ---> COM_Aで指定 BBB ---> COM_Bで指定 Dim db As DAO.Database Dim TBL As DAO.Recordset Set db = CurrentDb Set TBLrs = db.OpenRecordset("TBL", dbOpenDynaset) TBLrs.FindFirst"AAA='"&Me.COM_A&"'"And"BBB='"& Me.COM_B & "'" If TBLrs.NoMatch Then 処理 Else 処理 End If というコードなのですが、実行すると『型が一致しません』となってしまいます。 TBLrs.FindFirst"AAA='"&Me.COM_A&"'" If TBLrs.NoMatch Then ~ とか TBLrs.FindFirst"BBB='"&Me.COM_B&"'" If TBLrs.NoMatch Then  ~ のように条件を1つにすると各々問題なく動作します。 単純にAndでひっつけるだけではダメなのでしょうか? いろいろ調べましたが、完全に行き詰ってしまいました。 ヒントでもいただければありがたいです。 よろしくお願いします。

  • Accessでのvbaについての質問

    Accessでのvbaを使用したプログラムについてお聞きしたいです。前にも似たようなことを質問していましたが、まだうまくいってません。マスタメンテナンス画面を作成しているのですがテキストボックスの入力チェック が上手くいきません。テキストボックス はコードという名前をつけています。 以下のコードでコーディングしています。 未入力チェック関数 Public Function EmptyCheck(Koumoku As Variant) As Boolean '引数で渡された項目が入力されているかチェック If Koumoku = ""Then EmptyCheck = True Else EmptyCheck = False End If End Function 桁数チェック関数 Public Function NumberCheck(Koumoku As Variant, Number As Integer) As Boolean If Len(Koumoku) <>Number Then NumberCheck = True Else NumberCheck = False End If End Function 半角英数字チェック関数 Public Function ZokuseiCheck(Koumoku As Variant) As Boolean If IsNumeric(Koumoku) = False And Not Koumoku Like "[a-z]*"And Len(Koumoku) <>6 Then ZokuseiCheck = True Else ZokuseiCheck = False End If End Function コード処理 Private Sub コード_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then ' If EmptyCheck(コード) = True Then MsgBox "コードを入力してください。" コード.SetFocus KeyCode = 0 Exit Sub ElseIf NumberCheck(コード, 6) = True Then MsgBox "コードの桁数が不正です。" コード.SetFocus KeyCode = 0 Exit Sub ElseIf ZokuseiCheck(コード) = True Then MsgBox "コードの属性が不正です。" コード.SetFocus KeyCode = 0 Exit Sub Else コード.Locked = True End If End If 上手くいかない点は以下の通りです。 1、テキストボックス(コード)の未入力チェックが上手く行きません。テキストボックスが空白の時も""になったりNullになったり変わるのでIf Koumoku = ""ThenにしてしまうとNullになった時処理されずそのまま次のテキストボックスにカーソルが移ってしまう時があります。なんでNullになったり""になったりで変わるのかも謎です。あと空白の時、Koumoku=""で一致しているにも関わらず、Falseで返されてしまい、未入力処理がされません。IsNullを使ってNull値判定してもKoumoku=Nullで一致してるのにFalseで返されました。 2、桁数チェックも上手く行きません。コード処理の方で桁数チェック関数に6という数字を渡して6桁入力としているのですが6桁でもエラーになってしまう時があります。LEN関数でどのように文字数を測っているのかも よくわからないです。 3.これは単純に半角英数字の判定の仕方が間違っているんだと思いますが、やり方がよく分からず、上手く判定できません。 4.これは入力チェックに当てはまるのですがEnterキーを押した時に処理するようにコードを書いていましたが変な結果が出ます。最初にテキストボックスでEnterキーを押して未入力の時に、「コードを入力してください。」とメッセージが出るのはいいのですがその後入力してもまた同じメッセージが出てきます。ほかのテキストボックスをクリックしてカーソルを移さないと同じメッセージが出続けます。桁数や半角英数字チェックの時も同じです。他のカーソルをクリックしないと次の項目のチェックにいかず、同じエラーメッセージが出続けます。何とかほかのカーソルに移さずに修正したら正しく処理が通るようにできないでしょうか。 5、最後に何も問題なかったらテキストボックスにロックかけるよう処理をしているのですが「コントロールの変更を保存していないときはコントロールをロックできません」というエラーメッセージが出てくる時があります。意味が分からず調べても出てこなかったので意味のわかる方何が悪くてエラーになっているのか教えて下さい。 調べてもデバッグしても原因が分からないものばかりです。 長文になってしまいましたがわかる方よろしくお願いします。

  • IF文の使用制限について(VBA)

    いつもお世話になります。 VBAで分からない事があったので、質問をすることにしました。 お手数をおかけしますが、よろしくお願いします。 現在、以下のようなコードを記述しています。 例) IF x > y AND x <= z then ”処理” End If 値「x」がyよりも大きくて、zより小さいかもしくは同じ値の場合は処理をする。 というようなコードを記述しています。 順調に作業を進めていたのですが、1つのFunction?内に合計25個の 例で挙げたIF文を記述しているのですが、最後の25個目まで正しく処理されるでしょうか? 一つのFunctionで、IF文の使用できる回数制限みたいなものは存在するのでしょうか? どうしても、後半の3つのIF文だけ正しく処理されなくて困っています…。 コードは何回も見直したので間違っていないと思うのです…。 もし、IF文の使用個数の制限など無いというのであれば、もう一度見直してみたいと思います。 質問は以上となります。 よろしくお願いいたします。

  • Access97 VBAにてレコードの検索

    お世話になります。 フォームでのレコード追加の際、 重複入力を避けるためにレコード検索を追加したいのですが、うまくいきません。 ただいまのソースは、 Set db = DBEngine.Workspaces(0).Databases(0) Set myrs = db.OpenRecordset("社員マスター", DB_OPEN_DYNASET) myrs.FindFirst "社員_cd =" & " '" & Me.社員_cd & "' " If myrs.NoMatch = False Then IMsg = "すでに登録されています!!!" IRet = MsgBox(IMsg, 16, "エラー") myrs.Close db.Close Exit Sub End If 以上はうまく機能するのですが、 社員マスターのキーを"部門_cd"と"社員_cd"にする場合、 単純に社員_cdのみのチェックではダメで、部門_cdのチェックも同時に必要になるかと思いますが、うまくコーディングできず。 myrs.FindFirstの一文を適切に書いてやらなければいけないと思いますが、わかりません……。 教えていただけますでしょうか? ※質問文のみでは情報が不足している場合、ご指摘いただければ補足にて追加させていただきます

  • ACCESS(VBA)の検索結果判定について

    ACCESS(VBA)の検索処理にて 以下のVBAを実行すると、かならず「★データあり処理」 に流れてしまいます。 確実に検索結果がヒットしない状態(データ全削除)にしても 同じです。 何故なのでしょうか。。 ====================== Private Sub xx_Click() Dim sSql As String sSql = "SELECT 年月 FROM 材料明細トランザクション " _ & "WHERE 年月 = " & Me.年月.Value & " " _ & "AND 材料顧客コード = " & Me.材料顧客コード.Value & " " _ & "AND 現場コード = " & Me.現場コード.Value Set db = CurrentDb Set oRs = db.OpenRecordset(sSql) If oRs.NoMatch = False Then '★データあり処理 Else 'データなし処理 End If End Sub ====================== ※初心者ですので、わかりやすく回答していただけると助かります。

  • VBAでorを使用しているときの合致条件

    お世話になります。 vbaで、下記の様なif文があるときに、 iは、1,2,3のどれで合致しているか判別する方法はありますか? 現在は、下記のように処理(1)を繰り返し、書いているのを 一度で済ませたいと思っています。 -------現在---------------- if i=1 then '処理(1) 'iの値が1の時の処理 elseif i=2 then '処理(1) 'iの値が2の時の処理 elseif i=3 then '処理(1) 'iの値が3の時の処理 endif ----------------------------------- ----------------理想--------------------------- if i=1 or i=2 or i=3 then '処理(1) ★★ここの時点でiの値を取りたい endif '処理で、iの値によって分岐 ------------------------------------------

  • cshの条件式について教えてください

    cshで該当ディレクトリにファイルがなければOK、あればエラーというような処理をしようと思っています。 しかし、下記のような記述ではうまくできません。 1) *************************** if ( -e $DIR/*.* ) then echo "NG" exit 1 else echo "OK" endif exit 0 *************************** if文でなく、外にだせばうまくいくのですが... 2) *************************** test -e $DIR/*.* if($status == 0) then echo "NG" exit 1 else echo "OK" endif exit 0 **************************** if ( test -e $DIR/*.* ) then... でもだめでした。 どうにかしてif文で一発判定をしたいと思っているのですが、正しい記述方法を教えてください。 よろしくお願いします。

  • エクセルVBAの質問です。

    エクセルVBAの質問です。 セルに特定の値が入力された場合にエラーとし、「再試行」を選択するとセルが修正出来る状態にしたいのですが、下記のコードだと実行時エラーが発生してしまいます。 if cells(10,10).value > 1 then if msgbox("err", vbCritical + vbRetryCancel,"") = vbRetry then Cells(10,10).Select Cells(10,10).Active ⇒ エラー箇所 else Cells(10,10).ClearContents Endif Endif 実行時エラー '438' オブジェクトは、このプロパティまたはメソッドをサポートしてません。 いろいろネットを検索してみましたが、よくわかりませんでした・・・。 VBAは初心者です。 かなり困ってます。 どなたか助言をお願い致します。

  • ACESS 2003のVBAについて

    If IsNull(テキスト町名2ID) Then MsgBox "郵便番号と町名2IDに入力してください" Exit Sub End If If テキスト町名2ID = "" Then MsgBox "郵便番号と町名2IDに入力してください" Exit Sub End If 上掲のようなコードを何箇所かで使用しました。上側のコードで失敗する場合と下側のコードで失敗する場合とがあります。この二つのコードの違いはどこにあるのでしょうか。 「テキスト町名2ID」はフォームのテキストボックスです。

  • VLookupで一致しなかった時のVBAでの処理

    On Error ~を使わないで、 VLookup()で一致しなかった時の処理をさせたいのですが どのように記述すればよいでしょうか。 例えば、以下のようなコードの場合、 一致したデータがない時にyに-1を代入するには 以下のコードをどのように記述すればよいのでしょうか。 --------------------- Dim x As Integer Dim y As String x = 7 y = Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False) --------------------- 以下はいずれもエラーになりますが、以下のような感じで処理がしたいです。 --------------------- If IsError(Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False)) Then  y = -1 Else  y = Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False) End If --------------------- If Application.WorksheetFunction.IsNA(Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False)) Then  y = -1 Else  y = Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False) End If --------------------- y = Application.WorksheetFunction.IfError(Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False), -1) --------------------- なお、以下のように本来エラーではない処理で On Error Resume Nextを使うのは、 本当のエラーの処理と混同するため不可 --------------------- On Error Resume Next y = Application.WorksheetFunction.VLookup(x, Worksheets("Sheet1").Range("A1:B100"), 2, False) If Err <> 0 Then y = -1 On Error GoTo 0 ---------------------