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

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

投稿者 : 10/31     投稿日時 : 2024/10/31(Thu) 13:18:53     OS : Windows 11     EXCEL : Excel 2021
対象者シートの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

[返信 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

飛びませんでした、、、
検索値は文字列ではなく、数値です。

[返信 3] Re : マッチ関数を使って別シートから一致したデータを転記
投稿者 : jindon     投稿日時 : 2024/10/31(Thu) 14:09:07
■[返信 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人ほどいます、、、



[返信 5] Re : マッチ関数を使って別シートから一致したデータを転記
投稿者 : jindon     投稿日時 : 2024/10/31(Thu) 15:09:14
■[返信 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

ちなみに、漢数字の零:「〇」を設定しているみたいですが、記号の丸:「○」でなくて問題ないですか?

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

ステータス  :

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




( 処理日時 : 2024-12-08 00:04:44 )
タイトルとURLをコピーしました