как скрыть столбец?

Программирование на Visual Basic for Applications
gemach
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 27.11.2006 (Пн) 10:25

как скрыть столбец?

Сообщение gemach » 27.11.2006 (Пн) 12:14

Как в Exele скрыть столбцы, в которых кроме цифры находятся ячейки с цифрой 0?
Например:
столбец №1 столбец №2 столбец №3
"Имя столбца" "Имя столбца" "Имя столбца"
аргумент1 3 0 27
аргумент2 153 0 0
аргумент3 0 0 1

в данном примере нужно скрыть только столбец №2.
Пожалуйста помогите! :oops:

rok
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 18.06.2005 (Сб) 12:45

Сообщение rok » 27.11.2006 (Пн) 12:59

А в столбцах число ипи текст? И как я понял скрыть если 0, а если 00 то не скрывать-так?

gemach
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 27.11.2006 (Пн) 10:25

Сообщение gemach » 27.11.2006 (Пн) 15:14

Текст в столбце только в заголовке столбца, остальные строки столбца цифры в числовом формате.Поэтому если в столбце во всех строках нули, не считая заголовка, то столбец необходимо скрыть.Если хотя бы в одной строке столбца есть число не равное нулю, столбец скрывать не нужно.
Мой ISQ:218-648-168

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 27.11.2006 (Пн) 15:25

Код: Выделить всё
Sub Hide_Col()
Dim ColCounter As Long, RowCounter As Long, _
ColumnsCount As Long, RowsCount As Long
Application.ScreenUpdating =False

With ActiveSheet
ColumnsCount = UsedRange.Columns.Count
RowsCount = UsedRange.Rows.Count
End With

For ColCounter = 2 To ColumnsCount
For RowCounter = 2 To RowsCount
  If Cells(RowCounter,ColCounter) <> 0 then
   exit for
  Elseif RowCounter = RowsCount then
   Columns(ColCounter).Hidden = True
  end if
Next
Next
Application.ScreenUpdating = True
End Sub


Вроде так - берем столбец, пробегаем по его строкам. Если не нашли ничего, отличного от нуля, прячем столбец. Если нашли, оставляем столбец в покое и переходим к следующему.
Последний раз редактировалось Чудовище под кроватью 28.11.2006 (Вт) 9:16, всего редактировалось 2 раз(а).
У-у-у!!

Tanya
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 03.03.2004 (Ср) 21:41
Откуда: Беларусь, Минск

Сообщение Tanya » 28.11.2006 (Вт) 0:17

Код: Выделить всё
Sub Hide_Col()
Dim i As Long, RowsCount As Long
Application.ScreenUpdating = False
With ActiveSheet
  RowsCount = .UsedRange.Rows.Count
  For i = 2 To .UsedRange.Columns.Count
    .Columns(i).Hidden = _
      (WorksheetFunction.Sum(.Range(.Cells(2, i), .Cells(RowsCount, i))) = 0)
  Next
End With
Application.ScreenUpdating = True
End Sub

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 28.11.2006 (Вт) 7:06

Tanya писал(а):
Код: Выделить всё
Sub Hide_Col()
Dim i As Long, RowsCount As Long
Application.ScreenUpdating = False
With ActiveSheet
  RowsCount = .UsedRange.Rows.Count
  For i = 2 To .UsedRange.Columns.Count
    .Columns(i).Hidden = _
      (WorksheetFunction.Sum(.Range(.Cells(2, i), .Cells(RowsCount, i))) = 0)
  Next
End With
Application.ScreenUpdating = True
End Sub

Если я правильно понял, имеем:
1) Для каждого столбца вместо N операций сравнения (N - количество строк) - N операций сложения и одну операцию сравнения.
2) Неверный результат, если в таблице будут отрицательные числа.
3) Явное указание на активный лист, хотя он и так берется по умолчанию.
Я не прав?

З.Ы.: хотя, конечно, использование листа быстрее. Если нет отрицательных чисел, этот способ быстрее при большом количестве ячеек.
Последний раз редактировалось Чудовище под кроватью 28.11.2006 (Вт) 11:06, всего редактировалось 2 раз(а).
У-у-у!!

gemach
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 27.11.2006 (Пн) 10:25

Сообщение gemach » 28.11.2006 (Вт) 9:00

чего-то у меня ничего не получается, можно отправить пример c Exeleм на почту. gemach@mail.ru?

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 28.11.2006 (Вт) 9:19

отправил
У-у-у!!

gemach
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 27.11.2006 (Пн) 10:25

Сообщение gemach » 28.11.2006 (Вт) 9:58

Это я тут стормозил. Всёё работает. Спасибо!

gemach
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 27.11.2006 (Пн) 10:25

Сообщение gemach » 28.11.2006 (Вт) 11:57

'выбираем данные
Private Sub ComboBox1_GotFocus()
ComboBox1.List = Worksheets(3).Range("i2:i300").Value
End Sub

'указываем куда подставлять выбранные данные
Private Sub ComboBox1_LostFocus()
Worksheets("Меню").Range("a4") = ComboBox1
End Sub

А как второй макрос заставить подсталять всю строку, выбранную в первом макросе по первому столбцу?


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 98

    TopList