Здравствуйте!
Для меня ключевые слова: «неформатированная таблица», «столбцы с пустыми ячейками».
shunya написал:
во вложенном файле нужно выделить С2:С15
Как я понимаю, таблица, как в представленном примере, без определенной структуры, не имеет заголовков, а при наличии пустых ячеек отсутствуют четкие обозначения строк и столбцов с данными. Точнее будет сказать я не понимаю, как выбрать рабочий диапазон в таком случае. Данные могут быть разбросаны???
Первый вариант пробовала определить область с данными через UsedRange, если использовать представленные Вами данные это будет работать (именно в вашем файле, но не в моем). Но если я добавляю форматирование на нижестоящие ячейки, то переопределение границ рабочего диапазона не всегда корректно отрабатывает, а это важно при определении пустых ячеек в столбце. Я же не знаю зачем Вам необходимо выделять столбцы, скорее всего Вы будете работать с данными и как это будет выглядеть ?... Где могут отсутствовать данные (они могут отсутствовать сразу в первой ячейке и в последней ячейке стартового столбца и вообще можем ли мы говорить в данном случае о таких понятиях как стартовая ячейка и стартовый столбец и т.д.? Мне не ведомо, но очень надеюсь, что ТС примет эти нюансы к сведению.
Поэтому на кнопке вариант определения рабочей области с ячейки B2 (если это не так - измените). То есть относительно стартовой ячейки определяется последняя заполненная строка и последний заполненный столбец. О некоторых нюансах в файле.
Скрытый текст |
---|
Код |
---|
Function CurrentRegion(ws As Worksheet, stCell As Range) As Range
Dim Rng As Range
Dim lRow&, lCol&
lRow = ws.Cells(ws.Rows.Count, stCell.Column).End(xlUp).Row
lCol = ws.Cells(stCell.Row, ws.Columns.Count).End(xlToLeft).Column
Set Rng = ws.Range(stCell, ws.Cells(lRow, lCol))
Set CurrentRegion = Rng
End Function
Sub SelectColumns()
Dim ws As Worksheet
Dim col As Range, cell As Range, sel As Range, Rng As Range, stCell As Range
Set ws = ThisWorkbook.Sheets("Sheet1")
Set stCell = ws.Range("B2") 'стартовая ячейка (первая заполненная)
Set Rng = CurrentRegion(ws, stCell)
MsgBox "Диапазон с данными" & Rng.Address, vbInformation
For Each col In Rng.Columns
For Each cell In col.Cells
If IsEmpty(cell.Value) Then
If sel Is Nothing Then
Set sel = col
Else
Set sel = Union(sel, col)
End If
Exit For
End If
Next cell
Next col
If Not sel Is Nothing Then
sel.Select
Else
MsgBox "Нет столбцов с пустыми ячейками", vbInformation
End If
End Sub |
|
Возможно, я неправильно понимаю (не судите строго - не эксперт), попробовала что-то предложить… Если есть возможность другими способами определить реальную структуру заполнения таблицы, учитывая все нюансы, надеюсь мы их увидим...
Всего доброго! )