Помощь - Поиск - Пользователи - Календарь
Полная версия: Excel
Форум на все случаи жизни > Секреты софта и железа > Компьютерный ликбез
Страницы: 1, 2
Кармоди
Проблема такая: в документе идёт 9 строчек стандартной байды, а в 10 ссылка на соседний лист (ячейка А1). Я хочу скопировать это так, чтобы в 20 строчке текущего листа шла ссылка на второй лист (ячейка А2), в 30 - на А3 и т.д. Тупое копирование ничего не даёт. Какие будут предложения?
P.S. MS Office XP
FUriCK
Ты бы задачу давал, а не задачу "как победить решение, которое я придумал". Может есть и другие варианты представления данных, вида таблиц, доп. листов и т.п.

А твою задачу можно решить, добавив куда-нить еще один массив с шагом 10.
Если его добавить в столбец В второй страницы, то в ячейку на первой странице надо вписать формулу:
=LOOKUP(ROW();Sheet2!B:B;Sheet2!A:A)

в общем случае:
=LOOKUP(ROW();<array1 range>;Sheet2!A:A)
где array1 - массив: 10, 20, ....

Кармоди
Я просто попытался привести свой пример (возможно не столь удобоваримый) к более общей и простой форме. Исходный пример такой: мне нужно напечатать платёжные документы у которых половина реквизиты моей фирмы (одни для всех, прописываю текстом), а вторая половина - реквизиты и суммы организаций-покупателей по списку с другого листа. Напрашивается встречный вопрос - кто такой lookup? Русский excel вроде со мной согласен...

М
Цитировать предыдущий пост совсем не обязательно.
Не надо засорять форум. Читаем Правила.
Ongo
FUriCK & 2 All
QUOTE
А еще я тебе рекомендую (если все-таки проигнорируешь оптимизацию в виде разбиения документа) периодически делать "Ctrl+A" и сохранение в другую копию.
blink.gif
... так, ребята, я снова с вами! biggrin.gif

Я-таки вынужден был сделать разбиение этого своего документа... w00t.gif Пожалуйста, подскажите неумелому, как я могу автоматически по некоему шаблону изменить все "внутренние" ссылки на "внешние" для связи этих кусков одного целого, а их у меня (ссылок), если и не миллион, то - тысячи, уж точно! wink.gif

Best! wub.gif wub.gif wub.gif
FUriCK
2 Ongo
вооружайся VBA и вперед ваять макрос!
Если никогда не программил - свисни, тогда уж буду долбиться в свободное время... Но результатов быстро не обещаю - загружен сильно. sad.gif

2 Кармоди
М-да... сорри. Постоянно забываю, что многие пользуются русскими версиями софта...
В русском варианте это будет:
=ПРОСМОТР(СТРОКА();Лист2!B:B;Лист2!A:A)
(это для варианта, когда в столбце А - нужные тебе данные, а в столбце В - массив с шагом 10)
FUriCK
Ох, уж этот мне Ongo!
Это ж надо - за живое зацепил. Я работу похерил, но примерный макрос наваял! smile.gif
(заранее извиняюсь перед аксакалами VBA за моральные страдания, которые я им причиню неоптимизированным, корявым и вообще ламерским макросом - я на VBA, Бог миловал, не пишу и вообще его не люблю) (да, я даже не удалил лишние переменные, которые появились по ходу дебага (наверное) smile.gif )

Сначала инструкции:
1. сохраняешь бэкап старого документа
2. открываешь БОЛЬШОЙ документ (не переколбашенный, со всеми внутренними листами)
3. кликаешь "записать макрос"
4. выключаешь запись макроса.
5. открываешь созданный макрос, в его теле заменяешь все на:
CODE

'
' LocalToGlobal Macro
' Macro recorded 03.02.2006 by FUriCK
'
   Dim wsh
   Dim Filename
   Dim newPath
   maxColumns = 1000
   maxRows = 1000
   
   Dim OrigWB
   Set OrigWB = ActiveWorkbook
   
   newPath = OrigWB.Path + "\"
   
   Dim OrigSheets
   Set OrigSheets = OrigWB.Sheets
   
   For Each wsh In OrigSheets
      'Save the all sheets to different files:
      FN = newPath + wsh.Name + ".xls"
      wsh.Select
      wsh.Copy
      ActiveWorkbook.SaveAs Filename:=FN, _
       FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
       ReadOnlyRecommended:=False, CreateBackup:=False
      'wsh.SaveAs Filename
      OrigWB.Activate
   Next wsh
   
   
   Dim cellVal As String
   For Each wsh In OrigSheets
      'replace the other sheets names with global links:
      For Each other_wsh In OrigSheets
      If other_wsh.Name <> wsh.Name Then
         For rw = 1 To wsh.UsedRange.Rows.Count
               For cl = 1 To wsh.UsedRange.Columns.Count
                   'If wsh.Cells(rw, cl).HasFormula Then
                       cellVal = wsh.Cells(rw, cl).FormulaLocal
                       If InStr("=", cellVal) = 0 Then
                           cellVal = Replace(cellVal, other_wsh.Name + "!", "#TOREPLACE#")
                           cellVal = Replace(cellVal, "#TOREPLACE#", "[" + other_wsh.Name + ".xls]" + other_wsh.Name + "!")
                           wsh.Cells(rw, cl).Formula = cellVal
                       End If
                   'End If
               Next cl
         Next rw
      End If
      Next other_wsh
   Next wsh

   For Each wb In OrigWB.Application.Workbooks
   If wb.Name <> OrigWB.Name Then
       wb.Close SaveChanges:=True
   End If
   Next wb

   For Each wsh In OrigSheets
      'Save the all sheets to different files:
      FN = newPath + wsh.Name + ".xls"
      wsh.Select
      wsh.Copy
      ActiveWorkbook.SaveAs Filename:=FN, _
       FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
       ReadOnlyRecommended:=False, CreateBackup:=False
      'wsh.SaveAs Filename
      OrigWB.Activate
   Next wsh


6. Нажимаешь F5 и ничего не трогаешь!
7. на все вопросы "бла-бла-бла... заменить ?" (их будет столько же, сколько страниц) отвечаешь "Да"

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

Файлы будут называться так же, как страницы, поэтому рекомендую предварительно обозвать листы удобоваримо.
Ongo
FUriCK
wub.gif wub.gif wub.gif
QUOTE
Ох, уж этот мне Ongo!
Это ж надо - за живое зацепил. Я работу похерил, но примерный макрос наваял!

smile.gif Спасибо smile.gif
Я твой пост увидел только сейчас (на работе) и пока не могу написать ничего более конкретного, чем это мое спасибо (зато искренне и от души biggrin.gif )... Обо всех подробностях напишу позже, отредактировав данный пост!

Best
Lesovik
Приветствую.
У нас в сетке расшарено несколько файлов в формате MS Excel; периодически в том же каталоге появляются похожие файлы или их копии.
Например, файл с именем Контроллер.xls, а новый файл создается с именем Измененная копия Контроллер.xls
Мы никак не можем понять, чей Excel и при каких условиях создает файл копии.
Пакеты MS Office людей разные - и 2000, и XP, и 2003.

Поделитесь, кто в курсе... unsure.gif
levnev
Lesovik
Надо во всех копиях офиса, что работают с этими шарами просмотреть настройки на предмет опции "всегда создавать резервную копию", которую и отключить...
Lesovik
levnev , я так понимаю, ты имел ввиду это:
Меню Файл, команда Сохранить как. В открывшемся окне щелкнуть на пункте Сервис и выбрать из появившегося меню пункт Общие параметры. Флажок Всегда создавать резервную копию

Этот параметр создает копию файла вида Резервная копия <Имя файла>.xls. В создаваемый файл не вносятся изменения.
А мои файлы, повторюсь, имеют вид Измененная копия <Имя файла>.xls. И изменения сохраняются в них. Если, конечно, изменения были. Иначе содержимое просто остается идентичным...
Ppattapp
Может кто подскажет, к примеру, вот у меня в ячейки формула =L31*20% (допустим в этой ячейки получилось число 32,45).
Что мне надо подставить к формуле чтобы число 32,45 округлилось до 33?
Как должна выглядеть вся формула?
Кармоди
2 Ppattapp:
=ОКРУГЛВВЕРХ(L31*20%;0)
levnev
Lesovik
Могу сказать тогда только, что это скорее всего 2000... В 2003 как я не эксперементировал, такого результата не добился... Думаю, что в ХР тоже такого нет (проверить не на чем)...
Lesovik
levnev, а в 2000 добился?
Хотя если "скорее всего", значит нет..
Но все равно, спасиб..
Ppattapp
Ребята, ещё один вопросик... rolleyes.gif
Вот такая формула у меня получилась для ячейки В7:
=ОКРУГЛВВЕРХ(ЕСЛИ(B7="";"";ЕСЛИ(B7>1;(B7+C7+D7+E7)*13%));0)
Не пойму где ошибка... Всё округляет если в ячейке В7 есть какое нибудь число, но если у меня В7 пустая то в ячейки появляется: #ЗНАЧ!
А мне нужно чтобы ячейка была пустой...
Как должна выглядеть формула?
Andyy
Ppattapp
=ОКРУГЛВВЕРХ(ЕСЛИ(B7>1;(B7+C7+D7+E7)*13%);0) Так подойдет?

leonidd
Вроде бы так правильно
=ЕСЛИ(И(B7<>"";B7<>0);ОКРУГЛВВЕРХ((B7+C7+D7+E7)*13%;0);"")
Читается так:
Если В7 не пустая и не равна 0 , то округляем, а иначе оставляем пустой

Или так можно упростить:
=ЕСЛИ(B7<>0;ОКРУГЛВВЕРХ((B7+C7+D7+E7)*13%;0);"")
Если В7 не равна 0 , то округляем, а иначе оставляем пустой
Кармоди
QUOTE(Ppattapp @ 11.03.2006 - 23:10)
=ОКРУГЛВВЕРХ(ЕСЛИ(B7="";"";ЕСЛИ(B7>1;(B7+C7+D7+E7)*13%));0)

просто ты должен будешь объяснить ёкселю, как представляешь себе округление вверх числа "" smile.gif
Ppattapp
Спасибо за помощь, хоть никто правильно не сделал, но благодаря вашим подсказкам я сам додумался. smile.gif
Вот что должно было выйти:
=ЕСЛИ(B4="";"";ЕСЛИ(B4>1;ОКРУГЛВЕРХ(((B4+C4+D4+E4)*13%);0)))
если в В4 ничего нет - то пусто, если В4 больше 1 - то округляем.
Ещё раз, спасибо...
Andyy
А правильно не сделал никто, потому что начальных условий не было, а была только формула, которую каждый интерпретировал по-своему, решая обратную задачу smile.gif Ясновидцев тут нет. wink.gif
leonidd
Ppattapp, а если В4=1, то что у тебя будет. В твоём условии про это ничего не сказано, как и про то, что В4=0(не пустая строка, а именно 0).
QUOTE
если в В4 ничего нет - то пусто, если В4 больше 1 - то округляем
Ppattapp
leonidd
Знаешь, приятель, а ты прав!!! smile.gif Я, вообще-то, не очень в экселеnovicok.gif, так для себя разные таблицы делаю... Хоть в этой ячейке не может быть 0 или 1, там либо пусто, либо числа от 1000 и выше, но всё же...
Сорри, ты угадал с формулой на 100%... up.gif
leonidd
QUOTE
Хоть в этой ячейке не может быть 0 или 1, там либо пусто, либо числа от 1000 и выше, но всё же...

Ppattapp , тогда нужно так
=ЕСЛИ(B4>=1000;ОКРУГЛВВЕРХ(СУММ(B4:E4)*13%;0);"")
FUriCK
Это происходит от того, что ты делаешь округление для значения "<пустая строка>":
QUOTE
ОКРУГЛВВЕРХ(ЕСЛИ(B7="";"";...

А округление не работает со строками, естественно. smile.gif
Нужно сделать наоборот, т.е. делать округление, только если ячейка не пустая:
=ЕСЛИ(B7="";"";ОКРУГЛВВЕРХ(ЕСЛИ(B7>1;(B7+C7+D7+E7)*13%);0))
Все.

И не забывай правильно расставлять скобки. У тебя в формуле была ошибка:
ЕСЛИ(B7>1;(B7+C7+D7+E7)*13%) );
выделенной скобкой формула ЕСЛИ закончилась, а значения, которое надо подставлять, если В7<=1 не указано. Это алгоритмическая ошибка, которую обчыно можно долго искать.


Сорри большое, blushing.gif кэш со мной сыграл плохую шутку..... smile.gif
Так я еще не опаздывал - чтобы перед моим постом уже и тот, кто вопрос задавал ответил правильно.... blink.gif
pilot94
Такая проблемка... Дано - два смежных столбца E и F ("Дата рождения" и "Возраст") формат первого - 01.01.1900, второго, соответственно возраст на текущий год (по формуле =2006-ГОД(Eхх) двумя цифрами smile.gif

Требуется: написать такую формулу, чтобы:

- при значении ячейки Е "_", в ячейке F было значение "0"

- при значении в ячейке Е даты рождения вида "1900", т.е. только года, значение ячейки F было бы так же двухзначным возрастом на текущий момент

- ну и соответственно, чтоб все работало и при вводе значений вида "01.01.1900" в ячейку Е


Не знаю, правда, насколько понятно все объяснил... blink.gif
Уже третий день голову ломаю - никак не выходит совместить все три условия, поможите, люди добрые biggrin.gif
FUriCK
pilot94
Сколько раз писать НЕ ХРАНИТЕ РАЗНОТИПНУЮ ИНФОРМАЦИЮ В ОДНИХ И ТЕХ ЖЕ СТОЛБЦАХ!
Если ты установишь формат ячеек в "дата dd.mm.yyyy", то ты в принципе не сможешь ввести просто "2001" - Эксель сам переведет число в дату. Причем это будет не "01.01.2001", а дата, числовым представлением которой является 2001 (кол-во секунд, начиная с 00:00 01.01.1970, если я не ошибаюсь).

В идеале твою задачу нужно изменить - разбить дату рождения на 3 столбца:
Год
Месяц
День

Возраст (в этом случае вычисляется легко)

Месяц и День могут быть пустыми - это не страшно - в формуле можно все учесть.

Ща пробую че-нить придумать для твоего (имхо - извращенного smile.gif ) случая.
Кармоди
2 pilot94
сдаётся мне, ёксель не понимает датированные данные - у себя он хранит их как числа и никакие операции поэтому не катят - он отнимает одно число от другого. Надо или разделять ячейку на несколько или пытаться въехать, по какому принципу происходит преобразование даты в число.
В любом случае удачи smile.gif
pilot94
FUriCK

Спасибки, сделал три столбца wink.gif Благо, база еще маленькая, не много переделывать пришлось...
Тут вопрос у меня снова tongue.gif

Как бы мне исхитриться так, чтобы в столбце можно было не вводить вручную значения, а выбирать из списка. Т.е., вводим заранее список нужных значений, привязываем его к столбцу, а потом просто выбираем нужное... Пробовал через "Выбрать из раскрывающегося списка" - так можно только если строка, куда вводишь значение стоит после строки, куда значение уже введено... А у меня база вразброс заполняется, и смежные строки часто пустые...

ЗЫ: Рад любой помощи w00t.gif
FUriCK
pilot94
Молодец, что изменил.
Но для основного случая формулу я уже тоже сделал.
Задолбался, правда.... cranky.gif blink.gif
Держи, страшный ты монстр! smile.gif
=IF(E9="_";0;IF(CELL("format";E9)="G";YEAR(NOW())-E9;YEAR(NOW()-E9)-1900))
smile.gif Ну, и нагрузил ты старика.

(если русский вариант Экселя - просто переведи названия функций)


Дальше, для выбора из списка делай следующие действия:
1. На совершенно отфонарной (служебной) странице создай 3 списка
(просто заполни столбцы значениями):
1-й Валидные значения годов
2-й Валидные значения месяцев
3-й Валидные значения дней
2. Выдели заполненные ячейки годов, после чего назови этот диапазон. Для этого после выделения кликни в поле, которое находится
слева от поля значения ячейки (на тулбаре, чуть левее поля "fx") и дай название этому диапазону, например, ValidYears.
То же самое сделай для месяцев и для дней (ValidMonth, ValidDays соответственно).
3. Теперь вернись на тот лист, в котором нужно сделать выбор из выпадающего списка. Выдели диапазон ячеек, в который будут вводиться значения годов. и кликни Data->Validation (в рус. наверное Данные->Проверка). Теперь выбери закладку Settings (установки, опции) и в списке Allow (разрешенные, позволить) выбери List (Список).
4. в поле Source (Источник) введи =ValidYears
5. сними все галочки на всех остальных закладках
6. Все, нажми Ок.
7. Пункты 3-6 выполни для ячеек с месяцами и днями - ValidMonth , ValidDays соответственно.

Наслаждайся.
Когда понадобится проверка на валидность даты - расскажу позже, т.к. вообще нет времени.
pilot94
FUriCK

Огромное человеческое спасибо за подсказки jump.gif

Все получилось, все работает w00t.gif
ZeD
Помогите плиз. такая ситуация, повредился документ Excel, не открывается.. ExcelFix все правит, но не сохроняет, какие есть мысли. Спасибо.
FUriCK
ZeD
Почитай тему внимательно. Программы-доктора уже обсуждались.
Похоже твоя просто не крякнутая. Попробуй так же другие.
Sercam
В общем что нужно слелать.

В определённую папку разные люди в организации складывают свои отчёты в текстовом формате.
Их вручную потом сводят в таблицу в Excel.

Хочу сделать так, чтобы всё это сводилось автоматически. Т.е. кидаешь в папку файл с определённым именем в формате txt и данные из него автоматически перекидывались бы в формат xls и уже оттуда в нужные листы колонки и строчки конечного Excel файла.

Реально такое сделать?

Понимаю что задача не из простых, поэтому если не конкретные указания, то может быть хотябы ссылку на литературу по этой теме кто-нибудь подкинет...
AndyBitOff
Сделать реально. При этом Excel (макрос) будет запущен всегда и в свою очередь будет мониторить некую папку при появлении в которой нужного файла будет его читать и разбирать.
За подробностями, думаю лучше сюда: http://am.rusimport.ru/MSAccess/default.aspx
Или сюда: http://bbs.vbstreets.ru/ в раздел VBA Программирование на Visual Basic for Applications
Кармоди
Странно, но факт - при копировании формулы у меня скопировался конечный результат (т.е. в строке формул оказалась прописана не формула, а результат вычислений). Теперь пытаюсь понять, как это произошло. Как это вообще правильно сделать, есть у кого-нить мысли?
P.S. В изначальной формуле присутствовал $.
levnev
Кармоди
Перед вставкой надо выбрать "специальная вставка" и вляпать только "форумулу", а иначе Эксель вставляет все полностью...
Кармоди
levnev
Что-то у меня не получается:
Пишу в ячейку формулу "=2*$B$1"
где B1=3 (результат вычисления = 6)
мои действия:
Правка\Копировать
Правка\Специальная вставка\Вставить - формулы
в результате копирования в новую ячейку в строке формул не "6", а всё та же формула "=2*$B$1"
Что я не так делаю?
AndyBitOff
Кармоди
Что-то я Вас непойму. В первом посте Вы хотите вставить в новую ячейку формулу (и levnev Вам правильно сказал как это сделать), теперь же Вы хотите вставить только результат. Так воспользуйтесь сказанным levnev'ым, только вставте не формулы, а значения.

Или я чего-то не понимаю.
Andyy
AndyBitOff
Опередил. Вопрос тот же.
Кармоди
точно! это я не сообразил... blushing.gif
а изначально я имел в виду именно этот вариант: на входе формула - на выходе число
levnev
Кармоди
Andyy
Хм-м-м... Давайте все-таки разберемся, в исходной ячейке результат получен с помощью формулы... Что мы хотим вставит в целевую ячейку? Результат, формулу или еще что-то?!?

Кармоди
Кажется я догадался! wink.gif
Может быть вся трудность в том, что Вы путаете относительную и прямую адресацию? Если у Вас в первой ячеке результат получен с помощью формулы и Вы хотите к этому результату применить какую-то арифметику, то в целевой ячеке нужно написать СВОЮ формулу, опирающуюся, в свою очередь, на "промежуточную" ячейку прямой или относительной адресацией. Например, есть ячейка C1, у нее формула $B$1*2 - для вычисления удвоенного результата этой ячейки в D1 надо писать в формуле ячейки D1: =$C$1*2, а не $B$1*2!!! Может и не понятно объясняю, но попробуйте...
Andyy
levnev
Надо просто "подсказать", что знак "$" - это абсолютная (прямая) ссылка, которая "замораживается" и при копировании не меняет, либо строчку, либо столбец.
ЗЫ: Наверное первое обращение к AndyBitOff, а не к Кармоди smile.gif
ZigZag
скажите, как в Excel 2007 отобразить ярлычки листов?
SergX
Кнопка "Office" - > Параметры Excel -> Дополнительно

Там ставишь или убираешь галочки smile.gif
ptychka
Имеется:
1 таблица с тремя (условно) столбцами:
1) артикул
2) наименование
3) Цена

2-я таблица с такими же столбцами, но артикулы в первой и второй рассортированы по разному, цифры в цене 2-й таблице другие.
Требуется в дополнительный столбец 1-й таблицы поставить цены из второй таблицы рядом с соответствующими артикулами. Как составить формулу? Уже голову сломала. вот нашла подобный пример
Цитата
Сделай проще: добавь во второй файл
Еще один столбец, в котором воспользуйся формулой:
=ВПР(B4;[1.xls]Лист1!$B$3:$C$50;2)
где:
B4 - адрес ячейки второй таблицы, в котором код товара
[1.xls]Лист1!$B$3:$C$50 - диапазон первой таблицы (лучше захватить побольше - на перспективу :) )
2 - номер столбца первой таблицы, значение из которого будет подставлено. т.е. если столбцы 1 - код товара, 2 - имя, то и будет подставлено имя.
Будут вопросы - свисти.

НО: 1. Артикулы в первой и второй таблице не в одинаковом порядке, и первую таблице пересортировывать нельзя.
2. Некоторые артикулы присутствующие в первой таблице могут отсутствовать во второй.
Помогите.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2009 Invision Power Services, Inc.