Добрый день, уважаемые форумчане! Помогите пожалуйста! Просмотрела в поиске форум, но решения моей задачи не нашла.
Есть книга из 12 листов, на каждом листе отображаются обороты по Дебету и Кредиту счетов. Есть куча счетов (отображены в столбцах), где не было движения и соответственно значения =0. Как сделать на каждом листе, чтобы счет с нулевым значением не отображался? Автоматически скрывался?
Есть одно НО: Если по счету есть ненулевые данные допустим по Дт , то столбец этого же счета по Кт, не должен быть скрыт (в примере - по стету 104 есть ненулевая сумма по Дт, столбец по Кт этого же счета не должен быть скрыт).
С макросами пока, к сожалению, не знакома. Наверное это делается с помощью макросов. Если можно - чтобы была кнопка на каждом листе - "скрыть столбцы" , "отобразить столбцы".
Помогите пожалуйста! Вручную скрывать неудобно, да и долго.
С уважением к форумчанам.
Добрый день, уважаемые форумчане! Помогите пожалуйста! Просмотрела в поиске форум, но решения моей задачи не нашла.
Есть книга из 12 листов, на каждом листе отображаются обороты по Дебету и Кредиту счетов. Есть куча счетов (отображены в столбцах), где не было движения и соответственно значения =0. Как сделать на каждом листе, чтобы счет с нулевым значением не отображался? Автоматически скрывался?
Есть одно НО: Если по счету есть ненулевые данные допустим по Дт , то столбец этого же счета по Кт, не должен быть скрыт (в примере - по стету 104 есть ненулевая сумма по Дт, столбец по Кт этого же счета не должен быть скрыт).
С макросами пока, к сожалению, не знакома. Наверное это делается с помощью макросов. Если можно - чтобы была кнопка на каждом листе - "скрыть столбцы" , "отобразить столбцы".
Помогите пожалуйста! Вручную скрывать неудобно, да и долго.
For Each Sh In ActiveWorkbook.Worksheets LastR = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row For x = StartC To Sh.Cells(3, Sh.Columns.Count).End(xlToLeft).Column Step 2 If CLng(Sh.Cells(LastR, x).Value) = 0 Then 'проверяем ячейку "дебет" Set Cols = Union(IIf(Cols Is Nothing, Sh.Columns(x), Cols), Sh.Columns(x)) Set Cols = Union(Cols, Sh.Columns(x + 1)) End If Next x Next Sh Cols.EntireColumn.Hidden = True Application.ScreenUpdating = True Set Cols = Nothing End Sub
Sub Показать_столбцы() Dim Sh As Worksheet, RA As Range
Application.ScreenUpdating = False
For Each Sh In ActiveWorkbook.Worksheets For Each RA In Sh.UsedRange.Rows(1).Cells If RA.EntireColumn.Hidden = True Then RA.EntireColumn.Hidden = False Next Next Sh Application.ScreenUpdating = True End Sub
[/vba]
Для начала нужно этим макросам разрешить запускаться:
Офис 2003 Сервис->Макрос->Безопасность->Низкая (или средняя)
Офис 2007/2010 Главное Меню (крайнее левое на ленте в виде кружочка) -> Параметры Excel -> Центр управления безопасностью -> Параметры центра управления безопасностью -> Параметры макросов -> уровень безопасности "Низкий".
Либо используйте приложенный мною скрипт (правой кнопкой мыши - запуск от имени администратора).
Дальше, открываем Excel с Вашими расчетами. Нажимаем левый ALT+F8 набираем любое слово, нажимаем {Enter}. В появившемся окошке выделяем все, удаляем. В это же окошко копируем приведенный выше код. Закрываем окно редактора, сохраняемся.
Для запуска макроса нажмите левый Alt+F8, {Enter}.
Либо создаете кнопку с панели инструментов (правая кнопка - выбрать "формы") Кнопка в виде кнопки :), назначить макрос - и выбираете из списка.
Как он должен действовать - на все листы или на конкретный?
Здравствуйте!
Код макроса такой
[vba]
Code
Option Explicit
Sub Скрыть_столбцы() Dim Sh As Worksheet, Cols As Range Dim LastR&, StartC&, x&
For Each Sh In ActiveWorkbook.Worksheets LastR = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row For x = StartC To Sh.Cells(3, Sh.Columns.Count).End(xlToLeft).Column Step 2 If CLng(Sh.Cells(LastR, x).Value) = 0 Then 'проверяем ячейку "дебет" Set Cols = Union(IIf(Cols Is Nothing, Sh.Columns(x), Cols), Sh.Columns(x)) Set Cols = Union(Cols, Sh.Columns(x + 1)) End If Next x Next Sh Cols.EntireColumn.Hidden = True Application.ScreenUpdating = True Set Cols = Nothing End Sub
Sub Показать_столбцы() Dim Sh As Worksheet, RA As Range
Application.ScreenUpdating = False
For Each Sh In ActiveWorkbook.Worksheets For Each RA In Sh.UsedRange.Rows(1).Cells If RA.EntireColumn.Hidden = True Then RA.EntireColumn.Hidden = False Next Next Sh Application.ScreenUpdating = True End Sub
[/vba]
Для начала нужно этим макросам разрешить запускаться:
Офис 2003 Сервис->Макрос->Безопасность->Низкая (или средняя)
Офис 2007/2010 Главное Меню (крайнее левое на ленте в виде кружочка) -> Параметры Excel -> Центр управления безопасностью -> Параметры центра управления безопасностью -> Параметры макросов -> уровень безопасности "Низкий".
Либо используйте приложенный мною скрипт (правой кнопкой мыши - запуск от имени администратора).
Дальше, открываем Excel с Вашими расчетами. Нажимаем левый ALT+F8 набираем любое слово, нажимаем {Enter}. В появившемся окошке выделяем все, удаляем. В это же окошко копируем приведенный выше код. Закрываем окно редактора, сохраняемся.
Для запуска макроса нажмите левый Alt+F8, {Enter}.
Либо создаете кнопку с панели инструментов (правая кнопка - выбрать "формы") Кнопка в виде кнопки :), назначить макрос - и выбираете из списка.
Как он должен действовать - на все листы или на конкретный?Dragokas
Хотелось бы, чтобы действовал макрос на каждом листе, но по моему ручному запуску на определенном листе (во время работы, допустим на 1-м листе - 2й, 3й и т.д не трогал, а когда я переходила на 2й лист, то сама запускала его действие). Так можно? Если нет - то главное, чтобы работал.
Я попробовала сделать, как написано, но в примере, когда пытаюсь применить макрос показывает ошибку "1004" вот на этой строке:
Set Cols = Union(IIf(Cols Is Nothing, Sh.Columns(x), Cols), Sh.Columns(x))
Может я что-то не то сделала? Или Ваш файл с *.cmd *.reg нужно в определенній каталог переложить? Или выделить все столбцы и строки, где он должен работать??
Что я не так делаю???
Dragokas - спасибо за помощь!
Хотелось бы, чтобы действовал макрос на каждом листе, но по моему ручному запуску на определенном листе (во время работы, допустим на 1-м листе - 2й, 3й и т.д не трогал, а когда я переходила на 2й лист, то сама запускала его действие). Так можно? Если нет - то главное, чтобы работал.
Я попробовала сделать, как написано, но в примере, когда пытаюсь применить макрос показывает ошибку "1004" вот на этой строке:
Set Cols = Union(IIf(Cols Is Nothing, Sh.Columns(x), Cols), Sh.Columns(x))
Может я что-то не то сделала? Или Ваш файл с *.cmd *.reg нужно в определенній каталог переложить? Или выделить все столбцы и строки, где он должен работать??
Set Sh = ActiveSheet LastR = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row For x = StartC To Sh.Cells(3, Sh.Columns.Count).End(xlToLeft).Column Step 2 If CLng(Sh.Cells(LastR, x).Value) = 0 Then 'проверяем ячейку "дебет" Set Cols = Union(IIf(Cols Is Nothing, Sh.Columns(x), Cols), Sh.Columns(x)) Set Cols = Union(Cols, Sh.Columns(x + 1)) End If Next x Cols.EntireColumn.Hidden = True
Application.ScreenUpdating = True Set Cols = Nothing: Set Sh = Nothing End Sub
Sub Показать_столбцы() Dim Sh As Worksheet, RA As Range
Application.ScreenUpdating = False
For Each RA In ActiveSheet.UsedRange.Rows(1).Cells If RA.EntireColumn.Hidden = True Then RA.EntireColumn.Hidden = False Next Application.ScreenUpdating = True End Sub
[/vba]
Код для кнопки:
[vba]
Code
Private Sub CommandButton1_Click() If ActiveSheet.CommandButton1.Caption = "Свернуть" Then ActiveSheet.CommandButton1.Caption = "Развернуть" Call Module1.Скрыть_столбцы Else ActiveSheet.CommandButton1.Caption = "Свернуть" Call Module1.Показать_столбцы End If End Sub
[/vba]
Прикрепил книгу с кнопками. Вот картинка о том, как повесить на новый лист кнопку с кодом: Скопировать кнопку Все вместил в одну кнопку. polly, дальше можете не читать -:) Создавал их с панели "Элементы управления", а не "Формы", так как те кнопки имеют свойство автоматом неправильно переопределять расположение макроса при переименовании книги.
В первом варианте: ошибка была в том, что Excel 2003 версии не позволяет хранить в одной переменной данные о ячейках разных листов как объекта. Требовалось сместить свойство сокрытия колонок и очистку переменной в позицию до оператора Next Sh.
Нет, Вы все правильно сделали.
Вот вариант для отдельного листа:
[vba]
Code
Sub Скрыть_столбцы() Dim Sh As Worksheet, Cols As Range Dim LastR&, StartC&, x&
Set Sh = ActiveSheet LastR = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row For x = StartC To Sh.Cells(3, Sh.Columns.Count).End(xlToLeft).Column Step 2 If CLng(Sh.Cells(LastR, x).Value) = 0 Then 'проверяем ячейку "дебет" Set Cols = Union(IIf(Cols Is Nothing, Sh.Columns(x), Cols), Sh.Columns(x)) Set Cols = Union(Cols, Sh.Columns(x + 1)) End If Next x Cols.EntireColumn.Hidden = True
Application.ScreenUpdating = True Set Cols = Nothing: Set Sh = Nothing End Sub
Sub Показать_столбцы() Dim Sh As Worksheet, RA As Range
Application.ScreenUpdating = False
For Each RA In ActiveSheet.UsedRange.Rows(1).Cells If RA.EntireColumn.Hidden = True Then RA.EntireColumn.Hidden = False Next Application.ScreenUpdating = True End Sub
[/vba]
Код для кнопки:
[vba]
Code
Private Sub CommandButton1_Click() If ActiveSheet.CommandButton1.Caption = "Свернуть" Then ActiveSheet.CommandButton1.Caption = "Развернуть" Call Module1.Скрыть_столбцы Else ActiveSheet.CommandButton1.Caption = "Свернуть" Call Module1.Показать_столбцы End If End Sub
[/vba]
Прикрепил книгу с кнопками. Вот картинка о том, как повесить на новый лист кнопку с кодом: Скопировать кнопку Все вместил в одну кнопку. polly, дальше можете не читать -:) Создавал их с панели "Элементы управления", а не "Формы", так как те кнопки имеют свойство автоматом неправильно переопределять расположение макроса при переименовании книги.
В первом варианте: ошибка была в том, что Excel 2003 версии не позволяет хранить в одной переменной данные о ячейках разных листов как объекта. Требовалось сместить свойство сокрытия колонок и очистку переменной в позицию до оператора Next Sh.Dragokas
Сообщение отредактировал Dragokas - Понедельник, 24.09.2012, 01:42
Public Sub ColHide() Dim r As Range, c As Range Set r = [g6:dh19]: On Error Resume Next Set c = r.SpecialCells(2, 1) If Err Then Err.Clear: Exit Sub r.EntireColumn.Hidden = -1: c.EntireColumn.Hidden = 0 End Sub
Public Sub ColUnHide() [g6:dh19].EntireColumn.Hidden = 0 End Sub
[/vba] Если при отсутствии значений нужно скрыть все счета, то строку: If Err Then Err.Clear: Exit Sub надо закомментировать.
Мож я чего спросонок не учел? Вариант: [vba]
Code
Public Sub ColHide() Dim r As Range, c As Range Set r = [g6:dh19]: On Error Resume Next Set c = r.SpecialCells(2, 1) If Err Then Err.Clear: Exit Sub r.EntireColumn.Hidden = -1: c.EntireColumn.Hidden = 0 End Sub
Public Sub ColUnHide() [g6:dh19].EntireColumn.Hidden = 0 End Sub
[/vba] Если при отсутствии значений нужно скрыть все счета, то строку: If Err Then Err.Clear: Exit Sub надо закомментировать.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Сообщение отредактировал KuklP - Понедельник, 24.09.2012, 07:16
Всем привет. Весьма интересная тема на мой взгляд, только было бы интереснее чтоб данный фильтр работал примерно таким же образом как стд фильтр экселя, тоесть с возможностью выбора того что хочу скрыть и в каком диапазоне, другими словами транспорировать стд фильтр (сделать полноценный фильтр для фильтрации столбцов) ))) может найдутся умельцы VBA способные реализовать такую надстроечку? Я не скажу что это безумно необходимая вещь, поскольку частое использование вряд ли будет нужным, но для запаса на всякий случай, было бы неплохо иметь такую возможность.
Всем привет. Весьма интересная тема на мой взгляд, только было бы интереснее чтоб данный фильтр работал примерно таким же образом как стд фильтр экселя, тоесть с возможностью выбора того что хочу скрыть и в каком диапазоне, другими словами транспорировать стд фильтр (сделать полноценный фильтр для фильтрации столбцов) ))) может найдутся умельцы VBA способные реализовать такую надстроечку? Я не скажу что это безумно необходимая вещь, поскольку частое использование вряд ли будет нужным, но для запаса на всякий случай, было бы неплохо иметь такую возможность.DJ_Marker_MC
Сообщение отредактировал marker_mc - Понедельник, 24.09.2012, 13:11
Добрый день. Помогите, пожалуйста. В приложенном файле пример статистики по моделям беговых лыж. Задача: по кнопке скрыть стобцы, где в ячейках суммирования (строка 2) ноль. Т.е., чтобы столбцы H, M и т.д. скрылись.
Познаний в VBA очень мало, пытался как-то приспособить макрос от Dragokas, но там выдает ошибку 91. Очень надеюсь на помощь.
Добрый день. Помогите, пожалуйста. В приложенном файле пример статистики по моделям беговых лыж. Задача: по кнопке скрыть стобцы, где в ячейках суммирования (строка 2) ноль. Т.е., чтобы столбцы H, M и т.д. скрылись.
Познаний в VBA очень мало, пытался как-то приспособить макрос от Dragokas, но там выдает ошибку 91. Очень надеюсь на помощь.Дучи
Что такое ячейки суммирования? Если это четко определенные колонки, тогда список имен (номеров) столбцов в студию, пожалуйста.
Если все подряд, то: [vba]
Code
Dim RA as Range application.screenupdating=false For Each RA in Range(Cells(2,Columns("H").Column), cells(2,columns.count).end(xltoleft)) if Ra.value=0 then Ra.entirecolumn.hidden=true next application.screenupdating=true
[/vba]
Что такое ячейки суммирования? Если это четко определенные колонки, тогда список имен (номеров) столбцов в студию, пожалуйста.
Если все подряд, то: [vba]
Code
Dim RA as Range application.screenupdating=false For Each RA in Range(Cells(2,Columns("H").Column), cells(2,columns.count).end(xltoleft)) if Ra.value=0 then Ra.entirecolumn.hidden=true next application.screenupdating=true