1

VBAを使用して、別の列の条件に従って、一意の順序付きリストを抽出したいと思います。したがって、2つの列A、Bがあります。

A    B
========
a   FALSE
b   FALSE
c   TRUE
a   TRUE
b   FALSE
c   TRUE

リストになるはずです

C
==
a
c

私はVBAを初めて使用するので、助けていただければ幸いです。

ああ、2番目のリストは最初のリストが変更されるたびに更新されるため、たとえば2番目の「a」がFALSEに設定されている場合は、残りがないことを確認するためにワイプする必要があります。

4

2 に答える 2

2

これが数式のみのアプローチです。それが実用的かどうかはあなたの状況に依存しますが、私は元の質問のものと同様のデータのサンプルでそれをテストしました:

  1. スプレッドシートの上部に空白行を挿入して、ヘッダー行として機能させます。
  2. 列「B」がtrueの場合にのみ、列「A」の要素を一覧表示する新しい数式列を作成します。たとえば、セルD2に次の数式を配置し、それをコピーします=IF(B2,A2,"")
  3. これで、上記のt.thielemansによってリンクされた2番目のページで説明されている手法を適用できます。

このアプローチの潜在的な欠点の1つは、列Bが「FALSE」のときに数式によって返される空白のセルが消えないことです。フィルターされたビューには空白の結果が残ります。

便宜上、ここに参照をコピーします。 数式のみを使用してExcelで一意の値を取得する

于 2012-10-24T17:02:41.717 に答える
0

これについてどう思いますか?最初にMSスクリプトライブラリを追加します。

オプション明示

Sub Test()

Dim oRange As Range

Dim dict As Dictionary
Dim vArray As Variant
Dim vItem As Variant
Dim sKey As String
Dim sValue As String
Dim iCompare_TRUE As Integer

Dim lCnt As Long
Dim lCnt_Rows As Long

Set dict = New Dictionary

Set oRange = ThisWorkbook.Sheets(1).Range("A1:B6")

For lCnt = 1 To oRange.Rows.Count
    sKey = oRange(lCnt, 1)
    sValue = oRange(lCnt, 2)
    iCompare_TRUE = StrComp(sValue, "True")
    If Not dict.exists(sKey) And iCompare_TRUE = 0 Then
        With dict
            .Add sKey, sValue
        End With
    End If
Next lCnt

ReDim vArray(1 To dict.Count)
vArray = dict.Keys
lCnt_Rows = UBound(vArray) + 1

Set oRange = ThisWorkbook.Sheets(1).Range(Cells(1, 3), Cells(lCnt_Rows, 3))
oRange.Value = Application.Transpose(vArray)

End Sub
于 2012-10-24T13:43:40.050 に答える