No.3ベストアンサー
- 回答日時:
こんばんは。
「セル内で左から数えて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を書き続けるであろう私にとって後々非常に有意義なものであると感じました。今はすべてを理解できずにいますが、ページを保存して永久保存させていただきたく思います。
ご回答、ありがとうございました。
No.5
- 回答日時:
今更なんですが…。
#2さんのご回答で解決しているものと思って投稿を控えていたのですが、
改めて読んでみると、どうも私の書いていたコードとは少し異なる動作をするようなので、
屋上屋を架すようですが、一応参考までに。
●動作の概要
A1セルの値を、10文字毎に、改行コード(LF)で区切って、A1セルにセットする
●動作上の相違点(#2さんのご回答との比較)
・文字列の最後には改行をつけない。
・文字列が10N+1文字(1,11,21…)の場合に最後の文字を消さない。
なお、私のコードでは主処理の部分をFunctionプロシージャとして切り出しています。
実際の運用はA1セルやアクティブセルに限るわけではないでしょうし、
決まって10文字毎に区切るとも限らないので。
'=======================↓ ココカラ ↓=======================
Sub Sample090615()
Range("A1").Value = Insdiv(Range("A1").Value, 10, vbLf)
End Sub
'--------------------
Function Insdiv( _
ByVal orgStr As String, _
ByVal divCnt As Long, _
ByVal divChr As String _
) As String
Dim rstStr As String
Dim i As Long
If divCnt < 1 Then Insdiv = orgStr: Exit Function
i = 1
Do
rstStr = rstStr & Mid(orgStr, i, divCnt) & divChr
i = i + divCnt
Loop While i <= Len(orgStr)
Insdiv = Left(rstStr, Len(rstStr) - Len(divChr))
End Function
'=======================↑ ココマデ ↑=======================
ご参考まで。
はい、対象のセルは列は固定ですが行は不定です。
文字列の最後には改行を付けない、そうです!
応用させていただきます、ご回答ありがとうございました!
No.4
- 回答日時:
参考
改行箇所で、Chr(10)を入れる。その位置の問題だけ。
Sub test01()
x = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほ"
Range("A1") = x
y = Range("A1")
s = Mid(y, 1, 10)
i = 11
p1:
s = s & Chr(10) & Mid(y, i, 10)
i = i + 10
If i < Len(y) Then GoTo p1
Range("A1") = s
End Sub
===
(1)セルの書式設定は、"折り返して全体を表示する"に事前に設定します
(2)MSP明朝のようなプロポーショナルフォントは設定しないほうがよい。上記で最後の「ほ」が改行されたように見えておかしいなと思ったら、Pフォントが原因だった。
(3)実際はA1セルだけではないので、A列について最終行まで全行繰り返してください。コードはありふれているので略。
またGOTOを使わないループに直してください。
非常に解り易かったです。
さっそく活用させていただきました。
他の皆様の回答にもありましたが、フォントも影響するんですね。
ご回答、ありがとうございました!
No.2
- 回答日時:
次のようにも、
Sub test()
Dim s As String, n As Integer, s2 As String, n1 As Integer, l As Integer
s = ActiveCell
n = Len(s)
s2 = ""
n1 = 1
l = 10
While n1 < n
s1 = Mid(s, n1, l) & Chr(10)
s2 = s2 & s1
n1 = n1 + l
Wend
ActiveCell = s2
End Sub
なるほど!と言ってもすべてを理解できたわけではないのですが、、、。こういうやり方もあるんですね。
ご回答、ありがとうございました!
No.1
- 回答日時:
文字のあるセルにカーソルを移動し、次のコードを実行してください。
Sub cut()
moji = ActiveCell.Value
mojisuu = Len(moji)
If mojisuu > 10 Then
ActiveCell.Value = ""
For i = 1 To Int(mojisuu / 10)
ActiveCell.Value = ActiveCell.Value & Mid(moji, i + (i - 1) * 9, 10)
If Mid(moji, i + 1 + i * 9, 10) <> "" Then
ActiveCell.Value = ActiveCell.Value & Chr(10)
End If
Next i
ActiveCell.Value = ActiveCell.Value & Mid(moji, i + (i - 1) * 9, 10)
End If
End Sub
ご回答いただいた内容を検証しながら応用させていただきます。
お礼コメントが遅くなり大変失礼しました。本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式で教えてください。 5 2023/02/10 15:11
- Excel(エクセル) Excel VBAで、行の高さを、上下1文字分程度高くしたい 3 2023/04/23 00:17
- Excel(エクセル) Excel VBA セルの書式設定 2 2022/03/30 10:48
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Visual Basic(VBA) VBAで自動集計(特定セルコピー月ごとに値貼り付け)したい。 6 2023/06/25 11:37
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- Visual Basic(VBA) 昨日、質問した件『VBA にて、条件付き書式で背景色を設定しているセルの範囲で、背景色付きのセルをカ 4 2022/04/07 14:39
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
マウスポインターが白十字のまま
-
Excel入力で勝手にエンター押さ...
-
エクセルの白黒の反転で困って...
-
エクセルファイルに _x000D_ と...
-
セルを結合しても、文字をセル...
-
VBA:結合されたセルに対する「...
-
エクセルで右隣のセルより優先...
-
エクセルでセルの中の色分け
-
エクセルで文字列の結合したと...
-
エクセルで1つのセルにスクロ...
-
Excelでcsvやtxtで保存する時に...
-
エクセルで画像を透過させて画...
-
エクセルでセルの余白を作りたい
-
セルは大きくさせず、中の文字...
-
エクセル 下線の太さが違う
-
結合セルの中身を検索する
-
Excel 2010でひとつのセル内に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
エクセルの白黒の反転で困って...
-
セルは大きくさせず、中の文字...
-
マウスポインターが白十字のまま
-
エクセルファイルに _x000D_ と...
-
Excelでcsvやtxtで保存する時に...
-
エクセルで画像を透過させて画...
-
エクセルで1つのセルにスクロ...
-
エクセルでセルを上下に結合し...
-
エクセルの2つのセルを内容も消...
-
エクセルで特定の列のセルだけ...
-
セルを結合しても、文字をセル...
-
エクセルの入力規則プルダウン...
-
VBA:結合されたセルに対する「...
-
エクセルで右隣のセルより優先...
-
Excel入力で勝手にエンター押さ...
-
エクセル 折り返して全体を表...
-
エクセル2013で英単語を折り返...
おすすめ情報