Доброго всем дня! Столкнулся с одной проблемой - у меня есть доступ к очень емкой сводной таблице, более миллиона строчек. Но формат такой таблицы мне очень не нравится - я хочу сам ее немного подшаманить в удобный для меня вид. Проблема в том, что у меня нет самого массива данных, я пользуюсь уже результатом, а доступа к массиву у меня нет. Это не проблема было бы попросить доступ, но не совсем корректно.
Как можно превратить сводную в массив, ликвидируя все эти ненужные мне итожки в виде total, которые только утяжеляют файл и неудобно смотреть. Пример во вложении.
Спасибо!
Доброго всем дня! Столкнулся с одной проблемой - у меня есть доступ к очень емкой сводной таблице, более миллиона строчек. Но формат такой таблицы мне очень не нравится - я хочу сам ее немного подшаманить в удобный для меня вид. Проблема в том, что у меня нет самого массива данных, я пользуюсь уже результатом, а доступа к массиву у меня нет. Это не проблема было бы попросить доступ, но не совсем корректно.
Как можно превратить сводную в массив, ликвидируя все эти ненужные мне итожки в виде total, которые только утяжеляют файл и неудобно смотреть. Пример во вложении.
Вариант с помощью допстолбца и автофильтра. 1. В "K2" вставьте эту формулу:
Код
=СЧЁТЕСЛИ(A2:J2;"*Total")
2. Щелкните по ячейке "K2" - щелкните 2 раза по квадратику в правом нижнем углу ячейки - формула скопируется до низа таблицы. 3. Сделайте автофильтр - в столбце "K" выберите "1" - удалите видимые строки. 4. Удалите автофильтр и допстолбец.
Если это надо делать часто, то можно сделать макрос.
Вариант с помощью допстолбца и автофильтра. 1. В "K2" вставьте эту формулу:
Код
=СЧЁТЕСЛИ(A2:J2;"*Total")
2. Щелкните по ячейке "K2" - щелкните 2 раза по квадратику в правом нижнем углу ячейки - формула скопируется до низа таблицы. 3. Сделайте автофильтр - в столбце "K" выберите "1" - удалите видимые строки. 4. Удалите автофильтр и допстолбец.
Если это надо делать часто, то можно сделать макрос.Karataev
Karataev, это уже гораздо ближе! Но вот в колонке "Клиент" таких клиентов может быть до тысячи, если я отфильтрую ИСТИНУ то получится такая картина - колонки "клиент", "месяц", "Год" будут не полностью заполненными. Если месяц и год можно и вручную заполнить ))), то клиентов вручную я буду до пенсии заполнять ) Можно что-то придумать с такой загогулиной?
Спасибо
Karataev, это уже гораздо ближе! Но вот в колонке "Клиент" таких клиентов может быть до тысячи, если я отфильтрую ИСТИНУ то получится такая картина - колонки "клиент", "месяц", "Год" будут не полностью заполненными. Если месяц и год можно и вручную заполнить ))), то клиентов вручную я буду до пенсии заполнять ) Можно что-то придумать с такой загогулиной?
Если у Вас это нормальная сводная то сами уберите итоги, если нет то сделаете свою по этой сводной и фильтрами уберите все строки содержащие Total
Если у Вас это нормальная сводная то сами уберите итоги, если нет то сделаете свою по этой сводной и фильтрами уберите все строки содержащие Totalskais675
колонки "клиент", "месяц", "Год" будут не полностью заполненными
Выделяете столбец Клиент -- F5 -- Выделить -- Пустые ячейки -- ОК -- в строку формул пишете = и нажимаете стрелку вверх на клавиатуре (в Вашем примере должно получится =С2) -- нажимаете Ctrl+Enter
колонки "клиент", "месяц", "Год" будут не полностью заполненными
Выделяете столбец Клиент -- F5 -- Выделить -- Пустые ячейки -- ОК -- в строку формул пишете = и нажимаете стрелку вверх на клавиатуре (в Вашем примере должно получится =С2) -- нажимаете Ctrl+EnterPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Вариант макросом. Запустите макрос на файле из поста 1. Если строк около 1 млн, то макрос будет долго работать, но можно изменить макрос, чтобы быстрее работал.
[vba]
Код
Sub Удалить_итоги() Dim arr(), lr As Long, i As Long Application.ScreenUpdating = False lr = Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _ , SearchFormat:=False).Row For i = lr To 2 Step -1 If WorksheetFunction.CountIf(Rows(i).Columns("A:J"), "*Total") <> 0 Then Rows(i).Delete End If Next i lr = Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _ , SearchFormat:=False).Row arr() = Range("A1:B" & lr).Value For i = 3 To lr If arr(i, 1) = "" Then arr(i, 1) = arr(i - 1, 1) arr(i, 2) = arr(i - 1, 2) End If Next i Range("A1:B" & lr).Value = arr() Application.ScreenUpdating = True End Sub
[/vba]
Вариант макросом. Запустите макрос на файле из поста 1. Если строк около 1 млн, то макрос будет долго работать, но можно изменить макрос, чтобы быстрее работал.
[vba]
Код
Sub Удалить_итоги() Dim arr(), lr As Long, i As Long Application.ScreenUpdating = False lr = Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _ , SearchFormat:=False).Row For i = lr To 2 Step -1 If WorksheetFunction.CountIf(Rows(i).Columns("A:J"), "*Total") <> 0 Then Rows(i).Delete End If Next i lr = Cells.Find(What:="*", LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _ , SearchFormat:=False).Row arr() = Range("A1:B" & lr).Value For i = 3 To lr If arr(i, 1) = "" Then arr(i, 1) = arr(i - 1, 1) arr(i, 2) = arr(i - 1, 2) End If Next i Range("A1:B" & lr).Value = arr() Application.ScreenUpdating = True End Sub
Спасибо большое! Все сделал, все получилось. Теперь новая проблема - уде 2часа сижу удаляю строки с ЛОЖЬю )) их около 170 тыс. Если выделяю их сразу все - ексель виснет конкретно..
Спасибо большое! Все сделал, все получилось. Теперь новая проблема - уде 2часа сижу удаляю строки с ЛОЖЬю )) их около 170 тыс. Если выделяю их сразу все - ексель виснет конкретно..Сапожник
Отсортируйте или отфильтруйте нужное и скопируйте их в другое место. а еще лучше построить сводную и ее помощью работать, она более быстро работает чем обычные фильтры
Отсортируйте или отфильтруйте нужное и скопируйте их в другое место. а еще лучше построить сводную и ее помощью работать, она более быстро работает чем обычные фильтрыskais675
Vlad skype: skais675 email: skais675@mail.ru
Сообщение отредактировал skais675 - Суббота, 29.04.2017, 20:58