Вопрос по height, excel, vba, row – Найти текстовые ячейки, которые слишком малы для отображения содержимого

3

У меня есть лист с ячейками, которые могут содержать текст, который иногда превышает ширину и высоту ячейки. Если я неЕсли вы заметите это и отрегулируете высоту строки, текст отобразится как обрезка. У кого-нибудь есть фрагмент VBA или инструмент, который может найти эти ячейки, чтобы я мог настроить их? Спасибо!

Ваш Ответ

1   ответ
2

какой столбец является слишком широким, было бы непросто, тем более что текст в ячейке может иметь разные шрифты и / или размеры шрифтов. Гораздо проще автоматически определить размер столбцов, используяRange.AutoFit метод.

Например, вы можете вызвать метод AutoFit следующим образом:

Dim myRange As Excel.Range
Set myRange = Application.Range("A1:C3")
myRange.Columns.AutoFit

Однако метод Range.AutoFit может быть слишком агрессивным, что приводит к слишком столбцамузкий, Поэтому вы можете создать метод, который устанавливает минимальную ширину столбца:

Sub AutoFitColumns(theRange As Excel.Range, minColumnWidth As Double)
    theRange.Columns.AutoFit

    Dim column As Excel.Range

    For Each column In theRange.Columns
        If column.ColumnWidth < minColumnWidth Then
            column.ColumnWidth = minColumnWidth
        End If
    Next column
End Sub

Вышесказанное можно назвать следующим образом, чтобы автоматически установить столбцы, но с минимальной шириной 8,5:

Dim myRange As Excel.Range
Set myRange = Application.Range("A1:C3")
Call AutoFitColumns(myRange, 8.5)

Вы также можете автоматически установить ряды диапазона. Это нужно реже, но для этого вам нужнобуду использовать что-то вроде:

myRange.Rows.AutoFit

Надеюсь это поможет!

Обновление: ответ КрейгуКомментарий s:

Спасибо, Майк. Эта таблица используется в качестве структурированного ввода в генератор веб-интерфейса, поэтому ширина столбцов может изменяться и не должнат быть отрегулирован. Я'На самом деле я просто ищу что-то, чтобы отсканировать лист на наличие каких-либо ячеек, где отображаемый текст шире, чем может вместить ячейка, и, следовательно, требуется, чтобы высота строки была больше. Я'Я не ищу процесс внесения изменений, просто найдите их, так как их легко не заметить. Есть идеи по этому поводу?

Ну понятно хочешь сделатьдва вещи: (1) определить, какие клетки обрезаются, а затем (2) исправить эти отсечки.

Я понимаю ваше желание сделать это в два отдельных этапа, но шаг (1) практически невозможно выполнить правильно во всех обстоятельствах с Excel, потому что могут варьироваться не только высота строк и ширина столбцов, но и включение или отключение переноса текста, и шрифт может быть непропорциональным шрифтом в любом количестве возможных стилей и / или размеров.

Короче говоря, не будет способа надежно определить, какие клетки отсекаются, не без невероятного количества работы. Однако это можно смягчить, если ограничить электронную таблицу только одним стилем шрифта и использовать непропорциональный шрифт. Если вы сделаете это, то можете просто сравнить ширину столбца с длиной текста в ячейке. Это потому чтоExcel.Range.ColumnWidth свойство возвращает его ширину, откалиброванную таким образом, что одна единица ширины столбца равна ширине одного символа в стиле Normal. Для пропорциональных шрифтов используется ширина символа 0 (ноль).

Поэтому дляпросто в случаях, когда перенос слов не используется, а шрифт выполнен в стиле Normal, и в идеале шрифт Normal является непропорциональным шрифтом, тогда вы можете перебрать все ячейки в диапазоне, ища, где значение, хранящееся больше ширина столбца:

Dim myRange As Range
Set myRange = Application.Range("A1:E5")

Dim cell As Excel.Range
For Each cell in myRange.Cells
    If Len(CStr(cell.Value)) > cell.ColumnWidth Then
        MsgBox "The cell at " & cell.Address & " has text that is too long!"
    End if
Next cell

Но теперь вот следующая часть ... Как вы это исправите? Если, опять же, у вас очень простая ситуация, когда перенос слов не используется и шрифт выполнен в стиле Normal, а в идеале шрифт Normal - это непропорциональный шрифт, у вас есть несколько вариантов:

(1) Установите ширину столбца в соответствии с ячейкойдлина значения s:

Dim myRange As Range
Set myRange = Application.Range("A1:E5")

Dim cell As Excel.Range
For Each cell in myRange.Cells
    If Len(CStr(cell.Value)) > cell.ColumnWidth Then
        cell.ColumnWidth = Len(CStr(cell.Value))
    End if
Next cell

(2) Автоматическая подгонка колонны:

Dim myRange As Range
Set myRange = Application.Range("A1:E5")

Dim cell As Excel.Range
For Each cell in myRange.Cells
    If Len(CStr(cell.Value)) > cell.ColumnWidth Then
        cell.Columns.AutoFit
    End if
Next cell

Но если мы собираемся автоматически подгонять столбец, то гораздо проще просто вызвать его напрямую, не проверяя сначала ширину столбца, потому что не только ширина будет исправлена для всех ячеек одновременно, но иRange.AutoFit Метод может обрабатывать любой шрифт, включая непропорциональные, в любом стиле.

Поэтому, перейдя непосредственно к подходу с автоподгонкой, у нас есть два варианта: либо автоподбор столбцов, либо автоподбор строк. Судя по вашей последней цитате, вы хотите изменить размерстроки: I»

На самом деле я просто ищу что-то, чтобы отсканировать лист на наличие каких-либо ячеек, где отображаемый текст шире, чем может вместить ячейка, и, следовательно, требуется, чтобы высота строки была больше.

Для этого я бы использовал перенос текста, а затем автоподбор строк. Например,

Dim rng As Excel.Range
Set rng = Application.Range("A1:E5")

With rng.Rows
    .WrapText = True
    .AutoFit
End With

Я думаю, что это все ваши варианты. В конце концов, то, что вы хотите сделать и на что способен Excel, может не совпадать точно, но ясчитать Вы должны быть в состоянии сделать то, что вам нужно? Дайте нам знать, если это делает трюк ...

- Майк

Привет, Крейг, то, что ты хочешь сделать, и то, на что способен Excel, к сожалению, может не совпадать. Но ясчитать Вы должны быть в состоянии сделать то, что вам нужно. Я обновил свой ответ после раздела "Обновление: ответ Крейгуs Comment ", Надеюсь, поможет! Mike Rosenblum
Спасибо, Майк. Эта таблица используется в качестве структурированного ввода в генератор веб-интерфейса, поэтому ширина столбцов может изменяться и не должнат быть отрегулирован. Я'На самом деле я просто ищу что-то, чтобы отсканировать лист на наличие каких-либо ячеек, где отображаемый текст шире, чем может вместить ячейка, и, следовательно, требуется, чтобы высота строки была больше. Я'Я не ищу процесс внесения изменений, просто найдите их, так как их легко не заметить. Есть идеи по этому поводу? Craig

Похожие вопросы