所以,我有一个关于选择配方值的确切单元格的问题。我对VBA真的很陌生,我在互联网上搜索了至少2天的有价值的答案。在这里,让我向您展示我试图解释和解释之后的代码的代码;
Dim r As Range
MinTime = WorksheetFunction.Min(Range("C5:L14"))
Set r = ActiveSheet.Cells.Find(MinTime)
r.Select
MinRow = ActiveCell.Row
MinCol = ActiveCell.Column
所以我想做的是找到workheetfunction.min范围内的最小数字,然后选择我刚刚找到的单元格。然后将行和列信息指向其他2变量。但是这段代码总是不起作用。有时它工作得很好有时它不会,我此刻无能为力。任何形式的帮助将不胜感激。谢谢你。
答案 0 :(得分:1)
我怀疑你的范围实际上是包含时间。下面的代码将找到最早的时间(范围中的最低值)。
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时,你不会找到它,因为单元格的值"值"在这种情况下(微软的困惑,而不是我的行为)是" 12:00"。因此,您必须将找到的最小值转换为字符串,例如" 12:00",或者在公式中查找0.5。
答案 1 :(得分:0)
您甚至可以在不使用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
答案 2 :(得分:0)
在您的问题代码中,您在所有工作表的单元格中使用了Find方法。正如@ Gary的学生答案所示,您应该在与您找到Min的范围相同的范围内调用Find方法。
此外,Find方法有几个参数会产生影响,例如查找整个值,是否在公式内查找,寻找特定格式。您可以在&#39; net。
上轻松找到有关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
从Excel中调用Find方法时使用的参数将在Excel(Ctrl + F)中的“查找”对话框中进行镜像。相反,在Excel的“查找”对话框中更改选项会影响下一个VBA的查找调用,因为您不提供给Find方法的参数将采用上次在对话框中使用的值。
让我们知道结果如何。