[英]Selecting Variable's Location (as Cell) in Excel VBA
因此,我对选择公式化值的确切单元格有疑问。 我对VBA真的很陌生,我在互联网上搜索了至少两天以找到有价值的答案。 在这里,让我向您展示代码,他们试图将其放入并解释其作用;
Dim r As Range
MinTime = WorksheetFunction.Min(Range("C5:L14"))
Set r = ActiveSheet.Cells.Find(MinTime)
r.Select
MinRow = ActiveCell.Row
MinCol = ActiveCell.Column
因此,我想做的是使用worksheetfunction.min查找范围内的最小数量,然后选择我刚刚找到的单元格。 然后将行和列信息定向到其他2个变量。 但是此代码并不总是有效。 有时它工作得很好,有时却不行,我目前一无所知。 任何帮助将不胜感激。 已经谢谢你了
我怀疑您的范围实际上包含时间。 下面的代码将找到最早的时间(该范围内的最小值)。
Private Sub MinTime()
Dim Rng As Range
Dim Mini As Range
Dim MiniValue As Double
Dim MinRow As Long, MinClm As Long
Set Rng = ActiveSheet.Range("C5:L14")
MiniValue = Application.Min(Rng)
With Rng
Set Mini = .Find(What:=MiniValue, _
After:=.Cells(1), _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
MatchByte:=False)
End With
With Mini
MinRow = .Row
MinClm = .Column
End With
End Sub
诀窍是使用LookIn:=xlFormulas
而不是默认的xlValues
。 您可以输入12:00,但单元格的公式为0.5。 假定该值是该范围内的最小值,则当您在值中查找0.5时,您将找不到它,因为在这种情况下该单元格的“值”(Microsoft感到困惑,不是我的所作所为)为“ 12:00”。 因此,您必须将找到的最小值转换回字符串,例如“ 12:00”,或者在公式中寻找0.5。
您甚至可以在不使用WorksheetFunction或Find函数的情况下执行此操作。 创建一个数组然后遍历它是找到所需内容的相当简单的方法。 尝试这个
Sub findMin(ByVal minRange As Range)
Dim searchArr() As Range
ReDim searchArr(1 To minRange.Rows.Count * minRange.Columns.Count) As Range
Dim minVal As Double
Dim i As Integer, i2 As Integer, outputRow As Integer, outputColumn As Integer
For i2 = 0 To minRange.Columns.Count
For i = 0 To minRange.Rows.Count
searchArr(i + 1) = Cells(minRange.Row + i, minRange.Column + i2).Value
Next i
Next i2
minVal = searchArr(1).Value
For i = 1 To UBound(searchArr)
If searchArr(i).Value < minVal Then
minVal = searchArr(i).Value
outputRow = searchArr(i).Row
outputColumn = searchArr(i).Column
End If
Next i
End Sub
在问题的代码中,您正在工作表的所有单元格上使用Find方法。 正如@Gary学生的答案所示,您应该在与找到Min的范围相同的范围内调用Find方法。
另外,Find方法的几个参数会有所不同,例如是否查找整个值,是否在公式内查找,是否在查找特定格式。 您可以在网上轻松找到有关Find方法的信息。
这是我对您的代码的看法:
Sub MyAssignment()
Dim searchRange As Range
Dim minCell As Range
Dim minTime As Double
Dim minRow As Long
Dim minCol As Long
Set searchRange = ActiveSheet.Range("C5:L14")
minTime = WorksheetFunction.Min(searchRange)
Set minCell = searchRange.Find(minTime, searchRange.Cells(1), XlFindLookIn.xlValues, XlLookAt.xlWhole, MatchCase:=False, SearchFormat:=False)
minCell.Select
minRow = minCell.Row
minCol = minCell.Column
End Sub
从VBA调用Find方法时使用的参数将反映在“查找”对话框中,如从Excel(Ctrl + F)所见。 相反,更改Excel的“查找”对话框上的选项将影响您下一个VBA的“查找”调用,因为未提供给“查找”方法的参数将采用对话框上最后使用的值。
让我们知道结果如何。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.