Excel VBA 質問スレッド №2016 (未解決)

マッチ関数を使って別シートからデータを転記したい

投稿者 : n     投稿日時 : 2024/09/26(Thu) 10:13:35     OS : Windows 10     EXCEL : Excel 2021
Sub 検索値に紐づく値を別シートから取得する2()

    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim i, a As Long
    Dim lastRow1 As Long
    
    ' シート1とシート2を設定
    Set ws1 = Worksheets("転記")
    Set ws2 = Worksheets("名簿")
    
    ' シート1の最終行を取得
    
   i = ws1.Cells(ws1.Rows.Count, "F").End(xlUp).Row
   Dim sa As Range
    
   
    With ws2
        Set sa = .Range("C2:C" & .Cells(Rows.Count, "C").End(xlUp).Row)
    End With
    
       
        Dim hit As Variant
        hit = Application.Match(ws1.Cells(i, 14).Value, sa, 0)
        
If Not IsError(hit) Then
            ws1.Cells(i, 2).Value = hit
            ws1.Cells(i, 2).Value = hit.Offset(0.1)
            
        Else
            ws1.Cells(i, 2).Value = ""
        End If
 
   

End Sub





シート1のN列のデータは、全部は入力されておらず飛び飛びで入力
シート2のC列のからシート1のN列の番号と一致する値をシート1のB列にシート2のD列を入力したい。

スポンサーリンク
[返信 1] Re : マッチ関数を使って別シートからデータを転記したい
投稿者 : さんこう     投稿日時 : 2024/09/26(Thu) 11:00:20
>シート2のC列のからシート1のN列の番号と一致する値をシート1のB列にシート2のD列を入力したい。

日本語になっていませんので、なにをしたいのかわかりません。


>ws1.Cells(i, 2).Value = hit.Offset(0.1)

「Application.Match」の戻り値は検索範囲内の位置なので、Offsetプロパティはありません。


とりあえず動作するように修正するなら、こんな感じでしょうか。
(ご希望どおりの動作になるかは存じません)

Sub 検索値に紐づく値を別シートから取得する3()

    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim i As Long
    
    ' シート1とシート2を設定
    Set ws1 = Worksheets("転記")
    Set ws2 = Worksheets("名簿")
    
    ' シート1の最終行を取得
    i = ws1.Cells(ws1.Rows.Count, "F").End(xlUp).Row
       
    Dim hit As Variant
    hit = Application.Match(ws1.Cells(i, "N").Value, ws2.Columns("C:C"), 0)
    
    If Not IsError(hit) Then
        ws1.Cells(i, "B").Value = ws2.Cells(hit, "D")
    Else
        ws1.Cells(i, "B").Value = ""
    End If

End Sub

[返信 2] Re : マッチ関数を使って別シートからデータを転記したい
投稿者 : higeru     投稿日時 : 2024/09/26(Thu) 11:01:12
たぶんこうしたいのだろうと推測して書いてます。
MacthでなくVLookupの方が簡単でしょう。

Sub 検索値に紐づく値を別シートから取得する2()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    ' シート1とシート2を設定
    Set ws1 = Worksheets("転記")
    Set ws2 = Worksheets("名簿")
    
    Dim sa As Range
    Set sa = ws2.Range("C2:D" & ws2.Cells(Rows.Count, "C").End(xlUp).Row)
    With ws1
        Dim i As Long
        For i = 2 To .Cells(Rows.Count, "F").End(xlUp).Row
            Dim hit As Variant
            hit = Application.VLookup(.Cells(i, "N").Value, sa, 2, 0)
            If IsError(hit) Then
                .Cells(i, "B").Value = ""
            Else
                .Cells(i, "B").Value = hit
            End If
        Next
    End With
End Sub

[返信 3] Re : マッチ関数を使って別シートからデータを転記したい
投稿者 : ピロリ     投稿日時 : 2024/09/27(Fri) 07:44:45
表題のように、Macth関数にこだわりがあるのなら、[返信 2] higeruさん ご提示コードの
9step目は、
  Set sa = ws2.Range("C2:D" & ws2.Cells(Rows.Count, "C").End(xlUp).Row)
             ↓
  Set sa = ws2.Range("C2:C" & ws2.Cells(Rows.Count, "C").End(xlUp).Row)
14step目は、
  hit = Application.VLookup(.Cells(i, "N").Value, sa, 2, 0)
             ↓
  hit = Application.Match(.Cells(i, "N").Value, sa, 0)
18step目は、
  .Cells(i, "B").Value = hit
             ↓
  .Cells(i, "B").Value = ws2.Cells(sa(1).Row + hit - 1, "D")  とか、
  .Cells(i, "B").Value = sa(1).Offset(hit - 1, 1)
へ変更すれば良いと思います。 個人的には、higeruさん案 推奨ですが・・・

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-05 17:17:52 )
タイトルとURLをコピーしました