[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル内で自動で文字サイズ変更(縦幅)』(こり)
一つのセル内で折り返して表示をしているのですが、データが多いとそれに伴い下に下にと伸びていきますよね。
横の幅が超えたらではなく、縦の幅が既存のセル高さより超えたら自動で入りきるように文字サイズを調整してくれるようなことをすることは可能なのでしょうか。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
折り返して全体を表示するを折り返した状態で行いたいのではないか? 対処方法はちょっと思い浮かばないが。 (ねむねむ) 2018/03/06(火) 17:08
>文字入力に応じて、セル幅が伸びていく感じですよね?
わたしは、質問者さんが「文字サイズを調整」と言ってるのでそうじゃないような気がします。
以下、ついでのコメントです。
私もVBA学習中なので、偉そうなことは言えないですけど、幅にしろ、高さにしろ、オートフィットしたいだけなら、VBAでChangeイベントでも見てやれば比較的簡単にできると思います。
しかし、今回の質問では「文字サイズ」を変えたいと仰っているので、それには入力した内容に改行コードがいくつ含まれているか、セルの幅・高さはいくつなのか、フォントは等角フォントなのかプロポーションフォントなのか、等々を踏まえた上で、文字を何ポイントにすれば収まるかっていう計算が必要になりそうなので、仕掛けが大がかりになるわりには、利が少ないようにおもうんで、質問掲示板で聞くくらいならおすすめしないなぁと・・・個人的には思いました。
VBAの学習としてやるというなら面白いテーマだとは思いますが・・・
なお、マクロは希望してなくて、関数などの一般機能でやる方法は私には思いつきません。
(もこな2) 2018/03/06(火) 17:27
実現案を考えると、文字列が長くなれば文字サイズも小さくしていく。しかし、高さを変えないのだから、1行目と2行目の境である改行位置を、全体の文字数の半分(2行と仮定した場合)くらいに移動していくのですかね? しかも、文字が小さくなって3行入りきるようになったら、改行2つ入れないと…。 マクロがどう頑張っても、最終的にはExcelに表示してもらわないといけないので、この文字列をこのサイズで、という感じですね。
で、もの凄く難しいと考えるのが、フォントサイズを得ても、2進数誤差が大きくて、ぴったり収まらない事が多い点です。プロポーショナルフォントだともっとずれます。テストではうまくいっても、他の文字列だと…という感じになって、大変そう…。
2行の元データを、改行前後で2セルに分けて、セルの書式設定で「縮小して全体を表示」を使う、消極策が良いように思います。
(???) 2018/03/06(火) 17:50
(1)Changeイベントで変更のあったセルを掴む
(2)作業セルの幅、高さを掴んだセルと同じにして、セルの高さを覚えておく
掴んだセルの内容を作業セルに入れて、書式を「折り返して全体を表示に変更」「フォント」の種類、サイズも掴んだセルのものに変更。
(3)ターゲットセルと作業セルの高さを比較して、一致する場合、ターゲットセルの書式を「折り返して全体を表示に変更」するだけ。
(4)一致しない場合、作業セルのフォントを1ポイントずつ下げて、ターゲットセルの高さ未満になるポイントを探るのをループで処理する。
って感じでいけるかもしれません。(思いつきの範囲を出ませんが・・・)
(もこな2) 2018/03/06(火) 18:23
Private Sub Worksheet_Change(ByVal Target As Range)
Dim newVal Dim vHigh Dim rr As Range Dim fSize
With Target If .Count > 1 Then Exit Sub If .WrapText = False Then Exit Sub '折り返し表示されているセルのみを対象 vHigh = .EntireRow.Columns("AA").Value 'AA列の値で高さ指定をする場合 If vHigh = 0 Then Application.EnableEvents = False '高さ指定がない場合はAutoFit対応する Set rr = Selection newVal = .Value Application.Undo vHigh = .RowHeight 'これは元の縦高さです。 .Value = newVal rr.Select Application.EnableEvents = True End If .EntireRow.AutoFit If .RowHeight > vHigh Then '文字数が多くなった時 Do Until .RowHeight <= vHigh .Font.Size = .Font.Size / 1.1 If .Font.Size < 1.1 Then Exit Do '最小フォントになる前に抜ける Loop ElseIf .RowHeight <= vHigh Then '文字数が減った時 Do Until .RowHeight > vHigh .Font.Size = .Font.Size * 1.1 Loop If .RowHeight > vHigh Then .Font.Size = .Font.Size / 1.1 End If End If .RowHeight = vHigh ' ↓ はフォントサイズの最大値を決めています。たぶん規定値であろうシートのラストセルと ' していますが、maxサイズとしてくださって結構です。 fSize = Cells(Rows.Count, Columns.Count).Font.Size If .Font.Size > fSize Then .Font.Size = fSize End With End Sub 2018/3/7 9:33 編集 (kazuo) 2018/03/06(火) 23:23
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.