设置基于范围的内容位置

时间:2016-11-29 15:24:42

标签: excel vba excel-vba

希望有人可以提供帮助,我有一张表,我需要设置一个动态范围,然后执行一个循环函数,根据正确的变量填充计算。

例如,我有一个标题列表

运营商名称 - 回合计数 - 成本

鲍勃

泰德

佛瑞德

对于上面的例子,我想找到操作员名称并将其设置为起始范围,然后选择 - 结束(xlToRight)&结束(xlDown)然后我的当前代码循环遍历所有运营商名称(Bob,Ted& Fred),并根据计算的内容输入Round Count和Cost中的值。

我遇到的问题是第一个小区可能并不总是在同一个位置,例如一张纸上的操作员名称可能位于Cell F100中,也可能位于下一个F134上。我正在考虑进行查找并将其设置为起始单元格,但操作员名称在整个工作表中出现多次。

任何人都有类似的问题他们已经解决了,或者有人可以提出建议吗?

5 个答案:

答案 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" ""