3

連結して 3 番目のヘルパー列に結合する 2 つの列があります。

1 つは 4 桁の列で、もう 1 つは 1 桁です。

例えば:

COLUMNA    COLUMNB  COLUMNC
1234       1        12341
1234       1        12341
1234       2        12342
2345       1        23451
2345       2        23452
2345       2        23452

次に、各識別子の列 C に一意の値がいくつあるかを示す配列数式を (各行にある識別子を使用して) 4 番目の列で実行します。

可能であれば、ヘルパー列の使用を回避したいと思います-コードで参照できる範囲(数値形式)をVBAで作成して、ヘルパー列を廃止できるようにします。

うまくいけば、それは誰かにとって意味があり、彼らはそれを行う方法を知っています.

前もって感謝します。

編集:申し訳ありませんが、以下のSantoshが提供する非常に有用な回答(私が抱えている別の問題で間違いなく使用できます)に基づいて、私は自分自身を完全に説明していないことに気付きました.

各行には識別子があります (ここでは COLUMN_IDENT として示されています)。

COLUMNA    COLUMNB  COLUMNC    COLUMN_IDENT
    1234   1        12341      555
    1234   1        12341      555
    1234   2        12342      555
    2345   1        23451      666
    2345   2        23452      666
    2345   2        23452      666

次に、(FREQUENCY 関数に基づく) 配列数式を使用して、一意の識別子 (この場合は 555 と 666) ごとに、連結された COLUMN C で発生する一意の値の数を示すテーブルを作成します。 555 の場合は 2、666 の場合は 2)。

私は次のようなレポートになります。

IDENT   UNIQUE_COUNT
555     2
666     2

私がコードでやろうとしているのは、元のテーブルでヘルパー COLUMNC の必要性を取り除き、2 番目のテーブルで同じ結果を達成できるようにすることです。

繰り返しますが、事前に感謝します。

4

2 に答える 2

0

以下のコードを試してください。

Sub sample()

    Dim lastRow As Long

    With Sheets("Sheet1")
        lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
        .Range("A1:B" & lastRow).RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
    End With
End Sub

ここに画像の説明を入力

于 2013-05-03T00:30:22.223 に答える
0

OK、数か月後、私は自分の質問に対する答えに気づきました。

いくつかの方法があります (おそらく他にもあります)。

1)配列式を使用して、VBAなしで実行できます。

あなたが持っている場合:

+---+---------+---------+-----+
| | | | あ | ビ | シー |
+---+---------+---------+-----+
| | 1 | コラムナ | コラム | ID |
| | 2 | 1234 | 1 | 555 |
| | 3 | 1234 | 1 | 555 |
| | 4 | 1234 | 2 | 555 |
| | 5 | 2345 | 1 | 666 |
| | 6 | 2345 | 2 | 666 |
| | 7 | 2345 | 2 | 666 |
| | 8 | | | | | | |
+---+---------+---------+-----+

...そして、これを生成したい:

+---+-----+--------------+
| | | | D | え |
+---+-----+--------------+
| | 1 | ID | ユニークカウント |
| | 2 | 555 | 2 |
| | 3 | 666 | 2 |
| | 4 | | | | |
+---+-----+--------------+

...次に、これを E2 と E3 の配列数式として配置します (範囲が正しいことを確認してください)。

=SUM(IF(FREQUENCY(IF(C2:C7=D2,MATCH(A2:A7&B2:B7,A2:A7&B2:B7,0)),IF(C2:C7=D2,MATCH(A2:A7&B2:B7,A2:A7&B2:B7,0)))>0,1))

2)VBAで必要な場合は、(とりわけ)Evaluate「チート」を実行できます(ここでは、の省略形である角括弧を使用しましたEvaluate):

Range("E2") = [SUM(IF(FREQUENCY(IF(C2:C7=D2,MATCH(A2:A7&B2:B7,A2:A7&B2:B7,0)),IF(C2:C7=D2,MATCH(A2:A7&B2:B7,A2:A7&B2:B7,0)))>0,1))]

それで、誰かが疑問に思っているなら、それは「仮想ヘルパー列」を構築するいくつかの方法です.

于 2014-03-08T06:30:00.867 に答える