VBA查找函数忽略百分比->;只查找小数
“我的宏”将搜索所有打开的工作簿中的活动单元格值(例如98%)。但是,在其他单元格中,它只能找到值0.98,而不能找到值98%。为什么? 这是我的宏: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
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
属性,而不是值
属性。没有你的实际数据很难说。