• ベストアンサー

【エクセル】シート全体において文字数18字以上が既に入力されているセルだけを、文字のサイズを5にしたい。

「シート全体において文字数18字以上が既に入力されているセルだけを、文字のサイズを5にしたい」 のですが、 条件付き書式は文字のサイズは変えられないようで、マクロでもいろいろと試行錯誤(for each nextとif thenの組み合わせなど)したが分かりません。 よろしくお願いいたします。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

>ANo.1への補足 (2)-1 For Each Ws In Worksheets では、ワークシートを指定しています。 (2)-2 MsgBox Ws.Name を入れてみればシート名が返されます。 (3)-1と(3)-2のように変更してみてください。 For Each Ws In Cells   MsgBox Ws.Address 取りあえず動くと思います。 あと (1) Dim Ws のように変数を宣言するようにした方が良いです。 「型」が馴染みにくいのですが、上記のようにすればVariant型と認識され取りあえず動くと思います。 Sub test()   Dim Ws '(1)      'For Each Ws In Worksheets '(2)-1     'MsgBox Ws.Name '(2)-2   For Each Ws In Cells '(3)-1     MsgBox Ws.Address '(3)-2     If Len(Ws) > 17 Then       Ws.Font.Size = 5     End If   Next End Sub シート上の全セルを総当たりしますので、作業が終了するまで時間がかかり過ぎます。 色々方法がありますが、例えば For Each Ws In Range("A1:Z100") のようにすれば対象セル範囲を限定できます。 他に、UsedRangeとかSpecialCells等を調べると良いと思います。

yaki1013
質問者

お礼

教えていただいたコードで成功しました! 確かにセル範囲を指定しないと、時間がかかりすぎますね。 ・・・途中で中断しました(汗) セル範囲を指定したら、納得のいくものになりました。 どうもありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

If関数の構文は 条件付き書式の「数式が」に入れる数式とほとんど変わらないと思いますが・・・。 If Len(c.Value) >= 18 Then c.Font.Size = 5

yaki1013
質問者

お礼

アドバイスどうもありがとうございました! おかげさまで解決しました。

すると、全ての回答が全文表示されます。
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

何が解っていて、何がわからないのでしょうか? どこまでできているのでしょうか? 試行錯誤されたコードを拝見できないでしょうか。 上手く出来ていなくてもコードを掲載された方が良いと思います。

yaki1013
質問者

補足

Sub test() For Each ws In Worksheets If Len(ws) > 17 Then ws.Font.Size = 5 End If Next End Sub といろんなページを見よう見まねで作ってみたのですが、 つい最近マクロを自分で作るようになったので、考え方が根本的に間違っているのかもしれません・・・。

すると、全ての回答が全文表示されます。

関連するQ&A