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

» Excel FAQ (часть 4)

Автор: q1wed
Дата сообщения: 15.09.2008 11:48
Pravoved90 предлагаю вставить на лист2 макрос с листа1 переделав его так чтоб он на первый лист все равно сслылался и на первом же листе его действия отражались. то есть по сути только дописать в адреса Лист1!

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
на
Private Sub Worksheet_Change(ByVal Target As Range)

по выделению не правильно работало?
Автор: Pravoved90
Дата сообщения: 15.09.2008 11:59

Цитата:
а почему ты кста изменил в своем макросе

SelectionChange реагирует на нажатие на ячейку
Change - реагирует на изменение в ячейке

Добавлено:

Цитата:
вставить на лист2 макрос с листа1

Это конечно вариант для идентичных ячеек, но как быть в случае просто связанных ячеек? Например в Листе1, ячейка a1 = 2. В листе2 в a1 надписи "от 2 до 5", от "5 до 10" и тд. и формула, при каком значении Лист1a1 что выдавать. Непонятно - куда ссылаться. В итоге все равно надо, чтобы макрос реагировал на автоматическое изменение имя ячейки...
Может, конечно, я чтото упустил?...
Автор: q1wed
Дата сообщения: 15.09.2008 13:01
Pravoved90

Цитата:
Может, конечно, я чтото упустил?...

а может и я что-то упустил, но смотри:
1. В ячейке Лист1А1 стоит значение - в зависимости от него красятся ячейки на Листе1. Красятся в тот момент когда происходит изменение в определенных ячейках на Листе1.
2. На Листе2 есть ячейка, в зависимости от которой принимает значение ячейка Лист1А1
Задача: заставить окрашивтаься ячейки с Листа1 когда происходит изменение в ячейках на Листе2

Для решения предлагаю сделать макрос который запускался бы на выполнение от изменения в ячейках на Листе2, причем результам выполнения было бы закрашивание ячеек на Листе1 в зависимости от значения ячейки Лист1А1.

Надеюсь не сильно намудрил %)))))))

еще как вариант можно ведь сделать макрос и навесить его на кнопку "Типа расчитать лист". То есть ты делаешь всякие действия над файлом, а когда усе готово жмешь на кнопку и файл окрашивается.

Добавлено:
а еще можно сделать пользовательскую функцию которая бы красила ячейки в зависимости от значений других ячеек. Хотя мы тут опять приходим к тому что пытаемся оказать воздействие на ячейку функцией которая стоит в другой ячейке - SERGE_BLIZNUK говорил что так нельзя сделать стандартными функциями, может быть пользовательскими можно......
Автор: Pravoved90
Дата сообщения: 15.09.2008 13:48

Цитата:
Надеюсь не сильно намудрил %)))))))

Не совсем понял о чем идет речь)).. Как изменить цвет в одном листе заменой значений в другом, вроде прошли уже, и даже без макросов..
У меня чуйство, что надо всего-то заменить пару слов в макросе, чтоб реагировала не на взаимодествие а на любое изменение...
Автор: q1wed
Дата сообщения: 15.09.2008 14:08
тебе надо чтобы значение в лист1а1 было равно лист2а2?

Добавлено:
предлагаю макрос твой вот так изменить:
....
If Range("Лист1!M7").Value = "слово" Then
Range("Лист1!E60:Лист1!G60").Copy
Range("Лист1!H60:Лист1!J60").PasteSpecial
End If
.....
и вставить на Лист2
Автор: Pravoved90
Дата сообщения: 15.09.2008 14:58

Цитата:
тебе надо чтобы значение в лист1а1 было равно лист2а2?

не хочет, зараза, работать и все...Значение копируется - макрос не реагирует..Опять таки - если клацнуть дважды на ячейку - срабатывает...
УЖОС
Автор: q1wed
Дата сообщения: 15.09.2008 15:43
не срабатывает то что я предложил и твой старый вариант?
Автор: Pravoved90
Дата сообщения: 15.09.2008 15:51
Нет((( Чего уже не перепробовал..А выход, наверняка, очень простой..Вобщем суть получается такова, что как не пытаешься воздействовать на ячейку автоматом - макрос на ней не срабатывает.Только вручную..
Автор: q1wed
Дата сообщения: 15.09.2008 15:56
попробуй в "моем" варианте убрать ограничения которые SERGE_BLIZNUK рекоменедовал поставить на Worksheet_Change(ByVal Target As Range).
Автор: Pravoved90
Дата сообщения: 15.09.2008 16:22
q1wed
Нет. Просто копируется и все..А если убрать варианты SERGE_BLIZNUK - и вручную мрачно работает...

Добавлено:
Как выяснилось, макрос не срабатывает и в случае ручного копирования необходимого слова в нужную ячейку. Таким образом можно констатировать, что он срабатывает только в случае РУЧНОГО ввода данных\выбора из раскрывающегося списка..Стало быть точно нужно чтото дописать..
Автор: SERGE_BLIZNUK
Дата сообщения: 15.09.2008 21:41
Pravoved90
что-то УЖАСНОЕ Вы сотворили...:-) сделайте табличку с тестовыми данными, где макрос, как Вы утверждаете - не работает, запакуйте её в архив на любой файлообменник, сюда ссылку, посмотрим, что у Вас там не работает...
Автор: Pravoved90
Дата сообщения: 15.09.2008 22:29
SERGE_BLIZNUK
Попробую...(
Автор: Pravoved90
Дата сообщения: 16.09.2008 13:34
Добрый день, господа. Вот, сделал маленький образец своей таблички
http://rapidshare.com/files/145716209/__1054___1073___1088___1072___1079___1077___1094__pravoved90.xls.html

Суть в ней такова: Есть таблицы ИТОГ, Условия, Событие1. В таблице событие1 проходят расчеты. В каждом событие есть несколько подсобытий(подсобытие1, подсобытие2 и тд.) со своим результатом. Все результаты автоматом копируются в в таблицу ИТОГ. В таблице ИТОГ списком идут Все события и как, подпункты - подсобытие с результатами напротив. В правой части этой таблицы есть 2 пункта: Событие и следующая строка - выпадающие подсобытия. При выборе значения из выпадающего списка в левой стороне таблицы на него реагирует макрос и расчеты напротив соответствующей ячейки копируються в ячейки рядом. Таким образом я визуально выделяю необходимые мне расчеты.
Делее, В таблице "Условия" также есть идентичные выпадающие строки.

Задача: При выборе значения из выпадающего списка в листе "Условия" данные копируються в идентичные данные в листе "ИТОГ", приводя в исполнение макросы, которые реагирует на изменения в этой ячейке в листе "ИТОГ".

Проблема. При автоматическом копировании через макрос, использование формулы, Лист1=Лист2, макрос не видит изменений..

ПС. Надеюсь, не сильно намудрил с описанием - думаю с образцом будет понятнее.
Очень надеюсь на вашу помощь. Спасибо.
Автор: Pravoved90
Дата сообщения: 16.09.2008 23:54
Подозрительное молчание...(( Люди добрые, если ничего нельзя сделать, хоть скажите..А то тишина вводит в легкий конфуз((...
Автор: q1wed
Дата сообщения: 17.09.2008 06:50
Pravoved90

вставить в модуль:
Sub Подсобытие1()
Range("итог!H6:J9").Clear
Range("итог!H6:J6").Value = Range("итог!e6:g6").Value
End Sub
Sub Подсобытие2()
Range("итог!H6:J9").Clear
Range("итог!H7:J7").Value = Range("итог!e7:g7").Value
End Sub
Sub Подсобытие3()
Range("итог!H6:J9").Clear
Range("итог!H8:J8").Value = Range("итог!e8:g8").Value
End Sub
Sub Подсобытие4()
Range("итог!H6:J9").Clear
Range("итог!H9:J9").Value = Range("итог!e9:g9").Value
End Sub

вставить в условия:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("c2")) Is Nothing Then
Application.EnableEvents = False
'выравнивание1()
Select Case Range("c2").Value
Case "подсобытие1"
Подсобытие1
Case "подсобытие2"
Подсобытие2
Case "подсобытие3"
Подсобытие3
Case "подсобытие4"
Подсобытие4
End Select
Application.EnableEvents = True
End If
End Sub

вставить в ИТОГ:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("m6")) Is Nothing Then
Application.EnableEvents = False
'выравнивание2()
Select Case Range("m6").Value
Case "подсобытие1"
Подсобытие1
Case "подсобытие2"
Подсобытие2
Case "подсобытие3"
Подсобытие3
Case "подсобытие4"
Подсобытие4
End Select
Application.EnableEvents = True
End If
End Sub

еще считаю необходимым добавить две процедурки (в модули):
Sub выравнивание1()
Range("итог!m6").Value = Range("c2").Value
End Sub
Sub выравнивание2()
Range("условия!c2").Value = Range("m6").Value
End Sub

PS все что у тебя там было (в макросах) удалить! =)

Добавлено:
ну и вместо
Range("итог!H6:J6").Value = Range("итог!e6:g6").Value

можешь использовать свой метод:
Range("итог!E6:G6").Copy
Range("итог!H6").PasteSpecial
Автор: Pravoved90
Дата сообщения: 17.09.2008 15:24
q1wed
ОГРОМНОЕ СПАСИБО за помощь. Начал копаться. Кстати, столкнулся с новой проблемой. Когда Хочу выполнить макрос из листа ИТОГ в листе Условия(без всяких прибамбасов - просто выполнить), вылетает ошибка: метод select из класса range завершен неверно. Так понимаю, макрос не хочет выполнять из другого листа..Может ли быть причина в месте записи макроса?(например, если он записан в листе1, он не запуститься из листа2?)
Автор: q1wed
Дата сообщения: 17.09.2008 17:02
Pravoved90
Заметил что бы макрос работал везде он должен в модулях находится, а записанный на листе вроде как не хочет на другом листе выполняться. А в макросе имеется select case?
Код: Select Case Range("M6").Value
Case "подсобытие1"
Подсобытие1
Case "подсобытие2"
Подсобытие2
Case "подсобытие3"
Подсобытие3
Case "подсобытие4"
Подсобытие4
End Select
Автор: Pravoved90
Дата сообщения: 17.09.2008 17:17
щас попробуем))
Автор: Sergio Good
Дата сообщения: 18.09.2008 10:21
Доброго времени суток всем!
Вопрос мой таков:
Два раза в месяц мне приходится заполнять табель рабочего времени сотрудников отдела. Если человек был на работе, в этот день в соответствующей ячейке я ставлю цифру 8 (8 проработанных часов). В конце месяца в таблице с помощью функции в ячейке «Количество проработанных дней» у меня автоматически подсчитывается количество ячеек с числами.
Если человек в отпуске или на больничном, то я пишу соответственно «О» или «Б». Эти ячейки без числа и соответственно в счет проработанных дней их компьютер не берет.
Но вот вопрос – А можно ли в отдельной ячейке просчитать количество ячеек с определенной буквой. Например с буквой «О». Тогда будет понятно, сколько дней человек был в отпуске и т.д.
Заранее благодарен за ответ…
Автор: q1wed
Дата сообщения: 18.09.2008 10:24
Sergio Good
=СЧЁТЕСЛИ(A5:F5;"О")
=СЧЁТЕСЛИ(A5:F5;"Б")
Автор: Sergio Good
Дата сообщения: 18.09.2008 12:09
q1wed Спасибо, сейчас попробую
Автор: Pravoved90
Дата сообщения: 18.09.2008 12:13
Добрый день, уважаемые специалисты. Подскажите, как прописать простую строку в макросе:
В листе1 есть ряд столбиков с данными. Нужно, чтобы при добавлении еще одного идентичного столбика он сразу перемещался в правый край и становился за последним до него столбиком.
Заранее признателен за помощь.
Автор: q1wed
Дата сообщения: 18.09.2008 12:42
Pravoved90 что такое "идентичный столбик" и что такое "при добавлении"
Автор: AuthorR
Дата сообщения: 18.09.2008 12:43
кажется, по макросам есть отдельная ветка форума
лучше писАть туда
Автор: Pravoved90
Дата сообщения: 18.09.2008 13:22
q1wed
Допустим есть Лист1 и Лист2. Есть столбики одинаковых параметров и размеров, но с разными цифрами(хотя, думаю, это не суть важно). В листе2 эти столбики идут один за другим слева-направо. Хочу сделать так, чтобы при копировании Такого же столбика из листа1 в ячейку, к примеру А1 Листа2, столбик копировался дальше вправо и становился следом за последним столбиком Листа2. Потом следующий при копировании становился уже за новым последним и тд. Общая часть макроса понятна, а вот как написать саму функцию "вставить за последний столбик" за неимением опыта не в представляю...
Автор: q1wed
Дата сообщения: 18.09.2008 13:39
ну алгоритм такой будет:

1.скопировать вставленный столбец (через Change, потом copy)
2.проверить диапазон A:A содержит данные? (Columns(i), i=1.)
2.1 если нет - выполнить вставку и закончить (Paste, End Sub)
2.2 если да перейти к диапазону B:B (Columns(i), i=i+1.)
и тд пункт2 в цикле

примечание если планируется столбцы вставлять всегда в столбец A тогда проверку следует начинать с B:B.
саму команду которая проверяет есть ли что нибудь в ячейках я не помню
Автор: Pravoved90
Дата сообщения: 18.09.2008 13:48
q1wed
Спасибо за помощь, бум разбираться)))
Автор: q1wed
Дата сообщения: 18.09.2008 13:55
а еще же есть уловие на проверку идентичности столбцов - вот тут хз как их определять, то есть не понятно что нужно делать: сравнивать все данные в столбцах или проверять контрольные суммы?? CRC32, а может MD5
Автор: Pravoved90
Дата сообщения: 18.09.2008 14:50
Автор: ghosty
Дата сообщения: 21.09.2008 17:08
Простая, вроде, задача:

Есть два листа. На каждом листе набор слов и неких численных значений для этих слов. Наборы слов одинаковы, но слова расположены в разном порядке:

Лист1:
Собака 1 2 4 2 6 7
Кошка 2 3 4 5 6 7
Корова 3 4 5 6 7 4
Белка 4 5 6 7 4 3
и т.п.

Лист2
Кошка 2 3 4 5 3 2
Белка 4 5 6 3 3 2
Корова 7 5 4 3 4 5
Собака 3 4 5 6 7 4
и т.п.

Задача: на третьем листе посчитать общее среднее для каждого слова (по двум листам сразу).
Заранее премного благодарен за любую подсказку.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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