Решил одну задачку (не кидайте помидорами, знаю, не самым лучшим способом):
Из списка около 2000 клиентов заполняется в годовой таблице (около 6000 столбцов) информация. Сделал с доп.таблицей вывод уникальных список клиентов отранжированных по убыванию суммы.
Даже такой вариант бы устроил но при протягивание формулы на список из 2000 клиентов при обработке 6000 столбцов ... да да файл ооооочень виснет.
Все попытки оптимизации таблицы не дали результатов.
Почитал, что это лечится макросами. Но в них не силен. Макрокодером такое не запишешь. Поэтому обращаюсь к знатокам VBA. Такое возможно?
Добрый вечер, ребята.
Решил одну задачку (не кидайте помидорами, знаю, не самым лучшим способом):
Из списка около 2000 клиентов заполняется в годовой таблице (около 6000 столбцов) информация. Сделал с доп.таблицей вывод уникальных список клиентов отранжированных по убыванию суммы.
Даже такой вариант бы устроил но при протягивание формулы на список из 2000 клиентов при обработке 6000 столбцов ... да да файл ооооочень виснет.
Все попытки оптимизации таблицы не дали результатов.
Почитал, что это лечится макросами. Но в них не силен. Макрокодером такое не запишешь. Поэтому обращаюсь к знатокам VBA. Такое возможно?Anis625
Anis625, а Вы не рассматриваете более феншуйный способ ведения своей таблицы? Все-таки 6 тысяч СТОЛБЦОВ - это, по-моему, явный перебор. Почитайте про нормализацию баз данных https://support.microsoft.com/en-us....-basics (автопереводчик Гугла вроде нормально эту статью на русский переводит). Там про БД и связи таблиц, но более-менее понятно Короче - нужно 6 столбцов мастер дата время клиент сумма примечение Тогда с этой таблицей легко работать можно будет
Anis625, а Вы не рассматриваете более феншуйный способ ведения своей таблицы? Все-таки 6 тысяч СТОЛБЦОВ - это, по-моему, явный перебор. Почитайте про нормализацию баз данных https://support.microsoft.com/en-us....-basics (автопереводчик Гугла вроде нормально эту статью на русский переводит). Там про БД и связи таблиц, но более-менее понятно Короче - нужно 6 столбцов мастер дата время клиент сумма примечение Тогда с этой таблицей легко работать можно будет_Boroda_
Короче - нужно 6 столбцов мастер дата время клиент сумма примечение Тогда с этой таблицей легко работать можно будет
Кстати, ввод данных в эту нормализированную таблицу неплохо бы организовать с помощью специальной формы (не обязательно, просто так удобнее). А вывод итогов - с помощью сводной таблицы
Короче - нужно 6 столбцов мастер дата время клиент сумма примечение Тогда с этой таблицей легко работать можно будет
Кстати, ввод данных в эту нормализированную таблицу неплохо бы организовать с помощью специальной формы (не обязательно, просто так удобнее). А вывод итогов - с помощью сводной таблицы_Boroda_
Короче - нужно 6 столбцов мастер дата время клиент сумма примечение Тогда с этой таблицей легко работать можно будет
Цель таблицы где вводится информация другая. Я вас понимаю о чем вы говорите. Но к сожалению ежедневно информация не заносится сплошняком вниз, а именно как в таблице. Если бы как 6 столбцов то было бы проще, согласен.
Короче - нужно 6 столбцов мастер дата время клиент сумма примечение Тогда с этой таблицей легко работать можно будет
Цель таблицы где вводится информация другая. Я вас понимаю о чем вы говорите. Но к сожалению ежедневно информация не заносится сплошняком вниз, а именно как в таблице. Если бы как 6 столбцов то было бы проще, согласен.Anis625
Расскажите. Не представляю, для какой цели нужна такая табличище. Посмотреть визуально не получится, экран нужен - на всю стену концертного зала. Анализировать намного проще таблицу, которую предложил _Boroda_.
Цитата
Цель таблицы где вводится информация другая
Расскажите. Не представляю, для какой цели нужна такая табличище. Посмотреть визуально не получится, экран нужен - на всю стену концертного зала. Анализировать намного проще таблицу, которую предложил _Boroda_.vikttur
"посмотреть визуально" - это не о том, что я хочу посмотреть. Подразумевалсь, что такую простыню (правильнее - 100-метровую ковровую дорожку) нельзя охватить визуально. Если расскажете о цели использования таблицы и как Вы с ней работаете, возможно, форум поможет упростить работу с этим чудом.
"посмотреть визуально" - это не о том, что я хочу посмотреть. Подразумевалсь, что такую простыню (правильнее - 100-метровую ковровую дорожку) нельзя охватить визуально. Если расскажете о цели использования таблицы и как Вы с ней работаете, возможно, форум поможет упростить работу с этим чудом.vikttur
Это файл для записи и учета клиентов парикмахерской. В таблице: в первом столбце заведены список мастеров (пока 40, будут дополняться) и вправо больше 5 тыс. столбцов это 365 дней разбиты на весь день с 8:00 до 22:00 по 1 часу. То есть администратор открывает файл и в течение дня записывает клиентов на удобное для них время. Когда клиент пришел заносится сумма. На основании этой таблицы я построил несколько аналитических таблиц и файл отлично работает (я максимально уже упростил, чтобы все отлично работало). Многие формулы оптимизировал ссылкой на небольшой диапазон со смещением. А вот последнюю задачку добавляю формулами (приходится ссылаться на всю таблицу): собрать выручку по всем клиентам и чтобы выводился список клиентов в ранжированном порядке по сумме и ... файл виснет.
Прочитал в интернете, что макросы в этом случае в помощь приходят.
vikttur,
Это файл для записи и учета клиентов парикмахерской. В таблице: в первом столбце заведены список мастеров (пока 40, будут дополняться) и вправо больше 5 тыс. столбцов это 365 дней разбиты на весь день с 8:00 до 22:00 по 1 часу. То есть администратор открывает файл и в течение дня записывает клиентов на удобное для них время. Когда клиент пришел заносится сумма. На основании этой таблицы я построил несколько аналитических таблиц и файл отлично работает (я максимально уже упростил, чтобы все отлично работало). Многие формулы оптимизировал ссылкой на небольшой диапазон со смещением. А вот последнюю задачку добавляю формулами (приходится ссылаться на всю таблицу): собрать выручку по всем клиентам и чтобы выводился список клиентов в ранжированном порядке по сумме и ... файл виснет.
Прочитал в интернете, что макросы в этом случае в помощь приходят.Anis625
Аналогию пытался найти в интернете. Есть или только как проранжировать готовый диапазон (это умею) или сформировать уникальный список по условию (это умею) что и сделал в таблице. Но файл виснет.
Аналогию пытался найти в интернете. Есть или только как проранжировать готовый диапазон (это умею) или сформировать уникальный список по условию (это умею) что и сделал в таблице. Но файл виснет.Anis625
Предложенная ранее таблица с 6-ю столбцами. Добавляем еще один столбец - оплата. Возможно, еще примечание или флаг-отметка о посещении... В любом случае количество столбцов не перевалит за 1000 Вся информация есть. Из такой таблицы можно извлекать данные по любым параметрам (отдельным, нескольким), считать-суммировать-анализировать. Хотите посмотреть работу кокретного мастера - жмем кнопку, получаем отдельно или такую же таблицу для одного мастера, или календать с разбивкой по дням. Хотите просмотреть конкретный день прошлого года - выводится информация по выбраному дню. По клиенту, времени... Посчитать количество стрижек, которые делались мастером Петровой клиенту Абдурахманову по средам в 23 часа (а это стрижки были? ) на протяжении 12 лет - пожалуйста! Естественно, нужно макросы писать, но такое решение намного удобнее для работы.Формулы, если и есть, то несколько вспомогательных. Файл летает, оператор кофе пьет, мастера стрижки модельные формируют, начальство купоны стрижет )
Предложенная ранее таблица с 6-ю столбцами. Добавляем еще один столбец - оплата. Возможно, еще примечание или флаг-отметка о посещении... В любом случае количество столбцов не перевалит за 1000 Вся информация есть. Из такой таблицы можно извлекать данные по любым параметрам (отдельным, нескольким), считать-суммировать-анализировать. Хотите посмотреть работу кокретного мастера - жмем кнопку, получаем отдельно или такую же таблицу для одного мастера, или календать с разбивкой по дням. Хотите просмотреть конкретный день прошлого года - выводится информация по выбраному дню. По клиенту, времени... Посчитать количество стрижек, которые делались мастером Петровой клиенту Абдурахманову по средам в 23 часа (а это стрижки были? ) на протяжении 12 лет - пожалуйста! Естественно, нужно макросы писать, но такое решение намного удобнее для работы.Формулы, если и есть, то несколько вспомогательных. Файл летает, оператор кофе пьет, мастера стрижки модельные формируют, начальство купоны стрижет )vikttur
Сообщение отредактировал vikttur - Пятница, 11.01.2019, 18:58
Дык про что мы с Виктором Вам и толкуем целый день
Ладно, хотите макрос - держите Он в модуле листа 2019. Запускается кнопкой с листа Мастера. Так сделано для того, чтобы листы 2019 и Мастера можно было переименовывать. Лист Клиенты переименовывать нельзя (или, если очень хочется, то нужно поправить название и в макросе). Специально не стал по кодовым названиям листов делать, чтобы макрос можно было переносить в другие файлы [vba]
Код
Sub sbor() With Sheets("клиенты") ark = .Cells(2, 2).Resize(.Cells(.Rows.Count, 2).End(3).Row - 1) End With c0_ = 4 r0_ = 6 r00_ = 3 nc_ = WorksheetFunction.Count(Rows(3)) nr_ = Cells(Rows.Count, 2).End(3).Row - r0_ + 2 ar = Cells(r0_, c0_).Resize(nr_, nc_) ar0 = Cells(r00_, c0_).Resize(1, nc_) Set slov1 = CreateObject("Scripting.Dictionary") Set slov2 = CreateObject("Scripting.Dictionary") With slov1 For i = 1 To UBound(ark) aaa = .Item(ark(i, 1)) aaa = slov2.Item(ark(i, 1)) Next i For i = 1 To nr_ Step 2 For j = 1 To nc_ If ar0(1, j) < 1 Then If Not IsEmpty(ar(i, j)) Then If .exists(ar(i, j)) Then .Item(ar(i, j)) = .Item(ar(i, j)) + ar(i + 1, j) slov2.Item(ar(i, j)) = slov2.Item(ar(i, j)) + 1 Else t_ = t_ & "; " & ar(i, j) End If End If End If Next j Next i n_ = .Count End With With ActiveSheet .Cells(50, 3).Resize(.Cells(.Rows.Count, 1).End(3).Row, 3).ClearContents .Cells(48, 3).ClearContents .Cells(50, 3).Resize(n_) = Application.Transpose(slov1.Keys) .Cells(50, 4).Resize(n_) = Application.Transpose(slov2.items) .Cells(50, 5).Resize(n_) = Application.Transpose(slov1.items) If t_ <> "" Then .Cells(48, 3) = Mid(t_, 3) End If End With End Sub
[/vba]
* Поправил строку (нужен не первый словарь, а второй, а я скопировал и забыл поменять) и перевложил файл [vba]
Дык про что мы с Виктором Вам и толкуем целый день
Ладно, хотите макрос - держите Он в модуле листа 2019. Запускается кнопкой с листа Мастера. Так сделано для того, чтобы листы 2019 и Мастера можно было переименовывать. Лист Клиенты переименовывать нельзя (или, если очень хочется, то нужно поправить название и в макросе). Специально не стал по кодовым названиям листов делать, чтобы макрос можно было переносить в другие файлы [vba]
Код
Sub sbor() With Sheets("клиенты") ark = .Cells(2, 2).Resize(.Cells(.Rows.Count, 2).End(3).Row - 1) End With c0_ = 4 r0_ = 6 r00_ = 3 nc_ = WorksheetFunction.Count(Rows(3)) nr_ = Cells(Rows.Count, 2).End(3).Row - r0_ + 2 ar = Cells(r0_, c0_).Resize(nr_, nc_) ar0 = Cells(r00_, c0_).Resize(1, nc_) Set slov1 = CreateObject("Scripting.Dictionary") Set slov2 = CreateObject("Scripting.Dictionary") With slov1 For i = 1 To UBound(ark) aaa = .Item(ark(i, 1)) aaa = slov2.Item(ark(i, 1)) Next i For i = 1 To nr_ Step 2 For j = 1 To nc_ If ar0(1, j) < 1 Then If Not IsEmpty(ar(i, j)) Then If .exists(ar(i, j)) Then .Item(ar(i, j)) = .Item(ar(i, j)) + ar(i + 1, j) slov2.Item(ar(i, j)) = slov2.Item(ar(i, j)) + 1 Else t_ = t_ & "; " & ar(i, j) End If End If End If Next j Next i n_ = .Count End With With ActiveSheet .Cells(50, 3).Resize(.Cells(.Rows.Count, 1).End(3).Row, 3).ClearContents .Cells(48, 3).ClearContents .Cells(50, 3).Resize(n_) = Application.Transpose(slov1.Keys) .Cells(50, 4).Resize(n_) = Application.Transpose(slov2.items) .Cells(50, 5).Resize(n_) = Application.Transpose(slov1.items) If t_ <> "" Then .Cells(48, 3) = Mid(t_, 3) End If End With End Sub
[/vba]
* Поправил строку (нужен не первый словарь, а второй, а я скопировал и забыл поменять) и перевложил файл [vba]
Отказываться от такого варианта думаю не правильно. Но это думаю будет следующий шаг и релиз формы. Спасибо Вам за идею. Возможно обращусь к вам за этим вариантом.
vikttur,
Отказываться от такого варианта думаю не правильно. Но это думаю будет следующий шаг и релиз формы. Спасибо Вам за идею. Возможно обращусь к вам за этим вариантом.Anis625