1

我想使用 VBA 根据另一列中的条件提取一个唯一的有序列表。所以,我有两列A,B。

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

应该产生一个列表

C
==
a
c

我对 VBA 非常非常陌生,因此将不胜感激。

哦,第二个列表将随着第一个列表的每次更改而更新,因此需要擦除以确保没有剩余,例如,如果第二个“a”设置为 FALSE。

4

2 回答 2

2

这是一种仅限公式的方法。是否实用取决于您的情况,但我已经使用类似于原始问题中的数据样本对其进行了测试:

  1. 在电子表格顶部插入一个空白行作为标题行。
  2. 创建一个新的公式列,仅当列“B”为真时才会列出列“A”的元素。例如,将以下公式放在单元格 D2 中,然后将其复制下来:=IF(B2,A2,"")
  3. 现在您可以应用上面 t.thielemans 链接的第二页中描述的技术。

这种方法的一个潜在缺点是,当 B 列为“FALSE”时,公式返回的空白单元格不会消失 - 您的过滤视图中仍然会有空白结果。

为方便起见,我将在此处复制参考: Getting unique values in Excel by using formulas only

于 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 回答