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-12-08 05:58:44 )