回答編集履歴

2

コード追記

2022/05/12 06:38

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -45,4 +45,41 @@
45
45
  End With
46
46
  End Sub
47
47
  ```
48
+ 追記
49
+ ---
50
+ コメントにあった属性値を部分一致で検索する場合のコード例です。
51
+ WorksheetFunction.Matchを部分一致で検索するユーザー定義関数に置き換えました。
48
52
 
53
+ ```vba
54
+ Private Sub CommandButton1_Click()
55
+ Dim ws1 As Worksheet
56
+ Set ws1 = Sheets("リスト1")
57
+ Dim ws2 As Worksheet
58
+ Set ws2 = Sheets("リスト2")
59
+
60
+ Dim i As Long, r As Long, c As Long
61
+ With ws1
62
+ On Error Resume Next
63
+ For i = 2 To .Range("B" & Rows.Count).End(xlUp).Row
64
+ r = WorksheetFunction.Match(.Cells(i, 1), ws2.Range("A:A"), 0)
65
+ If Err.Number = 0 Then
66
+ c = MyMatch(.Cells(i, 2), Array("A", "B", "C", "D", "E"))
67
+ If c > 0 Then ws2.Cells(r, c + 1).Value = .Cells(i, 2)
68
+ End If
69
+ Next
70
+ On Error GoTo 0
71
+ End With
72
+ End Sub
73
+
74
+
75
+ Public Function MyMatch(v As String, ary) As Long
76
+ Dim i As Long
77
+ For i = 0 To UBound(ary)
78
+ If v Like "*" & ary(i) & "*" Then
79
+ MyMatch = i + 1
80
+ Exit For
81
+ End If
82
+ Next
83
+ End Function
84
+ ```
85
+

1

コード追記

2022/05/12 05:12

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -22,4 +22,27 @@
22
22
  ```
23
23
 
24
24
  存在しない番号や属性値があった場合はエラーになりますので、必要に応じてエラー処理を追加する必要があります。
25
+ その場合は下記のコードで。
25
26
 
27
+ ```vba
28
+ Private Sub CommandButton1_Click()
29
+ Dim ws1 As Worksheet
30
+ Set ws1 = Sheets("リスト1")
31
+ Dim ws2 As Worksheet
32
+ Set ws2 = Sheets("リスト2")
33
+
34
+ Dim i As Long, r As Long, c As Long
35
+ With ws1
36
+ On Error Resume Next
37
+ For i = 2 To .Range("B" & Rows.Count).End(xlUp).Row
38
+ r = WorksheetFunction.Match(.Cells(i, 1), ws2.Range("A:A"), 0)
39
+ If Err.Number = 0 Then
40
+ c = WorksheetFunction.Match(.Cells(i, 2), Array("A", "B", "C", "D", "E"), 0) + 1
41
+ If Err.Number = 0 Then ws2.Cells(r, c).Value = .Cells(i, 2)
42
+ End If
43
+ Next
44
+ On Error GoTo 0
45
+ End With
46
+ End Sub
47
+ ```
48
+