希望有人可以提供帮助,我有一张表,我需要设置一个动态范围,然后执行一个循环函数,根据正确的变量填充计算。
例如,我有一个标题列表
运营商名称 - 回合计数 - 成本
鲍勃
泰德
佛瑞德
对于上面的例子,我想找到操作员名称并将其设置为起始范围,然后选择 - 结束(xlToRight)&结束(xlDown)然后我的当前代码循环遍历所有运营商名称(Bob,Ted& Fred),并根据计算的内容输入Round Count和Cost中的值。
我遇到的问题是第一个小区可能并不总是在同一个位置,例如一张纸上的操作员名称可能位于Cell F100中,也可能位于下一个F134上。我正在考虑进行查找并将其设置为起始单元格,但操作员名称在整个工作表中出现多次。
任何人都有类似的问题他们已经解决了,或者有人可以提出建议吗?
答案 0 :(得分:0)
以下将循环查找“运营商名称”的所有实例,直到找到一个“成本”两个单元格在右边:
Sub test3()
Dim found As Boolean
found = False
Dim testRange As Range
Set testRange = ActiveSheet.Range("A1")
Do While Not found
Set testRange = ActiveSheet.UsedRange.Find(What:="Operator Name", After:=testRange, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlRows, SearchDirection:=xlNext)
If testRange.Offset(0, 2).Value = "Cost" Then
found = True
End If
Loop
End Sub
答案 1 :(得分:-1)
您可以使用find来自上而下或自下而上搜索。
此代码将在F列中搜索"运营商名称"从顶部开始走下去。
Columns("F").Find(what:="Operator Name", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlRows, SearchDirection:=xlNext).Address
此代码将在F列中搜索"运营商名称"从底部上去。
Columns("F").Find(what:="Operator Name", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlRows, SearchDirection:=xlPrevious).Address
他们都返回地址($ F $ 1),如果您愿意,可以将.Address
改为.Row
,将其更改为返回行(1)。
答案 2 :(得分:-1)
您可以遍历每一行并根据值运行IF
,例如
For i = 1 to Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
If Cells(i, 1).Value = "Bob" Then
'do something with bob
Else If Cells(i, 1).Value = "Ted" Then
'do something with ted
Else If Cells(i, 1).Value = "Fred" Then
'do something with fred
Else
MsgBox "My example on Stackoverflow had incorrect names"
End If
Next i
答案 3 :(得分:-1)
试试这个功能。它会检入所有工作表,您的文本可以在F列或其他列中。
Public Function subFindText(FindString As String, inSheet As String) As Range
Dim rowNb As Integer, ws As Worksheet
Set ws = ThisWorkbook.Worksheets(inSheet)
rowNb = ws.UsedRange.Rows.Count
If Trim(FindString) <> "" Then
With Sheets(inSheet).Cells ''Check in all the sheet
Set subFindText = .Find(What:=FindString, _
After:=.Cells(rowNb), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
End With
End If
End Function
如果你测试:
Sub test()
Dim r As Range
Set r = subFindText("Operator Name ", "yourSheetName")
MsgBox r.Row & " " & r.Column
End Sub
答案 4 :(得分:-1)
所以你有四个“运营商名称”,然后使用FindNext并将它们放在一个数组中:
[1] "J1" ""