Questão Como fazer com que o recurso “Auto Fit Row Height” do Excel seja ajustado automaticamente na altura da linha?


Para cada geração do Excel que eu possa lembrar (incluindo 2010, que estou usando agora), os recursos "Auto Size Row" do Excel às vezes não auto dimensionam uma linha quando a célula contém texto encapsulado. Quando funciona corretamente, todo o texto é revelado e não há espaço adicional abaixo da última linha do texto. Quando falha, adiciona espaço extra abaixo do texto. Para piorar, o que você vê nem sempre é o que obtém, ou seja, o texto que aparece bem na tela é cortado quando é impresso. Você também obtém tamanhos diferentes, dependendo se você está ampliando / reduzindo o zoom ou se está no tamanho real.

Caso de teste simples:

Por que há uma lacuna de uma linha após o texto na célula A1, mas não na A2?

(Para reproduzir: defina a largura da coluna A para 17,14 (125 pixels), quebra automática de texto e topo do alinhamento da célula.)

(Verifiquei novamente se apliquei a altura da linha de ajuste automático às duas linhas. O nível de zoom é 100%.)

Auto Fit fails for the first row, succeeds for the second

Existe algum remédio conhecido para isso sem recorrer ao ajuste manual das alturas das linhas (o que não é prático para mais do que um punhado de linhas)?


84


origem


Caso alguém queira reproduzir o exemplo na minha pergunta, a largura da coluna A é 17.15 (125 pixels). - devuxer
Bug parece dependente da fonte e tamanho da fonte - Raystafarian
@Raystafarian, parece não funcionar com o Wrap Text ativado. - devuxer
Eu tentei autofitting as colunas, o que ampliou uma coluna e, em seguida, autofitting as linhas. Isso diminuiu de 73 para 64 páginas, mas ainda há muitas linhas em branco na parte inferior da maioria das linhas. Eu tenho as linhas alinhadas no topo. Alterar manualmente o tamanho das linhas faz com que pareça OK quando estou trabalhando no documento, mas não na visualização ou na impressão.
Sim, tão chato! Também vi isso pelo menos no Excel 2007. Não me lembro de vê-lo no Excel 2003. - abstrask


Respostas:


Um método que acabei de encontrar (estendendo o post anterior um pouco):

  • Selecione a folha inteira.
  • Redimensione uma coluna um pouco mais (porque o folha inteira é selecionada, todas as colunas serão ampliadas)
  • Clique duas vezes em um separador de linha - a altura da linha será ajustada automaticamente
  • Clique duas vezes em um separador de coluna - as larguras das colunas serão ajustadas automaticamente

Voila!


97



Isso realmente parece funcionar. A área cinza é onde você diz "um pouco mais". Um dos exemplos que experimentei não funcionou, a menos que eu estendesse a coluna de forma justa, mas acabei conseguindo que ela funcionasse. Obrigado! - devuxer
Selecionei a planilha inteira, cliquei duas vezes no separador de linha entre duas linhas aleatórias e o documento inteiro reajustou as alturas das fileiras. - Keith Sirmons
Observe que o AutoAjuste não funciona para nenhuma célula mesclada: support.microsoft.com/kb/212010 - freb
Impressionante! Alguém sabe disso é possível em um script VBA? - Andreas Furster
Esse método não funciona apenas se todas as colunas tiverem a mesma largura? Quando redimensionei uma coluna um pouco mais, todas as outras colunas ficaram da mesma largura (no Excel 2010). - Ed Greaves


O WYSIWYG do Excel não é o melhor. Na sua foto, 'gato'. apenas mal entra na 5 ª linha. Se você reduzir a porcentagem de zoom para algo menor que 100% (99%, por exemplo), então 'cat.' está agora envolto na sexta linha. Acho que o Excel está tentando se ajustar automaticamente de forma a garantir que tudo esteja quase sempre visível, independentemente do nível de zoom.

Esse não é o único problema que você terá com o AutoAjuste. Além disso, o modo como uma célula embrulhada em uma palavra é impressa nem sempre corresponde ao que você vê na tela. Tome o seu exemplo e mude a fonte para Courier, deixando o tamanho em 11.

Changed font to Courier

Como você pode ver, a célula A1 parece receber 1.5 linhas extras. Agora, olhe para pré-visualização, 'cat.' está completamente oculto.

print preview of same file

Na minha experiência, o Excel tem esse problema com determinadas fontes e tamanhos de fonte mais do que outros. Correio é pior do que Courier Novo, o tamanho 11 é geralmente pior que 10 ou 12. (Por que eles escolheram o tamanho 11 como o novo padrão, não tenho ideia).


13



Então ... basicamente eles quebraram. Sua explicação é plausível, mas realmente me incomoda, é assim: - / - abstrask


Acabei de escrever uma pequena macro para esse propósito. Eu atribuí-lo uma tecla de atalho (Ctrl-Shift-J) e funciona como um encanto para mim.

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

Para tornar isso permanentemente disponível, você pode facilmente fazer um complemento de carregamento automático:

  • crie um módulo em uma nova pasta de trabalho em branco e cole o código,
  • atribuir a chave de atalho desejada
  • então Save As, Add-inpara pasta %appdata%\Microsoft\Excel\XLSTART
    Desta forma, será carregado de forma invisível sempre que iniciar o Excel.

2



Ou você poderia fazer isso: Private Sub Worksheet_Change (ByVal destino como intervalo) ArrangeTable End Sub - kurdtpage


Em alguns casos, o problema de espaço extra em algumas linhas depois de chamar "AutoAjuste a altura da linha" pode ser que uma coluna oculta tenha envolto de texto nessas linhas.


0



Qual não é o caso nesta questão. - Dmitry Grigoryev


Eu também tenho suportado este bug minúsculo, mas extremamente perturbador por muitos anos. Não tenho nenhuma alternativa, a não ser mexer na largura da linha da célula com a maioria dos textos, e eventualmente o programa irá ceder e mostrar o texto corretamente.


0



brincando com a largura da linha não é uma solução reproduzível. - Dmitry Grigoryev


Existe uma solução fácil:

1) Selecione todas as linhas que você deseja autoformatar (se for um bloco grande, clique no primeiro e pressione Shift + End e Shift + Down)

2) Clique com o botão direito do mouse na seleção, Formatar células, guia Alinhamento, desmarque a opção Quebrar o texto.

Espero que isto ajude ;)


0



Se você desmarcar Wrap text, não faz sentido ajustar automaticamente suas alturas de linha, pois todas as linhas terão o mesmo tamanho. - Dmitry Grigoryev
Eu tenho sido incomodado por este problema há anos. Toggling Wrap Text para uma linha problemática restaurou a função autofit. - Mitch


Eu tenho o Excel 2010. Descobri que esse problema aconteceu comigo quando minha configuração de zoom não estava em 100%. Enquanto eu estiver em 100%, não obtenho o texto cortado com o AutoAjuste para colunas e linhas


0



No exemplo que usei para a minha pergunta, eu estava em zoom = 100% o tempo todo. O problema ocorreu independentemente. - devuxer


Existe um artigo kb sobre isso que "sugere" (é inaceitavelmente esparsa, na moda clássica da Microsoft) que, se você definir uma altura de linha, a autofitting automática de altura será removida permanentemente para essa linha dessa planilha. Linhas cuja altura você não tocou serão autofit bem embora.

Enquanto você pode redefinir as larguras de coluna com a configuração "largura padrão" em 2003 (madman projetado 2007: mudar para "largura padrão"), mas eles se esqueceram (novamente) (e novamente) para colocar isso em linhas. Então a permanência parece inevitável. Isso significa que, se você tiver uma altura padrão de 15, criar uma planilha e definir todas as alturas como 12, você perderá a autofit automática.


0



Eu não posso duplicar esse comportamento. Assim que eu fizer "Auto Fit Row Height", qualquer configuração de altura manual para essa linha será imediatamente substituída pela altura de ajuste automático. O problema é simplesmente que a altura do ajuste automático está errada. - devuxer
Eu posso duplicar esse comportamento. Isso é exatamente como funciona para mim. - Peter Nore


Às vezes, há o método nuclear para corrigir problemas autoproblemas.

O que eu faço é copiar o texto de cada célula e colar os dados no bloco de notas e excluir a linha. Em seguida, copio e insiro imediatamente uma linha que está em branco, mas que possui a mesma formatação e bom comportamento da linha que foi excluída. (Você deve copiar e inserir a linha inteira usando os botões da linha esquerda.)

Uma vez feito isso, você tem que voltar e inserir o texto do bloco de notas em cada célula. (Usar F2 ou de outra forma, ativar o modo de edição de cada célula antes de inserir texto.) É uma dor, por isso é um último recurso, especialmente para planilhas de largura maior.

É a única solução, por vezes, como o problema reside no próprio programa.


0



Copie o texto de cada célula - isso parece exigir tanto trabalho quanto a formatação manual. - Dmitry Grigoryev


Eu não testei completamente isso, mas está funcionando para mim. Essencialmente, ele ajusta automaticamente todas as folhas, em seguida, volta e define a largura da coluna para a largura original, a menos que tenha sido estendido pelo ajuste automático. Eu só tinha 10 colunas e nunca mais de 1000 linhas, então ajuste o código conforme necessário.

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



Como isso resolve o erro de Autofitting? Você ajusta automaticamente as linhas, depois ajusta automaticamente as colunas e, em seguida, ressode as larguras das colunas originais. Por que isso acaba com a altura correta da linha de montagem? A propósito, totalWidth está desempregado. - Ant_222
Ele não funciona totalmente para mim, porque você restaura a largura apenas das colunas que se tornaram mais estreitas. Seu algoritmo, portanto, não retém a largura da coluna. - Ant_222