回答編集履歴

1

コード追記

2019/08/28 02:02

投稿

hatena19
hatena19

スコア34053

test CHANGED
@@ -11,3 +11,75 @@
11
11
 
12
12
 
13
13
  [複雑な条件(複数除外等)のオートフィルター(AutoFilter)|VBA技術解説](https://excel-ubara.com/excelvba4/EXCEL259.html)
14
+
15
+
16
+
17
+ 追記
18
+
19
+ ---
20
+
21
+ > フィルタにかけた後、抽出された項目の氏名をコピーして別シートに貼り付けるものです。
22
+
23
+
24
+
25
+ フィルターは手段で最終目的が該当する氏名のコピーなら、
26
+
27
+ オートフィルターは使わずに、
28
+
29
+ VBAで該当する氏名を配列に格納して、
30
+
31
+ それを出力先に代入すればシンプルになるでしょう。
32
+
33
+
34
+
35
+ コード例
36
+
37
+ ```vba
38
+
39
+ Sub NameCopy()
40
+
41
+ Dim ws01 As Worksheet: Set ws01 = Sheet1
42
+
43
+ Dim ws02 As Worksheet: Set ws02 = Sheet2
44
+
45
+ Dim col_Num As Long: col_Num = ws02.Range("A1")
46
+
47
+ Dim val As String: val = ws02.Range("A2")
48
+
49
+ Dim maxRow As Long: maxRow = ws01.Cells(1, 1).End(xlDown).Row
50
+
51
+ '該当する名前の格納用配列(最大数分確保しておく)
52
+
53
+ Dim aryName() As String: ReDim aryName(maxRow - 2)
54
+
55
+
56
+
57
+ Dim i As Long, cnt As Long
58
+
59
+ For i = 2 To maxRow
60
+
61
+ With ws01.Cells(i, col_Num)
62
+
63
+ If .Interior.Color = vbYellow And .Value = val Then
64
+
65
+ aryName(cnt) = ws01.Cells(i, 1)
66
+
67
+ cnt = cnt + 1
68
+
69
+ End If
70
+
71
+ End With
72
+
73
+ Next
74
+
75
+ ws02.Range("B:B").ClearContents
76
+
77
+ '名前配列を縦横変換して代入、代入するセル範囲のサイズを該当件数で制限しておく
78
+
79
+ ws02.Range("B1").Resize(cnt).Value = WorksheetFunction.Transpose(aryName)
80
+
81
+ End Sub
82
+
83
+
84
+
85
+ ```