VBAの関数について

このQ&Aのポイント
  • VBA初心者のため、VLOOKUP関数の使い方がわからないです。具体的に試験1ファイルのシート"sheet1"で検索値を使い、試験2ファイルの指定した検索範囲から取得した値を試験1ファイルのシート"sheet1"の指定した位置に挿入したいです。
  • 試験1の検索値はA5セル、試験2の検索範囲はB1~C20、取得した数値の位置はD5です。VLOOKUP関数において、検索値や検索範囲を変数で指定し、列番号はC列(3列目)を指定し、検索方法はFALSEで行いたいです。
  • 以下のコードを試しましたが、変数の使い方やsetの指定方法が間違っているかもしれません。詳しい方にコードの修正方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

VBAの関数について

VBA初心者です。 VLOOKUP関数の使い方がわかりません。 具体的に書かせてもらうと VBAの中にVLOOKUP関数を使いたいです 試験1ファイルのシート"sheet1"にある 検索値を使い 試験2ファイルの指定した検索範囲を 試験1ファイルのシート"sheet1"の指定した位置に数値を挿入することです。 例えばですが(この使い方も間違ってるかもしれません)コードを書いてみると 試験1の検索値はA5セルとします 試験2の検索範囲はB1~C20とします 検索範囲から取得した数値の位置はD5とします VLOOKUPに関してですが 検索値は変数を使い 検索値範囲も変数を使い 列番号はC列がいいので3で 検索方法はFALSEでお願いします sub test() dim a as range dim b as workbooks dim c as range set a = range("B1~C20") set b = workbooks("sheet1") set c = range("A5") workbooks("試験1").worksheets("sheet1").range("D5").value=workbooks("試験2").activesheet."=VLOOKUP(ここがわかりません)".value end sub そもそも変数やsetの使い方が間違ってるかもしれませんm(__)m コードを書いて貰えるととても助かります。 回答お願いします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 試験2の検索範囲があるシートがどのシートなのかという事が不明ですので、取りあえず仮の話として >試験2の検索範囲はB1~C20 が存在するシートのシート名が"Sheet2"であるものとした場合に関して回答致します。 Sub test() Dim a As Range Dim b As Range Dim c As Range With Workbooks("試験1").Worksheets("Sheet1") Set a = .Range("A5") Set c = .Range("D5") End With Set b = Workbooks("試験2").Worksheets("Sheet2").Range("B1:C20") c.Value = WorksheetFunction.VLookup(a.Value, b, 3, False) End Sub

kousukebojto
質問者

お礼

思ってた通りと結果が出せました! いつもいつもありがとうございますm(__)m また、勉強させてもらいます

関連するQ&A

  • エクセルVBAで別ブックの条件検索

    VBA初心者です。エクセルは2007です。 『データのあるブック(Book1,Book2,Book3)』と、『検索条件シート+出力先シートをもつブック』の4つのブックがあります。 検索条件シートで、L22でブック、P22でシートを指定してN22に入力した数に対応するデータをVlookupで出力先シートのセルに抽出されるようにしたいのですが、※の部分で「エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」とでて実行できません。 データのあるブックは同じ形式でシートには表があります。 数 a b c d 1 A B C D 2 ○ × △ ■ 3 Z Y X W     ・     ・ 検索条件がL22=3,P22=2,N22=2だとすると、Book3の2枚目のシートを検索し、 出力先シートのD1=○,J6=×,L23=△,J69=■となるようにしたいです。 本やインターネットで調べましたがわかりませんでした。 解決方法を教えていただきたいです。お願いします。 Sub 検索() Dim a, b, c, d As Range Dim 番号, ブック, シート As Integer With Workbooks("検索.xlsm").Sheets("検索条件") 数 = .Range("N22").Value ブック = .Range("L22").Value シート = .Range("P22").Value End With Dim wb As Workbook Dim sh As Worksheet Dim set範囲 As Variant With Workbooks("検索条件.xlsm").Sheets("出力先") Set a = .Range("D1") Set b = .Range("J6") Set c = .Range("L23") Set d = .Range("J69") End With Select Case ブック Case 1 Set wb = Workbooks("Book1.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case 2 Set wb = Workbooks("Book2.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case 3 Set wb = Workbooks("Book3.xlsm") wb.Activate Select Case シート Case 1 Set sh = Worksheets(1) Case 2 Set sh = Worksheets(2) Case Else MsgBox "・・・・・", vbExclamation, "nothing" End Select Case Else MsgBox "nothing", vbExclamation, "nothing" End Select ※Set set範囲 = wb.sh.Range("A4:E42")  ←エラー438 a = Application.WorksheetFunction.VLookup(数, set範囲, 2, False) b = Application.WorksheetFunction.VLookup(数, set範囲, 3, False) c = Application.WorksheetFunction.VLookup(数, set範囲, 4, False) d = Application.WorksheetFunction.VLookup(数, set範囲, 5, False) End Sub

  • Excel VBA でVLookUPの質問

    教えてください。 Excel VBA でVLookUPを使用したいのですが 毎回シート名も数も変わります。 そのため、検索範囲 のシート名をセル値が取得したいのですが どうすればよいでしょうか? 検索値 = AシートB列 検索範囲=BシートM列 書出し範囲=AシートU列 下記のコード作成しましたが ws = Worksheets("②価格集計").Range("U2").Value 検索用格納配列(i, 1) = "=VLOOKUP(B" & i + 1 & ",ws!A:M,13,0)" でエラーがでます。 他に方法があれば教えてください。 宜しくお願い致します。 Sub test() Dim 検索値 As Range '検索値 Dim 検索用格納配列 As Variant '検索用格納配列 Dim 出力範囲 As Range '出力範囲 Dim i As Long Dim 検索範囲 As Range Dim endrow As Long Dim ws As Worksheet endrow = Sheets("①SPOT売却明細貼付").Range("B" & Rows.Count).End(xlUp).Row Set 検索値 = Worksheets("②価格集計").Range("B3:B302") Set 出力範囲 = Worksheets("②価格集計").Range("U3:U302") ws = Worksheets("②価格集計").Range("U2").Value 検索範囲 = Worksheets(社名).Range("A:M") 検索用格納配列 = Range(検索値, 出力範囲) For i = 1 To endrow 検索用格納配列(i, 1) = "=VLOOKUP(B" & i + 1 & ",ws!A:M,13,0)" Next 出力範囲 = 検索用格納配列 End Sub

  • VBA教えて下さい

    for nextの使い方がわかりません 変数を使用し条件に当てはまる数値だけ 処理するといった内容です 考えたコード sub test() dim a as variant dim b as variant dim i as variant with workbooks("book1").activesheet set a =.range("A5") set b =.range("B5") end with with workbooks("book2").activesheet for i = 80 to 110 if a = cells(i,1) then b.value = cells(i,2) end if next i end sub このコードにてやりたい事は まず、book1の今開いてるシートを参照し A5セル、B5セルをセットし (例えばA5は2と入力している B5セルは10000と入力している) 次に、book2の今開いてるシートを参照し もし、1行目の80~110どれかのセルの数字が 変数aと同じ値ならば (A行80~110行のセルの数字2があれば 例えば85列) 変数bの数字を2行目の80~110に条件に当てはまるセルに移す (B行85列にB5セルの値10000を移す) ()の部分は例えで書いてます 読みにくかったら無視でお願いしますm(__)m 指定の仕方など間違ってると思うので コードを書いてくれると助かります 回答お願いしますm(__)m

  • Excel2010VBA:Find、日付形式の一致

    Excel2010VBAでワークシートのE列 (関数:=IF(AND(A2<>"",B2<>"",C2<>"",D2<>""),DATE(A2,B2,C2)+D2,"")) とマクロの変数「日時1(a)」が一致すると処理を行うプログラムを作りました。(この場合一致するのは「2011/1/2 23:01」です。) E列とマクロの変数「日時1(a)」は両方とも日付形式で、「2011/1/2 23:01」で一致するはずなのですが変数「範囲」が「Nothing」で一致しません。 ■ワークシート ------------------------------------------------------------------------- A    B C D    E 2011  1 2 23:01  =IF(AND(A2<>"",B2<>"",C2<>"",D2<>""),DATE(A2,B2,C2)+D2,"") ------------------------------------------------------------------------- ■コード ------------------------------------------------------------------------- Dim 日時1(1 To 999999) As Date, 範囲 As Range With Workbooks("ブック.xlsm").Worksheets("シート") Do Set 範囲 = .Range(Cells(2, 5), Cells(527041, 5)).Find(What:=日時1(a)) If Not 範囲 Is Nothing Then ~ End If ~ ------------------------------------------------------------------------- これを一致させるためにはどうしたらいいのでしょうか? 回答よろしくお願いします。

  • Excel VBAで異なるファイル間のコピー

    異なるファイル間で値のみをコピーしたいです。下記の様な感じです。 hoge1.xlsのA1からA10のセルの値のみをhoge2.xlsのB1からB10へコピーする。 以下の様に書いてみたのですが、数式がコピーされてしまいます。 VBAをやったことがなく、今ネットで30分ほど見て書いてみたので 根本的に理解していません。簡単な書き方を教えていただきたいです。 Sub test() Dim Fname As String Fname = "hoge1.xls" Workbooks.Open Filename:=Fname, ReadOnly:=True Dim range1 As Range Set range1 = Worksheets("Sheet1").Range("A1:A10") range1.Copy Destination:=Workbooks("hoge2.xls").Worksheets("Sheet1").Range("B1:B10") End Sub また、ファイルを開いたり閉じたりは必要なのでしょうか? Workbooks.Open Filename:=Fname, ReadOnly:=True を書かずに、いきなり Set range1 = Workbooks("hoge1.xls").Worksheets("Sheet1").Range("A1:A10") はダメなのでしょうか?? よろしくお願いします。

  • excel マクロ vlookupがわかりません(泣)

    初心者です。 ほんとに迷宮にはいっていまい、提示のコードもめちゃめちゃですが ご回答頂ける方はいらっしゃいますでしょうか・・・ マクロのコード記載のある "A.xle" ファイルの"報告書"シートのE2セルに 外部ファイル(一覧.xls)からVLOOKで値をひっぱってきて入力させたいです。 Vlookで入力させたい値が複数あるので、一気にできたらと思っているのです。 Private Sub CommandButton111_Click() Dim wb1 As Workbooks Dim 範囲 As Range Dim 列番号 As Range Dim 検索値 As Range Range("E2") = TextBox1.Value   Set wb1 = Workbooks.Open("\\192.168.~\~\一覧.xls") Set 範囲 = \\192.168.~\~\一覧.xls 状況!A3:P3000 ←ここに外部ファイルを設定したいのですが、どう記述すればよいかわかりません。 列番号 = 11 検索値 = (Worksheets("報告書").Range("E2")) Range("D3").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Unload Me End Sub どうぞ、ご教授宜しくお願い致します。

  • VBA vlookup 検索範囲に変数指定 

    仕事で必要となり、初めてVBAを組んでおります。行き詰まってしまい、ご相談です。 「マクロ実行.xls」にある、ボタン「実行」をクリックすると、当月データに過去データをvlookupにて貼り付けるよう組んでおります。ただ、肝心なVLOOKUPが結果を出してくれません。 検索範囲の設定と変数の関係だと思いますが・・。 '使用量(月間).txtを6つ開く Dim i As Integer Dim a0 As String Dim a As String Dim a1 As String Dim a2 As String For i = 0 To 5 a0 = Format(Now, "yyyy/mm ") a = DateAdd("m", -i, a0) a1 = Format(a, "使用量" & "yyyy" & "." & "mm") & ".txt" a2 = Format(a, "使用量" & "yyyy" & "." & "mm") '使用量(月間).txt、の場所 Dim b1 As String b1 = Application.Workbooks("実行マクロ.xls").Path & "\データ\************\" '使用量(月間).txtを開く(14配列) 省略 '月間データの編集:最終行の取得 Dim lngCount3 As Long lngCount3 = Workbooks(a1).Worksheets(a2).UsedRange.Rows.Count 途中省略 '現在一覧.txtと月間データのVLOOKUP Workbooks("現在一覧.txt").Worksheets("現在一覧").Activate Range(Cells(2, 20), Cells(lngCount3, 20)).FormulaR1C1 = "=vlookup(RC[-18],[workbooks(a1)]worksheets(a2)!R2C2:R&lngCount3&C2,5,0)" ↑ここが問題です。 next for~NEXT内でvlookupを使用する事が出来ないのか・・。 検索範囲の設定をどのように書くのか・・。 ご教授頂けると幸いです。

  • VBA VLOOKUP 別のファイルを参照

    VBA VLOOKUP 別のファイルを参照 いつもこちらでお世話になっている者です。 VBAの勉強をしております。 別のファイルからVLOOKUPで値を参照したいのですが、 範囲を指定してみましたが、 「worksheetFunctionクラスのVlookupプロパティを参照できません」 とのメッセージが出てしまいます。 なお、値は空白になる行もありますので、 if関数で回避してみましたがうまくいきません。 いろいろ試しましたが、何度やってもうまくいかないので こちらに質問させていただきました。 お詳しい方、ご伝授いただければ助かります。 よろしくお願い致します。 環境はExcel2007です。 Sub sample() Dim 範囲 As Range Dim wb As Workbook, wb2 As Workbook Dim r As Integer,intRow As Integer Workbooks.Open Filename:="***.xlsm" Set wb = ThisWorkbook Set wb2 = ActiveWorkbook Set 範囲 = wb2.Sheets("PvtSht2").Range("Database3") r = wb.Sheets("sheet1").Range("A28:N28").End(xlToRight).ColumnintRow = 3 With wb.Sheets("sheet1") Do Until .Cells(intRow, 1).Value = "" .Cells(intRow, (r + 1)) = Application.WorksheetFunction.If((Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False)) = 0, "", Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False)) intRow = intRow + 1 Loop End With End sub

  • VBAエラー '1004' について

    VBA初心者です。 下のプログラムの★部分で 「実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。」 というエラーが発生します。 どなたか原因を教えていただけないでしょうか?? Dim aRange As Range Dim bRange As Range Set aRange = Range(Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) ★ Set bRange = Range(Sheets("シートB").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) 下のシートBの範囲取得と同じことをしているつもりなのですが、うまくいきません。 どうぞよろしくお願い致します。

  • VBAでVlookup関数を組もうとしていますがエラーが出ます。VBAに詳しい方、教えてください

    VBAでvlookup関数を下のように組みましたが、(1)でエラーが出ます。VBAに詳しい方、教えてください。 Sub VLLOKUPによる表の検索4() Dim mykensakuchi Dim mykensakuhan Dim gyo As Integer (1) mykensakuchi = Worksheets("sheet1").Range("a" & gyo).Value mykensakuhan = Worksheets("sheet2").Range("b2:e9") saikagyo = Worksheets("sheet1").Range("a" & Rows.Count).End(xlUp).Row gyo = 2 For gyo = saikagyo To 1 Step -1 With Application.WorksheetFunction Range("b:gyo").Value = .VLookup(mykensakuchi, mykensakuhan, 2, False) End With Next End Sub