Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Сумма одноименных ячеек мз одноименных листов идентичных книг в сводную книгу (несвязанные диапазоны), Собрать числовые данные из одинаковых книг в одну общую
 
Здоровья всем!
Прошу помощи в решении следующей задачи:
В филиалах (до 10 филиалов) заполняются отчетные формы (книги Excel)  и высылаются в центр. Данные в ячейках числовые, м.б. "пусто". Эти отчеты помещаются в отдельную папку, где находится файл "Общий". Необходимо в общем файле получить в каждой ячейке отчета сумму значений из филиальных отчетов.
Структура всех файлов одинаковая (количество и имена листов, наименование столбцов и строк отчетных таблиц - отличаются только числовые данные).
Нашел где-то макрос, который производит вышеуказанные действия для одного листа одного непрерывного диапазона. В моем случае в каждой книге примерно по 10 листов. На каждом листе 2-3 несмежных диапазона данных, диапазоны на разных листах разные.
В файлах примера диапазоны данных выделены цветом (для одного листа).
Я переделал макрос под свои диапазоны для одного листа: на каждый из 2-х диапазонов - свой макрос. общим макросом запускаю последовательно два своих макроса. Все работает.
Вопрос: как можно обойтись одним макросом для конкретного листа? Для других листов необходимо писать отдельные макросы? Или можно использовать универсальный макрос, который берет диапазоны для каждого листа из служебной таблицы?
Вот мои макросы:

Скрытый текст
Файлы прикладываю.
Изменено: Yuri KUB - 20.04.2020 16:48:57 (Не приложился файл)
Заполнение данными сразу нескольких бланков VBA, Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными
 
Hugo,

Ваш вариант также работает. Правда для 12-ти бланков код прилично разрастется. Хотя это не большая проблема.
Спасибо большое!
Заполнение данными сразу нескольких бланков VBA, Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными
 
Цитата
Юрий М написал:Тогда 1for j = 2 to 4
Ура! Сработало.
Всем огромное спасибо!
Заполнение данными сразу нескольких бланков VBA, Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными
 
Вот файл с двумя циклами.
Заполнение данными сразу нескольких бланков VBA, Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными
 
Ошибка на шаге i
Удалил область Книга по Вашему совету.
Ошибка осталась.
Заполнение данными сразу нескольких бланков VBA, Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными
 
Kuzmich,  Код без внешнего цикла работал. Сейчас, мне кажется, проблема с именованными диапазонами (см. сообщение #7)
Заполнение данными сразу нескольких бланков VBA, Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными
 
Новая ошибка.
У меня одинаковые имена областей на каждом листе бланков. Причем на листе "Печать бланка" ОБЛАСТЬ - Книга (я не могу / не знаю как) изменить. на двух других листах Область - соотв. листы. Может здесь криминал?
Заполнение данными сразу нескольких бланков VBA, Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными
 
Настя_Nastya, Теперь другая ошибка.
Заполнение данными сразу нескольких бланков VBA, Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными
 
Kuzmich, К сожалению, не работает.
Заполнение данными сразу нескольких бланков VBA, Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными
 
 Всем здоровья и благополучия!
Когда-то где-то нашел макрос , который заполняет шаблон документа данными из выбранной строки (где активная ячейка) в таблице (Лист "Реестр"). В шаблоне (Лист "Печать бланка") имеются именованные области (в примере - 10 областей), в которые циклом вставляются данные. Код работает:

Код
Option Explicit
Private Sub CommandButton1_Click()
Dim nomer_stroki As Long, massiv() As Variant, i As Integer
nomer_stroki = ActiveCell.Row
massiv = Range(Cells(nomer_stroki, 1), Cells(nomer_stroki, 10))
With sh1
    For i = 1 To 10
        .Range("yacheyka_" & i) = massiv(1, i)
    Next
End With
End Sub

Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными (причем не в каждом шаблоне используются все 10 полей данных). Попробовал (пока на три шаблона)организовать второй цикл (по листам) - ругается на второй Next:

Код
Option Explicit
Private Sub CommandButton1_Click()
Dim nomer_stroki As Long, massiv() As Variant, i As Integer, j As Integer
nomer_stroki = ActiveCell.Row
massiv = Range(Cells(nomer_stroki, 1), Cells(nomer_stroki, 10))

For j = 1 To 3
With Sheets("sh" & j)
    For i = 1 To 10
        .Range("yacheyka_" & i) = massiv(1, i)
    Next
'Next
End With
End Sub

Не владею VBA. Писал по логике.
Прошу исправить/подсказать/помочь.
Заранее благодарен!
Изменено: Yuri KUB - 29.09.2019 19:25:19
База данных в Excel, Существует база данных в Excel, необходимо привести ее в читаемый, адекватный вид.
 
Вот пример готовой БД  в Excel с добавлением/удалением/редактированием/поиском/фильтрацией записей
https://merkez-ihayat.blogspot.com/2016/11/new-updated-userform-15-column-more.html
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Спасибо всем, принявшим участие в этой теме.
Hugo,  Отдельное спасибо! Решение в #34 работает правильно.
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Hugo,
Нашёл по запросу currentregion: "Текущий регион (current region) -это  диапазон ячеек, ограниченный пустыми строками и колонками или сочетанием  пустых строк, пустых колонок и границ рабочего листа".
В моём примере нет "лишних" пустот. Или я чего-то не понимаю7
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Спасибо всем, кто принял участие в обсуждении этой темы!
Сейчас у меня работает вариант из постов #25 и #26
Продолжаю пробовать вариант от Hugo,  пост 20: не могу найти в коде ограничения на количество обрабатываемых строк см. пост #28
Код от Hugo, :

Код
Option Explicit
 '1. циклами по исходникам получаем словарь ключей петя|11,  коллекцию имён и  коллекцию дат.
'2. сортировка дат.
'3. выгрузка имён и дат на лист.
'4. циклами по листу собираем ключ, проверяем наличие в словаре, пишем (или нет) метку.
 
 
Sub tt()
    Dim a, i&, ii&, j&, col1 As New Collection, col2 As New Collection, ws As Worksheet, t$
    Dim vTemp As Variant
 
    Application.ScreenUpdating = False
 
    With CreateObject("Scripting.Dictionary"): .comparemode = 1
 
        On Error Resume Next
        a = [a1].CurrentRegion.Value
        '1
        For i = 1 To UBound(a, 2)
            a(i, 1) = Trim(a(i, 1))
            col1.Add a(i, 1), a(i, 1)
            For ii = 2 To UBound(a)
                If Len(a(i, ii)) = 0 Then Exit For
                col2.Add a(i, ii), Trim(a(i, ii))
                t = a(i, 1) & "|" & a(i, ii)
                .Item(t) = .Item(t) + 1
            Next
        Next
        On Error GoTo 0
 
        Set ws = Workbooks.Add.Sheets(1)
 
        '2
        'Two loops to bubble sort
        For i = 1 To col2.Count - 1
            For j = i + 1 To col2.Count
                If col2(i) > col2(j) Then
                    'store the lesser item
                    vTemp = col2(j)
                    'remove the lesser item
                    col2.Remove j
                    're-add the lesser item before the
                    'greater Item
                    col2.Add vTemp, Trim(vTemp), i
                End If
            Next j
        Next i
 
        '3
        For i = 1 To col1.Count
            ws.Cells(i + 1, 1) = col1(i)
        Next
 
        For i = 1 To col2.Count
            ws.Cells(1, i + 1) = col2(i)
        Next
 
        '4
        For i = 2 To col1.Count + 1
            For ii = 2 To col2.Count + 1
                t = ws.Cells(i, 1) & "|" & ws.Cells(1, ii)
                If .exists(t) Then ws.Cells(i, ii) = .Item(t)
            Next
        Next
    End With
 
    Application.ScreenUpdating = True
 
End Sub

Перевложил файл:

Изменено: Yuri KUB - 02.11.2017 09:26:56
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Hugo,
Попробовал Ваше решение (#20) на файле, близком к рабочему (см. вложение). Во вложенном файле список из 32 человек - формирует новую книгу (здесь на Лист1) на 21-го человека. Искал в коде ограничения по строкам - не нашёл.
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Да, так работает. Порядок людей д.б. одинаков.
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Цитата
Alexanderr написал:
=СУММПРОИЗВ(($B$3:$B$8=$I14)*($C3:$H3=J$22))
Не работает. Или это формула массива? Нет, как массив тоже не работает.
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Hugo написал:
Цитата
А по поводу комментария - там ведь шаги в коде обозначены, ещё мельче хотите?
Мельче не надо - мне неудобно Вас напрягать. А по поводу currentregion - у меня кроме вышеуказанного диапазона (C3:X125) есть ещё много разной информации.
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Bema,
Отлично! Все работает, спасибо
Hugo,
Меня заинтересовало Ваше решение.
Создавать новый файл-отчёт, наверное, правильнее.
Не могли бы Вы прокомментировать код. Что делать, если исходный диапазон C3:X125
Изменено: Yuri KUB - 30.10.2017 20:08:51
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Bema,
Совсем просто получилось - неожиданно!
Работает, считает повторы.
Попробую на рабочей таблице.
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Цитата
Bema написал:
что нужно если коды повторяются? Повторять 1?
Нет. Нужно считать кол-во повторений.
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Цитата
Bema написал:
У Вас список имен в исходной таблице в той же последовательности, что и в итоговой.
В общем случае порядок имен произвольный. Но можно их, я думаю, синхронизировать вручную.
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Bema, спасибо! Попробовал, но если коды повторяются - не учитывает
.Hugo, спасибо! Алгоритм вроде понятен, но воплотить в код мне не хватает знаний.
skais675, спасибо! Работает. Может мне на этом остановиться?
Изменено: Yuri KUB - 30.10.2017 23:23:30
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Быстро!
А если коды таблицы у одного (нескольких) человек повторятся?
Забыл, простите, отметить такую возможность.
Преобразовать таблицу к виду "шахматка" (или наоборот?), Преобразовать таблицу для отчета
 
Здравствуйте всем!
Второй день пытаюсь решить эту задачу. Пробовал ВПР, ГПР, ИНДЕКС+ПОИСКПОЗ - что-то не идет. Пользовался поиском, не нашёл, Честно говоря, даже сформулировать вопрос не могу. Возможно термин "шахматка" использую не правильно.
В файле - как есть и как надо.
Заполнение именованных ячеек в цикле, Нужно одновременно заполнить много (16) шаблонов данными из выбранной строки таблицы
 
Hugo,
Цитата
Hugo написал:
значит не изучили
Да, различия есть. А вставил-то в модуль я Ваш код.
Цитата
Hugo написал:
а зачем шаблон не один?
Такая технология - заполняется паспортная часть и кое-что по мелочевке. Затем врач переходит на нужный ему бланк (бланки) шаблонов (отдельные исследования, осмотры и пр.) и заполняет их разной спецификой - все бланки очень не унифицированы.
Заполнение именованных ячеек в цикле, Нужно одновременно заполнить много (16) шаблонов данными из выбранной строки таблицы
 
Всем огромное спасибо - задышало!

Hugo
Вставил код в модуль - все заработало.
Цитата
GetI = shToProcess.Range(shToProcess.Cells(4, 1), shToProcess.Cells(shToProcess.Rows.Count, 1)).Find(rz).Row
Эта строка должна дать номер выделенной строки (выбранного пациента) в таблице. Вроде работает.
Цитата
Hugo написал: P.P.S. Что будете делать если Find(rz) ничего не найдёт? Или точно 100% всегда найдёт?
Вроде должна найти на 100%
Заполнение именованных ячеек в цикле, Нужно одновременно заполнить много (16) шаблонов данными из выбранной строки таблицы
 
Александр,
Выбор пациента производится активацией нужной строки в таблице (i - № выбранной строки)
Я раньше формулами решал такие задачи - непостижимым образом пользователи (не хакеры) умудрялись их поломать, не смотря на установленную защиту. Потом долго и мучительно искал по шаблонам ошибки.
Sanja,
См. выше в этом сообщении.
Да, действительно дублирование - каждое поле таблицы дублируется 16 раз.
При заполнении через VBA информация не теряется.
"Заполнение бланков данными из таблицы" сейчас посмотрю.
Посмотрел (я уже раньше это видел) - если бы шаблон был бы один, то так. В моём случае - много формул, хотя и простых.
Изменено: Yuri KUB - 17.05.2017 22:53:33
Заполнение именованных ячеек в цикле, Нужно одновременно заполнить много (16) шаблонов данными из выбранной строки таблицы
 
Здравствуйте!
Прошу помочь в решении след. задачи:
Имеется таблица ("ОБРАБОТКА") с данными приёмов пациентов (15 полей). Необходимо заполнить этими данными (по одному пациенту) сразу 16 шаблонов - протоколы, справки и т.п. (в приложенном примере - 2 шаблона: ОСМОТР_Т и ОСМОТР_С. Я вставил временный лист "NamesTmp", на котором создал 15*16 именованных ячеек. Планировал потом "рапихать" эти ячейки по нужным местам в шаблонах.
Если решать эту задачу "в лоб", то, наверное, нужно для каждой необходимой ячейки в шаблонах прописывать что-то вроде этого:
Код
Лист1.Cells(4, 3) = shToProcess.Cells(i, 1).Cells(i, 2)

здесь Лист1 - лист шаблона, shToProcess - лист с таблицей, i - номер строки с данными.
Таких строчек получится до 240. При любом изменении структуры шаблонов эти строки должны быть скорректированы.
Я попробовал решить эту задачу циклом по именованным ячейкам:
Код
Private Sub toForms()

If i < 4 Then i = GetI
For k = 1 To 16
    Range("Pol_" & k) = shToProcess.Cells(i, 1)
    Range("FIO_" & k) = shToProcess.Cells(i, 2)
    Range("Sex_" & k) = shToProcess.Cells(i, 3)
    Range("DR_" & k) = shToProcess.Cells(i, 4)
    Range("NP_" & k) = shToProcess.Cells(i, 5)
    Range("FIOVr_" & k) = shToProcess.Cells(i, 6)
    Range("Spec_" & k) = shToProcess.Cells(i, 7)
    Range("DPr_" & k) = shToProcess.Cells(i, 8)
    Range("KodU_" & k) = shToProcess.Cells(i, 9)
    Range("KodD_" & k) = shToProcess.Cells(i, 10)
    Range("Dop_" & k) = shToProcess.Cells(i, 11)
    Range("Zakl_" & k) = shToProcess.Cells(i, 12)
    Range("Not1_" & k) = shToProcess.Cells(i, 13)
    Range("Not2_" & k) = shToProcess.Cells(i, 14)
    Range("Not3_" & k) = shToProcess.Cells(i, 15)
Next k
End Sub
Не работает - выдаёт ошибку "Application-defined or Object-defined error".
Что-то не так. Помогите, пожалуйста, разобраться.
Распределить даты по соответствующим столбцам, Массив дат распределить по столбцам соответствующих годов (в шапке)
 
Юрий М, красиво ... Даже мне, слабо ориентирующемуся в VBA, всё в коде понятно!
Ещё раз спасибо!
Страницы: 1 2 След.
Наверх