Ru-Board.club
← Вернуться в раздел «Программы»

» Excel FAQ (часть 4)

Автор: q1wed
Дата сообщения: 11.09.2008 12:46

Цитата:
проводит операцию на ячейку, использованную пир записи, откуда бы я его не запустил
потому что при записи макроса прописывается абсолютные значения.
зайди в записанных макрос и измени абсолютный адрес на нечто типа select.activcell-+r5c3. Все довольно просто надо только с пол-часика почитать о способах адресации и выбора ячеек в VBA и у тебя все получится.
Автор: Pravoved90
Дата сообщения: 11.09.2008 12:52
q1wed
Спасибо за ответ. Как не пытался отложить тему изучения макросов, она меня таки настигла :-S))
Автор: dmention
Дата сообщения: 11.09.2008 13:16
Задача:

Есть Наименования (например фамилии) и относящиеся к ним показатели (около 30).

Наименование1 Показатель1 Показатель2 ... Показатель30
Наименование2 Показатель1 Показатель2 ... Показатель30
...
НаименованиеN Показатель1 Показатель2 ... Показатель30

При этом необходимо чтобы такие МАТРИЦЫ сохранялись за каждый год или даже более частые периоды и вычислялись относительные изменения показателей в сравнении с предыдущим периодом.

Набор Наименований за разные периоды может быть не одинаков!

Есть 1-й заполнения:
Период1 Период2
Наименование1 Показатель1 Показатель2 ... Показатель30 Показатель1 Показатель2 ... Показатель30 Изм1 Изм2 ... Изм30
Наименование2 Показатель1 Показатель2 ... Показатель30 Показатель1 Показатель2 ... Показатель30 Изм1 Изм2 ... Изм30
...
НаименованиеN Показатель1 Показатель2 ... Показатель30 Показатель1 Показатель2 ... Показатель30 Изм1 Изм2 ... Изм30

При таком заполнении добавление строки добавляет ячейки во все периоды, но если периодов 10 то на лист в ширину уже таблица не влезет и работать с ней невозможно.

Есть 2-й вариант:
На листе с именем Период1
Наименование1 Показатель1 Показатель2 ... Показатель30
Наименование2 Показатель1 Показатель2 ... Показатель30
...
НаименованиеN Показатель1 Показатель2 ... Показатель30

На листе с именем Период2 аналогичная таблица.

Тогда на отдельном листе (или на листе Период2 справа) можем посчитать изменения показателей. И таблица не будет громоздкой.

Но, при этом добавлять строку или удалять нужно аналогично на всех листах, по всем периодам.

Можно ли как то задать структуру листа в виде матрицы, чтобы добавление строки на один лист добавляло строку во все листы книги в нужное место?

Скажите, можно так сделать? Или подскажите как еще можно реализовать...

Спасибо!

Автор: Pravoved90
Дата сообщения: 11.09.2008 14:20
Уважаемые специалисты, еще скромный вопрос: Как в формуле отобразить название в ячейке? Например: Если в ячейке А1 написано "сентябрь" , ячейка B1 = 2
Автор: dmention
Дата сообщения: 11.09.2008 14:52

Цитата:
Уважаемые специалисты, еще скромный вопрос: Как в формуле отобразить название в ячейке? Например: Если в ячейке А1 написано "сентябрь" , ячейка B1 = 2


Не совсем понятно что имеется в виду, но видимо в ячейке B1 должна быть формула:
=ЕСЛИ(A1="Сентябрь";2;"")
Автор: Pravoved90
Дата сообщения: 11.09.2008 15:58

Цитата:
=ЕСЛИ(A1="Сентябрь";2;"")

Именно это)). Только еще маленький нюанс. Нужно чтобы вместо 2 формула показывала занчение определенной ячейки.
Что-то вроде этого
=ЕСЛИ(A1="Сентябрь";Значение С1;""), только незнаю как правильно написать
Автор: Mushroomer
Дата сообщения: 11.09.2008 16:40
Pravoved90
Цитата:
Что-то вроде этого
=ЕСЛИ(A1="Сентябрь";Значение С1;""), только незнаю как правильно написать
=ЕСЛИ(A1="Сентябрь";С1;"")
Автор: Pravoved90
Дата сообщения: 11.09.2008 17:09
Спасибо за ответы, только я все напутал и не так выразился)...Суть такова: есть Ячейки A1 B1 C1. В ячейке A1 забита формула допустим =СУММ(100/$C$27*$D$27). Нужно, чтобы при записи в С1 слова "Сентябрь", в ячейку B1 копировалось И значение И формула И условное форматирование из A1. То есть все, что бы скопировалось при обычном копировании A1 в другую ячейку. Это нужно для того, чтобы при последующем копировании B1 не ссылалась на С1,как это было бы в первом случае, поскольку Значение в С1 будет меняться. Можно ли это сделать формулой, или нужен макрос?...Подскажите, будьте любезные, а то даже не знаю, в какую сторону копать...
Автор: q1wed
Дата сообщения: 11.09.2008 17:41
AuthorR

Цитата:
Модераторы, добавьте, плиз

в личку напиши, не думаю, что модеры здесь читают про Эксель

Добавлено:
Pravoved90

Цитата:
есть Ячейки A1 B1 C1. В ячейке A1 забита формула допустим =СУММ(100/$C$27*$D$27). Нужно, чтобы при записи в С1 слова "Сентябрь", в ячейку B1 копировалось И значение И формула И условное форматирование из A1. То есть все, что бы скопировалось при обычном копировании A1 в другую ячейку. Это нужно для того, чтобы при последующем копировании B1 не ссылалась на С1,как это было бы в первом случае, поскольку Значение в С1 будет меняться
Без макросов, я думаю, возможен только один вариант: формула для B1: =ЕСЛИ(C1="сентябрь";ДВСЫЛЬ("A1");"")
для условного форматирования прописать в В1 тоже что и для А1, только добавить условие чтоб выполнялось только если С1=сентябрь (опереатор И, возможно, подойдет)
Автор: Pravoved90
Дата сообщения: 11.09.2008 18:53
q1wed

Цитата:
возможен только один вариант

Не получается..К тому же суть в том, чтобы сделать этот процесс без непосредственного вмешательства в формулы B1, то есть чтобы в ячейку B1 скопировалась формула из A1, но указать на єто так сказать с другого места...а то каламбур получается))...
Все равно - спасибо за помощь).
Автор: q1wed
Дата сообщения: 11.09.2008 19:35
Pravoved90 тебе похоже порасюда со всеми вопросами
Автор: SERGE_BLIZNUK
Дата сообщения: 11.09.2008 20:29
AuthorR
я не модератор, но, по сроку службы, уже могу шапку редактировать...

Цитата:
Предыдущие ветки топика:Часть 1 | Часть 2 Часть 3
Сделано.

Pravoved90, уважаемый q1wed абсолютно прав! Это возможно только через макрос! Дело в том, что формулы в Excel могут изменять (а точнее возращать значение) только значение в ячейку, в которой они находятся. НЕ СУЩЕСТВУЕТ формул, с помощью которых можно что-то изменить-записать в другую ячейку. Но, зато макросом это делается легко и быстро!


Автор: Pravoved90
Дата сообщения: 11.09.2008 23:00
Благодарю, пошел внедряться в прекрасный мир Экселя дальше
Автор: Fraerok
Дата сообщения: 12.09.2008 10:15
3 вопроса:
1) Можно ли сделать так, чтобы в Office XP (не знаю как в других) при нажатии на крестик окна Excel - закрывалось только текущее окно, а не все?
Я вижу крестик, который находится чуть ниже главного крестика закрытия окна, но на него нужно целиться, а в главный попадаешь, просто справа вверху.

2) Как в одной ячейке сделать принудительный перенос строки? Т.е. не тогда, когда ширинеа не позволяет, а именно там, где мне надо.

3) Как убрать внизу закладку "Лист 1", если этот лист всего один? Чтобы не было этого поля с закладками...
Автор: dino
Дата сообщения: 12.09.2008 10:32
Fraerok

1) Нет так сделать нельзя.
2) Alt+Enter
3) Убрать нельзя.
Автор: Fraerok
Дата сообщения: 12.09.2008 11:09
dino
по-поводу 3) - заметьте, я не спросил можно ли так сделать - я спросил как это сделать) Потомучто такие файлы периодически получаю от других. Если так нельзя сделать только в XP-Office, то надо было уточнить.

1)-2) спасибо.

Добавлено:
3) нашел, в Параметрах -> Вид. Но во-первых это не сохраняется для вновь созданных документов, а, во-вторых, хотелось бы, чтобы, например, автоматически эти ярлычки убирались, когда в документе всего 1 Лист =(
Автор: kronic
Дата сообщения: 12.09.2008 11:48
У меня проблема с excel 2007
Например: Если водишь число 2,01 то все нормально, а если вести 2,001 то он автоматом пределавыет его 2001
3,00001 => 300001
345,0002 => 3450002
и т.д.
Кто нибудь знает как это исправить
Автор: dino
Дата сообщения: 12.09.2008 12:34
Fraerok

Цитата:
Добавлено:
3) нашел, в Параметрах -> Вид. Но во-первых это не сохраняется для вновь созданных документов, а, во-вторых, хотелось бы, чтобы, например, автоматически эти ярлычки убирались, когда в документе всего 1 Лист =(


Вот как! Не знал! Век живи, век учись!

Чтобы режим сохранялся для вновь созданного документа, надо в открытом документе убрать ярлыки листов и сохранить документ в папке автозагрузки, чтобы твой документ, без ярлычков листов, стартовал первым.
Ну а для того, чтобы ярлычки автоматически убирались, здесь видимо без макросов не обойтись.
Автор: ivas
Дата сообщения: 12.09.2008 13:29
kronic
Правой кнопкой мыши на активную ячейку (выделенный столбец, лист) Формат ячеек - Числовой. Далее - количество знаков, регистры и проч.
Автор: dmention
Дата сообщения: 12.09.2008 14:34
Дополнительно к немного выше заданному мной вопросу, на который я пока не получил ответа, хочу спросить:

1. Как сделать так, чтобы при щелчке на гиперссылке в ячейке или может быть при щелчке на самой ячейке выполнялся определенный макрос или просто функция? Макрос должен быть один, а ячеек на которые можно щелкнуть может быть много.

Т.е. например ячейка с надписью "Вставить строку/удалить строку". При нажатии на нее макрос вставляет/удаляет строку выше.

2. Использует ли кто-нибудь файлы Excel с одновременным доступом (Сервис >> Доступ к книге >> галочка Разрешить...) для нескольких пользователей? Поделитесь опытом. Какие могут быть подводные камни? Может это не очень удобно и вызывает больше проблем?
Автор: kronic
Дата сообщения: 12.09.2008 14:43
ivas
Пробавал от этого не чегон
Автор: Pravoved90
Дата сообщения: 12.09.2008 16:39
Люди добрые - ну неужели никто не знает???? Я создал макрос A1B1C1 копируется в A2B2C2. На вопрос, как написать, что этот макрос выполняется если в ячейке D1 написано слово, допустим, "счастье". получил такое:

if Range("D1").Value="cчастье" then
имя_макроса
End if

НО КУДА ЭТО НАДО ВСТАВИТЬ??? В макрос или куда в другое место...Уже отчаялся...SOS
Автор: CEMEH
Дата сообщения: 12.09.2008 22:49
Pravoved90
Может нужно контролировать нажатие клавиш. Как на VBA сделать не знаю но принцип такой:
' Если нажата Enter то выполнить макрос. То есть проверить, есть ли счастье в D1.
Только после нажатия enter будет ясно что написано в D1 счастье или что-то другое.

хотя не всегда ввод данных заканчивается enter
Автор: Pravoved90
Дата сообщения: 12.09.2008 23:28
CEMEH
Я подозреваю, что надо еще чем-то начать и закончить макрос. Например, для того чтобы чтобы макрос запускался при нажатии на ячейку нашел код старого содержания:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 Then Макрос1
End Sub

Тут понятно, что идет всупительная строка - потом причина и следствие.

Попробовал по анологии поставить вначале Private Sub Worksheet_SelectionChange(ByVal Target As Range)

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

Думаю, истина где-от рядом. Просто надо изменить пару строчек......
Автор: q1wed
Дата сообщения: 13.09.2008 15:35
Pravoved90

Цитата:
начал исполняться бесконечное количество раз

успевай переключиться на другую ячейку

Добавлено:
а вообще попробуй добавить условие что выполнить макрос надо только в том случае если выбранная ячейка не равна результату действия макроса

И покажи свой Макрос1. Попробовал имитировать твою ситуацию вот таким вот макросом:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Selection.Interior.ColorIndex = 6
Selection.FormulaR1C1 = "=R1C1+R1C2"
End Sub

зацикливания не происходит

Добавлено:

Цитата:
Пришлось перезагружаться...
не нужно - можно зажать Esc на несколько секунд и макрос остановится
Автор: Pravoved90
Дата сообщения: 13.09.2008 17:37
Мой макрос такой

Range("E60:G60").Select
Application.CutCopyMode = False
Selection.Copy
Range("H60").Select
ActiveSheet.Paste
End Sub
То есть копируються ячейки.

Условие записано так:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
if Range("D1").Value="земля" then
имя_макроса
End if
End Sub
То есть должна быть команда - выполнить макрос, если в ячейке d1 написано "земля".
Вопрос в том: а) проавильно ли записано условие? б) куда надо его вставлять(в макрос, или в отдельный лист команд)??

Помогите, будьте любезны, написать вашу аналогию под мой случай, а то я не совсем понял, что и где надо прописать.
Автор: q1wed
Дата сообщения: 13.09.2008 18:42
Иёмаё! Я не силен в макросах, но разве можно использовать команду Select совместно с Private Sub Worksheet_SelectionChange(ByVal Target As Range). Посуди сам, твой макрос выглядит так: как только что-то выделили - надо что-то сделать, а в "что-то сделать" написано выделить еще "что-то" - и понеслась - первая команда следит за тем, что выделяется и передает управление второй, а вторая сама "что-то" выделяет и первая перехватывает выполнение на себя - соответственно заставляя вторую команду опять выполняться.......и так по бесконечному кругу.

Избавься от команды select в теле макроса.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) необходимо вставлять либо в лист где необходимо выполнение, либо в книгу. Сам макрос наверно можно вставить в модули.
Автор: Pravoved90
Дата сообщения: 13.09.2008 19:27

Цитата:
вместо имя_макроса вставил бы сам макрос

Попробовал - результат тот же.


Цитата:
Избавься от команды select в теле макроса.

А как же от него избавиться, если макрос собственно и состоит из копирования ячеек...
Чтото не приходит в голову, как обойти...(((
Автор: q1wed
Дата сообщения: 13.09.2008 20:02
Pravoved90
вот нашел ответ как только зашел в ветку по VBA http://forum.ru-board.com/topic.cgi?forum=33&topic=3961&start=300#2 (в шапке ссыль была) но от селект тоже можно было бы избавиться

Добавлено:
пжлста, избавилися от select
Sub Макрос1()
Range("H60:J60").Value = Range("E60:G60").Value
End Sub
в данном случае только значения копируются. если нужно чтобы формулы копились надо параметр value заменить
Автор: CEMEH
Дата сообщения: 13.09.2008 20:30
А если в макрос добавить мульку, которая будет контролировать время выполнения?
То есть если после начала выполнения условия прошло менее 1 секунды, то макрос не выполнять. Таким образом остановить зацикливание.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Какой поставить ведеоплеер под Vista


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.