![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
Access 昇順・降順で並び替えできない
その他(データベース)
-
-
4
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
5
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
6
どこにもフォーカスを当てたくない
Access(アクセス)
-
7
Accessにインポートしたら並び順が変わっちゃった
Access(アクセス)
-
8
ACCESSで和暦を西暦に・・・
Access(アクセス)
-
9
AccessのDAOでフィールド名を配列に格納して・・・
Visual Basic(VBA)
-
10
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
11
ACCESSでコントロールソースの変更
Access(アクセス)
-
12
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
13
access の 最終レコードの判定はどう記述しますか
Access(アクセス)
-
14
Access サブフォームでの選択行の取得
その他(データベース)
-
15
Accessでvlookupみたいなことはできますか。
その他(データベース)
-
16
「年」と「月」だけの日付の表示方法
Excel(エクセル)
-
17
TextBoxコントロールを引数として渡すには?
その他(教育・科学・学問)
-
18
accessの自動更新処理をできないようにするにはどうすれば良いですか?
その他(データベース)
-
19
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
20
VBA ACCESS SQL WHERE句の数値型の変数の記述の仕方
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
End Sub が必要です。
-
フォートランのエラーについて...
-
intel fortranのエラーで困って...
-
フォートランでの記述に関して
-
対応する関数ヘッダーがありません
-
DLLの使い方とerror C2146につ...
-
C言語のプログラムが実行できま...
-
Excel VBA: UserForm.Show で実...
-
実行時エラー
-
DLL内からの外部変数の参照
-
構造体のポインタ参照
-
エクセルのマクロについて教え...
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
UserForm1.Showでエラーになり...
-
エクセルで特定の列が0表示の場...
-
配列数式の解除
-
VBAコードについて教えてくださ...
-
Excel マクロ VBA プロシー...
-
教えて下さい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
End Sub が必要です。
-
フォートランのエラーについて...
-
intel fortranのエラーで困って...
-
C言語のプログラムが実行できま...
-
対応する関数ヘッダーがありません
-
Excel VABについて 下記記述が...
-
VBでエラー'ActiveX component ...
-
Makefile と <math.h>
-
他クラスからForm1内コントロル...
-
VB.NETのStructureの使い方を教...
-
43:syntax error at end of input
-
フォートラン(fortran)のエラー...
-
AccessVBAでVLookupを使いたい
-
(fortran) run-time erro M620...
-
解説サイトに従ったfortran並列...
-
verilogでデマルチプレクサの作...
-
構造体のポインタ参照
-
【ルネサスのマイコン】E8aから...
-
Excel VBA: UserForm.Show で実...
-
typedef による2重定義
おすすめ情報