重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

 エクセルに2つのシートがあります。シート1には15営業所の年度別販売個数があります。シート2には、自分で作成した地図があり、15営業所の位置をオートシェイプで作成した●(丸)で地図内に表示しています。
 
 次にシート1において対前年度比率を営業所別に求めました。(例 S営業所 対前年度106%の販売増)
 この対前年度比率に応じて、シート2のオートシェイプの色は、変えられるのでしょうか? 
 
 具体的には、対前年度100%~105%はオレンジ、106%~110%は赤・・・というようにしたいのです。
 
 数値に応じてセルの色を変える方法は分かるのですが、指定したオートシェイプの色は変えられるのでしょうか?
 関数、VBAでの解決方法を是非教えてください。よろしくお願いします。

A 回答 (1件)

まず、各営業所をあらわす図形の名称を調べます。


方法は、
 1.ツール→マクロ→新しいマクロの記録を選択すると「マクロの記録」の子画面が出ます。
 2.マクロ名を覚えておきます。OKボタンを押します。ここでは、Macro1だったとします。
 3.各営業所をあらわす図形を順に1個ずつマウスでクリックし選択していきます。
 4.すべて選択し終わったら、ツール→マクロ→記録終了を選びます。
 5.ツール→マクロ→Visial Basic Editorを選択します。
 6.エディタ画面が開きます。プロジェクトとタイトルのついた画面の標準モジュールを選択すると中に先ほどのMacro1というものができているはずです。
こんな感じで…
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2006/1/28 ユーザー名 :
'
'
ActiveSheet.Shapes("Oval 1").Select
ActiveSheet.Shapes("Oval 4").Select
ActiveSheet.Shapes("Oval 5").Select


End Sub
  この「Oval 1」,「Oval 4」というのがExcelが図形につけた名称です。

次にプログラムですが、地図のシートを選択したときに、前年比の値で丸の色変えを行えばいいので、地図のシート、Sheet2でしょうか?このシート内のActivateイベントプロシージャにコーディングします。
内容は、…
Private Sub Worksheet_Activate()
Dim Henkan(1 To 15) As EIGYOUTOZUKEI
Dim EigyoSheetName As String
Dim ZennenhiKeta As Integer
Dim EigyouNmKeta As Integer

Dim W_Zennenhi As Variant
Dim i As Integer

EigyoSheetName = "Sheet1"
ZennenhiKeta = 4
EigyouNmKeta = 1

'営業所に対応する図形の名称の定義、本当は15個分必要
Henkan(1).Gyo = 2
Henkan(1).ZukeiName = "Oval 1"
Henkan(2).Gyo = 3
Henkan(2).ZukeiName = "Oval 4"
Henkan(3).Gyo = 4
Henkan(3).ZukeiName = "Oval 5"

For i = 1 To 15
W_Zennenhi = Worksheets(EigyoSheetName).Cells(Henkan(i).Gyo, ZennenhiKeta).Value
If (IsNull(W_Zennenhi) Or IsEmpty(W_Zennenhi) Or Not (IsNumeric(W_Zennenhi))) Then
MsgBox (Worksheets(EigyoSheetName).Cells(Henkan(i).Gyo, EigyouNmKeta).Value & "の前年比が、無効な値です")
Else
If (W_Zennenhi > 1# And W_Zennenhi <= 1.05) Then
Shapes(Henkan(i).ZukeiName).Fill.ForeColor.SchemeColor = 51 '橙
ElseIf (W_Zennenhi > 1.05 And W_Zennenhi <= 1.1) Then
Shapes(Henkan(i).ZukeiName).Fill.ForeColor.SchemeColor = 10 '赤
ElseIf (W_Zennenhi > 1.1 And W_Zennenhi <= 1.15) Then
Shapes(Henkan(i).ZukeiName).Fill.ForeColor.SchemeColor = 13 '黄色
ElseIf (W_Zennenhi > 1.15) Then
Shapes(Henkan(i).ZukeiName).Fill.ForeColor.SchemeColor = 11 '黄緑
Else
Shapes(Henkan(i).ZukeiName).Fill.ForeColor.SchemeColor = 9 '白
End If
End If
Next i
End Sub

Private Sub Worksheet_Activate()の外側のGeneralに型の定義等をします。
内容は、…

Option Base 1
Option Explicit
Private Type EIGYOUTOZUKEI
Gyo As Integer ' 営業所のシート上の行番号
ZukeiName As String ' 各営業所を表す丸の名称
End Type


プログラムの内、以下の箇所は、前年比のあるシートの内容で、変更してください。
 1.前年比のあるシートの名称、ここではSheet1としています
EigyoSheetName = "Sheet1"
 2.前年比の入っているセルの桁番号です。Aが1です。ここではD、4番目としています。
ZennenhiKeta = 4
 3.営業所名のある桁番号です。ここではA、1番目としています。
EigyouNmKeta = 1
 4.最初に調べた営業所を表す図形の名称とその営業所の行番号です。ここでは、最初の行の営業所は、2行目で、それを表す図形名はOval 1としています。また、本来15個定義しなければなりませんが、ここでは、3個分となっています(あくまで参考例なので)。

Henkan(1).Gyo = 2
Henkan(1).ZukeiName = "Oval 1"
Henkan(2).Gyo = 3
Henkan(2).ZukeiName = "Oval 4"
Henkan(3).Gyo = 4
Henkan(3).ZukeiName = "Oval 5"

こんなものではだめでしょうか(コーディングの字下げが上手く表示されないため見にくくて申し訳ありません、なぜでしょう?)
    • good
    • 0

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