Страницы: 1
RSS
Выбор книги при выполнении макроса., В формуле записано имя книги.
 
Здравствуйте уважаемые знатоки Exсel. Надеюсь вам не составит труда объяснить как сделать очень сложное для меня действие. Постараюсь поподробнее объяснить суть вопроса. У меня есть несколько книг и они постоянно добавляются, в каждой книге по шесть листов одного формата, но разного содержания. Количество и имена листов в книгах, постоянные, диапазон для счета тоже. Мне нужно посчитать в отдельной книге (назову её "каталог"  ;)  количество совпадений с списком в этом каталоге, для каждой книги отдельный столбик., Путем нескольких дней и ночей поиска, не придумал ни чего лучше, чем в катологе вписать такую формулу
=СУММ(СЧЁТЕСЛИ([Книга1.xlsx]Альфа!$A$2:$A$20;A9);СЧЁТЕСЛИ([Книга1.xlsx]Бета!$A$2:$A$20;A9);СЧЁТЕСЛИ([Книга1.xlsx]Гамма!$A$2:$A$20;A9)) (Для примера создал всего три страницы , альфа бета и гамма).
Вроде все хорошо, для "Книга1" формула действует. Записал макрос запуска этой формулы. Но Как только попробовал применить этот макрос для "Книга2", попал в тупик, формула требует обновить вязь с "Книга1", а "Книга2"не считает. Подскажите, можно ли сделать так что бы макрос спрашивал какую книгу считать. А то писать каждый раз новую формулу, ну ооочень долго. С макросами знаком, на уровне- нажать на кнопку запись, и остановка.
Или есть другой способ решить эту задачу? Без макросов.
P.S.И если можно подскажите, где почитать о создании макросов, для чайников в этом деле. Уж очень хочется самому научиться.
Изменено: Руслан ** - 23.01.2013 02:53:45
 
Макрорекордер и больше ни чего:
 
Спасибо. Только я пока не совсем понял как мне в этот макрос вписать то что мне нужно (количество совпадений). Хотя, благодаря вашему макросу, у меня появилась идея как еще это можно решить. Вот только подскажите, пожалуйста, можно ли в эту строку
Код
ActiveCell.FormulaR1C1 = "=""='""&R[3]C[-8]&""[""&RC[-6]&"".xls]Лист1'!$A$1"""
вписать остальные листы?
 
Можно, но без Вашего файла не очень понятно  :|

Или в принципе полный путь в формуле, формула приведенная у Вас списана при открытых книгах.
 
Цитата
Руслан ** пишет:
Мне нужно посчитать в отдельной книге (назову её "каталог";)количество совпадений с списком в этом каталоге, для каждой книги отдельный столбик

Покажите:
1. 2 - 3 файла-Источника,
2. файл-Приемник с точной "картинкой" Вашей "хотелки". ;)
 
Вот
Изменено: Руслан ** - 24.01.2013 01:49:09
 
1. Работать со связанными файлами - "врагу не пожелаю"!
2. Когда "сдавать"?
 
Проще и надёжней сделать это макросами.
Категоричекси против выполнения таких работ связями
 
Мне не сдавать, это мне для себя нужно  :)  И еще очень хочется в этом разобраться.
 
Настоящая картинка (шапка, ...) таблицы результата как должна выглядеть?
 
Цитата
Проще и надёжней сделать это макросами.
Я бы не против, но пока мой уровень знания макросов, на равне с плинтусом.
 
тема поднимается очень часто. Набери в поиске по сайту перебрать файлы и выбери нужный вариант. Там их много
 
"Сдавать" - это шутка, конечно.
Давайте про картинку таблицы-результата ТОЧНО: по горизонтали - продукты, по вертикали - имена файлов-Источников (по горизонтали -  - имена файлов-Источников, по вертикали -  продукты).

Количество продуктов - произвольно, количество файлов-Источников - произвольно.
Работу макроса объясню в СКАЙПЕ в режиме демонстрации экрана "живьем".
 
Так примерно:
Код
Sub test() 
  Dim Folder As String 
  Dim wb As String 
  Dim objWb As Workbook 
  Dim workWb As Workbook 
  Dim i As Integer 
  Set workWb = ActiveWorkbook  'Запоминаем активную книгу 
  
  'Показываем диалог выбора папки 
  With Application.FileDialog(msoFileDialogFolderPicker) 
    .Title = "Выберите папку, файлы в которой нужно обработать" 
    .ButtonName = "Выбрать" 
    .AllowMultiSelect = False 
    If .Show Then Folder = .SelectedItems(1) Else Exit Sub 
  End With 
  'Начинаем читать файлы из папки 
  wb = Dir(Folder & Application.PathSeparator & "*.xls") 
  While Len(wb) > 0 
    i = i + 1 
    wb = Folder & Application.PathSeparator & wb 
    Set objWb = Workbooks.Open(wb)
 
 здесь твой код

    objWb.Close False 
    wb = Dir 'читаем следующий файл 
  Wend 
End Sub
 
Прошу пардону за свои "5 копеек".
 
Спасибо. А что значит "здесь твой код"? Туда вставить формулу?
 
А не надо никаких формул: надо считать данные, обработать и записать на лист без формул
 
Цитата
Мотя пишет:

Работу макроса объясню в СКАЙПЕ в режиме демонстрации экрана "живьем".
Продукты вертикально, названия горизонтально.
В скайпе не могу, ребенок спит.  :)
Цитата
Александр Моторин пишет:
А не надо никаких формул: надо считать данные, обработать и записать на лист без формул
Большое Вам Спасибо. Попробую завтра разобраться, а то от такого количества информации у меня мозг закипел.
 
Если данные в таблицах, то лучше считывать в массив. И уже массив обрабатывать
 
Макрорекордер:
Если с ним будет проще.
 
Nic70y!
Зачем пользователь должен указывать список файлов?!
Даже самый тривиальнейший макрос обязан уметь считывать самостоятельно имена файлов, находящихся в каком-либо каталоге, и уметь создавать их список !
 
Мотя, слесарям макросы не нужны :!:  :D
 
Nic70y!
Ваш "тонкий" юмор мне не доступен.

Если Вы об образовании:
1. современное "верхнее" российское образование - достаточно дешевый атрибут, который можно приобрести элементарно даже за дензнаки;
2. как известно, программированию и козу научить можно.
 
Цитата
Мотя пишет:
Даже самый тривиальнейший макрос обязан уметь считывать самостоятельно имена файлов, находящихся в каком-либо каталоге, и уметь создавать их список !
Посмотрите здесь
 
Или здесь
 
А вообще и далеко ходить не нужно - идём в "Приемы" и смотрим там это
 
Юрий М!
Спасибо за рекомендации.

Полагаю, что если у меня есть своя "VB-рыба" на предмет динамического считывания имен файлов из каталога, состоящая из небольшого набора команд VB, это - не криминал в отношении указанных рекомендаций.  :D
 
Цитата
Мотя пишет:
Полагаю, что если у меня есть своя "VB-рыба" <...> это - не криминал в отношении указанных рекомендаций
Не посадят - точно!
 
Нормально. :D
 
Спасибо всем. Пока не все понял, но узнал очень много полезного для себя.
Страницы: 1
Наверх