Программа, которая будет возвращать адрес ячейки минимального значения в строке?

Итак, у меня есть диаграмма, которая выглядит примерно так. Предположим, что верхнее левое значение 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

Есть значения x от 1 до 8 и три столбца значений, полученных в результате использования уравнения или чего-то под ним. Сумма представляет собой сумму трех значений ниже их соответствующего значения x.

Я застрял, пытаясь понять что-то, что пройдет через строку сумм, найдет наименьшее значение, а затем присвоит соответствующее значение x переменной. Мне также нужно присвоить значения слева и справа от этого значения x другим переменным.

Для этой конкретной диаграммы 12 является наименьшей из сумм, поэтому я бы присвоил variable1 = 4, так как это соответствующее значение x для этого столбца. Тогда моя вторая переменная, которая называется lowerbound, будет равна 3, так как она слева от x = 4, а моя третья переменная, которая называется upperbound, будет равна 5, так как она справа от x = 4.

Если бы я мог получить адрес ячейки, возвращаемый значением x, которое соответствует наименьшей сумме, я мог бы присвоить его переменной, а затем просто сместиться от этой ячейки, чтобы назначить другие переменные. Даже если бы я мог написать программу, которая вернет мне ячейку с минимальным значением суммы, я мог бы сместиться на x-строку и перейти оттуда.

Как бы я сделал что-то подобное?

TL:DR: Чтобы задать более четкий вопрос, поскольку это много слов: как будет выглядеть программа, которая находит наименьшее значение в строке суммы и возвращает адрес ячейки этого значения?

Длина строк неизвестна и сильно различается, но длина столбцов задана. Они меняются в зависимости от проблемы, но всегда будут известны. Поэтому я всегда буду знать, сколько строк в столбце, но я не буду знать, сколько столбцов в строке.

Это самая путано сформулированная вещь, которую я когда-либо писал за всю свою жизнь, но я надеюсь, что объяснил ее достаточно хорошо, чтобы иметь какой-то смысл.

Кстати, вы, ребята, действительно замечательные. Я так далеко продвинулся в этой программе, и все из-за того, насколько вы мне помогли. Я честно думаю, что я бы все еще застрял в начале с вами, ребята! Вы готовы терпеть непрекращающиеся вопросы новичка.


person TheTreeMan    schedule 24.07.2012    source источник


Ответы (3)


Я предполагаю, что сумма находится в 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
person Siddharth Rout    schedule 24.07.2012
comment
Что именно делает Match()? И спасибо за вашу помощь! Изменить: также есть ли способ сделать это, не зная длины строки? - person TheTreeMan; 25.07.2012
comment
Функция ПОИСКПОЗ ищет указанный элемент в диапазоне (диапазон: две или более ячеек на листе. Ячейки в диапазоне могут быть смежными или несмежными) ячеек, а затем возвращает относительное положение этого элемента в диапазоне. Я бы порекомендовал проверить встроенную справку Excel. для CELL, INDEX, MATCH и т.д... - person Siddharth Rout; 25.07.2012
comment
Ха, вы опубликовали это, когда я писал свой ответ. У меня нет голосов на сегодня, я проголосую за вас позже. - person JimmyPena; 25.07.2012
comment
Есть ли способ сделать это, не зная длины строки? - person TheTreeMan; 25.07.2012
comment
да. попробуйте это :) =CELL("address",INDEX(4:4,MATCH(MIN(4:4),4:4,0))) или в VBA Application.Evaluate("=CELL(""address"",INDEX(4:4,MATCH(MIN(4:4),4:4,0)))") - person Siddharth Rout; 25.07.2012
comment
Моя главная проблема сейчас заключается в том, что я не слишком уверен, как сделать эту информацию пригодной для использования? Я могу использовать это, чтобы дать мне адрес ячейки в форме $ A $ 5, но я не уверен, как установить это значение в переменную или что-то еще, и на самом деле использовать его? Я продолжаю получать несоответствие типа данных. Моя цель - сместить адрес ячейки в строке 1, чье значение в строке 5 является самым низким, но я не уверен, как это сделать. Например, как мне заставить эту программу смещаться от рассматриваемой ячейки к левой и устанавливать эту ячейку в переменную, а затем смещать от рассматриваемой ячейки к правой и также устанавливать ее на единицу? - person TheTreeMan; 27.07.2012
comment
Вы имеете в виду получить значение ячейки слева и справа от наименьшего значения? - person Siddharth Rout; 27.07.2012
comment
Нет, чтобы получить значение ячеек слева и справа от значения x. - person TheTreeMan; 27.07.2012
comment
Икс? Можете ли вы привести пример, используя образцы данных, которые вы опубликовали? - person Siddharth Rout; 27.07.2012
comment
Хорошо! Таким образом, программа определяет, какой столбец имеет наименьшее значение в пятой строке. Затем он присваивает значение x в этом столбце переменной. Значения x находятся в строке 1. Они не являются частью того, что суммируется. Строки 2, 3 и 4 являются результатом использования x в уравнении. Затем программа присваивает значение x слева и справа от него своим собственным переменным. Итак, для этого примера Xmin = 4, XLeft = 3, XRight = 5. Мне нужно использовать VBA, потому что в зависимости от пользовательского ввода количество строк и столбцов будет меняться вместе с данными в них. - person TheTreeMan; 27.07.2012
comment
Ах я вижу. Да, этого можно добиться. Будут ли значения X всегда оставаться в строке 1? - person Siddharth Rout; 27.07.2012
comment
Да, они всегда будут в строке 1. - person TheTreeMan; 27.07.2012
comment
Я вижу, вы опубликовали новый вопрос для этого? Вы хотите, чтобы я вставил туда код? - person Siddharth Rout; 27.07.2012

Используя ваш пример, следующая формула возвращает адрес ячейки в строке 1, значение которой в строке 5 является самым низким:

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

И если вам нужно значение этой ячейки, используйте INDIRECT. Он принимает адрес в виде строки.

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

person JimmyPena    schedule 24.07.2012
comment
Ha, you posted this as I was writing my answer. I'm out of votes for today, will upvote you later. – JimmyPena 1 min ago+ 1 Извините, LOL :) - person Siddharth Rout; 25.07.2012
comment
Итак, прежде всего, я использую для этого Excel VBA. Могу ли я просто использовать Application.Evaluate("=Cell(ADDRESS(1,MATCH(MIN(A5:H5),A5:H5,0))) для этого? Моя главная проблема сейчас заключается в том, что я не слишком уверен, как сделать эту информацию пригодной для использования? Я могу получить верхний, чтобы дать мне адрес ячейки в форме $ A $ 5, и я могу получить косвенный, чтобы дать мне значение в ячейке, но я не уверен, как установить эти значения к переменным и фактически использовать их? Я продолжаю получать несоответствие типа данных. Моя цель - сместить адрес ячейки в строке 1, чье значение в строке 5 является самым низким, но я не уверен, как это сделать. - person TheTreeMan; 27.07.2012
comment
Ответ Сиддхарта показывает, как использовать функцию Evaluate для возврата значения функции рабочего листа в VBA. - person JimmyPena; 27.07.2012

Если вы суммируете столбцы, взяв сумму массива. Вот версия 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
person er_jack    schedule 24.07.2012