こんばんは。
「セル内で左から数えて10文字毎に改行(折り返し)させたいのです」
「セルの書式設定は、"折り返して全体を表示する"に事前に設定します」
この二つの条件では厳密には矛盾があります。「折り返して全体を……」という設定には、改行コードは入りません。また、全角と半角の違いがありますから、全角と半角は同じようにすることは出来ません。ここでは、全角という条件にさせていただきます。
私のマクロは、先頭行の列を一回設定したら、後は、行をAutoFit(左端の色の付いたところの行の境目をダブルクリック) をすればよいだけです。列のAutoFit をしたら崩れる可能性があります。改行コードを入れたら、それも文字ですから、おそらくはずれるはずです。
これは、たぶん、アプリが持つフォントとセルの関係で、VBAでは、正しく取れない部分がある難しい種類の問題だと思います。私の技術では、今のところ、統一係数を導き出すことが出来ません。たぶん、システム上の係数はあるはずだと思います。列の幅は、8.38 という表示でしたら、半角で8.38 文字表示できるということですから、2バイト文字だったら、それを半分にすればよいと考えがちですから、セル自体に、調整スペースらしきものがあるようです。
それに、フォントの種類もあるはずです、一応、こちらでは、MSゴシック等幅フォントで試していますが、プロポーショナルでは試しておりません。うまく行かないようでしたら、解決するには、「係数」を、もう一度算出しないと出来ません。
Const dKT As String = "15,15.5,17.5,20,20.5,23,25.5"
フォントが順に8,9,10,11,12,13,14 までの対応になっていますが、しかし、これは、スタイル側のフォントが、10~12までですから、それ以外は、調整しなおさないといけません。(デフォルトは、11です)
後、なるべくなら質問の条件をひっくり返さないようにしてください。今の条件のままでしたら、調整は可能です。
'---------------------------------------------
Sub TestAutoFit()
Dim iFnt As Double 'スタイルフォント
Dim acFnt As Double 'アクティブセルフォント
Dim arKt As Variant
Dim w As Double
Dim strText As String
'フォント定数 8~14 まで
Const dKT As String = "15,15.5,17.5,20,20.5,23,25.5"
Const iNUM As Integer = 10 '全角文字数
arKt = Split(dKT, ",")
iFnt = ThisWorkbook.Styles("Normal").Font.Size
If iFnt < 10 Or iFnt > 13 Then
MsgBox "設定できるのは、標準スタイル・フォント10~12までで、それ以外では、" & _
"特別設定が必要です。", vbInformation
Exit Sub
End If
With ActiveCell
strText = .Value
If Len(.Value) = 0 Then
MsgBox "セルが空で、実行できません。", vbInformation
Exit Sub
ElseIf LenB(StrConv(strText, vbFromUnicode)) = Len(strText) Then
MsgBox "半角が入っていると、現在のマクロでは調整できません。", vbInformation
Exit Sub
End If
If .WrapText = False Then
.WrapText = True
End If
acFnt = .Font.Size
'スタイル・フォントは、8~14 まで。
If acFnt > 7 And acFnt < 15 Then
.ColumnWidth = arKt(acFnt - 8)
End If
.EntireRow.AutoFit
End With
End Sub
お礼
すみません、質問の内容をひっくり返してしまいまして、、、。私のつたない質問文章で回答者様を混乱させないように簡潔にまとめるために変更したことが、逆に皆様を混乱させてしまったかもしれません、、、。 はい、列幅は固定、フォントも指定されている状況です。 係数等、私にはちょっと難解な技術を含む問題になるんですね、、、。 このご回答は今後仕事でVBAを書き続けるであろう私にとって後々非常に有意義なものであると感じました。今はすべてを理解できずにいますが、ページを保存して永久保存させていただきたく思います。 ご回答、ありがとうございました。