Sub Sample()
Range("A1").AutoFilter Field:=1, Criteria1:="土屋"
Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Select
End Sub
実行すると、次のようになります。
これらのセルを、すべて操作するのは簡単です。
Sub Sample()
Dim c As Range
Range("A1").AutoFilter Field:=1, Criteria1:="土屋"
For Each c In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
c.Font.ColorIndex = 3
Next c
Range("A1").AutoFilter
End Sub
絞り込まれた結果の「すべてのセル」ではなく、今回操作したいのは、次の部分です。
この部分だけを操作するには、次の2つの方法が考えられます。簡単な方法と、難しい方法です。
簡単な方法:行と列をチェックする
この操作したいセルとは、絞り込まれた結果のうち
1行目ではないセル
B列のセル
ということです。したがって、For Eachの中で、毎回これらの条件を判定してやればいいです。
Sub Sample()
Dim c As Range, Target As Range
Range("A1").AutoFilter Field:=1, Criteria1:="土屋"
Set Target = Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
For Each c In Target
If c.Row > 1 And c.Column = 2 Then
c.Font.ColorIndex = 3
End If
Next c
Range("A1").AutoFilter
End Sub
Sub Sample()
Dim A As Range, B As Range, Target As Range
Range("A1").AutoFilter Field:=1, Criteria1:="土屋"
With ActiveSheet.AutoFilter
Set A = Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
Set B = Range(Range("B2"), Cells(.Range(.Range.Count).Row, "B"))
End With
Set Target = Application.Intersect(A, B)
Target.Font.ColorIndex = 3
Range("A1").AutoFilter
End Sub
Sub Sample()
Dim A As Range, B As Range
Range("A1").AutoFilter Field:=1, Criteria1:="土屋"
With ActiveSheet.AutoFilter
Set A = Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
Set B = Range(Range("B2"), Cells(.Range(.Range.Count).Row, "B"))
End With
Application.Intersect(A, B).Font.ColorIndex = 3
Range("A1").AutoFilter
End Sub
Sub Sample()
Dim A As Range, B As Range, c As Range
Range("A1").AutoFilter Field:=1, Criteria1:="土屋"
With ActiveSheet.AutoFilter
Set A = Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
Set B = Range(Range("B2"), Cells(.Range(.Range.Count).Row, "B"))
End With
For Each c In Application.Intersect(A, B)
c.Font.ColorIndex = 3
Next c
Range("A1").AutoFilter
End Sub
Sub Sample()
Dim c As Range
Range("A1").AutoFilter Field:=1, Criteria1:="土屋"
For Each c In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
If c.Column = 3 And c.Row > 1 Then
c = "○"
End If
Next c
Range("A1").AutoFilter
End Sub
つまり、絞り込んだ結果を表す「Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)」にC列のセルは含まれていませんので、上記コードのように、条件判定で「If c.Column = 3 And c.Row > 1 Then」と、"C列かどうか"を判定しても、該当するセルは見つかりません。そんなときは、お隣B列のセルを使ってやります。
Sub Sample()
Dim c As Range
Range("A1").AutoFilter Field:=1, Criteria1:="土屋"
For Each c In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
If c.Column = 2 And c.Row > 1 Then
c.Offset(0, 1) = "○"
End If
Next c
Range("A1").AutoFilter
End Sub
次は、もう少し変えてみましょう。今度は"○"を代入するのではなく、セルの数値を計算します。
リストを"土屋"で絞り込んで、該当する行だけ「合計」を計算するには、次のようにします。
Sub Sample()
Dim c As Range
Range("A1").AutoFilter Field:=1, Criteria1:="土屋"
For Each c In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
If c.Column = 4 And c.Row > 1 Then
c = c.Offset(0, -1) + c.Offset(0, -2)
End If
Next c
Range("A1").AutoFilter
End Sub
Sub Sample()
Dim c As Range
Range("A1").AutoFilter Field:=1, Criteria1:="土屋"
For Each c In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
If c.Column = 4 And c.Row > 1 Then
c = "=" & c.Offset(0, -1).Address(False, False) & "+" & _
c.Offset(0, -2).Address(False, False)
End If
Next c
Range("A1").AutoFilter
End Sub
Private Sub CommandButton1_Click()
Dim c As Range
If ComboBox1.Text = "" Then Exit Sub
ListBox1.Clear
Range("A1").AutoFilter Field:=2, Criteria1:=ComboBox1.Text
For Each c In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
If c.Column = 1 And c.Row > 1 Then
ListBox1.AddItem c
End If
Next c
Range("A1").AutoFilter
Label1.Caption = ""
End Sub
Private Sub ListBox1_Click()
Dim FoundCell As Range
Set FoundCell = Range("A:A").Find(What:=ListBox1.Text, Lookat:=xlWhole)
Label1.Caption = FoundCell.Offset(0, 2)
End Sub
Private Sub UserForm_Initialize()
With ComboBox1
.AddItem "田中"
.AddItem "鈴木"
.AddItem "土屋"
.AddItem "佐藤"
End With
End Sub
Sub Sample()
Dim FoundCell As Range
Set FoundCell = Range("A:A").Find(What:="田中", Lookat:=xlWhole)
If Not FoundCell Is Nothing Then
MsgBox "田中は" & vbCrLf & FoundCell.Offset(0, 1) & vbCrLf & FoundCell.Offset(0, 2)
End If
End Sub
Sub Sample()
Dim c As Range, LastDate As Date, MAX As Long
Range("A1").AutoFilter Field:=1, Criteria1:="田中"
For Each c In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
If c.Column = 2 And c.Row > 1 Then
If LastDate < c.Value Then
LastDate = c.Value
MAX = c.Offset(0, 1)
End If
End If
Next c
Range("A1").AutoFilter
MsgBox "最新は" & vbCrLf & LastDate & vbCrLf & MAX
End Sub
Sub Sample()
Dim c As Range, LastDate As Date
Dim i As Long, Target As Range, Member As Variant
Member = Array("田中", "鈴木", "山田")
For i = 0 To UBound(Member)
Range("A1").AutoFilter Field:=1, Criteria1:=Member(i)
LastDate = 0
Set Target = Nothing
For Each c In Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
If c.Column = 2 And c.Row > 1 Then
If LastDate < c.Value Then
LastDate = c.Value
Set Target = Range(c.Offset(0, -1), c.Offset(0, 1))
End If
End If
Next c
Target.Copy Cells(i + 2, "E")
Next i
Range("A1").AutoFilter
End Sub