セルの幅と高さを超えるテキストを含むセルを含むワークシートがあります。気付かずに行の高さを調整すると、文字が切れて表示されてしまいます。これらのセルを見つけて調整できるようにする VBA スニペットまたはツールを持っている人はいますか? ありがとう!
1 に答える
特にセル内のテキストのフォントやフォントサイズが異なる可能性があるため、幅が広すぎる列を特定するのは難しいでしょう。Range.AutoFitメソッドを使用すると、列のサイズを自動的に設定する方がはるかに簡単です。
例として、次のようにAutoFitメソッドを呼び出すことができます。
Dim myRange As Excel.Range
Set myRange = Application.Range("A1:C3")
myRange.Columns.AutoFit
Range.AutoFitメソッドは少し攻撃的すぎる可能性がありますが、結果として列が狭すぎます。したがって、最小の列幅を確立するメソッドを作成することをお勧めします。
Sub AutoFitColumns(theRange As Excel.Range, minColumnWidth As Double)
theRange.Columns.AutoFit
Dim column As Excel.Range
For Each column In theRange.Columns
If column.ColumnWidth < minColumnWidth Then
column.ColumnWidth = minColumnWidth
End If
Next column
End Sub
上記は、列を自動調整するために次のように呼び出すことができますが、最小幅は8.5です。
Dim myRange As Excel.Range
Set myRange = Application.Range("A1:C3")
Call AutoFitColumns(myRange, 8.5)
範囲の行を自動調整することもできます。これはそれほど頻繁には必要ありませんが、そうするためには次のようなものを使用します。
myRange.Rows.AutoFit
お役に立てれば!
更新:クレイグのコメントへの返信:
マイクに感謝します。このスプレッドシートは、Webインターフェイスジェネレーターへの構造化された入力として使用されるため、列の幅は変化するため、調整しないでください。表示されるテキストがセルの許容範囲よりも広いセルをシートでスキャンして、行の高さを大きくする必要があるものを探しています。調整を行うプロセスを探しているのではなく、見落としやすいので見つけてください。それについて何かアイデアはありますか?
さて、明らかにあなたは2つのことをしたいと思っています:(1)どのセルがカットオフされているかを特定し、次に(2)これらのカットオフを修正します。
これを2つの異なる段階で実行したいというあなたの要望は理解していますが、行の高さと列の幅が異なるだけでなく、テキストの折り返しがオンまたはオフになる可能性があるため、ステップ(1)をExcelですべての状況で正しく実行することはほとんど不可能です。フォントは、任意の数の潜在的なスタイルやサイズの非プロポーショナルフォントにすることができます。
要するに、信じられないほどの量の作業がなければ、どの細胞が切断されているかを確実に特定する方法はありません。ただし、スプレッドシートを1つのフォントスタイルのみに制限し、等幅フォントを使用すると、軽減される可能性があります。これを行うと、列の幅をセル内のテキストの長さと単純に比較できます。これは、Excel.Range.ColumnWidthプロパティが、列幅の1単位が標準スタイルの1文字の幅と等しくなるように調整された幅を返すためです。プロポーショナルフォントの場合、文字の幅0(ゼロ)が使用されます。
したがって、ワードラップが使用されておらず、フォントがNormalスタイルであり、理想的にはNormalフォントが非プロポーショナルフォントである単純なケースでは、範囲内のすべてのセルをループして、値がどこにあるかを探すことができます。保持が列幅よりも長い:
Dim myRange As Range
Set myRange = Application.Range("A1:E5")
Dim cell As Excel.Range
For Each cell in myRange.Cells
If Len(CStr(cell.Value)) > cell.ColumnWidth Then
MsgBox "The cell at " & cell.Address & " has text that is too long!"
End if
Next cell
しかし、今ここに次の部分があります...これをどのように修正しますか?繰り返しになりますが、ワードラップが使用されておらず、フォントが標準スタイルであり、理想的には標準フォントが等幅フォントであるという非常に単純な状況では、いくつかのオプションがあります。
(1)セルの値の長さに一致するように列幅を設定します。
Dim myRange As Range
Set myRange = Application.Range("A1:E5")
Dim cell As Excel.Range
For Each cell in myRange.Cells
If Len(CStr(cell.Value)) > cell.ColumnWidth Then
cell.ColumnWidth = Len(CStr(cell.Value))
End if
Next cell
(2)カラムの自動フィット:
Dim myRange As Range
Set myRange = Application.Range("A1:E5")
Dim cell As Excel.Range
For Each cell in myRange.Cells
If Len(CStr(cell.Value)) > cell.ColumnWidth Then
cell.Columns.AutoFit
End if
Next cell
ただし、列を自動調整する場合は、列の幅を最初に確認せずに直接呼び出す方がはるかに簡単です。これは、すべてのセルの幅が一度に修正されるだけでなく、 Range.AutoFitも修正されるためです。 methodは、非プロポーショナルフォントを含む、任意のフォントを任意のスタイルで処理できます。
したがって、自動調整アプローチに直接進むと、列を自動調整するか、行を自動調整するかの2つのオプションがあります。最新の見積もりに基づくと、行のサイズを変更したいようです。
表示されるテキストがセルの許容範囲よりも広いセルをシートでスキャンして、行の高さを大きくする必要があるものを探しています。
このために、テキストの折り返しを使用してから、行を自動調整します。例えば、
Dim rng As Excel.Range
Set rng = Application.Range("A1:E5")
With rng.Rows
.WrapText = True
.AutoFit
End With
これらはすべての選択肢についてだと思います。結局、あなたがやりたいこととExcelができることは正確には一致しないかもしれませんが、あなたはあなたが必要なことを成し遂げることができるはずだと思いますか?それがうまくいくかどうか教えてください...
-マイク