質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

1回答

2989閲覧

Excel VBA FindFirstメソッドでAccessへの検索をしたい。

clocolor12

総合スコア8

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/03/19 05:13

前提・実現したいこと

ExcelにBaseシートとsampleシートがあります。
sampleシートにはヘッダーありのcsvがA1から貼り付けられており
各行の7列目の値が「AAA」ならBaseシートの指定位置にその行の3列、5列目の値を書き込み
その書き込んだ値がデータベースにあるか検索するプログラムを作りたいです。

発生している問題・エラーメッセージ

実行時エラー '3077': 式の 構文エラー : 演算子がありません。

該当のソースコード

VBA

1 Dim BaseRow As Integer 2 Dim db As DAO.Database 3 Dim rs As DAO.Recordset 4 Dim Hinmei As String, Zuban As String 5 6 BaseRow = 8 7 Set db = OpenDatabase("C:\Users\○○\Desktop\Database_Sample.accdb") 8 Set rs = db.OpenRecordset("Table1", dbOpenDynaset) 9 10 For i = 2 To MaxRow 11 If Cells(i, 7).Value = "AAA" Then 12 Worksheets("Base").Cells(BaseRow, 2).Value = Cells(i, 3).Value 13 Worksheets("Base").Cells(BaseRow, 16).Value = Cells(i, 5).Value 14 15 Hinmei = Worksheets("Base").Cells(BaseRow, 2).Value 16 Zuban = Worksheets("Base").Cells(BaseRow, 16).Value 17 18 rs.FindFirst "3D品名 = 'Hinmei' AND 3D図番 = 'Zuban'"←「ここでエラーが発生する。」 19 If rs.NoMatch Then 20 Worksheets("Base").Cells(BaseRow, 54).Value = "" 21 Else 22 Worksheets("Base").Cells(BaseRow, 54).Value = rs![品目コード] 23 End If 24 rs.Close 25 Set rs = Nothing 26 Set db = Nothing 27 28 BaseRow = BaseRow + 1 29 End If 30 Next i

試したこと

FindFirstの行でエラーが起きているので
引用符の分け方を変えたり、スペースの数を変えたりしましたが
同じエラー内容で、見当がつきません。。。

補足情報(FW/ツールのバージョンなど)

Windows7 64bit
Microsoft Visual Basic for Applications 7.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Accessでは数字で始まるフィールド名は[]で囲む必要があります。
下記でどうでしょうか。

vba

1rs.FindFirst "[3D品名] = 'Hinmei' AND [3D図番] = 'Zuban'"

おっと、Hinmei Zuban は変数ですね。だとしたら文字列リテラル(""内)の外に出さないと単なる文字列です。

vba

1rs.FindFirst "[3D品名] = '" & Hinmei & "' AND [3D図番] = '" & Zuban & "'"

よく見たら、ループ内でレコードセットを閉じてしまってますね。
2回目のループでエラーになります。

vba

1 rs.Close 2 Set rs = Nothing 3 Set db = Nothing

これをNext iの後ろに移動させてください。

投稿2020/03/19 05:23

編集2020/03/19 05:52
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

clocolor12

2020/03/19 06:20

ご回答ありがとうございます。 ご指摘の通り編集したところ、期待通りの結果になりました。 延々と悩んでいたので助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問