[[20220501162306]] 『検索して取得』(ケイ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『検索して取得』(ケイ)

よろしくお願いします。 初心者です。
開いている別ブックのシートに値を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 >


>Dim SerchKey As Range '検索値今開いている別ブックのシート
>Dim OutputRange As Range '出力範囲今開いている別ブックのシート

>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

マルつきの数字は文字化けします。もう一度投稿してください。(プレビューを活用してください。)
SerchKeyもOutputRangeも同じA列です。
なにか特別な意図があるんですか?
普通は上書きしないと思うが。

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


■1
一部書かれていたコメントが消されてしまいましたが、指摘があるようにタイプミスなのか、そうでないのかわかりませんが、提示のコードには構文エラーとなる部分があります。
事情があるのかもしれませんが、私もVBE(エディタ)から直接コピペするようにすると、お互い無駄なキャッチボールが減ると思いますので当該を推奨します。

■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.