Excelのマクロでの色の取得とループ方法

このQ&Aのポイント
  • Excelのマクロで色を取得し、地方ごとに色分けする方法についての質問です。
  • マクロ初心者がExcelを使用して地方別の日本地図を作成しようとしています。
  • 現在のマクロの記述方法をシンプルにしたい、色の設定方法と条件の設定方法を改善したいという要望があります。
回答を見る
  • ベストアンサー

Excelのマクロでの色の取得とループ方法

はじめまして。 マクロ初心者です。 Excelのセルを使って地方別の日本地図を作成しています。 イメージとしてはこれのExcel版といった感じです。 http://hp-sozai.net/tm-map/nt03.html やりたいことは、別表の数字によってこの地方を色分けするマクロの作成です。 現在抱えている問題は、1.色の設定方法の改善、2.条件の設定方法の改善、3.現在のマクロの記述方法をシンプルにできないか、の3点です。 マクロは現在下記のように記述しています。 Sub 地方() Hokkaido = Range("T4").Value Select Case Hokkaido Case "" Range("P4").Interior.Color = QBColor(15) Case 1 To 4999 Range("P4").Interior.Color = QBColor(11) Case 5000 To 9999 Range("P4").Interior.Color = QBColor(9) Case 10000 To 14999 Range("P4").Interior.Color = QBColor(2) Case 15000 To 19999 Range("P4").Interior.Color = QBColor(10) Case 20000 To 24999 Range("P4").Interior.Color = QBColor(14) Case 25000 To 29999 Range("P4").Interior.Color = QBColor(13) Case 30000 To 34999 Range("P4").Interior.Color = QBColor(12) End Select Tohoku = Range("T5").Value Select Case Tohoku Case 1 To 4999 Range("O8,O9,P7:P10").Interior.Color = QBColor(11) Case 5000 To 9999 Range("P4").Interior.Color = QBColor(9) Case 10000 To 14999 Range("P4").Interior.Color = QBColor(2) Case 15000 To 19999 Range("P4").Interior.Color = QBColor(10) Case 20000 To 24999 Range("P4").Interior.Color = QBColor(14) Case 25000 To 29999 Range("P4").Interior.Color = QBColor(13) Case 30000 To 34999 Range("P4").Interior.Color = QBColor(12) End Select ・ ・ ・ (こを全地方分) End Sub 1.色の設定方法の改善と2.条件の設定方法の改善について: 現在それぞれの地方ごとにセルA1:B7に凡例を作成しています。 凡例はセルAにフォントの色指定で着色した■、 セルBに0以上5000未満などの条件を入力してあります。 例: A  B ■ 1以上5000未満 色は上記の通りマクロで直接指定していて、この■の色を変更してもマクロの色は変わりません。 これをリンクさせて、■の色が変更されたらマクロにも反映されるようにしたいと思っています。 条件についても同様で、Bの値が変わったらマクロの値も変わるように設定できたらいいのですが。。 3.現在のマクロの記述方法をシンプルにできないか、について: 見ての通り、今のマクロは同じ事を地方ごとに記述していて非常に長いものになっています。 これをもう少しシンプルに記述できないかと思っているのですが、 セルの範囲も地方によってさまざまなので上手いループが思いつかず行き詰まっています。 是非アイディアをいただけるとありがたいです。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

回答が遅くなりまして、すみません。 >このリストの場合、北海道の数値はどのセルに入れることになりますか? → E列になります。 >その数値が5000未満の場合は北海道が赤になる、といった具合で動作の予定です。 セル「E2」でRange「T4」を設定すればいいです。 A    B     C      D    E    F   G   H   I   J カラー 範囲(FROM) 範囲(TO)  東北   北海道 関東  信越 北陸  東海 近畿                 O8,O9,P7:P10 赤     1    4999    P4    T4 ← セル「E2」 Range「T4」を設定 黄     5000   9999    Q5    S5 ← 数値が5000~5999 で黄色の場合はこのセルにRange「例えばRangeがS5なら」を設定します 青     10000  14999   S6       20000  24999   P8       25000  29999   Q6       30000  34999   S8

Karin2006Karin
質問者

お礼

お礼が遅くなり大変申し訳ございませんでした。 ご丁寧にありがとうございます! アドバイスいただいた方法と、新しく思いついて色をつける部分はポリゴンで書く方法を組み合わせて試してみようと思います。 どうもありがとうございました。 助かりました。

その他の回答 (1)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

こんにちは。 以下の方法では、如何でしょうか。 ActiveSheetには以下のように条件を設定します。 Aカラムは色を設定、B~Cカラムには範囲を、D~地方名を設定 セルD2~には各地方別に色を設定するRangeを設定します。 セル「D2」のように複数セルを指定する場合は Range("O8,O9,P7:P10")と同様に「O8,O9,P7:P10」設定します。 地図のSheet名を「地図」にします。 A    B     C      D    E    F   G   H   I   J カラー 範囲(FROM) 範囲(TO)  東北   北海道 関東  信越 北陸  東海 近畿                 O8,O9,P7:P10       1    4999    P4       5000   9999    Q5   P4       10000  14999   S6       20000  24999   P8       25000  29999   Q6       30000  34999   S8 Sub 日本地図色設定()   Dim mR      As Long   Dim mC      As Integer   Dim c       As Range   '   Sheets("地図").Cells.Interior.ColorIndex = xlNone       '色クリア      With ActiveSheet     mR = .Range("B" & Rows.Count).End(xlUp).Row        '最大行設定     mC = .Range("A1").End(xlToRight).Column          '最大カラム設定     For Each c In .Range(.Cells(2, "D"), .Cells(mC, mR))       If c.Value <> "" Then         '色設定         Sheets("地図").Range(c.Value).Interior.ColorIndex = .Range("A" & c.Row).Interior.ColorIndex       End If     Next   End With End Sub あくまでも、参考用ですので、変更して使ってください。

Karin2006Karin
質問者

お礼

pkh4989さん、 早速のアドバイスありがとうございます! 現在ActiveSheetの部分から作成しているのですが、 このリストの場合、北海道の数値はどのセルに入れることになりますか? その数値が5000未満の場合は北海道が赤になる、といった具合で動作の予定です。 アドバイスいただいたリストは以下の感じになるのかと予想しておりますが。。 A|B|C|D|E     赤|0|4999|北海道|東北 黄|5000|9999|T4|O8,O9,P7:P10 青|10000|14999|数値?|数値? VBA以前の質問ですみませんm(__)m

関連するQ&A

  • エクセルのマクロ

    エクセル2002でマクロを記録しました。 セルD5を選択した状態で、マクロの記録を始めました。(相対参照ボタンをクリックしています) D5のセルの色を黒にして、セルD6を選択して色を白にしました。ここで記録を終了しました。 VisualBasicEditorで見ると以下のような記述がありました。 そこで教えてください。 1)どの部分が相対参照をしているという意味の記述でしょうか? 2)どの部分がD6を選択したという記述でしょうか? 3)「Range("A1").Select」はどういう意味ですか?A1のセルはクリックしていないのですが・・・。 教えてください。 記述は以下です。 With Selection.Interior .ColorIndex = 1 .Pattern = xlSolid End With ActiveCell.Offset(1, 0).Range("A1").Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With End Sub

  • マクロ 色の設定

    特定の文字を入れると選択したセルが塗りつぶされるようにしたく思い、 ネットで検索して、できることはできたのですが、 自分の好きな色に変更する方法が分かりません。 当方、マクロに関しては全くの初心者です。 どこをどのように変えればよいのか教えて下さい。 Private Sub Worksheet_Change(ByVal Target As Range) If Range("B22").Value = "アポ" Then Range("B22:J22").Interior.Color = vbRed Else Range("B22:J22").Interior.ColorIndex = xlColorIndexNone End If End Sub B22のセルに「アポ」と入るとB22~J22が赤色に、なるというマクロです。 多分、「vbRed」というのを変えればいいとは分かるのですが、どうしてよいのやら… 自分としては、添付した画像のように、左側の文字によって、隣のセルが ピンク、オレンジ、水色、黄色(自分で作った色かと思います)に なるようにしたいのです。

  • 【Excelマクロ】 セルの色取得

    古いファイルを加工することが多々あり、セルに塗られている色を調べる(セルの書式設定→塗りつぶし→その他の色→ユーザー設定)のが非常に面倒です。 RGB値をマクロで表示させる方法を見つけたものの、セルが指定(A1/A2/B1)されています。 <1つ右> Sub 色情報取得() Dim r As Long Dim g As Long Dim b As Long n = Range("A1").Interior.Color r = n \ 256 ^ 0 Mod 256 g = n \ 256 ^ 1 Mod 256 b = n \ 256 ^ 2 Mod 256 Range("A2") = r & "," & g & "," & b End Sub <1つ左> Sub 色情報取得() Dim r As Long Dim g As Long Dim b As Long n = Range("A1").Interior.Color r = n \ 256 ^ 0 Mod 256 g = n \ 256 ^ 1 Mod 256 b = n \ 256 ^ 2 Mod 256 Range("B1") = r & "," & g & "," & b End Sub 調べたいセルにカーソルを置いた状態で実行するマクロをご教示ください。 希望1.画像のように1つ右 or 1つ左、もしくはn個右 or n個下など、表示させたいセルを自由に設定したい 希望2.複数セルを一括で処理したい よろしくお願い致します。

  • マクロの簡素化

    下記マクロです。 Range("AE6:AE1005").Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone If Range("AD6").Value > 5 Then Range("AE6") = "*" Range("AE6").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD7").Value > 5 Then Range("AE7") = "*" Range("AE7").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD8").Value > 5 Then Range("AE8") = "*" Range("AE8").Select With Selection.Interior .ColorIndex = 3 End With Else End If 中略(セルを一個づつ指定しています) If Range("AD1004").Value > 5 Then Range("AE1004") = "*" Range("AE1004").Select With Selection.Interior .ColorIndex = 3 End With End If If Range("AD1005").Value > 5 Then Range("AE1005") = "*" Range("AE1005").Select With Selection.Interior .ColorIndex = 3 End With Else End If Range("AE3").Select 有るセルを参照しその値が5以上だったら別のセルに*マークとセルに色を付けるマクロですが、一個づつセル指定をしていますが、何とか短く出来ないでしょうか? お分かりになる方宜しくお願い致します。

  • マクロ 計算式の値を取得してループさせる

    マクロで「計算式の値を取得してループ」させたいと考えています。    A B C 1   1 2 3 4 5  2 上記表のようにA1から順に1ずつセルに入力をしていきたいのですが 値が増えていかず1が連続してセルに取得されてしまいます。 A1に1 A5に2 といった感じで4セルずつ下にさがるにつれ値を1ずつ増やしていきたいです。 <マクロ> Dim i As Integer For i = 1 To 100 Range("A5") = Range("A1") + 1 Selection.Copy Cells(4 * i , 1).Select ActiveSheet.Paste Next よろしくお願いします。

  • Excel VBA 選択した範囲の1行目に色を付けたい

    VBA初心者です。 セルB4~F15に表が作成されています。 プロシージャを実行して、セルB5~F15にブルー。表1行目のセルB4とF4のみに赤の色を付けるというコードを記述したいのです。 以下のように記述しました。 Sub セルに色()    Range("B4").Select    ActiveCell.CurrentRegion.Select    Selection.Interior.ColorIndex = 8    Selection.Range(Cells(1, 1),Cells(1,5)).Interior.ColorIndex = 3 End Sub Rangeでは連続シートになるため、Unionに変更してみましたが、 Unionはオブジェクトがサポートされていない旨のエラーが出ました。 どのように記述すればよいでしょうか? どうぞよろしくお願いいたします。

  • VBA セルの色を変更する

    VBA(エクセル2007使用)で、セルの背景色を変更する場合についての質問です。 マクロを実行する度に、セルの背景色を変更するマクロを作成しました。 オレンジ→水色→緑→灰色→無色  という風に変わっていくところまでは できたのですが、これだとマクロを実行するのにセルの状態が無色か、指定した カラーコードで塗りつぶされていないと実行できません。 下記、コードの一番最初の Case で ”背景色がどんな色の場合でも”という条件に したいのですが、どのように記載したらわからずにいます。。。 ---------------------------- Sub 色チェンジ() n0 = ActiveCell.Interior.ColorIndex Select Case n0 Case xlNone   ’ここを”どんな色の場合でも、、、という条件にしたいです。。” Selection.Interior.ColorIndex = 40 Case 40 Selection.Interior.ColorIndex = 34 Case 34 Selection.Interior.ColorIndex = 35 Case 35 Selection.Interior.ColorIndex = 15 Case 15 Selection.Interior.ColorIndex = xlNone End Select End Sub -----------------------------------

  • マクロの中に別なマクロを組み込むには

    よろしくお願いします。 excel2003でマクロを作っています。 Sheet2のC1、D1、E1にセルを赤く塗りつぶす、赤と入力、カラーインデックスの番号を入力するというマクロを作りボタンに割り当てたいと思います。 全部で色が17色あるので、マクロを17個作らなければならないと思うのですが、なるべく簡略化したいと思います。 そこで下記の「赤」というマクロの中に「色」というマクロを取り込みたいのですが、うまくできませんでした。 どうかマクロの中にマクロを取り込む方法を教えてください。 もし下記のマクロがもっとスマートに出来るようでしたら、それも教えていただけると嬉しいです。 VBAは初心者ですがよろしくお願いします。 Sub 赤() irobango = 3 ironamae = "赤" End Sub Sub 色() Worksheets("Sheet2").Range("C1").Select With Selection.Interior .ColorIndex = irobango .Pattern = xlSolid End With Worksheets("Sheet2").Range("D1").Value = ironamae Worksheets("Sheet2").Range("E1").Value = irobango End Sub

  • Excelで渦巻状にセルを移動するマクロを作りたいのです

    マクロで渦身状&時計回りにアクティブセルを移動させるにはどのように 記述したらよいでしょうか。 例えば、E16を選択しているときにマクロを実行したら E16→D16→D15→D14→E14→F14→F15→F16→F17→E17→D17→C17→… と移動していく感じです。 キーボード記録マクロで[↑][↓][←][→]キーで移動してみても何も記録 されなかったので、移動→黄色に塗りつぶし、という繰り返しを記録 してみると、文末のようにはなりました。が、渦巻き状に移動という アルゴリズムがさっぱり思いつきません。 無限でなく、例えば10周くらいまわれば十分です。 最終的には、移動するごとに、踏んだセルの値を評価(1だったら赤に塗る、 のように)していきますが、まずは選択セルを基点に渦巻状にセルを移動 する方法が知りたいです。 よろしくお願いします。 Sub Macro1() With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Range("E16").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Range("D16").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ' ■中略■ Range("C17").Select With Selection.Interior End Sub .ColorIndex = 6 .Pattern = xlSolid End With (ちなみに) エクセル上に、日本地図が碁盤目状に描かれています。 セルには、平野=1、山=2、海=3のように記述されています。 これを特定法則で塗り分けるのに利用します。

  • エクセルの select case文

    Dim i For i = 1 To 5 Select Case Cells(i, "A") Case "午前" Range("w1").Select Selection.Copy  Cells(i, "C").Select ActiveSheet.Paste Case "午後" Range("x1").Select Selection.Copy Cells(i, "d").Select ActiveSheet.Paste  End Select Next i Dim j For j = 1 To 5 Select Case Cells(j, "A") Case "関東" Range("y1").Select Selection.Copy  Cells(j, "e").Select ActiveSheet.Paste Case "関西" Range("z1").Select Selection.Copy Cells(i, "F").Select ActiveSheet.Paste  End Select Next i 毎回皆様にはお世話になっています。 あるセルを参照してその入力結果により 違うセルを貼り付けるマクロを組みました。 参照するセルが複数個(この例だと2セル)あるので それぞれに変数を宣言してfor nextで まわしています。 この内容を変数ひとつだけで すっきりと記述することは可能でしょうか? 参照するセルや判別する内容が増えると 記述が膨大になって マクロが 見にくくなるので 良い方法がありましたら 御教授ねがいます。