[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『検索して取得』(ケイ)
よろしくお願いします。 初心者です。
開いている別ブックのシートに値をVlookupのように入れたいのですが上手くいきません。
ご教授お願いします。
Sub 検索()
Dim SerchKey As Range '検索値今開いている別ブックのシート Dim SerchRange As Range '検索範囲 Dim OutputRange As Range '出力範囲今開いている別ブックのシート Dim i As Long
Set SerchKey = ActiveSheet(Range("A2:A1000") Set SerchRange = Worksheets("Sheet1").Range("A2:B1000") Set OutputRange = ActiveSheet(Range("A1:A1000")
Application.ScreenUpdating = False
For i = 1 To SerchKey.Rows.Count OutputRange(i, 1) = WorksheetFunction.Vlookup(SerchKey(i, 1), SerchRange, 2, False) Next
Application.ScreenUpdating = True
End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
>Set SerchKey = ActiveSheet.Range("A2:A1000") '検索値今開いている別ブックのシート
>Set OutputRange = ActiveSheet.Range("A1:A1000") '出力範囲今開いている別ブックのシート
何がしたいん?
>Set SerchRange = Worksheets("Sheet1").Range("A2:B1000")
別ブックかThisWorkbookか、どっちやねん
(通行人) 2022/05/01(日) 20:59
?@と?Aの2つのブックがあります。
Dim SerchKey As Range '検索値(B列)検索←別ブックのアクティブシート?@ Dim OutputRange As Range '出力範囲(A列)コード表から取り出し←別ブックのアクティブシート?@
Dim SerchRange As Range '検索範囲はマクロが入っているブックのシートSheet1にコード表がある ?A
別のブックの アクティブシート?@ シート1にコード表が入っているマクロブック?A
A B A B
ああ ああ いい ↑ 「いい」と入れたいです。 (ケイ) 2022/05/01(日) 23:01
SerchRangeには、ThisWorkbookというブックの指定をすべき。
また、
ActiveSheet( という書き方はあり得ない。
投稿上のインプットミスなのか。
実際の動かしたコードをコピーペイストしたらどうか。
あなたのインプットミスの検証はしたくない。
(GW) 2022/05/01(日) 23:28
>Dim SerchKey As Range '検索値(B列)検索←別ブックのアクティブシート?@ 参考に Sub 検索2() Dim c As Range, ret As String On Error Resume Next Application.ScreenUpdating = False With ThisWorkbook.Worksheets("Sheet1") For Each c In ActiveSheet.Range("B2:B1000") ret = WorksheetFunction.VLookup(c.Value, .Range("A2:B1000"), 2, False) If Err Then ret = "該当なし" Err.Clear End If c.Offset(, -1).Value = ret Next End With Application.ScreenUpdating = True On Error GoTo 0 End Sub
Sub 検索3() Dim c As Range, myR As Variant Application.ScreenUpdating = False With ThisWorkbook.Worksheets("Sheet1") For Each c In ActiveSheet.Range("B2:B1000") myR = Application.Match(c.Value, .Columns(1), 0) If Not IsError(myR) Then c.Offset(, -1).Value = .Cells(myR, 2).Value Else c.Offset(, -1).Value = "該当なし" End If Next End With Application.ScreenUpdating = True End Sub
(ピンク) 2022/05/01(日) 23:45
■2
VBAの世界では基本的にブックやシート、セルなど(オブジェクトと言います)はきちんと明示すればいちいちアクティブにしたり選択したりする必要はありません。
また、【標準モジュール】でシートの指定を省略した場合、【ActiveSheet】が指定されたものと見なされるルールです。
よって、複数のブックやシートを相手にした処理を考えるならば、きちんと対象のオブジェクトを明示するようにすることをオススメします。
■3
>Vlookupのように入れたい
難しく考えずに、
(1)VLOOKUPを使った数式を目的のシートの【作業列】に書き込む (2)(1)をコピーしてA列に値のみ貼り付ける (3)作業列をクリアする
といった処理を考えてみてはどうでしょうか?
例えばこんな感じです。
Sub 研究用()
Stop 'ブレークポイントの代わり
With ActiveSheet.Range("B2:B1000") .Formula = "=VLOOKUP(A2," & ThisWorkbook.Worksheets("シート1").Range("A2:B1000").Address(External:=True) & ",2,FALSE)" .Offset(, -1).Value = .Value .Clear End With End Sub
興味があれば、【ステップ実行】してどの命令が何をしているのか研究してみてください。
(もこな2 ) 2022/05/02(月) 11:35
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.