• ベストアンサー

Excelで入力数値の桁数に応じてフォントサイズを変える方法

VBAの初心者です。 Excelで列幅=3の、列数の多い表を作りました。 ある程度見やすいフォントサイズ9pにすると、桁数の多い数値が####となってしまいます。 その場合には、8pに変えて4桁まで見られるようにしたいのです。 そこで、下記のプロシージャを組み込んでみました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range, r As Range Set r = Application.Intersect(Me.Range("B2:BJ10"), Target) If r Is Nothing Then Exit Sub Application.EnableEvents = False For Each c In r If IsNumeric(c.Value) Then If LenB(c.Value) > 5 Then c.Font.Size = 8 Else c.Font.Size = 9 End If End If Next c Application.EnableEvents = True End Sub ところが、実際に数値を入れてみると、どういうわけか 1.2 など3バイトの数値も8pになってしまいます。 LenB(1.2)=3 であるのに、どういう現象なのかわかりません。 いきなり If LenB(c.Value) > 5 Then としたのが間違っているのかと思うのですが、どう直したらよいか教えて下さい。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

「書式」→「セル」→「配置」タグ→ 文字の制御で「縮小して全体を表示する」にチェックを入れて「OK」 としてみてください。

awazo
質問者

お礼

ka_na_deさん ありがとうございます。 OKです。気付きませんでした。

その他の回答 (3)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

UNICODEのせいですね A1セルに1.2と入力してワークシート関数で =LENB(A1) と入力すると「3」が結果として返りますが、VBAで MsgBox(Cells(1,1).Value) と入力すると「6」が返ります If LenB(StrConv(c.Value ,vbFromUnicode)) > 5 Then にしてやれば、当初の期待通りの動作をすると思います。あるいはLenbでなく、Len()で文字数を判定するのも手だと思いますが…

awazo
質問者

お礼

zap35さん ありがとうございます。 > If LenB(StrConv(c.Value ,vbFromUnicode)) > 5 Then はうまくいきませんでした。 > Lenbでなく、Len()で文字数を判定 これならOKでした。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

#2です。 どうしても、マクロで記述したいなら、こうかな? Sub Macro1()   Range("B2:BJ10").ShrinkToFit = True End Sub

awazo
質問者

お礼

ka_na_deさん ありがとうございます。 > Range("B2:BJ10").ShrinkToFit = True はどの部分と入れ換えればよいのでしょうか。よくわかりません。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.1

そんな難しい設定をしないで Selection.Columns.AutoFit *** 解説; そのセルを選択して、書式⇒列⇒選択範囲に合わせる。 を、実行するようにしたらどうですか??。

awazo
質問者

お礼

Nayuta_Xさん ありがとうございます。 書き込み方が難しく、よくわかりませんでした。

関連するQ&A

専門家に質問してみよう