![]() |
|
IT и Связь Обсуждение "айтишных" вопросов и средств связи |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 |
Заслуженный Участник
|
![]()
Приветствую,
Сам я совсем не программист, поэтому прошу помощи с данной задачей: Дано информация в столбике D, В "A1" есть формула: Если в любой ячейки "С" появится единица то показывать инфу которая находится справа от единицы в ячейке столбика D. Например если в D4 появится 1 то в А1 показывать инфу взятую с Е4, или если в D7 появится 1 то в А1 показывать инфу взятую с Е7 или если в D3 появится 1 то в А1 показывать инфу взятую с Е3 Сампл я приложил. Обратите внимание что простой IF тянет максимум 11 колонок а мне нужно больше 100. Вот пример который нужно переделать в array: Код:
=IF(D1=1;E1;IF(D2=1;E2;IF(D3=1;E3;IF(D4=1;E4;IF(D5=1;E5;IF(D6=1;E6;IF(D7=1;E7;IF(D8=1;E8;IF(D9=1;E9;IF(D10=1;E10;IF(D11=1;E11;))))))))))) ![]() vova7777 добавил 05.07.2010 в 23:06 что-то xls не прикрепился. вот здесь его можно скачать: http://rapidshare.com/files/405177829/excel-arrays.xls или здесь: http://www.megaupload.com/?d=XMFSY2XJ Последний раз редактировалось vova7777, 05.07.2010 в 22:06. Причина: Добавлено сообщение |
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#2 |
Заслуженный Участник
|
![]()
Дорогой товарищ, ты пошто подсовываешь нам HTML-файл как-то странный под видом Эксела?
Это на самом деле HTML-файл, содержащий JavaScript c каким-то тайным смыслом. И тот, кто его написал - таких детских вопросов не задаёт. Программировнаие он знает сурово. Так что пропало желание помогать. Хотя мог бы... |
![]() |
![]() |
![]() |
#3 |
Заслуженный Участник
|
![]()
Дорогой Тoварищ,
Вы наверно никогда не пользовались файлообменниками. Там нужно зайти по ссылке, подождать Х секунд и нажать на скачать а просто забивая линк в прогу для скачки даст вам html с линком для скачки без премиум акаунта. Сампл безвредный, там макросы не требуются. Впринципе я задачу старался подробно описать и думаю можно её понять без сампла. |
![]() |
![]() |
![]() |
#4 |
Practical UNIX Terrorist
|
![]()
я - программист, excel - это п-ц.
__________________
Even if a billion people believe something it can still be ridiculous. |
![]() |
![]() |
![]() |
#5 | |
Заслуженный Участник
|
![]() Цитата:
На скоко я понял в столбце Д у вас идет последовательность 0 и 1 (если 0 - пусто). Почему не считать это двоичным представлением числа записанного сверху вниз? Если вы просуммируете взвешенные значения в соответствующих строчках (вес -номер строки сверху в степени 2), то задача сводится к поиску наименьшего "бита" в полученном числе. Наименьший бит вычисляется как побитовое "И" числа с его отрицательным значением (х & -х, тут вам нужно определить юзер дефайнед функцию, Эксель не имеет битвайз операций). Хотя возможно Эксель тут будет несколько неуклюж Kot добавил 06.07.2010 в 01:26 нет, он просто своеобразен... это как нарды, тоже игра на двоих и тоже на раскрывающейся коробочке, но ни на шахматы, ни на шашки не похожа... ![]() Последний раз редактировалось Kot, 06.07.2010 в 00:26. Причина: Добавлено сообщение |
|
![]() |
![]() |
![]() |
#6 | |
Заслуженный Участник
|
![]() Цитата:
Задачку нужно сделать на Excele, если это не реально то наверно прийдётся создавать extension, включать макросы и кодить в Microsoft Visual Basic. Другие варианты пока не интересны. согласен. настолько страшное что безуспешно был потрачен вечер. но очень хотелось бы... |
|
![]() |
![]() |
![]() |
#7 |
Заслуженный Участник
|
![]()
Вот например решение (если я правильно понял задачу)
ввести array формулу (с Ctrl+Shift+Enter) =INDIRECT("e"&SMALL(IF(D:D=1,ROW(D:D),1000000),1)) только надо вместо 1000000 поставить большое значение, больше которого данных не будет. |
![]() |
![]() |
![]() |
#8 |
Заслуженный Участник
|
![]()
Я так и сделал. Мне скачался xls-файл.
Но сейчас проверю ещё раз. Может, мне подгадил Downloader Последний раз редактировалось Юм-Юм, 06.07.2010 в 11:34. |
![]() |
![]() |
![]() |
#9 | |
Пенсионер всея Ирландея
|
![]()
парадокс ...xls и есть эксель
... так чо может не стоит помогать ? Цитата:
в 2х словах , синтакс сам проверяй Dim MyArray(0) as string For counter = 1 to 65535 if "Сдесь"(Колонка:Couynter) = чонадо then redim preserve MyArray(Ubound(myarray)+1) Ubound(myarray) = то чо надо endif next counter это имелось ввиду или я вопрос недопонял
__________________
невозможно испугать санкциями того, кому похер, так,что санкции против меня на этом форуме, мне феерически похер |
|
![]() |
![]() |
![]() |
#10 |
Заслуженный Участник
|
![]()
Да, это правда. Меня подвёл Free Download manager.
Глубоко извиняюсь. Сейчас помогу ![]() Итак, слушайте. Проще всего решить эту проблему, прикрутив к листу небольшой код на VBA Надо зайти в редактор Visual Basic (Alt + F11), увидеть слева название рабочего листа и дважды кликнуть на нём. Справа будет пустое окно, в который надо вводить код. Вот этот: Код:
'Функция ищет единицу в столбце 4 (D) 'и когда находит первую единицу в столбце - возвращает содержимое соседней ячейки в столбце 5 (E) Function strannoe() As Variant strannoe = "" 'Это если нет единиц в столбце D Dim ws As Worksheet Set ws = Me 'Ищем на листе, к которому прикреплён модуль 'Проходим столбец D -- ищем единицу Dim i As Long 'Номер строки For i = 1 To 65535 If (ws.Cells(i, 4).FormulaR1C1 = 1) Then '4 -- это номер столбца "D" strannoe = ws.Cells(i, 5).FormulaR1C1 Exit For End If Next i End Function 'Процедурка выполняется при каждом изменении листа Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Column = 4) Then 'Изменения -- в столбце 4 'В ячейку А1 добавляем результат функции strannoe() Me.Cells(1, 1).FormulaR1C1 = strannoe() ActiveWorkbook.Save 'Сохраним изменения End If End Sub Обратите внимание: непонятно из Вашего описания, что должно вывестись в А1, если единиц несколько в столбце D. Я ищё первую единицу -- и выводу её соседа справа. Если есть вопросы -- задавайте Последний раз редактировалось Юм-Юм, 06.07.2010 в 13:08. Причина: Добавлено про Alt + F11 |
![]() |
![]() |
Благодарность от: | vova7777 (06.07.2010) |
![]() |
#11 |
Заслуженный Участник
|
![]()
Спасибо вам Юм-Юм!
Действительно работает. Теперь ради спортивного интереса хочется посмотреть или это реально сделать без макросов с Array. Юра, Попробовал ваш array, не совсем работает. работает только когда "1" ставить перед первой ячейкой а иначе показывает инфу с последней. Код:
=INDIRECT("e"&SMALL(IF(D:D=1;ROW(D:D);14);1)) |
![]() |
![]() |
![]() |
#12 | |
Заслуженный Участник
|
![]() Цитата:
если после ввода, формула не появляется в фигурных скобках, то точно проблема в этом. надо обязательно нажимать Ctrl+Shift+Enter каждый раз при редактировании этой ячейки - иначе получается обычная формула Последний раз редактировалось Yury, 06.07.2010 в 14:33. |
|
![]() |
![]() |
Благодарность от: | vova7777 (06.07.2010) |
![]() |
#13 |
Заслуженный Участник
|
![]()
Работает. Юра, это именно то что нужно.
Всем спасибо. |
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#14 |
Заслуженный Участник
|
![]()
Формула компактная но после 5й такой формулы учитывая что каждая работает с сотней данных, мой ексель стал не совсем быстро работать.
приходится ждать 2-4секунды пока все формулы сделают свою работу. Это учитывая что у меня два ядра по 2.5Ghz , рама на 4гб и SSD extreme edition. Давайте вернёмся к Microsoft Visual Basic и варианту предложенным Юм-Юм. Возможно этот вариант не будет так тормозить. Единственная проблема с предложенным кодом: если в колонке с информацией не информация а ссылка на информацию то ничего не получается. Ссылка может быть просто =F7 или простая формула типа =Q7-G7 например: Если единицу ставим возле ячейки с формулой to в А1 должен быть показан результат формулы. |
![]() |
![]() |
![]() |
Ключевые слова |
excel arrays help |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщ. |
Excel to SQL DTS(SSIS) не фурычит :( | Dubliner | IT и Связь | 9 | 29.04.2010 21:12 |
Покупаю билеты - вопросец. | Doc | Путешествия и Отдых | 26 | 18.11.2008 14:37 |
Помогите с Excel | GOOSE | IT и Связь | 7 | 24.01.2006 23:18 |
MS'SQL вопросец | Arte | IT и Связь | 8 | 17.10.2005 13:45 |