• ベストアンサー

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

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

  • rngo
  • お礼率84% (85/101)

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

  • ベストアンサー
  • 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/17068)
回答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

  • セルの書式設定のフォントやサイズの設定はできないの

    エクセルの条件付き書式ではセルの書式設定のフォントやサイズの設定はできないのですか? 条件:セルの値が 次の値に等しい:a として、書式ボタンをクリックしたのですが 色やスタイルや下線は設定できますがフォントやサイズの設定はできません。 仕様でしょうか? 条件が悪いのでしょうか?

  • 【EXCEL2003】特定値を入力したセルのフォントサイズを変更するVBAの書き方

    VBAの書き方について御教授ください! 複数のシートに入力規則のリスト設定で入力値が決まっているA列があります。(例えば「ア」「イ」「ウ」) そのリストのうち特定の値(例えば「ア」と「ウ」)を選択時に、そのセルのフォントサイズを14に自動的に変更したいです。 条件付書式で設定しようと思ったのですがサイズ変更は無理なようです。 どうぞよろしくお願いいたします。

  • ControlTipTextの書式設定(Font.Size等)の変更

    Excel.VBAに関する質問です。ControlTipTextの書式(Font.Size等)の設定をしたいのですが、Helpを参照しても分かりませんでした。お分かりになる方がいましたら、お力をお貸し下さい。宜しく御願します。

  • Excel2007条件付書式でフォントを変更したい

    条件付書式の設定でフォントが変更出来ないことは分かったのですが、ExcelのVBで条件付書式が一致したときにフォントを変えるにはどうすれば良いのでしょうか? 本来なら条件付書式でフォントを設定出来ても良さそうですけどね

  • エクセル 置き換えをするとセル内のフォントサイズが

    エクセルでフォントサイズがバラバラな文字列が入ってるセルで置き換えをすると セル内のフォントサイズが統一されてしまいました フォントサイズを統一させずに置き換えする事は可能でしょうか? VBAとかマクロをつかわなければならない時はできれば使い方を詳しくおしえて頂きたいです。

  • フォントサイズが揃わない

    Excelで表作成しているのですが、書式設定で年、月、日、曜日を設定して入力していくとセルによりフォントサイズが揃わない所が出てきて困っています。なのでその列すべて選択してフォントサイズを選んで変えるも変化せずどうしたら揃うのか教えていただきたく思います。宜しくお願いします。 縦に2列(A,B)に同じ書式設定をしています。A列は同じフォントサイズで表示されています。

  • エクセル 置き換えをするとセル内のフォントサイズが

    先ほど間違えてベストアンサーを出してしまったので連投失礼します。 エクセルでフォントサイズがバラバラな文字列が入ってるセルで置き換えをすると セル内のフォントサイズが統一されてしまいました フォントサイズを統一させずに置き換えする事は可能でしょうか? VBAとかマクロをつかわなければならない時はできれば使い方を詳しくおしえて頂きたいです。

  • Excelでセルのフォントを自動で変更したい

    Excelで罫線でかこまれた用紙に印字する際、下記のようなことができると作業が楽になります。 シート1には印刷用フォーマット(行幅列幅ともに固定)があり、シート2には(VLOOKUPでシート1の該当セルに参照されるための)データが入っています。 例: シート2のA1(製品名)の内容はシート1のA1にVLOOKUPで参照されるとして… シート2のA1に入れた文字数が既定を超えると、文字が切れた状態で印字がなされます。 現在はそれを避けるために、文字が収まるOR収まらないの判断を(当たりまえですが)人の目でおこなっています。 シート2で入力後にシート1を開いてその都度フォントサイズを変更して印刷。 入力→人間の目で判断→フォントサイズの変更→印刷、入力→また人間の目で判断→フォントサイズの変更→印刷、入力→またまた人間の目で・・・の繰り返しです。 作業効率のわるさを感じますし、印刷用のフォーマット(シート1)とデータ入力(シート2)が別々なので、シート間を行き来するのも手間なのです。 入力した桁数が既定を超えたとき、列幅や段組を変えずにフォントサイズだけを小さくし、次に既定内の文字が入ったときはそれに対応するフォントになる、というようなことを自動でおこない、現在の当たりまえを変えたいのです。 半角を1単位=1桁 例: シート2のA1(製品名)の内容はシート1のA1にVLOOKUPで参照されるとしてシート1のA1のフォントサイズが 【例 1】25桁以下ならフォントサイズ16 【例 2】26桁以上30桁以下ならフォントサイズ14 【例 3】31桁以上ならフォントサイズ12 というような設定を自動でおこなうことは可能でしょうか。 過去の質問も検索しましたが、さがし方がうまくないようで、道に迷いこの時間です…。 VBAのことはよくわかりません。 が、この作業が楽になるならAlt+F11で貼り付けますので、よろしくお願いします。

  • Excelのセルのフォントサイズを自動調整

    Excel97VBAの質問です。 セルの値が長すぎて表示しきれない場合は、フォントサイズを調整したい。 Sub Macro1() With Sheet1 .Columns("A").ColumnWidth = 1 .Range("A1").Value = 1 .Range("A2").Value = 12 .Range("A3").Value = 123 .Range("A4").Value = 1234 End With End Sub この場合、A2~A4の表示が潰れます。 フォントサイズを例えば、 Sub Macro2() .Range("A2").Font.Size = 7 .Range("A3").Font.Size = 5 .Range("A4").Font.Size = 3 End Sub と設定すれば潰れずに値が表示されます。 このようなフォントサイズの最適値を自動的に設定したい。 よろしくご指導お願いします。

  • エクセルのフォントサイズの反映

    条件付書式ではフォントサイズを変更できないようなのですが、 A列にフォントサイズを入力すると B列のフォントサイズが変わるようにしたいです。 よろしくお願いします。

専門家に質問してみよう