一个程序将返回一行中最小值的单元格地址?

时间:2012-07-24 20:21:52

标签: excel vba excel-vba excel-2010

所以我有一个看起来像这样的图表。假设左上角的值1在单元格A1中:

x=    1    2    3    4    5    6    7    8

      4    3    2    1    2    3    4    5

      9    8    7    6    7    8    9    10

      8    7    6    5    4    3    2    1

Sum= 21   18   15   12   13   14   15    16

有1到8的x值,以及使用下面的等式或等式得到的三列值。总和是低于相应x值的三个值之和。

我一直试图找出能够通过总和行找到最小值的东西,然后将它的相应x值分配给变量。我还需要将该x值的左侧和右侧的值分配给其他变量。

对于这个特定的图表,12是总和中的最小值,因此我将分配variable1 = 4,因为那是该列的相应x值。然后我的第二个变量(称为lowerbound)将等于3,因为它位于x = 4的左侧,而我的第三个变量(称为upperbound)将等于5,因为它是在x = 4的右边。

如果我可以获得与最小总和相对应的x值返回的单元格地址,那么我可以将其分配给变量,然后简单地从该单元格偏移以分配其他变量。即使我可以创建一个程序来返回最小和值的单元格,我也可以偏移到x行,然后从那里开始。

我该怎么做?

TL:DR:要问得更清楚,因为那是很多单词:程序看起来会检测到总和行中的最小值,并返回该值的单元格地址?

行的长度是未知的,并且变化很大,但是给出了列的长度。它们确实根据问题而改变,但它们总是会被人知道。所以我将始终知道列中有多少行,但我不知道连续多少列。

这是我一生中写过的最令人困惑的事情,但我希望我已经足够清楚地解释了这一点。

顺便说一句,你们真的很棒。到目前为止,我已经完成了这个项目,这都是因为你有多大帮助。老实说,我觉得我还是会和你们一起陷入困境!你愿意容忍新手不停的问题。

3 个答案:

答案 0 :(得分:10)

我假设总和在A4:H4。请根据情况更改

您可以使用类似

的公式
=CELL("address",INDEX(A4:H4,MATCH(MIN(A4:H4),A4:H4,0)))

如果您想使用VBA,那么您可以使用此

Sub Sample()
    MsgBox Application.Evaluate("=CELL(""address"",INDEX(A4:H4,MATCH(MIN(A4:H4),A4:H4,0)))")
End Sub

答案 1 :(得分:7)

使用您的示例,以下公式返回第1行中的单元格地址,第5行中的值最低:

=ADDRESS(1,MATCH(MIN(A5:H5),A5:H5,0))

如果您想要该单元格的值,请使用INDIRECT。它将地址作为字符串。

=INDIRECT(ADDRESS(1,MATCH(MIN(A5:H5),A5:H5,0)))

答案 2 :(得分:2)

如果通过获取数组的总和来对列进行求和。这是VBA版本:

For j = 1 To 8
     For i = 1 To 3
          sum(j) = sum(j) + Cells(i + 1, j + 1)
    Next i
    Cells(5, j + 1) = sum(j)
Next j