Excel VBA 質問スレッド №2016 (未解決)
マッチ関数を使って別シートからデータを転記したい
投稿者 : n 投稿日時 : 2024/09/26(Thu) 10:13:35 OS : Windows 10 EXCEL : Excel 2021
シート1のN列のデータは、全部は入力されておらず飛び飛びで入力
シート2のC列のからシート1のN列の番号と一致する値をシート1のB列にシート2のD列を入力したい。
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プロパティはありません。
とりあえず動作するように修正するなら、こんな感じでしょうか。
(ご希望どおりの動作になるかは存じません)
>シート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の方が簡単でしょう。
たぶんこうしたいのだろうと推測して書いてます。
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さん案 推奨ですが・・・
表題のように、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 )