Как сделать так, чтобы функция «Auto Fit Row Height» в Excel автоматически соответствовала высоте строки?

88

Я помню, что для каждого поколения Excel (включая 2010, который я использую сейчас), функции «Авторазмер строки» в Excel иногда не позволяют автоматически изменять размер строки, когда ячейка содержит обернутый текст. Когда он работает должным образом, весь текст раскрывается, и под последней строкой текста больше нет свободного места. Когда это терпит неудачу, это добавляет дополнительное пространство ниже текста. Что еще хуже, то, что вы видите, не всегда то, что вы получаете, то есть текст, который хорошо отображался на экране, обрезается при печати. Вы также можете получить различные размеры в зависимости от того, увеличены вы или нет, или в реальном размере.

Простой тестовый пример:

Почему после текста в ячейке A1 есть пробел в одну строку, а в A2 нет?

(Для воспроизведения: установите ширину столбца A на 17,14 (125 пикселей), обтекание текстом и выравнивание по верху ячеек.)

(Я дважды проверил, что я применил Auto Fit Row Height к обеим строкам. Уровень масштабирования составляет 100%.)

Auto Fit не работает для первого ряда, успешно для второго

Есть ли какое-нибудь известное средство для этого, не прибегая к ручной настройке высоты строк (что не практично для нескольких строк)?

devuxer
источник
В случае, если кто-то захочет воспроизвести пример в моем вопросе, ширина столбца A составляет 17,15 (125 пикселей).
devuxer
1
Ошибка, кажется, зависит от шрифта и размера шрифта
Raystafarian
1
@Raystafarian, похоже, не работает с включенным Wrap Text.
devuxer
1
Я попытался автоматически установить столбцы, которые расширили один столбец, а затем автоматически установить строки. Это сократило его с 73 до 64 страниц, но в большинстве строк осталось много пустых строк. У меня есть ряды по верху. Ручное изменение размера строк делает его нормальным, когда я работаю над документом, но не в режиме предварительного просмотра или в печати.
1
Да, так раздражает! Также видел это по крайней мере в Excel 2007. Не помню, чтобы когда-либо видел это в Excel 2003.
abstrask

Ответы:

105

Метод, который я только что нашел (немного расширив предыдущий пост):

  • Выберите весь лист.
  • Изменить размер столбца немного шире (поскольку выбран весь лист, все столбцы станут шире)
  • Дважды щелкните разделитель строк - высота строки будет установлена ​​автоматически
  • Дважды щелкните разделитель столбцов - ширина столбцов будет установлена ​​автоматически

Вуаля!

Ник Каррингтон
источник
2
Это действительно работает. В одной серой области вы говорите «немного шире». Один из примеров, которые я попробовал, не сработал, если я не растянул колонку на достаточное количество, но в конце концов я заставил ее работать. Спасибо!
devuxer
5
Я выбрал весь лист, затем дважды щелкнул разделитель строк между двумя случайными строками, и весь документ заново отрегулировал высоту строк.
Кит Сирмонс
6
Обратите внимание, что AutoFit не работает для любых объединенных ячеек: support.microsoft.com/kb/212010
freb
Разве этот метод не работает, только если все столбцы имеют одинаковую ширину? Когда я изменил размер столбца немного шире, все остальные столбцы стали одинаковой ширины (в Excel 2010).
Эд Гривз,
Подождите минуту - у этого метода есть побочный эффект увеличения ширины всех столбцов на листе, не так ли?
Ant_222
13

Excel WYSIWYG не самый лучший. На вашей картине «кот». едва пробирается в 5-ю строчку. Если вы уменьшите процент увеличения до значения менее 100% (например, 99%), тогда 'cat.' теперь перенесено на 6 строку. Я думаю, что Excel пытается автоматически установить таким образом, чтобы почти всегда было видно все, независимо от уровня масштабирования.

Это не единственная проблема, которую вы будете иметь с AutoFit. Кроме того, способ печати обернутой словом ячейки не всегда будет соответствовать тому, что вы видите на экране. Возьмите свой пример и измените шрифт на Курьер, оставив размер на 11.

Изменен шрифт на Курьер

Как вы можете видеть, ячейка A1 имеет 1,5 дополнительных строки. Теперь посмотрите на предварительный просмотр, «кот». полностью скрыт

предварительный просмотр того же файла

По моему опыту, Excel имеет эту проблему с некоторыми шрифтами и размерами шрифтов больше, чем другие. Courier хуже, чем Courier New , размер 11 обычно хуже, чем 10 или 12. (Почему они выбрали размер 11 в качестве нового по умолчанию, я понятия не имею.)

mischab1
источник
Итак ... в основном они сломали это. Хотя
ваше
3

Я просто написал небольшой макрос для этой цели. Я назначил ему комбинацию клавиш (Ctrl-Shift-J), и она работает для меня как шарм.

Sub ArrangeTable()
'set proper column width and row height for the current region
    With Selection.CurrentRegion
        .Columns.ColumnWidth = 200
        .Columns.EntireColumn.AutoFit
        .Rows.EntireRow.AutoFit
    End With
End Sub

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

  • создайте модуль в новой пустой книге и вставьте код,
  • назначьте ему нужную комбинацию клавиш,
  • затем Save As, Add-inв папку %appdata%\Microsoft\Excel\XLSTART
    Таким образом, он будет незаметно загружаться при каждом запуске Excel.
Патрик Хонорез
источник
Или вы можете сделать это: Private Sub Worksheet_Change (ByVal Target As Range) ArrangeTable End Sub
kurdtpage
0

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

бобо
источник
Что не так в этом вопросе.
Дмитрий Григорьев
0

В этой статье есть статья в kb, которая «предлагает» (это неприемлемо редко, в классическом стиле Microsoft), что, если вы когда-либо установите высоту строки, автоматическое подгонка по высоте навсегда пропадет для этой строки этого листа. Строки, высоты которых вы не трогали, все же подойдут.

Хотя вы можете сбросить ширину столбцов с помощью параметра «стандартная ширина» в 2003 году (разработанный Madman 2007: измените на «ширину по умолчанию»), но они забыли (снова) (и снова) вставить это для строк. Так что постоянство кажется неизбежным. Это означает, что если у вас есть высота по умолчанию 15, и вы создаете лист и устанавливаете все высоты на 12, вы просто лишаетесь автоматического автоподбора.

GatesIsAntichrist
источник
1
Я не могу дублировать это поведение. Как только я выполняю «Автоматическую подгонку высоты строки», любая ручная настройка высоты для этой строки немедленно заменяется на высоту автоподбора. Проблема просто в том, что высота автоподбора часто неверна.
devuxer
Я могу дублировать это поведение. Это именно так, как это работает для меня.
Питер Нор
0

Иногда есть ядерный метод, чтобы решить неправильно работающие автопроблемы.

Я копирую текст из каждой ячейки и вставляю данные в Блокнот, затем удаляю строку. Затем я немедленно копирую и вставляю строку, которая является пустой, но имеет такое же форматирование и хорошее поведение, как и строка, которая была удалена. (Вы должны скопировать и вставить всю строку, используя кнопки левой строки.)

Как только это будет сделано, вы должны вернуться и вставить текст из блокнота в каждую ячейку. (Используйте F2или иным образом активируйте режим редактирования каждой ячейки перед вставкой текста.) Это боль, так что это последнее средство, особенно для жирообразно широких листов.

Иногда это единственное решение, так как проблема находится в самой программе.

Павел
источник
1
скопируйте текст из каждой ячейки - кажется, это требует столько же работы, сколько и ручное форматирование.
Дмитрий Григорьев
0

Я не проверил это полностью, но оно работает на меня. По сути, он автоматически отрегулирует все листы, затем вернется назад и установит ширину столбца в исходную ширину, если она не была расширена функцией автоматической настройки. У меня было только 10 столбцов и никогда не более 1000 строк, поэтому корректируйте код по мере необходимости.

Sub ResizeCells()
    Dim sheetCounter As Integer
    Dim rowCounter As Integer
    Dim colCounter As Integer
    Dim totalWidth As Double
    Dim oldColWidths(1 To 10) As Double

    For sheetCounter = 1 To ThisWorkbook.Sheets.Count
        ActiveWorkbook.Worksheets(sheetCounter).Select
        totalWidth = 0

        ' Extend the columns out to 200
        For colCounter = 1 To 10
            oldColWidths(colCounter) = Cells(1, colCounter).ColumnWidth
            totalWidth = totalWidth + oldColWidths(colCounter)
            Cells(1, colCounter).ColumnWidth = 200
        Next

        For rowCounter = 4 To 1000
            If Cells(rowCounter, 1).Value <> "" Or Cells(rowCounter, 2).Value <> "" Or Cells(rowCounter, 3).Value <> "" Then
                Rows(rowCounter & ":" & rowCounter).EntireRow.AutoFit
            End If
        Next

        ' do autofit
        For colCounter = 1 To 10
            Cells(1, colCounter).EntireColumn.AutoFit
        Next

        ' reset to original values if current width is less than the original width.
        For colCounter = 1 To 10
            If Cells(1, colCounter).ColumnWidth < oldColWidths(colCounter) + 0.25 Then
                Cells(1, colCounter).ColumnWidth = oldColWidths(colCounter)
            End If
        Next
    Next
End Sub
Дэн Уильямс
источник
Как это решает ошибку автоподбора? Вы автоматически подгоняете строки, затем автоматически подбираете столбцы, а затем восстанавливаете исходную ширину столбцов. Почему получается правильная высота ряда фитингов? Кстати, totalWidthбезработный.
Ant_222
Это не полностью работает для меня, потому что вы восстанавливаете ширину только тех колонов, которые стали уже. Поэтому ваш алгоритм не сохраняет ширину столбца.
Ant_222
-1

Перефразируя Дунк :

Я решил похожую проблему:

  1. Выбор всей таблицы.

  2. Дважды щелкните по строке на полях между двумя строками.

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

wizlog
источник
3
Ваши действия ничем не отличаются от того, что я уже пробовал (двойной щелчок между строками - всего лишь ярлык для «Автоматическая подгонка высоты строки»). Что касается вашей теории, что есть дополнительный персонаж, вы можете быть правы, но я, конечно, не набрал его, и я не знаю, как от него избавиться. Я приглашаю вас попробовать набрать точный текст, как у меня на иллюстрации, в Excel и посмотреть, если вы получите те же результаты.
devuxer
1
Там нет персонажа там на моем.
Raystafarian
-1

Я не нашел времени, чтобы прочитать другие комментарии. Почему линия внизу первого блока, а не во втором?

Это потому, что текст заканчивается слишком близко к правому краю ячейки. Если вы отрегулируете столбец, чтобы он стал немного шире и дважды щелкнули между строками, он соответственно изменит свой размер.

Ренье Вессельс
источник
4
Я не сомневаюсь, что вы правы, но это уже не «авто», это руководство.
Devuxer
-1

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

Эндрю Бьюкенен
источник
возиться с шириной строки не является воспроизводимым решением.
Дмитрий Григорьев
-1

Есть простое решение:

1) Выберите все строки, которые вы хотите отформатировать (если это большой блок, нажмите на первую, а затем нажмите Shift + End и Shift + Down)

2) Щелкните правой кнопкой мыши выделенную область, «Формат ячеек», вкладку «Выравнивание», снимите флажок «Обтекание текстом».

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

Pedro
источник
1
Если вы снимите флажок Wrap text, больше нет смысла автоматически настраивать высоту строк, поскольку все строки будут одинакового размера.
Дмитрий Григорьев
Я был обеспокоен этой проблемой в течение многих лет. Toggling Wrap Text для проблемного ряда восстановил функцию автоподбора.
Митч
-1

У меня Excel 2010. Я обнаружил, что эта проблема возникла у меня, когда настройки Zoom не были на уровне 100%. Пока я на 100%, я не обрезаю текст с помощью автоподбора для столбцов и строк

Кевин Морен
источник
3
В примере, который я использовал для своего вопроса, я все время был при увеличении = 100%. Проблема возникла независимо.
devuxer
-1

Моя гипотеза заключается в том, что Excel завязывает узлы, когда ему приходится расширять слишком много строк. У меня был подобный опыт к вышеупомянутому. Это выглядит как есть дополнительный NL / CR / LF в конце , но я знаю , что это не так . Если я строю ячейку по нескольким символам за раз, она автоматически форматирует ОК, пока не будет достигнут определенный размер, а затем вставляет дополнительную строку. (Подобное поведение в обратном случае происходит, если вы начинаете с удаления некоторых символов.) Это происходит в разное время с разными ячейками.

Вот досада!

Так что, если вы можете увеличить ширину ячейки, вы, вероятно, можете избежать этой проблемы. Если вы не можете (как в моем случае), вы застряли с ручным форматированием. Как я уже сказал: "Облом!"

GeoffH
источник
-1

На самом деле там есть дополнительный персонаж. Это скрытый символ НЧ, который находится в конце каждого поля. Когда текст имеет правильный размер, появляется дополнительная строка для удержания символа LF. Изменение ширины столбца, как предлагали другие, решит проблему с этой ячейкой, но если в вашей электронной таблице много значений разных размеров в этом же столбце, возможно, что исправление этой ячейки вызовет проблему в другой ячейке в столбце. , Я научился жить с этим большую часть времени.

phipywr
источник
Конечно, в конце каждого поля нет скрытого символа LF , если, конечно, OP не поместил его туда с помощью Alt + Enter. Вопрос на самом деле в том случае, когда нет символа новой строки, но Excel по-прежнему не удается правильно выровнять ячейки.
Дмитрий Григорьев
-2

Для меня (Excel 2010) сработало удаление около сотни неиспользуемых столбцов справа от моих данных. Я могу только догадываться, что там было что-то, что приводило к неправильной работе высоты строки.

Runk
источник
4
Я вижу, как это могло бы помочь, но это не имеет никакого значения для контрольного примера, показанного в моем вопросе.
devuxer
-2

выделите все ячейки и нажмите на строку, которая разделяет строки дважды ... это будет сделано автоматически.

Павел
источник