首页 > 解决方案 > 如何根据一个标准从数组(2列)中创建一个值列表?

问题描述

我有以下数组:

ID        Chat nr
           #N/A
126551829   33
126554922   33
126555078   33
126555079   33
126555261   33
126555278   33
126553808   34
126553820   34
126554425   35
126555786   36
126555925   36
126555944   36
126556297   37
126556298   37
126556299   37
126556300   37
126556307   37
126556320   37
126556322   37
126556323   37
126556323   37
126556323   37
126556323   37
126556325   37
126556332   37
           #N/A
           #N/A
           #N/A
etc...

此数据可在名为“导入”的工作表中找到。在名为“仪表板”的工作表中,我有下拉列表,工作表的用户可以在其中选择聊天 nr。例如,如果用户选择 36,我想要此宏的以下输出(ID):

126555786   
126555925   
126555944   

我试图编写代码,但我的代码返回数组中的所有值,而不仅仅是带有“36”的值。此外,我在“导入”表中的聊天号码列中有公式。

Private Sub CommandButton2_Click()

Dim xRng As Range
Dim xLastRow As Long
Dim xLastRow2 As Long
Dim i As Integer
On Error Resume Next

Set xRng = Worksheets("Import").Range(Range("B18"))
If xRng(, 2).Value = Worksheets("Dashboard").Range("B9").Value Then
xRng.Copy Range("F6")
xLastRow = xRng.Rows.Count + 1
ActiveSheet.Range("F6:F" & xLastRow).RemoveDuplicates Columns:=1, Header:=xlNo
End If

End Sub

代码中的单元格说明:

我花了很多时间试图弄清楚这一点,但没有任何运气......我是 VBA 编码的新手,但我渴望学习。我当然会赞扬好的答案!

标签: arraysexcelvbaarraylist

解决方案


您可以尝试此代码(现在它将首先删除以前运行的输出):

Private Sub CommandButton2_Click()

Dim xRng As Range
Dim oRng As Range ' Output range
Dim iWS As Worksheet, dWS As Worksheet
Dim ChatNr As Long
Dim i As Integer, j As Integer
Dim LastRow As Long

Set iWS = ThisWorkbook.Sheets("Import")
Set dWS = ThisWorkbook.Sheets("Dashboard")
ChatNr = dWS.Cells(9, 2) ' cell B9

Set xRng = iWS.Range(dWS.Cells(18, 2).Value) ' cell B18, assuming the array name is defined in the scope of the iWS
Set oRng = dWS.Cells(6, 6) ' output in cell F6
LastRow = dWS.Cells(dWS.Rows.Count, 6).End(xlUp).Row
' clear previous output:
If LastRow >= 6 Then
    Range(dWS.Cells(6, 6), dWS.Cells(LastRow, 6)).ClearContents
End If
j = 0

For i = 1 To xRng.Rows.Count
    If IsError(xRng(i, 2)) = False Then ' added check for error
        If xRng(i, 2).Value = ChatNr Then
            oRng.Offset(j).Value = xRng(i, 1).Value
            j = j + 1
        End If
    End If
Next i

End Sub

推荐阅读