• ベストアンサー

セルの条件によってフォントサイズを変更したい。

営業成績のランキングシートをエクセルで作成しています。 ランキング1位~5位のフォントサイズを24ポイント、6位~10位までを18ポイント、 という風に書式設定をしたいと考えています。 条件付き書式では対応できないので、VBAで処理ができたらと思っています。 過去に似たような質問があったので、いろいろ試してみたのですがうまくいきません。 どなたかお詳しい方お願い致します。 エクセルのバージョンは2000、OSはNTWorkstation4.0です。

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.5

> フォントサイズを変更する「列」が複数列の場合はどうしたらよいのでしょうか?  > B~D列の3列のフォントを変更したいと考えています。 B列に計算式を設定し、「順位」を表示しているものとし、その順位により、 フォントサイズを自動的に変更するコードです。 これで、如何でしょうか。 VBAコードの設定方法は、前と同じです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Rng As Range Const JuniHani = "B2:B100" ' 順位表示範囲を指定 Application.ScreenUpdating = False Range(JuniHani).Resize(, 3).Font.Size = 11 ' 一般Fontサイズ For Each Rng In Range(JuniHani)   If Not IsEmpty(Rng) And IsNumeric(Rng.Value) Then     If Rng.Value <= 5 Then       Rng.Resize(, 3).Font.Size = 24 ' Top5 Fontサイズ     ElseIf Rng.Value <= 10 Then       Rng.Resize(, 3).Font.Size = 18 'Top6~10 Fontサイズ     End If   End If Next Rng Application.ScreenUpdating = True End Sub

rngo
質問者

お礼

おかげさまで、思うとおりに変更ができそうです。 これからVBを勉強したいと思います。 ありがとうございした。

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

その他の回答 (4)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.4

No.3ですが、ランキングの基になる数値データに文字列、空白など数値以外を入力した ときでも、実行エラーに対処し、また、ランクインしない部分のフォントを元へ戻す ためのコードを修正しました。 10位が同じ数値で複数ある場合の処理をどのようにするかで変わって来ますが、 現コードでは、行が上のもの1件としています。 必要により、変更してください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Rng As Range Const CngFSizeCol = "A" '    フォントサイズを変更する「列」を文字列で指定 Const ChkValHani = "B2:B1000" ' 順位を判定する「数値データ範囲」を文字列で指定 Dim N As Integer Application.ScreenUpdating = False Range(CngFSizeCol & ":" & CngFSizeCol).Font.Size = 11 ' 一般Fontサイズ For Each Rng In Range(ChkValHani)   If Not IsEmpty(Rng) And IsNumeric(Rng.Value) Then     If Application.WorksheetFunction. _       Rank(Rng.Value, Range(ChkValHani)) <= 5 Then       N = N + 1       Range(CngFSizeCol & Rng.Row).Font.Size = 24 ' Top5 Fontサイズ     ElseIf Application.WorksheetFunction. _       Rank(Rng.Value, Range(ChkValHani)) <= 10 Then       N = N + 1     Range(CngFSizeCol & Rng.Row).Font.Size = 18 'Top6~10 Fontサイズ     End If   End If   If N = 10 Then Exit For Next Rng Application.ScreenUpdating = True End Sub

すると、全ての回答が全文表示されます。
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

> 条件付き書式では対応できないので、VBAで処理ができたらと思っています。 この内容から察すると「条件付き書式」のように無意識で自動的にフォントが変わる ことを希望していると思います。 次のコードは、ランキングの基になる売上数値等を変更すると、その都度自動的に フォントサイズも更新されます。いちいちマクロを実行する必要はありません。 一応、コードの設定方法を書いておきますので、ご存知でしたら、読み飛ばしてください。 ・使用しているシートのシート名タブを右クリックして「コードの表示」を指定します。 ・開いたコードウィンドウに下記コードをコピーして貼り付けます。 ・現状に合わせて、3~4、(8)行目の指定内容を修正します。 ・Alt+ Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。 ・メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を  「中」を選択して[OK]します。 ・以上で設定完了です。 これで、自動的にフォントサイズが設定されますが、如何でしょうか。   Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Rng As Range Const CngFSizeCol = "A" '     フォントサイズを変更する「列」を文字列で指定 Const ChkValHani = "B2:B1000" '  順位を判定する「数値データ範囲」を文字列で指定 Dim N As Integer Application.ScreenUpdating = False For Each Rng In Range(ChkValHani)   Range(CngFSizeCol & Rng.Row).Font.Size = 11 ' Top10 以外Fontサイズ   If Application.WorksheetFunction.Rank(Rng, Range(ChkValHani)) <= 5 Then     N = N + 1     Range(CngFSizeCol & Rng.Row).Font.Size = 24 ' Top5 Fontサイズ   ElseIf Application.WorksheetFunction.Rank(Rng, Range(ChkValHani)) <= 10 Then     N = N + 1     Range(CngFSizeCol & Rng.Row).Font.Size = 18 'Top6~10 Fontサイズ   End If   If N = 10 Then Exit For Next Rng Application.ScreenUpdating = True End Sub

rngo
質問者

お礼

回答ありがとうございます。 早速試してみました。完璧です!!! ありがとうございます!!! もう一点質問なのですが、 フォントサイズを変更する「列」が複数列の場合は どうしたらよいのでしょうか?   B列     | C列    | D列         |  ランキング | 担当者名 | 売上(順位判定数値) B~D列の3列のフォントを変更したいと考えています。 (1)の方がおっしゃるように、最初の質問できちんと 表の構成を記載すべきですね、二度手間ですみません。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

売上高の積もりでA1:A10にランダムの積もりで 4、9、5、3、2、6、7、1、8、10 と入れました。 ---- VBEの画面に Sub test01() For i = 1 To 10 r = WorksheetFunction.Rank(Cells(i, "A"), Range("A1:A10")) Cells(i, "B") = r Select Case r Case Is >= 6 Cells(i, "A").Font.Size = 16 Case Is >= 1 Cells(i, "A").Font.Size = 24 End Select Next i End Sub を貼りつけて、実行してください。 ----- A1:B10は下記になり 4 7 9 2 5 6 3 8 2 9 6 5 7 4 1 10 8 3 10 1 A2,A6、A7、A9、A10は24Ptになりました。その他は16Pt。(B列はランク数字を参考に出したものです。) ご質問者の本番に合わせては、どこをどう変えれば良いかはわかりますよね。 Rank関数のクセについてはご注意を。(同じ値があったときのランク数字の問題など。)

すると、全ての回答が全文表示されます。
noname#27115
noname#27115
回答No.1

ランキングが記入される位置と、フォントサイズが変更される文字列の位置を書いてもらった方がいいと思います。 また、試されたSampleがあるのならそのコードも紹介してもらえませんでしょうか?

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

関連するQ&A