投稿/コメントを表示します。

Mac版のエクセルで、ScriptingDictionaryが使えない為、何とか似た様な方法で解決できないか
ずっと考えていました。Collectionオブジェクトという、Dictionaryと似た様なものも調べてみたのですが
Existsメソッドもなく思った様には使えませんでした。(><)
とりあえず、配列を使って書いてみましたので、記念に投稿します。(正常動作確認済み)
Dictionaryが使えない場合、この様な動きのプログラムを書くにはどんな方法が良さそうでしょうか?

他にも、基礎編の「細巻き?」で勉強したFor文を使った方法でも書いてみましたが、名前でソートをする手間が省けるので、配列使った方が少しは早いのかなぁと思いました。

■Chap02-71 Sheet1の課題■
Sub test1()
    Dim sList() As String
    Dim mx As Long
    Dim c As Long
    '重複しないリストをC1に書き出し
    Range("A1:A273").AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Range("C1"), _
    Unique:=True
    
    '上記リストを配列に格納
    mx = Range("C" & Rows.Count).End(xlUp).Row
    For c = 1 To mx
        ReDim Preserve sList(1, c)
        sList(0, c - 1) = Range("C" & c).Value
    Next
    
    Dim rg As Range
    Dim cnt As Long
    '重複回数をカウントし、配列に格納
    For c = LBound(sList, 2) To UBound(sList, 2)
            For Each rg In Range("A1:A273")
            If sList(0, c) = rg.Value Then
                cnt = cnt + 1
                sList(1, c) = cnt
            End If
        Next
        cnt = 0
    Next
    
    '結果をD1に書き出し
    For c = LBound(sList, 2) To UBound(sList, 2)
        Range("D1").Offset(c).Value = sList(1, c)
    Next
    
End Sub

2020/11/02 11:07