Как реализовать в Excel определенное действие действие

Программирование на Visual Basic for Applications
Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Как реализовать в Excel определенное действие действие

Сообщение Наталия Б. » 23.08.2006 (Ср) 16:33

Дан файл Excel (где есть лист 1, 120,130), в листе 1 есть таблица с указанием определенных данных. (он прикреплен). Необходимо что бы в лист 120 (ячейка выделена желтым цветом) автоматически переносилось и выбиралось число из столбца "На конец отчетного периода" (15207) которое соответствует коду показателя 120, при этом строка с кодом 120 может находится и в строке 7 и в строке 8 (в зависимости от того, как его скопируют в этот лист). Насколько я понимаю необходимо как-то написать что внести в ячейку листа 120 число, которое находится через 2 столбца (но на той-же строке) от кода показателя 120. Подскажите пожалуйста как это сделать, кто может! (И в листе 110 то же самое и т.д. по всем строкам)

Если файл не прикрепился то вот примерный вид таблички из листа 1
столбец 1 ст2 столбец 3 столбец 4
Код пустой На начало отчетного На конец отчетного
показателя года периода
110 - -
120 2478 15207
130 - -
Вложения
1.xls
(18.5 Кб) Скачиваний: 68

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 23.08.2006 (Ср) 17:36

Интересно, в который раз в этом разделе форума я пишу фразу "читаем хелп по функции ВПР (VLOOKUP)"? :D
Быть... или не быть. Вот. В чём вопрос?

Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Сообщение Наталия Б. » 24.08.2006 (Чт) 10:20

Спасибо за подсказку, но у меня почему-то все равно не получается. Наверное из-за того, что число 120 сохраненно как текст

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 24.08.2006 (Чт) 11:27

Если скопировать число "120" из таблицы в то место, к которому применяется ВПР, работает? Если нет, значит что-то не так. ВПР выдает ошибку #Н/Д!, или не то число, которое нужно.
Быть... или не быть. Вот. В чём вопрос?

Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Сообщение Наталия Б. » 24.08.2006 (Чт) 11:39

А я поняла он только по первому столбцу ищет. А можно ли как-нибудь сделать что-бы он по столбцу 3 (С) например искал?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 24.08.2006 (Чт) 12:07

Да. Указать вторым аргументом функции таблицу, в которой первый (самый левый) столбец - тот стоблец, в котором нужно искать.
Быть... или не быть. Вот. В чём вопрос?

Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Сообщение Наталия Б. » 24.08.2006 (Чт) 12:19

Что-то не получается никак :(

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 24.08.2006 (Чт) 12:28

В ячейку B1 листа "120" нужно написать такую формулу:

=ВПР("120";Лист1!D:G;4;0)
Быть... или не быть. Вот. В чём вопрос?

Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Сообщение Наталия Б. » 24.08.2006 (Чт) 12:42

Просто супер. Спасибо огромное преогромное. :D Мне бы такие мозги да знания. А можно еще вопрос? Как написать такой макрос. Необходимо что-бы автоматически копировались данные из 1 книги Excel в другую при этом путь книги которая должна копироваться меняется. Насколько я понимаю нужно что бы при нажатии определенного сочетания кнопок высвечивался запрос на указание пути того файла, который необходимо копировать.
Можно ли такое сделать в Excel?

Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Сообщение Наталия Б. » 24.08.2006 (Чт) 12:48

А что означает в формуле ВПР("120";Лист1!D:G;4;0) цифры 4 и 0?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 24.08.2006 (Чт) 17:18

Мозгами поделиться не готов, самому мало :) А за знаниями - и на этот форум, и в хелп...

Макрос сделать можно, в общем-то, он несложный, но писать все-таки придется :) . Если будут какие-то конкретные проблемы - ответим.

Цифра 4 в формуле ВПР - номер столбца в таблице, 0 (корректнее писать ЛОЖЬ, хотя и с нулем работает) - что ведется поиск конкретного значения в неотсортированной таблице. Все это есть в хелпе.
Быть... или не быть. Вот. В чём вопрос?

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 24.08.2006 (Чт) 19:36

Так что тебе необходимо копировать? ДАННЫЕ из одной книги в другую или САМУ книгу? И что нужно - чтобы пользователь НАЖИМАЛ на элементы управления или ПИСАЛ тот путь, куда хочет скопировать?
'Til the blood on your hans is the blood of the King!

Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Сообщение Наталия Б. » 25.08.2006 (Пт) 9:27

Мне нужно что бы данные из 1 книги копировались в определенный лист книги 2. И что бы пользователь нажимал на определенную кнопку в книги 2, и появлялся запрос на путь (примерно если нажать в Excel Файл->открыть появляется таблица открытие документа и мы вибираем какой файл открыть). Я хочу сделать что-бы появлялась такая же табличка в которой выбираем файл из которого необходимо копировать данные. То есть заходим допустим в лист 2 книги 2 и нажимаем заданную макросом CTRL+С (например) и у меня появлялся запрос из какого файла копировать (в виде таблички открытия файла). И когда пользователь выберет файл он бы автоматически копировал данные.

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 25.08.2006 (Пт) 11:22

Код: Выделить всё
Sub Кнопка_Щелкнуть()
fname = Application.GetOpenFilename("All files (*.xls), *.xls")
If fname = False Then Exit Sub
Workbooks.Open fname
'Цикл по извлечению чистого имени файла, без указания пути
t = 1
  Do While t <> 0
i = t + 1
t = InStr(i, fname, "\", 1)
  Loop
fname = Right(fname, (Len(fname) - i + 1))
'Тут копируешь нужные тебе данные, можешь записать макрос руками и просто вставить его сюда,
'исправив имя книги из которой копируешь на fname
Workbooks(fname).Close (False)
End Sub

Если хочешь чтобы данные копировались из книги без её открытия - Welcome в соседний топик, там некто Malinos подобным вопросом задавался.
'Til the blood on your hans is the blood of the King!

Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Сообщение Наталия Б. » 25.08.2006 (Пт) 11:48

Спасибо большое. Сейчас попробую. Надеюсь получится, а то я уже неделю над этим вопросом мучаюсь

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 25.08.2006 (Пт) 12:03

Bagathur писал(а):
Код: Выделить всё
...
'Цикл по извлечению чистого имени файла, без указания пути
t = 1
  Do While t <> 0
i = t + 1
t = InStr(i, fname, "", 1)
  Loop
fname = Right(fname, (Len(fname) - i + 1))

lol
Про InStrRev знаешь?

Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Сообщение Наталия Б. » 25.08.2006 (Пт) 12:09

Неа не знаю :(

Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Сообщение Наталия Б. » 25.08.2006 (Пт) 12:16

Я вообще занималась VBA последний раз в институте лет 6 назад, поэтому сейчас с огромным трудом пытаюсь восстановить хоть какие-то знания. Получается с трудом :? А очень надо и помочь из ближайшего окружения никто не может к сожалению

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 25.08.2006 (Пт) 12:30

Про InStrRev знаешь?

Наталия, это он мне писал :roll:
Спасибо, Ник, теперь знаю.
'Til the blood on your hans is the blood of the King!

Наталия Б.
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 23.08.2006 (Ср) 16:03

Сообщение Наталия Б. » 25.08.2006 (Пт) 12:31

Ясненько

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 25.08.2006 (Пт) 16:25

Вместо 6 строчек "цикла по извлечению чистого пути файла"
можно поставить одну строку -
Код: Выделить всё
fname = Right(fname, (Len(fname) - InStrRev(fname, "\", Len(fname))))
'Til the blood on your hans is the blood of the King!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 25.08.2006 (Пт) 17:12

Bagathur писал(а):Вместо 6 строчек "цикла по извлечению чистого пути файла"
можно поставить одну строку -
Код: Выделить всё
fname = Right(fname, (Len(fname) - InStrRev(fname, "", Len(fname))))


Можно еще короче:

Код: Выделить всё
fname = Dir(fname)
Привет,
KL

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 25.08.2006 (Пт) 17:34

Эх где же ты раньше был)
Я устал из всего вылавливать мой мега-цикл в различных вариацих и ставить вместо него строчку с InStrRev. Теперь видать придётся менять его на Dir...
Спасип.
'Til the blood on your hans is the blood of the King!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 25.08.2006 (Пт) 17:59

Bagathur писал(а):...Я устал из всего вылавливать мой мега-цикл...


К слову о мега-циклах: мне кажется ты злоупотребляешь констрункцией Do... Loop (бесконечный цикл). В большинстве ситуаций лучше использовать конечный цикл типа For...Next - не придется писать так много строк :wink:
Привет,
KL

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 26.08.2006 (Сб) 1:34

Конструкция Do... Loop дарит прекрасную возможность лишний раз убедиться в том, что вечный двигатель всё же возможен!
При "тупняке" в коде можно бесконечно смотреть, как работает процесс! Кстати, когда такое случилось 1ый раз я ничего не знал про Ctrl+PauseBreak и потому начал тааак паниковать...
'Til the blood on your hans is the blood of the King!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 51

    TopList