Я использую некоторые макросы VBA в своей электронной таблице Excel, чтобы помочь мне исключить ненужные данные из представления, а затем разрешить мне экспортировать / скопировать подмножество всего набора данных, который у меня есть. Размер моей электронной таблицы - это Столбцы (A: BN) и Строки (1: 4693), которые, я думаю, представляют собой набор данных приличного размера. Столбцы (A: G) всегда будут видны. Я заинтересован только в сокрытии того, что находится в столбцах (H: BN).
Сначала, если я хочу сохранить столбец в поле зрения, я устанавливаю значение столбца «Y», затем нажимаю кнопку «Скрыть столбцы». Я делаю это, прикрепляя эту подпрограмму к кнопке:
Sub Hidecolumn()
Dim p As Range
For Each p In Range("H1:BN1").Cells
If p.Value = "N" Then
p.EntireColumn.Hidden = True
End If
Next p
End Sub
Это прекрасно работает.
У меня также есть кнопка «Показать все столбцы», чтобы снова отобразить все скрытые столбцы, и я делаю это с помощью:
Sub Unhidecolumn()
Dim p As Range
For Each p In Range("H1:BN1").Cells
If p.Value = "Y" Or p.Value = "N" Then
p.EntireColumn.Hidden = False
End If
Next p
End Sub
Теперь, когда у меня есть нужные столбцы, теперь мне нужно скрыть все ненужные строки. Каждая ячейка будет иметь «Y», если существует такая связь строки-столбца. Будет пустым, если нет отношений. Я хочу скрыть все строки, в которых все видимые ячейки в диапазоне ячеек пусты. ВСЕ КЛЕТКИ в диапазоне ячеек должны быть пустыми.
После того, как я спрятал все ненужные строки, я могу скопировать оставшиеся / видимые данные и скопировать их в новую рабочую книгу, чтобы поделиться с другими, потому что им нужны только данные, относящиеся к ним.
Наконец, точно так же, как я могу показать все скрытые столбцы, мне нужно также иметь возможность показать все скрытые строки.
В конце я хочу 4 кнопки на моем листе.
1. Скрыть столбцы
2. Показать столбцы
3. Скрыть строки
4. Показать строки
У меня уже есть первые 2, теперь мне нужны последние 2. Пожалуйста, помогите.
ОБНОВЛЕНИЕ: РЕШЕНИЕ - Спасибо, @K.Davis!
Sub HideRowsSecond()
Dim srcRng As Range, ws As Worksheet
Set ws = ActiveSheet
Set srcRng = ws.Rows("5:" & ws.Cells(ws.Rows.Count, 4).End(xlUp).Row)
Dim R As Range, hideRng As Range
For Each R In srcRng
If Application.CountA(R.Columns("H:BN").SpecialCells(xlCellTypeVisible)) = 0 Then
If hideRng Is Nothing Then
Set hideRng = R.EntireRow
Else
Set hideRng = Application.Union(hideRng, R.EntireRow)
End If
End If
Next R
If Not hideRng Is Nothing Then hideRng.EntireRow.Hidden = True
MsgBox ("Complete")
End Sub