在Excel文件及其相关列中查找特定值

我是非常新的VBA,我想find一个行的最小值,并通过创build一个命令button返回其列号。 例如,在一行中:3 2 2 4 5 6 7我需要返回列号2,即使2出现两次。

我的代码目前看起来像这样:

Private Sub CommandButton1_Click() Dim myrange As range Dim answer As Double Dim f As Range Dim column1 As Integer Set myrange = Worksheets("Solver VBA").range("C94:T94") answer = Application.WorksheetFunction.Min(myrange) MsgBox answer Set f = Worksheets("Solver VBA").Cells.Find(answer).Column MsgBox f End Sub 

我不断得到运行时错误'91'和最后一行的黄色突出显示。

编辑:我已经按照build议尝试了这些步骤,它的工作原理(但它给了我列号3而不是2,这也是我的情况):

 Private Sub CommandButton1_Click() Dim myrange As range Set myrange = Worksheets("Solver VBA").range("C94:T94") Dim answer As Double answer = Application.WorksheetFunction.Min(myrange) MsgBox answer Private Sub CommandButton1_Click() Dim column1 As Integer column1 = Application.Match(answer, myrange, 0) + 2 MsgBox column1 End Sub 

我build议这样做(保留所有的variables):

 Private Sub CommandButton1_Click() Dim myrange As Range Set myrange = Worksheets("Solver VBA").Range("C94:T94") Dim answer As Double answer = Application.Min(myrange) Dim column1 As Integer column1 = Application.Match(answer, myrange, 0) + 2 Dim f As Range Set f = Application.Index(myrange.EntireRow, 1, column1) End Sub 

如果你只需要范围(包含值的单元格),你也可以直接使用类似的东西:

 Set f = Worksheets("Solver VBA").Range("B94").Offset(, Application.Match(Application.Min(Worksheets("Solver VBA").Range("C94:T94")), Worksheets("Solver VBA").Range("C94:T94"), 0)) 

或者像我的评论,只是得到列号:

 column1 = Application.Match(Application.Min(Worksheets("Solver VBA").Range("C94:T94")), Worksheets("Solver VBA").Range("C94:T94"), 0) + 2 

应该自我解释。 但是,如果你还有什么问题,就问一下;)

考虑

  1. 调光时间
  2. 放下Set
  3. 使用.Column
  4. 保持MsgBox

你看到.Columns你得到一个Range对象。 与.Column你得到一个长。

更改

 MsgBox f 

 MsgBox f.address