根据excel中的细胞含量查找细胞指数

时间:2016-02-23 12:59:11

标签: excel vba excel-vba excel-formula

我现在处于一个有点困难的地方,我已经在网上搜索了几个星期,现在好运。我希望你们中的一些人可能会得到答案。

我想在一行中搜索具有特定数值的单元格。该行包含周数。当发现我希望能够像对象一样处理细胞时,或者至少我需要知道细胞的坐标以便进一步处理。

此外,该过程可以逆转。意思是,如果我有前一个单元格的坐标,我可以从同一行中的下一个单元格中获取值吗?

示例是: 在行中搜索本周的周数。 希望得到包含正确数字的单元格的坐标。 enter image description here

当我有那个专栏时,我想找到每个星期一到星期五为每个同事的单元格内容

如果这是由VBA或公式完成的,我无所谓。

提前多多感谢。 最好的问候Teambit

3 个答案:

答案 0 :(得分:1)

不需要VBA ......你应该能够很容易地用公式实现它。

因此,单元格L3具有公式:=ADDRESS(3,MATCH($B$1,$A$3:$N$3,0))。这将在输入到单元格MATCH的一周内执行$B$1,并在周$A$3:$N$3范围内找到它。 ADDRESS函数将返回找到周数的单元格地址,因此在我的示例中为$G$3

然后下方网格/表格将显示当前周的工作周。 OFFSET函数将单元格地址向下移动3行,然后在一周中的每一天向右移动1,2,3,4或6行。 OFFSET将返回0表示空白,因此T函数确保我们获得等效的文本,或空白而不是0.我使用INDIRECT传递{ {1}}运行起始单元格地址,因此它使用的是起始周单元格(OFFSET)的值,而不是该单元格($G$3)。

我没有为每个工作人员添加任何内容,因此它始终使用第3行,但您可以使用$L$1中的ADDRESS获取单元格引用为一个名称,然后将其插入其他公式。

Excel ADDRESS, MATCH, OFFSET Formula

答案 1 :(得分:0)

我知道我是否理解你的问题,但如果你有细胞坐标,你就可以左边的下一个单元格你可以使用这样的东西

Sub findWeek()
    Dim targetSheet As Worksheet
    Set targetSheet = Sheets("Sheet1")

    Dim l As Long

    Dim row As Long
    row = 2

    Dim myVal As String
    myVal = "some name of week you looking for"
    Dim resultCell As Range

    With targetSheet
        Do While .Cells(row, l).Value <> myVal

            l = l + 1
        Loop

        resultCell = .Cells(row, l)
    End With


End Sub

所以我更新了答案,尝试这样的事情。只需更改工作表名称,可能是行,甚至是您要查找的名称。在值resultCell中,您将拥有您正在寻找的单元格对象。如果你看一下cell / range api,你可以得到它的坐标......

所以你可以使它成为一个能够返回范围的函数,或者你想要的任何东西......但总是在值中resultCell将是你正在寻找的单元格。 如果没有找到周,你可能需要注意;)因为这会陷入循环,但不是那么难

答案 2 :(得分:0)

检查这是否有帮助..

Sub SubOne()

 Dim sh As Worksheet
 Dim rw As Range
 Dim iFoundIt As Range

 Dim RowCount As Integer

 ' var to iterate trough rows
 RowCount = 0

 Set sh = ActiveSheet

 For Each rw In sh.Rows

  ' iterate over all cells in first row
  If sh.Cells(rw.Row, 1).Value = "ThisIsMySpecialValue" Then
    ' value is found, we save the cell for future options
    Set iFoundIt = sh.Cells(rw.Row, 1)
    Exit For
  End If

  RowCount = RowCount + 1
 Next rw

 Debug.Print (iFoundIt.Row)
 Debug.Print (iFoundIt.Column)
End Sub