代わりに私の答えを次のように変更します。SpecialCells での作業はせいぜいトリッキーであるため、最善の解決策ではありませんが、これはニーズにかなり適している可能性があります。
Sub Illusion()
Dim Source, Dummy As Worksheet
Dim SRow, LRow As Long
Application.ScreenUpdating = False
With ThisWorkbook
Set Source = .ActiveSheet
Set Dummy = .Sheets.Add(After:=Sheets(Sheets.Count))
End With
SRow = 8
LRow = Range("H4").Value + 1
'Change the H10000 below to the correct end row of your unfiltered table.
Source.Range("B" & SRow & ":H10000").SpecialCells(xlCellTypeVisible).Copy
With Dummy
'We create an illusion that we copy only the names we need by bridging using a dummy sheet and copying from there.
.Range("A1").PasteSpecial xlPasteValues
.Range("A1:A" & LRow).Copy
'Paste to desired location as values as well.
.Delete
End With
Application.ScreenUpdating = True
End Sub
ここで行ったのは、表示されているセルをダミー シートにコピーし、そのダミー シートからコピーする名前の数を調整して、必要に応じてダミー シートを削除することでした。それは簡単で汚いですが、SpecialCells の複雑さに行かなければならないことに勝っています。