Excel VBA 質問スレッド №2040 (未解決)
マッチ関数を使って別シートから一致したデータを転記
投稿者 : 10/31 投稿日時 : 2024/10/31(Thu) 13:18:53 OS : Windows 11 EXCEL : Excel 2021
対象者シートのJ列の値と
toシートのD列の値で
値が一致したら
データを書き出しています。
対象者シートのJ列の値と
toシートのD列の値で
値が一致したら
データを書き出しています。
Sub test() Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = Worksheets("対象者") Set ws2 = Worksheets("to") Dim sa As Range With ws1 Set sa = .Range("J3:J" & .Cells(Rows.Count, "J").End(xlUp).Row) End With Dim i As Long For i = 3 To ws2.Cells(Rows.Count, 4).End(xlUp).Row Dim hit As Variant hit = Application.Match(ws2.Cells(i, "D").Value, sa, 0) If IsError(hit) Then ws2.Range(ws2.Cells(i, "B"), ws2.Cells(i, "EJ")).Copy ws1.Cells(Rows.Count, "H").End(xlUp).Offset(1) ws1.Range("J3").End(xlDown).Offset(0, 135) = "〇" End If ここまではうまくいきます。 対象者しーとtoシートの値が一致したら〇をしたいのですが ここから下のコードが飛びません。 If IsError(hit) Then ws1.Range("J3").End(xlDown).Offset(0, 135) = "〇" End If Next End Sub
スポンサーリンク
[返信 1] Re : マッチ関数を使って別シートから一致したデータを転記
投稿者 : jindon 投稿日時 : 2024/10/31(Thu) 13:39:34
>対象者しーとtoシートの値が一致したら〇をしたいのですが
Application.Matchメソッドは
検索対象がない場合にエラーを返すので IsNumeric で判断
If IsNumeric(hit) Then
>対象者しーとtoシートの値が一致したら〇をしたいのですが
Application.Matchメソッドは
検索対象がない場合にエラーを返すので IsNumeric で判断
If IsNumeric(hit) Then
[返信 2] Re : マッチ関数を使って別シートから一致したデータを転記
投稿者 : 10/31 投稿日時 : 2024/10/31(Thu) 13:54:41
■[返信 1] jindonさん(2024-10-31 13:39:34)の記事
> >対象者しーとtoシートの値が一致したら〇をしたいのですが
>
> Application.Matchメソッドは
> 検索対象がない場合にエラーを返すので IsNumeric で判断
>
> If IsNumeric(hit) Then
飛びませんでした、、、
検索値は文字列ではなく、数値です。
■[返信 1] jindonさん(2024-10-31 13:39:34)の記事
> >対象者しーとtoシートの値が一致したら〇をしたいのですが
>
> Application.Matchメソッドは
> 検索対象がない場合にエラーを返すので IsNumeric で判断
>
> If IsNumeric(hit) Then
飛びませんでした、、、
検索値は文字列ではなく、数値です。
[返信 3] Re : マッチ関数を使って別シートから一致したデータを転記
投稿者 : jindon 投稿日時 : 2024/10/31(Thu) 14:09:07
■[返信 2] 10/31さん(2024-10-31 13:54:41)の記事
> 飛びませんでした、、、
> 検索値は文字列ではなく、数値です。
検索値が文字列だろうが数値だろうがApplication.Matchメソッドの返り値は数値またはエラー値です。
返り値が数値なら検索値が存在、エラー値なら検索値が無い、ということです。
Step Debug してhitの値を確認してください。
■[返信 2] 10/31さん(2024-10-31 13:54:41)の記事
> 飛びませんでした、、、
> 検索値は文字列ではなく、数値です。
検索値が文字列だろうが数値だろうがApplication.Matchメソッドの返り値は数値またはエラー値です。
返り値が数値なら検索値が存在、エラー値なら検索値が無い、ということです。
Step Debug してhitの値を確認してください。
[返信 4] Re : マッチ関数を使って別シートから一致したデータを転記
投稿者 : 10/31 投稿日時 : 2024/10/31(Thu) 14:56:47
■[返信 3] jindonさん(2024-10-31 14:09:07)の記事
> ■[返信 2] 10/31さん(2024-10-31 13:54:41)の記事
> > 飛びませんでした、、、
> > 検索値は文字列ではなく、数値です。
>
> 検索値が文字列だろうが数値だろうがApplication.Matchメソッドの返り値は数値またはエラー値です。
> 返り値が数値なら検索値が存在、エラー値なら検索値が無い、ということです。
>
> Step Debug してhitの値を確認してください。
If IsNumeric(hit) Then
ws1.Range("J3").End(xlDown).Offset(0, 135) = "〇"
End If
このコードだと1つしか〇がつきませんでした。
〇がつく対象は100人ほどいます、、、
■[返信 3] jindonさん(2024-10-31 14:09:07)の記事
> ■[返信 2] 10/31さん(2024-10-31 13:54:41)の記事
> > 飛びませんでした、、、
> > 検索値は文字列ではなく、数値です。
>
> 検索値が文字列だろうが数値だろうがApplication.Matchメソッドの返り値は数値またはエラー値です。
> 返り値が数値なら検索値が存在、エラー値なら検索値が無い、ということです。
>
> Step Debug してhitの値を確認してください。
If IsNumeric(hit) Then
ws1.Range("J3").End(xlDown).Offset(0, 135) = "〇"
End If
このコードだと1つしか〇がつきませんでした。
〇がつく対象は100人ほどいます、、、
[返信 5] Re : マッチ関数を使って別シートから一致したデータを転記
投稿者 : jindon 投稿日時 : 2024/10/31(Thu) 15:09:14
■[返信 4] 10/31さん(2024-10-31 14:56:47)の記事
> このコードだと1つしか〇がつきませんでした。
> 〇がつく対象は100人ほどいます、、、
ですから、検索対象が一つしか見つからないということです。
Matchは検索値と検索範囲のデータ型が一致しないとエラー値が返るので、検索値が文字列(数値に見えるが文字列)あるいはその逆ということはありませんか?
■[返信 4] 10/31さん(2024-10-31 14:56:47)の記事
> このコードだと1つしか〇がつきませんでした。
> 〇がつく対象は100人ほどいます、、、
ですから、検索対象が一つしか見つからないということです。
Matchは検索値と検索範囲のデータ型が一致しないとエラー値が返るので、検索値が文字列(数値に見えるが文字列)あるいはその逆ということはありませんか?
[返信 6] Re : マッチ関数を使って別シートから一致したデータを転記
投稿者 : ピロリ 投稿日時 : 2024/11/02(Sat) 09:25:07
■[返信 4] 10/31さん(2024-10-31 14:56:47)の記事
> If IsNumeric(hit) Then
> ws1.Range("J3").End(xlDown).Offset(0, 135) = "〇"
> End If
> このコードだと1つしか〇がつきませんでした。
> 〇がつく対象は100人ほどいます、、、
「〇」を出力した後に ↓下の Debug文を入れて、意図した値が処理(100人分?の処理)されているか?
意図したセルへ「〇」を設定しているか? についても、確認してみてはいかがでしょう。
Debug.Print "処理した値:" & ws2.Cells(i, "D").Value & " -> " & _
"〇のセル:" & ws1.Range("J3").End(xlDown).Offset(0, 135).Address
もしかして やりたいことって、↓ではないですよね? 外していたらご免なさい。読み捨てて下さい。
If IsNumeric(hit) Then
ws1.Range("J3").Offset(hit - 1, 135) = "〇"
End If
ちなみに、漢数字の零:「〇」を設定しているみたいですが、記号の丸:「○」でなくて問題ないですか?
■[返信 4] 10/31さん(2024-10-31 14:56:47)の記事
> If IsNumeric(hit) Then
> ws1.Range("J3").End(xlDown).Offset(0, 135) = "〇"
> End If
> このコードだと1つしか〇がつきませんでした。
> 〇がつく対象は100人ほどいます、、、
「〇」を出力した後に ↓下の Debug文を入れて、意図した値が処理(100人分?の処理)されているか?
意図したセルへ「〇」を設定しているか? についても、確認してみてはいかがでしょう。
Debug.Print "処理した値:" & ws2.Cells(i, "D").Value & " -> " & _
"〇のセル:" & ws1.Range("J3").End(xlDown).Offset(0, 135).Address
もしかして やりたいことって、↓ではないですよね? 外していたらご免なさい。読み捨てて下さい。
If IsNumeric(hit) Then
ws1.Range("J3").Offset(hit - 1, 135) = "〇"
End If
ちなみに、漢数字の零:「〇」を設定しているみたいですが、記号の丸:「○」でなくて問題ないですか?
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2024-12-08 00:04:44 )