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

» Excel FAQ (часть 4)

Автор: Pravoved90
Дата сообщения: 13.09.2008 20:35
Спасибо за ответы..Пока разбежались глаза...Как что получится - обезательно отпишусь.
Автор: q1wed
Дата сообщения: 13.09.2008 20:36
А в таком варианте и формулы скопируются
Sub Макрос1()
Range("E60:G60").Copy
Range("H60:J60").PasteSpecial
End Sub


кстати вместо Range("E60:G60").Copy можно использовать Selection.Copy - зацикливания не будет, тогда макрос будет выглядеть так:
Sub Макрос1()
Selection.Copy
Range("H60").PasteSpecial
End Sub


Справка F1 рулит!


Добавлено:
CEMEH, не надо мулек!
Автор: haruspik
Дата сообщения: 13.09.2008 21:41
Help! Помогите кто-нибудь... Есть огромное кол-во файлов, с абсолютно одинаковой структурой, регулярно собираются со всей страны. Как можно "слить" их в единую таблицу?
Автор: q1wed
Дата сообщения: 13.09.2008 22:20
haruspik
Консолидация (объединение) данных из нескольких таблиц в одну
Автор: Pravoved90
Дата сообщения: 13.09.2008 22:21

Цитата:
зацикливания не будет

Сделал бытсрую пробу Зацикливания действительно нет, вот только "небольшая" проблема: после написания слова в ячейку и, как следствие, исполенния макроса, после нажатия на любую ячейку в листе он опять исполняется....
Записал так- Макрос:

Range("E60:G60").Copy
Range("H60:J60").PasteSpecial

End Sub

Условие - так:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("D1").Value = "земля" Then
имя_макроса.
End If
End Sub

Пошел дальше копаться...
Автор: q1wed
Дата сообщения: 13.09.2008 22:44
:D логично! у тебя ведь и вправду в D1
Цитата:
"земля"
написано - так чтож условию не выполняться то......


Добавлено:

Цитата:
Range("H60:J60").PasteSpecial

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

Цитата:
Range("H60").PasteSpecial

Автор: Pravoved90
Дата сообщения: 14.09.2008 02:39
УУУУУУРРРРРРРРРРРРРРАААААААААААААААА!!!!!!!!!!!!!! РАБОТАЕТ - это я.
Конкретно писать, что было не так по пунктам не буду, - напишу сразу готовый вариант. Чтоб работало - писать надо ВСЕ:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range("M7").Value = "слово" Then
имя_макроса1
End If
Application.EnableEvents = True
End Sub

От варианта написания самого макроса результат, в итоге, не зависит.
Вот так. Забавно, что 2 дня назад я незнал, что такое макрос. - это опять я
Автор: SERGE_BLIZNUK
Дата сообщения: 14.09.2008 08:44
Pravoved90
у меня абсолютно нет времени, но и промолчать не могу.
параметров в функцию Worksheet_Change передаётся Target - это адрес ячейки, которая изменилась.
Принято, чтобы ЗНАЧИТЕЛЬНО повысить быстродействие - в начале макроса проверять, попадает ли изменившиеся ячейка в контролируемый диапазон. т.е. если пользовтель изменить ячейку Z1000 Ваш макрос всё равно проверит М7 и если там "слово" то выполнит копирование данных. Оно Вам надо?
проверить попадание в диапазон можно так:

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
' If Target.Cells.Count > 1 Then Exit Sub ' это по необходимости - проверка, что изменилась только ОДНА ячейка, если больше - ничего не делаем.
If Not Intersect(Target, Range("M7")) Is Nothing Then 'Изменилось M7
... <полностью Ваш код>
End if
Автор: haruspik
Дата сообщения: 14.09.2008 12:05
q1wed

Цитата:
Консолидация (объединение) данных из нескольких таблиц в одну

Пробовал не подходит, бывает что надо внести изменения, и снова расфасовать обратно. Есть еще какие-то варианты?
Автор: cluster
Дата сообщения: 14.09.2008 13:00
А помогите решить задачу.
Есть три ячейки. Последняя - есть результат деления второй на первую. Только первая иногда может иметь значение =0 и тогда получается не оч хорошо. В таком случае результат в третьей ячейке должен быть равен значению во второй.
Думал использовать функцию ЕСЛИ, но в ней нельзя применять выражения. Посоветуйте что-нибудь.
Автор: Pravoved90
Дата сообщения: 14.09.2008 13:03
SERGE_BLIZNUK
Да, действительно, я сразу и не заметил такой фокус. Крайне признателен за помощь.
ИТАК, после изнурительной борьбы интеллекта против американской машины коллективный разум одержал безоговорочную победуУРА.
Итого для достижения поставленной цели пишем следующее колдовство:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then
Exit Sub
End If
If Not Intersect(Target, Range("M7")) Is Nothing Then
Application.EnableEvents = False
If Range("M7").Value = "слово" Then
имя_макроса1
End If
Application.EnableEvents = True
End If
End Sub

Вот так. Можно и в шапочку это действо поместить. Благодарю ВСЕХ за содействие и помощь в этом нелегком деле

Добавлено:
cluster
Как раз недавно делал нечто подобное
=ЕСЛИ(E18)=0;A1;((E18-K18)*(100/МАКС(E18;K18))))
, где Е18 - ваше первое значение
A1 - ваше второе значение, которое исполняется в случае если, "первое значение =0"
((E18-K18)*(100/МАКС(E18;K18)))) - ваша основная формула, которая будет исполняться во всех остальных случаях.
Удачи
Автор: Mushroomer
Дата сообщения: 14.09.2008 13:18
cluster
=ЕСЛИ(A1=0;B1;B1/A1)
Автор: Pravoved90
Дата сообщения: 14.09.2008 13:40
Еще одна "новинка". Когда под первым условием пишу идентичное, только с другими ячейками и названиями, выпадает ошибка с ссылокой на новое условие:
ambiguous name detected work_sheet change
Что это значит и как с этим бороться?

Вроде - это значит, что строчки Private Sub Worksheet_Change(ByVal Target As Range) не должны повторяться...Но не могу правильно изменить имя...
Автор: q1wed
Дата сообщения: 14.09.2008 13:46
haruspik

Цитата:
Пробовал не подходит

Ну тогда, если хочешь помощи, максимально подробно описывай свою ситуацию, что пробовал и что не подходит.
Автор: Pravoved90
Дата сообщения: 14.09.2008 15:37
В принципе решил проблему записью всех идентичных данных под один макрос..Но вопрос остается актуальным..И еще - можно ли сделать таку себе визуальную разделительную черту в самом макросе, чтобы визуально данные не путать?


Добавлено:
Добрый вечер, Господа. Помогите решить такую задачу.
Есть ячейки а1 в1 с1 d1. Нужно сделать формулу в ячейке a1, чтобы в случае, если в1 = от 1 до 5, a1 = d1, если b1 = от 5 до 10, a1 =c1.
Можно ли єто сделать в одной формуле, или надо макрос писать?
ПС Хотелось бы первый вариант, но не могу сообразить..Спасибо
Автор: Mushroomer
Дата сообщения: 14.09.2008 18:06
Pravoved90
Чего там делать. =ЕСЛИ(ИЛИ(B1<1;B1>10);"нет данных";ЕСЛИ(B1<5;D1;C1))
Автор: Pravoved90
Дата сообщения: 14.09.2008 18:14
Mushroomer
Спасибо за ответ, просто после макросов голова на полуавтомате)))
Еще скромный вопрос: Как задать в формулу - сложить все числа столбика, кроме ячеек, залитых красным цветом? Спасибо
Автор: SERGE_BLIZNUK
Дата сообщения: 14.09.2008 18:22

Цитата:
И еще - можно ли сделать таку себе визуальную разделительную черту в самом макросе, чтобы визуально данные не путать?

а чем комментирование кода не подходит?!
Код:
макрос1
`____________________________
макрос2
Автор: DrMihalich
Дата сообщения: 14.09.2008 19:22
Добрый день! Помогите, пожалуйста, решить следующую задачу.

Есть список институтов (например, МГУ, МАИ, МИИТ и т.д.). По каждому институту есть список факультетов. Например:
- МГУ фак 1, МГУ фак 2, МГУ фак 3
- МАИ фак 1, МАИ фак 2
- МИИТ фак 1, МИИТ фак 2, МИИТ фак 3, МИИТ фак 4

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

Как это сделать? Буду очень благодарен, если вы сможете описать полное решение данной задачи, начиная с того, как правильно завести справочники институтов и факультетов, как правильно задать между ними связь и т.д. Большая просьба, по возможности не использовать макросы и попробовать решить эту задачу через формулы (если такое решение конечно существует).

Спасибо
Автор: SERGE_BLIZNUK
Дата сообщения: 14.09.2008 19:33
DrMihalich
почитайте для начала Приемы, хитрости, трюки и нюансы работы в Microsoft Excel: Связанные выпадающие списки
Автор: DrMihalich
Дата сообщения: 14.09.2008 19:52
SERGE_BLIZNUK
Оргомное спасибо! То, что нужно.
Автор: haruspik
Дата сообщения: 14.09.2008 21:27
q1wed

Цитата:
Ну тогда, если хочешь помощи, максимально подробно описывай свою ситуацию, что пробовал и что не подходит.

Описываю ситуацию: раз в две недели собирается примерно 120 одинаковых по структуре отчетов, необходимо их собрать в единое целое, проанализировать информацию, внести корректировку и разослать обратно. Проблема в том что, сейчас приходиться вносить изменения в исходных файлах, а при таком их количестве - сущее наказание, я ищу решение как все объединить, изменить прямо в общей таблице, снова разобрать на составляющие, но со сделанными изменениями. Заранее море благодарности))
Автор: Pravoved90
Дата сообщения: 14.09.2008 21:47
haruspik
Думаю, без конкретики тут не обойтись...
Автор: q1wed
Дата сообщения: 15.09.2008 07:39
haruspik
делай раз: открываешь исходный файл, Ctrl+A, затем Ctrl+C
делай два: переходишь в общий файл, Ctrl+V
Цикл повторить n раз, где n - количество файлов с данными.
На выходе получишь один общий файл, в котором сможешь спокойно работать.)))))
Ну разве не ответ? По твоему рассказу ответ получается исключительный!


Автор: Pravoved90
Дата сообщения: 15.09.2008 09:46
Добрый день, Господа..Я правильно понял, что выпадающий список в ячейке может ссылаться только на значения в пределе одного листа? Если нет, то как сделать правильно ссылку? Спасибо

Добавлено:
В общем можно, если у ссылаемых списков есть название. Тем не менее - можно ли сделать путем простого копирования данных со списком в другой лист?
Автор: DrMihalich
Дата сообщения: 15.09.2008 10:01
У меня все работает на разных листах: справочники на одном листе, а сами списки на другом.
Автор: q1wed
Дата сообщения: 15.09.2008 10:02
Pravoved90? можно http://www.planetaexcel.ru/tip.php?aid=34 способ2 - твой

Добавлено:
между прочим эту ссылку я тебе уже второй раз даю - посмотри первую страницу этой ветки
Автор: Pravoved90
Дата сообщения: 15.09.2008 10:39

Цитата:
способ2 - твой
- спасибо, ссылочкой твоей пользуюсь. Я немного не по ней делал - не назначал имя выделенной группе, а сразу выделял диапазон вставляемых в список ячеек в меню "проверка" - оттого и не копировалось..

Помогите встать на верный путь: В разных листах есть такие столбики с идентичными значениями и выпадающими списками. Задача состоит следующем: При выборе конкретного значения из выпадающего списка в Листе1, такое же действо должно произойти в идентичной таблице в Листе2.
Вариант сделать "значение в Листе1 = значение Листе2" не подходит, поскольку на слово в Листе2 ссылается исполнение макроса - не будет работать.

Помогите написать условие, типа: если в листе1 выбрать из выпадающего списка слово "добро", то в листе2 тоже выбрать из выпадающего списка слово "добро". Спасибо.
Автор: q1wed
Дата сообщения: 15.09.2008 11:06
Pravoved90

Цитата:
не назначал имя

а я так и понял что сразу диапазон пытаешся назначить

Цитата:
макроса - не будет работать.

почему не будет? если ты не изменил свой макрос, то условие у тебя такое стоит: If Range("M7").Value = "слово" условие идет именно на значение ячейки, а не на формулу
так что ставь
Цитата:
"значение в Листе1 = значение Листе2"

Автор: Pravoved90
Дата сообщения: 15.09.2008 11:27

Цитата:
почему не будет?

В том и дело что не работает. Точнее макрос на слово срабатвыает только при первом изменении. Также срабатывает, если сделать по ячейке двойной клик(как для ввода слова).
По логике вещей я понимаю процесс так: Макрос срабатывает, если происходит непосредственное взаимодействие с ячейкой(или есть соотвествующий процесс в коде ).
В этом же случае значение меняется без непосредственного взаимодействия с ячейкой => макрос не видит изменения.
Вывод:
a) что-то прописать в макрос, чтобы менялся при любых изменениях
б) написать макрос на автоматическое действие по изменению ячейки под нужные условия.
Вот...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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