Другое > Hard'n'Soft
вопросы по MS Excel
(1/1)
Planestranger:
Так уж сложилось, что я не бухгалтер... и с этой софтиной ранее соприкасался лишь когда-то давно на уроках информатики. Поэтому знания мои минимальны. Поиск в хелпах на тему диапазонов значений мне почему-то не помог.
Суть вопроса.
Есть таблица, в которой есть столбец со значениями X и столбец со значениями Y. Требуется найти максимальное значение их разности. Т.е. при X1..Xi и Y1..Yi нужно найти ту строку, где (Xn-Yn) будет наибольшим. Как это сделать?
Задача банальная, и будь эта инфа в какой-нибудь БД, всё совершенно ясно. А здесь приходится пользоваться формулами самой программы, которые выглядят нексколько специфичными по сравнению с возможностями любого языка программирования.

И ещё один вопрос про линки в этих же формулах. Допустим, я нашёл это число. Как потом передать другой функции номер строки, чтобы она могла получить данные из определённой ячейки этой строки?
igarexa:
Честно говоря я сам очень мало что знаю в экселе, но возникли 2 идеи. Сразу говорю что могу ошибаться.
1. Сначала вычислить разности от X1..Xi и Y1..Yi и вывести результаты куда нибудь в свободное место. А там уже среди них искать максимальное по другой.
2. Возможно надо писать самому макрос, и уже с помощью его уже искать необходимое.

Может быть я мало чем помог, но хотя бы могу навести на мысль :)
gepar:
Напиши небольшой макрос себе для вычислений, который сначала ищет столбец x  в котором значения наибольшие, а потом ищет столбец y в котором значения наименьшие. Ну и потом как-то их тебе выделяет (цветом можно, если хочешь, selection же не выставить сразу на два столбца там если они не соседние, или там внизу подписывает строчкой "ВОТ ОНО") или что тебе там надо сделать. Basic учил? Так вот vba это тоже самое, только присутствует ещё объектная модель от microsoft.

Добавлено позже:

--- Цитата: lost_hero ---Как потом передать другой функции номер строки, чтобы она могла получить данные из определённой ячейки этой строки?
--- Конец цитаты ---
Ну так и передаёшь вызывая функцию в виде объекта range (диапазон те). А та уже может двигаться по этому диапазону с возможностью двух адресаций: просто по номеру и что-то типа как-будто бы эта строка находилась в самом начале ... хотя с этим тебе заморачиваться не стоит и продвижений по номеру достаточно будет.

Добавлено позже:
Пиши если вопросы будут, я хоть применю свои познания на vba, ато они мне ни пользы ни денег не принесли и я в них уже было разочаровался, так может хоть тебе чего подскажу если время свободное будет ковыряться в экселе.
Planestranger:

--- Цитата: igarexa ---1. Сначала вычислить разности от X1..Xi и Y1..Yi и вывести результаты куда нибудь в свободное место.
--- Конец цитаты ---
так ведь избыточность данных же.


--- Цитата: gepar ---Ну и потом как-то их тебе выделяет (цветом можно, если хочешь, selection же не выставить сразу на два столбца там если они не соседние, или там внизу подписывает строчкой "ВОТ ОНО") или что тебе там надо сделать.
--- Конец цитаты ---
надо чтобы передал значение из другой ячейки этой строки в формулу, вычисляемую в другом месте таблицы. т.е. тупо к примеру: столбцы A, B, C, D. сравниваются значения столбцов A и B. находится максимальная разность. допустим, в 128 строке... в итоге требуется передать в формулу в столбце D значение, хранящееся в C128.

VBA действительно решает эту проблему. правда, моё давнишнее знакомство с TurboBasic мало помогает с VBA... и code inspector тут в общем совсем не тот, что в VS. в частности что-то у меня к элементам массивов обратиться не получается... если можешь, глянь, пожалуйста.

Dim Arr1 As Variant
Dim Arr2 As Variant
Dim Arr3 As Variant
Length = ActiveSheet.UsedRange.Rows.Count
Arr1 = Range("AA2:AA" & Length).Value // получаю значения одного столбца в массив
Arr2 = Range("Y2:Y" & Length).Value // получаю значения второго столбца в другой массив
For Count = 0 To Length
   Arr3(Count) = Arr1(Count) - Arr2(Count) // должен получиться третий массив, куда поочерёдно будут заноситься соответствующие значения разности, но тут ошибка.
Next Count
Навигация
Главная страница сообщений

Перейти к полной версии