Access VBA で VLookup を使いたいと思っていたのですが、
「メソッドまたはデータメンバが見つかりません。」とエラーになります。
箇条書きになりますが、行いたいことは以下のとおりです。
・「D:\0402\コメント.xlsx」を開き、最初のシート(sheet1)を選択する。
・sheet1の A列には検索対象の文字列が、B列にはそれに対するコメントが文字列で入っています。
・VLookup 関数を使用し、変数「vDir.Name」を検索値、sheet1全体が検索範囲、
B列の情報がほしいので、列は「2」、完全一致で取りたいので「False」としています。
・B列の返り値を変数「vComment」に代入します。
下記が書いたソースなのですが、「vComment = ~」を記述すると、
冒頭の「メソッドまたはデータメンバが見つかりません」とエラになってしまいます。
前後のプログラムの関係上、Accessのクエリの使用や、Excelをリンクテーブルにすることはできません。
解決方法がわかる方、助けていただけますでしょうか。
Access は 2010 になります。よろしくお願い致します。
'エクセルを開く
Dim oCommentXLS As Object
Dim oCommentXLSWorkbook As Object
Dim vFileCommentXLS As String
vFileCommentXLS = "D:\0402\コメント.xlsx"
Set oCommentXLS = CreateObject("Excel.Application")
Set oCommentXLSWorkbook = oCommentXLS.Workbooks.Open(vFileCommentXLS)
Dim oSheet As Object
Set oSheet = oCommentXLS.Worksheets(1)
Dim raCommentFind As Range
Dim vComment As String
Set raCommentFind = Cells.Find(What:=vDir.Name, LookIn:=xlValues, LookAt:=xlWhole)
If Not raCommentFind Is Nothing Then
Debug.Print "みつかりました。"
vComment = Application.WorksheetFunction.VLookup(vDir.Name, Range("A1:B1000"), 2, False)
Debug.Print vComment
Else
Debug.Print "見つかりませんでした"
End If
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
提示されたのは、どのような環境で記述されたものなのでしょうか。
> Dim raCommentFind As Range
がエラーになっていない?であれば、Excel は参照設定されているのでしょう。
参照設定しているのであれば、
> Dim oCommentXLS As Object
> Dim oCommentXLSWorkbook As Object
> Dim oSheet As Object
部分は、
Dim oCommentXLS As Excel.Application
Dim oCommentXLSWorkbook As Excel.Workbook
Dim oSheet As Excel.Worksheet
と記述しておけば、例えば、oSheet と記述した後に . を入力すると、候補が表示され便利です。
また、
> Set oCommentXLS = CreateObject("Excel.Application")
する必要はなく、
Set oCommentXLS = New Excel.Application
で事済みます。
また、Excel で良く使う Application は、oCommentXLS にあたるので
Application.WorksheetFunction
↓
oCommentXLS.WorksheetFunction
参照設定していないのであれば、xlValues xlWhole 等の Excel での定数は定義しておく必要があります。
また、Cells Range を記述する時には、誰の下で・・・を指定します。
Cells.Find( → oSheet.Cells.Find(
Range("A1 → oSheet.Range("A1
余談)
参照設定すれば Cells Range はそのまま記述しても動くようですが、
誰の下で・・・を指定しておいた方が良いかも
以下、Excel を参照設定してある環境で実行してみます。
Public Sub test1()
Dim oApp As Excel.Application
Set oApp = New Excel.Application
oApp.Visible = True
oApp.Workbooks.Add
oApp.Range("B2") = "ABCD" ' Range("B2") = "ABCD" でも同じ結果に
Set oApp = Nothing
End Sub
※ Application 直下に Range 記述しているので、アクティブブックのアクティブシートが隠れているようですが、
さて、以下での ★ は、どこに記述されるのでしょう
Public Sub test2()
Dim oApp1 As Excel.Application
Dim oApp2 As Excel.Application
Set oApp1 = New Excel.Application
Set oApp2 = New Excel.Application
oApp1.Visible = True
oApp2.Visible = True
oApp1.Workbooks.Add
oApp2.Workbooks.Add
oApp1.Range("B2") = "ABCD"
oApp2.Range("B2") = "abcd"
Range("C2") = "1234" ' ★
Set oApp1 = Nothing
Set oApp2 = Nothing
End Sub
Public Sub test3()
Dim oApp As Excel.Application
Set oApp = New Excel.Application
oApp.Visible = True
oApp.Workbooks.Add
oApp.Range("B2") = "ABCD"
Set oApp = Nothing
Set oApp = New Excel.Application
oApp.Visible = True
oApp.Workbooks.Add
oApp.Range("B2") = "abcd"
Range("C2") = "1234" ' ★
Set oApp = Nothing
End Sub
※ エラーになる場合もありますね。
エラーにならない時には、どちらも 1234 の左側は ABCD でしたね
(Vista + Access2007 にて)
No.1
- 回答日時:
Accessからなのだから、ライブラリ名を省略しちゃだめでしょう。
(参照設定はExcel2010だとMicrosoft Excel 14.0 Object Libraryかな)
>vComment = Application.WorksheetFunction.VLookup(vDir.Name, Range("A1:B1000"), 2, False)
vComment = Excel.Application.WorksheetFunction.VLookup(vDir.Name, Range("A1:B1000"), 2, False)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
-
4
Access200のFilterとFindの違い
その他(データベース)
-
5
Accessでvlookupみたいなことはできますか。
その他(データベース)
-
6
実行時エラー '3464': 抽出条件でデータ型が
Access(アクセス)
-
7
どこにもフォーカスを当てたくない
Access(アクセス)
-
8
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
-
9
ACCESSでタイトルバーを非表示にする方法
Access(アクセス)
-
10
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
11
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
12
ExcelのMatch関数のようなものは、Accessにはないのですか?
その他(データベース)
-
13
Access 昇順・降順で並び替えできない
その他(データベース)
-
14
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
15
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
16
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
17
アクセスVBAのMe!と[ ]
Access(アクセス)
-
18
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
19
Access サブフォームでの選択行の取得
その他(データベース)
-
20
access の 最終レコードの判定はどう記述しますか
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
End Sub が必要です。
-
Excel VABについて 下記記述が...
-
typedef による2重定義
-
C2065: 'EnumDisplayDevices' :...
-
intel fortranのエラーで困って...
-
43:syntax error at end of input
-
pythonの条件分岐(if)
-
Excel・Word リサーチ機能を無...
-
UserForm1.Showでエラーになり...
-
Excel マクロ VBA プロシー...
-
合計3TBのデータのハッシュ値を...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
メッセージボックスのOKボタ...
-
配列数式の解除
-
VBAでfunctionを利用しようとし...
-
教えて下さい
-
マクロの連続実行
-
一つのTeratermのマクロで複数...
-
TERA TERMを隠す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
End Sub が必要です。
-
pythonの条件分岐(if)
-
Excel VABについて 下記記述が...
-
43:syntax error at end of input
-
フォートランのエラーについて...
-
intel fortranのエラーで困って...
-
他クラスからForm1内コントロル...
-
Excel VBA: UserForm.Show で実...
-
AccessVBAでVLookupを使いたい
-
対応する関数ヘッダーがありません
-
VB2005でOCXを動的に呼び出すに...
-
C# IEnumerable が IEnumerable...
-
ラズパイ上の、pythonのエラー...
-
コンパイルで未定義のシンボル
-
select関数の使用方法について
-
HEW3とBorlandC++でクラス定義...
-
構造体のポインタ参照
-
VB.NETのStructureの使い方を教...
-
waveOutProc関数での定義
-
フォートラン(fortran)のエラー...
おすすめ情報