Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA查找函数忽略百分比->;只查找小数_Vba_Excel - Fatal编程技术网

VBA查找函数忽略百分比->;只查找小数

VBA查找函数忽略百分比->;只查找小数,vba,excel,Vba,Excel,“我的宏”将搜索所有打开的工作簿中的活动单元格值(例如98%)。但是,在其他单元格中,它只能找到值0.98,而不能找到值98%。为什么? 这是我的宏: Sub FindIt2() Dim wSheet As Worksheet Dim wBook As Workbook Dim rFound As Range Dim firstAddress As String lookfor = Selection.Value On Error Resume Next For Each wBook In A

“我的宏”将搜索所有打开的工作簿中的活动单元格值(例如98%)。但是,在其他单元格中,它只能找到值0.98,而不能找到值98%。为什么?

这是我的宏:

Sub FindIt2()
Dim wSheet As Worksheet
Dim wBook As Workbook
Dim rFound As Range
Dim firstAddress As String
lookfor = Selection.Value

On Error Resume Next
For Each wBook In Application.Workbooks
    For Each wSheet In wBook.Worksheets

        Set rFound = wSheet.Cells.Find(What:=lookfor, After:=wSheet.Cells(1, 1), _
        LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=False)

        If Not rFound Is Nothing Then

            firstAddress = rFound.Address

            Do

                Application.Goto rFound, True

                MsgBox "The Search String has been found these locations: "

                Set rFound = wSheet.Cells.FindNext(rFound)

            Loop While Not rFound Is Nothing And rFound.Address <> firstAddress

        End If

    Next wSheet

Next wBook
On Error GoTo 0
Sub FindIt2()
将工作表设置为工作表
将wBook设置为工作簿
暗光范围
将第一个地址设置为字符串
lookfor=Selection.Value
出错时继续下一步
对于应用程序中的每个wBook。工作簿
对于wBook.工作表中的每个wSheet
设置rFound=wSheet.Cells.Find(What:=lookfor,After:=wSheet.Cells(1,1)_
查看:=xlother,搜索顺序:=xlByRows_
SearchDirection:=xlNext,MatchCase:=False)
如果没有找到,那就什么都不是了
firstAddress=rFound.Address
做
Application.Goto-rFound,True
MsgBox“已在以下位置找到搜索字符串:”
Set rFound=wSheet.Cells.FindNext(rFound)
未找到时循环为Nothing And rFound.Address firstAddress
如果结束
下一页
下一本书
错误转到0
有人知道如何解决这个问题吗?谢谢


编辑:我希望它同时找到:98%和0.98

有时98%是单元格的值。i、 e.当你在单元格中键入98%时。Excel会将其视为98%。在其他情况下,单元格值为.98或.98231,显示98%。很可能您希望查找两个有效数字的舍入,以便在值为.98321时找到.98

我会试着两者都找

cell.text和round(cell.value,2)


这篇文章展示了如何有效地使用Excel VBA中的舍入功能,
Find
缺少各种格式的值(不仅仅是百分比),即使数值与源相同(函数
Find)
的参数
What
)。 在下面列出的各种条件下,
Find
仅查找内容为
0.98
的单元格,格式可以是常规格式,也可以是数字格式(2位小数)

我尝试的是:

  • 使用
    lookfor=Selection.Value
    。更改
    选择所指向的(源)单元格的数字格式
    。无论
    选择的格式是百分比、数字(带任何小数位数)还是常规,这都无关紧要
    Find
    仅查找
    0.98
    的单元格,而不查找
    0.980
    的单元格,例如

  • 使用
    lookfor=Selection.Text
    。更改
    选择所指向的(源)单元格的数字格式
    <代码>查找
    仅查找与查看的单元格数目完全相同的单元格

  • 奇怪的是,这需要一种变通方法,因为
    Find
    不能同时找到
    0.98
    98%

    一个选项是使用一个或多个统一格式的帮助器列,并对这些列执行
    find

    find
    不起作用时,一个解决方案是在单元格中循环。如果您有大量的单元格,这可能会很慢,因此将要搜索的范围读入一个变体数组将使速度提高十倍或更多

    但这里有一个循环的想法,可以让你开始。注意:我使用了
    value2
    属性。看看为什么

    首先运行
    Setup
    宏,然后运行
    findValuePercent
    ,查看工作原理。然后,您可以根据自己的具体需求对其进行调整

    Option Explicit
    
    Sub Setup()
        Dim WS As Worksheet
    Set WS = Worksheets("sheet1")
    With WS
        .Cells(1, 1).Value = "98%"
        .Cells(2, 1).Value = 0.98
    
        Debug.Print .Cells(1, 1).Value, .Cells(1, 1).Text ' --> 0.98    98%
        Debug.Print .Cells(2, 1).Value, .Cells(2, 1).Text ' --> 0.98    0.98
    End With
    End Sub
    
    Sub findValuePercent()
        Dim WS As Worksheet
        Dim R As Range
        Dim C As Range
        Dim S As String
        Const dWhat As Double = 0.98
    
    Set WS = Worksheets("sheet1")
    Set R = WS.UsedRange
    
    For Each C In R
        If C.Value2 = dWhat Then
            S = S & vbLf & C.Address & vbTab & C.Text
        End If
    Next C
    
    MsgBox "Matches in" & S
    
    End Sub
    

    谢谢,不幸的是结果不是我想要的(我的问题可能不清楚…);我想找到两者:0.98%和98%。。在您的解决方案中,如果活动单元格值为98%,宏只能找到98%。我希望这可以解释您看到的情况。您从未定义搜索值所在的变量。如果我没记错的话,根据定义它会变成一个整数。是的,我没有定义它,你是对的。然而,它似乎并没有变成一个整数,因为我发现0.98。合适的定义是什么?我对许多不同类型的值使用宏。我认为最好将工作表中的值转换为所有分数或所有百分比。否则,您将针对两个变量进行检查。为什么在出现错误时继续执行下一步操作?如果您需要这些数据来运行代码,您应该对错误采取措施,而不是隐藏它们。如果
    0.98
    98%
    都以数值形式存储在Excel中(通常情况下),则它们都将存储为
    0.98
    ,唯一的区别是格式。因此,为了区分,你必须看一下这一点。此外,如果其中一个值是计算结果,则它可能不会精确地显示为
    0.98
    ,而是以这种方式显示。因此,您必须搜索舍入值,或者检查range对象的
    .text
    属性,而不是
    属性。没有你的实际数据很难说。