excel - vba:查找文本中不存在的数字

标签 excel vba

我在 excel 中有两个单元格,它们包含用逗号分隔的数字字符串,我需要找到单元格 1 中存在但单元格 2 中不存在的数字。我可以对列进行文本处理,然后进行 vlookup,但还有更多有效的方法来做到这一点?

单元格 1:360,370,400,420
单元 2:400,420

答案:360,370

最佳答案

您可以创建一个自定义函数来执行此操作。放入普通代码模块,然后您可以在工作表上调用它,例如:
=GetUniques(A1,B1)它应该返回唯一值。

Function GetUniques(ByVal cell1 As Range, ByVal cell2 As Range, Optional reverse As Boolean = False) As Variant
'compares text strings of delimited numbers in two separate excel cells
' returns unique values from cell1 by default
' to return results from cell2 instead, use optional reverse=True
    Dim v As Variant
    Dim varValues As Variant
    Dim result As String

    If cell1.Cells.Count > 1 Or cell2.Cells.Count > 1 Then
        GetUniques = CVErr(xlErrRef)
        GoTo EarlyExit
    End If

    varValues = Split(cell1.Value, ",")
    For Each v In varValues
        v = Trim(v)
        If Not reverse Then
            If InStr(1, cell2.Value, v) = 0 Then
               result = IIf(result = vbNullString, v, result & "," & v)
            End If
        Else:
            If InStr(1, cell2.Value, v) > 0 Then
               result = IIf(result = vbNullString, v, result & "," & v)
            End If
        End If
    Next

    If Len(result) = 0 Then result = "No matches"
    GetUniques = result
EarlyExit:

End Function

注意:这假定单元格包含文本格式的数字,否则取决于用户本地,如 400,420 的值实际上意味着 Four-hundred thousand four-hundred & twenty
更新

一个简单的函数也可以做文本到列的事情。选择一个单元格,然后运行此宏。如果目标单元格中​​已有数据,这可能会覆盖数据(没有警告)。
Sub SplitTextToColumns()
If Selection Is Nothing Then Exit Sub
Dim cl As Range
Dim varValues As Variant
Dim i As Long

Set cl = Selection.Cells(1)
varValues = Split(cl, ",")
If  UBound(varValues) < 0 Then Exit Sub
cl.Resize(1, UBound(varValues) + 1).Value = varValues

End Sub

关于excel - vba:查找文本中不存在的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18899117/

相关文章:

python - 如何在 Python 中将时间值添加到日期时间值?

excel - 使用 VBA 将 csv 文件转换为 Excel(将列作为文本)

vba - 根据两个范围中的单元格值进行复制粘贴

vba - 无法使用 vba 从 selenium 的下拉列表中进行选择

excel - 如何在 Excel VBA 中创建进度条?

vba - 更改电子表格时使用 Outlook 从 Excel 发送自动电子邮件

vba - 如何在[vba] [powerpoint]中为图像添加颜色边框

vba - 在没有上限的情况下,在 VBA-ACCESS 中声明 Array() 不起作用

excel - 找到 Mr & Mrs 时插入额外的行,然后将数据复制到空白行

vba - 标记轮廓与系列线的线宽