アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
マクロやVBAの知識が乏しいため非常に困っています。

エクセルにてシート(1)から
文字をとっているシート(2)があるのですが
文字数が多くなるとシート(2)のほうがセルからはみ出てしまいます。

そこで文字数でフォントサイズを変更したいと考えました。
19文字以上ならサイズを14に。。という具合に自動でできるコードを
ご教授願えないでしょうか?
よろしくお願いします。
また、それ以外に良いものがあればそれを採用したいとも考えています。

以下条件になります。
シート(1)のA1の文字が15文字以下ならシート(2)のB2のサイズを18に

シート(1)のA1の文字が16文字以上ならシート(2)のB2のサイズを16に

シート(1)のA1の文字が19文字以上ならシート(2)のB2のサイズを14に

シート(1)からシート(2)へ文字を反映している箇所が4か所
その4か所を1番長い文章のフォントサイズで統一したい。

「VBAで条件によりフォントサイズを自動で」の質問画像

A 回答 (4件)

こんばんは。



前回のコードを直してみました。
Sheet1のマクロ画面に、上書きして試してください。
すでに書かれている場合は、1列目にどこかで、Enter を入れれば、このコードは可動します。
ただ、これが自動制御でなければ、ボタンにして可動するようにしてしまうことも良いかと思います。

'//シートモジュール
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fnt As Integer
Dim opRng As Range
Dim maxLen As Long '最大の文字長
Dim c As Range
With Worksheets(2)
Set opRng = .Range("B2", .Cells(Rows.Count, "B").End(xlUp)) '対象のセル群
If WorksheetFunction.CountA(opRng) = 0 Then Exit Sub '対象セル群の文字列等が一切ない場合
End With
If Target.Column <> 1 Then Exit Sub '1列目以外は除外
If Target.Count > 1 Then Exit Sub '複数のセルの時除外
If Target.Value = "" Then Exit Sub '空白または削除では作動しません。
For Each c In Range("A1", Cells(Rows.Count, 1).End(xlUp))
If c.Value > "" Then
  If maxLen < Len(c.Value) Then
  maxLen = Len(c.Value)
  End If
 End If
Next
Select Case maxLen
 Case Is >= 19: fnt = 14
 Case Is >= 16: fnt = 16
 Case Is >= 1: fnt = 18
End Select
opRng.Font.Size = fnt
End Sub
    • good
    • 1
この回答へのお礼

お世話になります。
前回からありがとうございます。
前回は文字サイズの統一が抜けてしまっていて
二度手間になって申し訳ないです。

お礼日時:2018/10/09 13:21

みやたろすさん、文書の説明と画像の内容に矛盾があるようですが、大丈夫ですか?


Sheet2のA2、A5、A8、A10に表示されている文字数によって、同セルのフォントサイズを決定すれば良いのですよね。また、同セルは、数式でSheet1を参照しているのですよね。であれば、Sheet2のCalculateイベントプロシジャに下記のコードを仕込むのが良いと思います。

Private Sub Worksheet_Calculate()
Dim myRng As Range
Dim r As Range
Dim maxLen As Long
Set myRng = Me.Range("A2,A5,A8,A10")
For Each r In myRng
If Len(r.Text) > maxLen Then maxLen = Len(r.Text)
Next r
Select Case maxLen
Case Is <= 15
myRng.Font.Size = 18
Case Is >= 19
myRng.Font.Size = 14
Case Else
myRng.Font.Size = 16
End Select
End Sub
    • good
    • 0
この回答へのお礼

こんにちは
回答ありがとうございます。
本当ですね。気づきませんでした(汗

お礼日時:2018/10/09 13:17

Do Loop文で文字数をカウントして、if then とか Cells.Font.Size でやれば可能です。


しかし 「マクロやVBAの知識が乏しい」とおっしゃっておられるなら、書式設定でされる方がよいですよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
書式設定だけですむのであればそうしたいのですが
すべてのサイズを統一しようとするとできなかったので
質問させて頂いた次第です。

お礼日時:2018/10/09 13:23

VBAなんぞ使わなくても、書式設定ー配置ー文字の制御ー縮小して全体を表示する


で出来ますけど。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
縮小して表示すると文字サイズがばらばらになるため
使用できないので質問させて頂きました。

お礼日時:2018/10/09 13:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A