2012-02-14 21:16:14 +0000 2012-02-14 21:16:14 +0000
91
91

Как сделать функцию Excel "Auto Fit Row Height" на самом деле автоматически соответствовать высоте строки?

Для каждого поколения Excel я помню (включая 2010, который я использую сейчас), Excel “Auto Size Row” функции иногда не удается на самом деле автоматического размера строки, когда ячейка содержит обернутый текст. Когда она работает правильно, весь текст раскрывается, и нет дополнительного места под последней строкой текста. Когда это не удается, он добавляет дополнительный пробел под текстом. Хуже того, то, что вы видите, не всегда то, что вы получаете, т.е. текст, который выглядел нормально на экране, отсекается, когда он печатается. Вы также получаете различные размеры в зависимости от того, увеличены ли вы или уменьшены.

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

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

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

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

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

Ответы (16)

106
106
106
2012-12-05 10:49:44 +0000

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

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

Вуаля!

13
13
13
2012-02-15 19:07:25 +0000

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

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

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

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

3
3
3
2016-01-22 08:51:09 +0000

Я только что написал маленький макрос для этой цели. Я назначил ему ярлык (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.
0
0
0
2013-05-01 19:58:57 +0000

Есть статья kb article , которая “предполагает” (это неприемлемо мало, в классическом стиле Microsoft), что если вы когда-нибудь установите высоту ряда, автоматическая настройка высоты навсегда исчезнет для этого ряда рабочего листа. Ряды, высоту которых вы не трогали, все равно автоподгонятся.

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

0
0
0
2013-07-05 17:03:56 +0000

Иногда есть ядерный метод для исправления неправильного поведения автозадач.

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

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

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

0
0
0
2015-01-08 19:14:53 +0000

Я не проверил это тщательно, но это работает на меня. По сути, он будет автоматически регулировать все листы, а затем вернуться назад и установить ширину колонки на исходную ширину, если она не была расширена автоматической регулировкой. У меня было только 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
0
0
0
2012-06-21 14:33:14 +0000

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

-1
-1
-1
2013-04-08 16:10:30 +0000

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

-1
-1
-1
2012-02-14 21:29:39 +0000

Перефразируя Dunc :

я решил аналогичную проблему:

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

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

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

-1
-1
-1
2013-01-01 11:17:02 +0000

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

-1
-1
-1
2013-02-26 11:57:20 +0000

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

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

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

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

-1
-1
-1
2015-12-17 16:10:03 +0000

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

-1
-1
-1
2012-08-06 12:19:12 +0000

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

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

-1
-1
-1
2013-06-20 11:46:42 +0000

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

Bummer!

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

-2
-2
-2
2013-01-30 20:38:33 +0000

выделите все ячейки и дважды щелкните по линии, разделяющей строки… это произойдет автоматически.

-2
-2
-2
2012-12-20 00:41:51 +0000

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

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

6
13
5
9
10