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

営業成績のランキングシートをエクセルで作成しています。
ランキング1位~5位のフォントサイズを24ポイント、6位~10位までを18ポイント、
という風に書式設定をしたいと考えています。

条件付き書式では対応できないので、VBAで処理ができたらと思っています。
過去に似たような質問があったので、いろいろ試してみたのですがうまくいきません。

どなたかお詳しい方お願い致します。

エクセルのバージョンは2000、OSはNTWorkstation4.0です。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/29 21:49

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
    • good
    • 0

> 条件付き書式では対応できないので、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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
早速試してみました。完璧です!!!
ありがとうございます!!!

もう一点質問なのですが、
フォントサイズを変更する「列」が複数列の場合は
どうしたらよいのでしょうか? 

 B列     | C列    | D列         |
 ランキング | 担当者名 | 売上(順位判定数値)

B~D列の3列のフォントを変更したいと考えています。

(1)の方がおっしゃるように、最初の質問できちんと
表の構成を記載すべきですね、二度手間ですみません。

お礼日時:2003/09/28 10:27

売上高の積もりで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は下記になり
47
92
56
38
29
65
74
110
83
101
A2,A6、A7、A9、A10は24Ptになりました。その他は16Pt。(B列はランク数字を参考に出したものです。)
ご質問者の本番に合わせては、どこをどう変えれば良いかはわかりますよね。
Rank関数のクセについてはご注意を。(同じ値があったときのランク数字の問題など。)
    • good
    • 0

ランキングが記入される位置と、フォントサイズが変更される文字列の位置を書いてもらった方がいいと思います。



また、試されたSampleがあるのならそのコードも紹介してもらえませんでしょうか?
    • good
    • 0

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

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


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