0

嗨,我想知道如何使用 .address 来确定我应该在迭代中停止哪一行。所以我的代码正在查找预定日期行(每周)的单元格地址,当我输入日期时,它会自动查找匹配/最接近的日期。我的问题是根据最接近/匹配日期所在的列为日期行的下一列设置一个值。

z = CDate(x)
MsgBox z

For Each find In Sheet2.Range("B4:B183")

    If find = z Then
    MsgBox "found at :" & find.Address
    
        Do Until Sheet2.Range("C" & PaidRow) > find.Address
            Sheet2.Range("C" & PaidRow).Value = 0
        Loop
    End If 
Next

这是我应该确定最接近/匹配日期的地址的代码部分。

首先是我将最接近/匹配日期的 x 值转换为实际日期,而不是 excel 值,例如 44506 = 11/6/2021,然后 for 循环让我确定 find.address 当我放一个时它是正确的msgbox find.address。

但我似乎无法在原始 for 循环之外使用 find.address 。

4

3 回答 3

0

所以我已经想出了如何做到这一点,我不知道它是否有效,但它正在工作,感谢您的所有输入 Gmalc、Scott 和 Variatus。

这是我根据 Scott 的回答更新的代码。

z = CDate(x)

Set find = Sheet2.Range("B4:B183").find(z, lookat:=xlWhole)
 
Dim InfoCol, InfoRow, LastItemRow, MatchDate As Long

LastItemRow = find.Row

For MatchDate = PaidRow To LastItemRow

If LastItemRow = MatchDate Then

    Sheet2.Cells(MatchDate, 3).Value = Range("G6").Value
    Sheet2.Cells(MatchDate, 4).Value = Range("E8").Value
    Sheet2.Cells(MatchDate, 1).Value = Range("E6").Value
    
    Else: 'Sheet2.Cells(MatchDate, 3).Value = .Range(Sheet2.Cells(MatchDate, 3).Value).Value
           
           Sheet2.Cells(MatchDate, 3).Value = 0
           Sheet2.Cells(MatchDate, 4).Value = Range("E8").Value
           Sheet2.Cells(MatchDate, 1).Value = Range("E6").Value
    
        
        
End If

Next MatchDate
于 2020-09-07T01:15:25.543 回答
0

您可以像这样找到并使用找到日期的单元格:

z = CDate(x)

Dim found as Range
Set found = Sheet2.Range("B4:B183").Find(z,lookat:=xlWhole)

If not found Is Nothing Then

    MsgBox "found at :" & found.Address

    found.Font.Bold = True 'for example

End If
于 2020-09-05T23:50:48.670 回答
0

Find找不到近似匹配,只有精确匹配。如果需要近似匹配,请尝试使用Worksheetfunction.MATCHwhich 需要对数据进行排序。

根据排序顺序,您可以找到完全匹配或下一个更大/更小的近似值。然后,您的循环可以使用排序值来确定何时停止。

例如,您希望从 7 月开始的所有值,并且您的日期按升序排序。因此,您查找 7 月 1 日的匹配项。您会找到那个日期或之前的最后一个日期(可能是 6 月)。因此,如果 7 月有任何条目,则下一个日期必须在 7 月。

因此,您会查看每个条目,直到遇到不是 7 月的日期。那是你停止处理的时候。

于 2020-09-06T00:27:19.227 回答