|
まゆん さん、こんばんわ。
>あの〜。恐れ入りますもうひとつ質問させてください。
>ExcelのCellの中に下記のような表があると例えます。
>A1 データ
>A2 001
<<略>>
>A9 006
>A10 007
>上記の表を例にすると答えは6です。
だとして。
Sub Test()
With Range("A1:A10")
.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
'Rangeは分断されていると一番上だけしかCountで返さなくなるので
'Areasで全部チェックして足していく
For Each c In .SpecialCells(xlCellTypeVisible).Areas
RR& = RR& + c.Rows.Count
Next
'1行目はタイトル行なのでデータの行数は -1
MsgBox RR& - 1, vbInformation, "Unique"
End With
End Sub
ベタに数えていく場合
Sub test()
Dim Rmax&, Rpos&, Flg As Boolean
Rmax& = 10 'A10まで検索するとして
Rpos& = 0
ReDim cdat(1 To Rmax&) As Variant '内容保管用
'
For RR& = 2 To Rmax&
With Cells(RR&, 1)
If .Value <> "" Then
Flg = True
For NN& = 1 To Rpos&
If cdat(NN&) = .Value Then
Flg = False: Exit For
End If
Next
'チェック後重複が無ければ配列に入れる
If Flg = True Then
Rpos& = Rpos& + 1
cdat(Rpos&) = .Value
End If
End If
End With
Next
MsgBox Rpos&, vbInformation, "Unique"
Erase Cdat
End Sub
ichinoseさんの配列数式も面白そうですね。
|
|