Автоматическая настройка ширины столбцов в Excel, исключая определенные ячейки / строки

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

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

Если вы согласны с тем, что он центрирован, то вы можете установить выравнивание этих ячеек (и 1 ячейку справа) на "Center Across Selection", и оно будет проигнорировано. Но, как и в моем примере выше, я часто хочу, чтобы этот текст выровнялся по левому или правому краю, чтобы CAS не работал.

Кто-нибудь смог сделать это?

3 ответа

Не уверен, что это задумано, но, по моему опыту, автоматическое определение размера игнорирует любые ячейки, в которых включен перенос текста. Таким образом, возможно, рассмотрите возможность включения обтекания текстом для диапазона, который вы хотите игнорировать при автоматическом изменении размера.

Если вы согласны с решением VBA, вы можете написать собственную процедуру для этого. В этом примере, если вы передадите требуемый диапазон "Только заголовки с автоподбором", он, по сути, скопирует заголовок в чистую ячейку, запустит автоподбор, а затем применит эту ширину с автоподборкой к столбцу:

Sub AutoFitHeader(HeaderRow As Range)

  Dim col As Range
  Dim ws As Worksheet
  Set ws = ActiveWorkbook.Worksheets.Add
  ws.Visible = xlSheetHidden

  Application.DisplayAlerts = False

  For Each col In HeaderRow
    ws.Range("A1").Value = col.Value
    ws.Columns("A").AutoFit

    col.EntireColumn.ColumnWidth = ws.Columns("A").ColumnWidth
  Next col

  ws.Delete

  Application.DisplayAlerts = True

End Sub

А затем назовите это так:

AutoFitHeader Range("A1:H1")

Мне удалось найти решение этой проблемы, используя Center Across Selection (TLDR: см. редактирование исходного сообщения). Прелесть CAS заключается в том, что для любой автоматической настройки ширины столбцов Excel игнорирует любой текст, введенный в ячейку с использованием этого выравнивания текста CAS, если также есть хотя бы 1 пустая ячейка справа от вашего текста CAS, который также использует CAS (поэтому он не может работать только с 1 ячейкой). Это работает только для текста, который вы ХОТИТЕ центрировать, хотя для чего-либо еще вам нужно изменить этот метод.

Для выравнивания по правому краю введите [ваш текст] в крайнюю левую ячейку, которая будет объединена с областью выравнивания, CAS для области (в разделе «Форматирование», «Выравнивание», «По горизонтали», «По центру выделения»), выберите ячейку с текстом и введите в качестве пользовательского номера. Формат (Форматирование, Число, Пользовательский):

[* Общее;* Общее;* Общее;* Общее]

Это использует стандартное общее форматирование для каждого из положительных, отрицательных, нулевых, текстовых значений, но берет каждое из них и повторяет ("*") символ (" "), чтобы дополнить его перед значением, чтобы заполнить весь выбор.

Для выравнивания по левому краю это точно так же, как указано выше, за исключением того, что пользовательский числовой формат:

Общие* ;Общие* ;Общие* ;Общие*

Отметив последний пробел после * .

См. пример этого в графическом/Excel форматировании:

Другие вопросы по тегам