根据另一列vba excel中的条件复制唯一列表

我想使用VBA来提取一个唯一的,有序的列表,受另一列的条件限制。 所以,我有两列A,B

AB ======== a FALSE b FALSE c TRUE a TRUE b FALSE c TRUE 

应该导致一个列表

 C == a c 

我对VBA非常新,所以任何帮助,将不胜感激。

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

你觉得这怎么样? 首先添加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 

这是一个公式的方法。 是否实际取决于你的情况,但我已经用与原始问题类似的数据样本进行了testing:

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

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

为了方便起见,我将在这里复制引用: 仅使用公式获取Excel中的唯一值