1

私が達成しようとしているのは、列内の一意の値(文字列)のリストを返すことです。そのリストを配列に入れ、値のリストを新しいシート、たとえば列Aに貼り付けます。次に、各配列要素について、元のリストが発生した回数をカウントし、新しいシートの列Bにその頻度のカウントを返します。そのユニークな文字列。

これはこれまでの私のコードです。

Sub UniqueList()
Dim rListPaste As Range
Dim causeList As Range
Dim iReply As Integer
Dim element As Variant

On Error Resume Next

Set rListPaste = Application.InputBox _
(Prompt:="Please select the destination cell", Type:=8)

    If rListPaste Is Nothing Then
       iReply = MsgBox("No range nominated," _
          & " terminate", vbYesNo + vbQuestion)
      If iReply = vbYes Then Exit Sub
    End If


causeList = Range("E1", Range("E65536").End(xlUp))
Range("causeList").AdvancedFilter Action:=xlFilterCopy, Unique:=True
Range("causeList").AdvancedFilter CopyToRange:=causeList.Cells(1, 1)

element = 0
For Each element In causeList
    element = element + 1
Next element
End


End Sub
4

1 に答える 1

5

あなたが探しているものを達成するための複数の方法があります:

1.ピボットテーブルを使用します。

データ範囲にピボットテーブルを挿入するだけです。関心のあるフィールド(列名)を、行フィールドとデータフィールドの両方にドロップします。ユニークなアイテムのリストとその横にカウントが表示されます。データが変更された場合は、ピボットテーブルを更新する必要があります

2.一意の値のリストを作成し、COUNTIF式を追加 します。最初に、列に詳細フィルターを適用します([データ]->[フィルター]->[詳細])。ここで、[別の場所にコピー]を選択し、データ範囲([リスト範囲]として)、宛先([コピー先])を選択し、[一意の値]のみをオンにします。その一意のリストを使用して、次の列にCOUNTIF式を追加します。

3. VBA

次のコードは、一意の値とその頻度のリストを出力します。Dictionaryオブジェクトを使用するため、「MicrosoftScriptingLibrary」への参照を追加する必要があります。

Sub CountUnique(rngInput As Range、rngTarget As Range)

    新しい辞書として薄暗い
    バリアントとしての薄暗いvarCell
    バリアントとしての薄暗いvarKey
    Dim rngOut As Range
    rngInputの各varCellについて
        そうでない場合d.Exists(varCell.Value)Then
            d.varCell.Value、0&を追加します
        終了する場合
        d(varCell.Value)= d(varCell.Value)+ 1
    次

    rngOut = rngTarget(1、1)を設定します
    d.Keysの各varKeyについて
        rngOut.Value = varKey
        rngOut.Offset(、1)= d(varKey)
        rngOut = rngOut.Offset(1)を設定します
    次

サブ終了
于 2013-01-14T13:44:59.553 に答える