Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Professional : Excel 2013)
別シートを検索して一致した行の別列の数値を当該シートに転記したい
投稿日時: 18/11/12 21:47:32
投稿者: Vermont

"List01" と "List02" のシートがあり、
"List02" の B 列の数値を、"List02" の H 列に転記したいと考えています。
 
"List01" の A 列に入力されている単語は、"List02" の A 列にも入力されているのですが、
そちらは空白行があったり順番がぐちゃぐちゃになっていたりします。
("List01" 側はきちんと昇順になっています)
"List01" の A 列の単語をキーにして "List02" の A 列を検索して一致があれば
"List02" の B 列の数値を "List01" の同単語がある H 列に転記したいのです。
("List02" その数値さえ取ってこられれば良いので、切取り→貼付けでも構いません)
 
For Next を用いることを考えましたが、別シートから抽出する際に、
どのように書けば良いかが分かりませんでした。
For Next だと毎行くりかえし処理をすることになりますのでそれが無駄でしたら、
別の手段でも構わないとは思うのですが良い案が浮かんできません。
どなたか妙案ありましたらご教示いただけないでしょうか。

回答
投稿日時: 18/11/12 22:17:23
投稿者: WinArrow
投稿者のウェブサイトに移動

ワークシート関数の
COUNTIFを使えば、有無が分かります。
  
例 (ヒント)
If WorksheetFunction.Countif(Sheets("List1").Columns("A"),Sheets("List2").Cells(行,列)) > 0 Then
     "合致したよ"
 

回答
投稿日時: 18/11/13 15:31:41
投稿者: mattuwan44

Sub test()
    Dim rngTable As Range   '一覧表セル範囲
    Dim rngKey As Range     '検索するキーワードが入っているセル範囲
    Dim c As Range          'セル範囲の中の各各のセル
    Dim ixRow As Variant    '検索でヒットした行番号

    'セル範囲の取得
    Set rngTable = Sheets("List02").UsedRange
    Set rngKey = Sheets("List01").UsedRange.Columns(1)

    'キーワードのセル範囲のセルを次々と見て行く。
    For Each c In rngKey.Cells
        'Match関数でキーワードを検索(見つかったら行番号、見つからなかったらエラー値が返ってくる)
        ixRow = Application.Match(c.Value, rngTable.Columns(1), 0)
        '返ってきた値がエラーで無かったら
        If Not IsError(ixRow) Then
            '表の(行番号、2列目)の値をキーワードのセルの右隣りのセルの値に転記
            c.Offset(, 1).Value = rngTable(ixRow, 2).Value
        End If
    Next
End Sub

 
こんな感じでわかりますか?
このコードについて質問や解説を求められても、
こちらが返事できるか確約できませんので、あしからずご了承願います。
 
しかし、VBAで、1個づつセルを見て行って、1個づつ計算して、1個づつ書き込むと、
処理は遅くなります。
シート上のセルにVLookup関数で数式を書き込むだけで十分かもしれません。

トピックに返信