我想使用 VBA 根据另一列中的条件提取一个唯一的有序列表。所以,我有两列A,B。
A B
========
a FALSE
b FALSE
c TRUE
a TRUE
b FALSE
c TRUE
应该产生一个列表
C
==
a
c
我对 VBA 非常非常陌生,因此将不胜感激。
哦,第二个列表将随着第一个列表的每次更改而更新,因此需要擦除以确保没有剩余,例如,如果第二个“a”设置为 FALSE。
这是一种仅限公式的方法。是否实用取决于您的情况,但我已经使用类似于原始问题中的数据样本对其进行了测试:
=IF(B2,A2,"")
。这种方法的一个潜在缺点是,当 B 列为“FALSE”时,公式返回的空白单元格不会消失 - 您的过滤视图中仍然会有空白结果。
为方便起见,我将在此处复制参考: Getting unique values in Excel by using formulas only
你觉得这怎么样?首先添加 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