2017-01-20 11 views
0

ラップされたテキストセルの個々の単語が2行に分割されないように各列の幅を設定します。 Excelは、列の幅よりも幅の狭い単語に対してこれを処理します。ただし、列より広い単語は分割されます。私は列の幅を自動的にフォーマットして、幅がちょうど広いので、最も長い単語を分割する必要がないようにしたいと思います。 Excelにはこれを処理する方法がありますか?VBA - セルの幅がセルの幅と最長のワードの幅と同じになるようにラップされたセルの自動フォーマット

+0

ええ、あなたが列(「A:E」)のような何かを行うことができますが。包まれたテキストを使用している場合、列幅が薄すぎると自動調整 –

+0

おかげで、しかし、自動調整は、長い単語を分割します。 – Tim

+0

.Autofitで折り返しテキストを使用することはできません –

答えて

1

これはかなり良い近似です。列のサイズを最も長い単語よりも少し広くします。したがって、セルは最も長い単語とまったく同じ幅ではありませんが、少し広めになりますが、最も長い単語が分割されなくなります。

サブfooは、Sheet1のセルA1の中で最大の単語に列をサイジングする例です。別の関数を追加して、列内のすべてのセルをチェックして、列内で最も長い単語を取得することができます。今は、列内の1つのセルで最も長い単語をチェックしています。

Option Explicit 

Sub foo() 

    FitColToLongestWord Sheet1.Range("A1") 

End Sub 

Sub FitColToLongestWord(cell As Range) 

    Dim strLongestWordLen As String 
    Dim str()    As String 
    Dim LongestWordLength As Integer 

    str() = Split(cell.Value, " ") 
    LongestWordLength = GetLongestWordLength(str()) 
    Sheet1.Columns(cell.Column).ColumnWidth = LongestWordLength 

End Sub 

Function GetLongestWordLength(str() As String) As Integer 

    Dim i  As Integer 
    Dim max  As Integer 
    Dim current As Long 

    max = Len(str(LBound(str))) 
    For i = LBound(str) To UBound(str) 
     current = Len(str(i)) 
     If current > max Then 
      max = current 
     End If 
    Next i 

    GetLongestWordLength = max 

End Function 
+0

残念ながら、そのコードは 'ColumnWidth'を最も長い単語の文字数に設定するだけです。しかし、単語に当てはまるのに必要な列の 'ColumnWidth'は、単語の中にいくつの文字があるのか​​だけでなく、どのフォントの種類とサイズ(その他)が使われているかによって決まります。 – YowE3K

+0

合意。私が言ったように、それはセル幅が最も長い単語より少し長く出てくる理由の近似です。列幅を決定するために使用される語長は、フォントに基づいて短すぎる場合に調整できます。私の場合、実際にはセル幅を必要以上に広げていました。私はこれがほとんどのアプリケーションにとって良い解決策だと思います。 –

+0

ありがとう!私はまだ広すぎるので、2つの行に分かれているいくつかの単語を見つけました。しかし、ほとんどの場合、このソリューションは私にとってはうまくいきます。 – Tim

関連する問題