[英]Using the Find Function in VBA
1
2
3
4
.
.
So I have a sequence of numbers running from 1-20.所以我有一个从 1 到 20 的数字序列。 I have the number "1" on top selected and I would like to search the entire column and find the number "9".
我选择了顶部的数字“1”,我想搜索整个列并找到数字“9”。 The code works when I don't name the range "rng";
当我没有将范围命名为“rng”时,代码有效; it finds the number and selects.
它找到号码并选择。 But the code stops working when I name the range of number.
但是当我命名数字范围时,代码停止工作。 What's wrong with the range function?
range 函数有什么问题? could it be that if I define
Dim rng as Range
that when I later define the "Set rng="
I cannot have the ".Select"
or ".Copy"
extension on the end?是不是如果我将
Dim rng as Range
定义Dim rng as Range
,那么当我以后定义"Set rng="
我不能在最后使用".Select"
或".Copy"
扩展名?
Sub macro2()
Dim rng As Range
Set rng = Range(ActiveCell, ActiveCell.End(xlDown)).Select
rng.Find(10).Select
End Sub
Also, If I want to sum the entire column from 1-20, on the last cell below the number "20" should I use the following code?另外,如果我想对 1-20 的整个列求和,在数字“20”下方的最后一个单元格上,我应该使用以下代码吗? because the application object doesn't seem to do it.
因为应用程序对象似乎没有这样做。 Thank you!
谢谢!
rng.End(xlDown).Offset(1, 0).Select
Application.WorksheetFunction.Sum (rng.Value)
To look for 10 in the active column you could try this (which ends up selecting the first 10
- although Select
in vba isn't normally needed other than taken the user to location at code end)要在活动列中查找 10,您可以尝试此操作(最终选择前
10
- 尽管通常不需要在vba 中Select
,除了将用户带到代码末尾的位置)
10
before proceeding)10
)xlWhole
to avoid matching 100
if the current default for [lookAt] is xlPart
xlPart
您还应该使用xlWhole
来避免匹配100
Cells(1, ActiveCell.Column
, and [Search Direction] as xlNext
finds the first value looking down.Cells(1, ActiveCell.Column
和[Search Direction] as xlNext
查找向下看的第一个值。 code代码
Sub QuickFind()
Dim rng1 As Range
Set rng1 = ActiveCell.EntireColumn.Find(10, Cells(1, ActiveCell.Column), xlFormulas, xlWhole, , xlNext)
If Not rng1 Is Nothing Then
Application.Goto rng1
Else
MsgBox "10 not found"
End If
End Sub
Part 2第2部分
Sub Other()
Dim rng1 As Range
Set rng1 = Range(Cells(1, ActiveCell.Column), Cells(Rows.Count, ActiveCell.Column).End(xlUp))
rng1.Cells(rng1.Cells.Count).Offset(1, 0) = Application.WorksheetFunction.Sum(rng1.Value)
End Sub
Try this, I hope this will help u to find the specific row no as well as column name too.试试这个,我希望这也能帮助你找到特定的行号和列名。 In code you can use
在代码中,您可以使用
strRw = FindColumn(Sheet name, "Value which need to be found", True, "Cell Name",Row number)
sourceCOL = colname(FindColumn(Shee Name, "Value which need to be found", False, , 4))
Below is main function of find下面是 find 的主要功能
Public Function FindColumn(colnocountWS As Worksheet, srcstr As String, Optional rowflag As Boolean, Optional bycol As String, Optional strw As Integer, Optional stcol As Integer) As Integer
Dim srcrng As Range 'range of search text
Dim srcAddr As String 'address of search text
Dim stcolnm As String
colnocountWS.Activate
If stcol <> 0 Then stcolnm = colname(stcol)
If stcol = 0 Then stcolnm = "A"
If strw = 0 Then strw = 1
colnocountWS.Range(stcolnm & strw).Select
If ActiveSheet.Range(stcolnm & strw) = srcstr Then
ActiveSheet.Range(stcolnm & strw).Select
FindColumn = 1
Else
If bycol = "" Then
Set srcrng = colnocountWS.Cells.Find(Trim(srcstr), after:=ActiveCell, LookIn:=xlValues _
, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Else
Set srcrng = colnocountWS.Cells.Find(Trim(srcstr), after:=ActiveCell, LookIn:=xlValues _
, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
End If
'ByPart
If srcrng Is Nothing Then
If bycol = "" Then
Set srcrng = colnocountWS.Cells.Find(Trim(srcstr), after:=ActiveCell, LookIn:=xlValues _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Else
Set srcrng = colnocountWS.Cells.Find(Trim(srcstr), after:=ActiveCell, LookIn:=xlValues _
, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
End If
End If
If srcrng Is Nothing Then
FindColumn = 0
Exit Function
Else
srcAddr = srcrng.Address
colnocountWS.Range(srcAddr).Select
FindColumn = ActiveCell.Column
If rowflag = True Then FindColumn = ActiveCell.Row
End If
End If
End Function
'this function find column name
Public Function colname(iFinalCol1 As Integer) As String
Dim colnm As String
On Error GoTo gg
If Mid(Cells(1, iFinalCol1).Address, 3, 1) = "$" Then
colnm = Mid(Cells(1, iFinalCol1).Address, 2, 1)
Else
colnm = Mid(Cells(1, iFinalCol1).Address, 2, 2)
End If
gg: colname = colnm
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.