在引用excel中的列时创建唯一值列表

时间:2015-08-06 20:42:47

标签: excel-vba excel-formula vba excel

我在同一个工作簿中有两个工作表。在Sheet1 第1列是预期的库存条形码,在Sheet2中,第2列由我扫描的条形码组成。

我在条件格式中编写了一个公式来检查项目第2列并在它们不在第1列中时为它们着色,但我不想要滚动整个列表以查看此内容。

我想要做的是填充第三个(和第四个数量)列,只包含第2列中的条目而不是第1列,如果可能,列出在第2列中找到它的次数。

示例:

第1栏

bc123     
bc1234      
bc12345      
bc123456      
bc1234567      

第2栏

bc12345      
bc123456      
bc56789      
bc67890      
bc67890       

第3列(自动填充第2列中的唯一条目)

bc56789       1      
bc67890       2       

谢谢!

1 个答案:

答案 0 :(得分:0)

在这里,我的VBA解决您的问题:

Public Sub findAndCount()

    Dim sh1, sh2 As Worksheet
    Dim foundCell As Range
    Dim startSheet2, resultRow As Integer

    'Set sheets
    Set sh1 = Sheets("Sheet1")
    Set sh2 = Sheets("Sheet2")

    'Set the start row of column from Sheet2
    startRow = 1
    resultRow = 1

    'Clear old result from column C & D of Sheet1
    sh1.Range("C:D").ClearContents

    'Loop all row of column 2 from Sheet2 until blank
    Do While sh2.Range("B" & startRow) <> ""

        'Find value in column A of Sheet1
        Set foundCell = sh1.Range("A:A").Find(sh2.Range("B" & startRow), LookIn:=xlValues)

        'If match value is not found
        If foundCell Is Nothing Then

            'Find result is already exist or not
            Set foundCell = sh1.Range("C:C").Find(sh2.Range("B" & startRow), LookIn:=xlValues)

            'If result is not exist, add new result. (Here, I show result in Sheet1, you can change it.)
            If foundCell Is Nothing Then

                'Set barcode
                sh1.Range("C" & resultRow) = sh2.Range("B" & startRow)

                'Set count
                sh1.Range("D" & resultRow) = 1

                'Increase result row
                resultRow = resultRow + 1

            'If already exist
            Else

                'Increase count
                foundCell.Offset(0, 1) = foundCell.Offset(0, 1).Value + 1

            End If

        End If

        'Increase row
        startRow = startRow + 1

    Loop

End Sub