• ベストアンサー

マクロの修正(でしょうか?)または、関数について

調べてみたものの、それらしきものが見つからなかったので質問します。 エクセルで、標高のデータがA1からX50まで入っているとします。 訳あって、その位置は動かせない事としてください。 それには、1行目の条件を元に、色塗り(14色)をするマクロが組まれているのですが、標高の分類が多すぎて(10m単位で測定)、色が塗れません。 色塗りは、標高0~200m:a色、201~400m:b色・・・というようにしたいのですが、マクロに0~200はa色、というように指定する式を書けば、色が塗れるのでしょうか? 塗れる場合、その式と記入方法まで教えていただけるものでしょうか? (マクロをいじれる人が数週間いないので・・・) または、マクロの修正をしない場合、 標高のデータを0~200m=1、201~400m=2というように、書き換えられる式があれば、いいのかとも考えます。 そうすれば、14に分けられて、マクロも実行できるようになるのですよね? ただ、書き換えられる式が、またまたどれを使ってよいのか、わからなかったので、おわかりになる方、ぜひぜひ教えてください。

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

  • ベストアンサー
回答No.3

続きです。 セルのA1からN1までを塗りたい色で塗ると A2からX51までがその色で塗れるようにしたつもりです。 この場合0から200を塗る色をセルA1に、201から400までを塗る色をセルB1に という手順でN1まで埋めていきます。 Sub 色塗り() Dim a, m, n As Integer For m = 1 To 24 For n = 2 To 51 a = Int(Cells(n, m)) Select Case a Case 0 To 200 Cells(n, m).Interior.ColorIndex = Range("A1").Interior.ColorIndex Case 201 To 400 Cells(n, m).Interior.ColorIndex = Range("B1").Interior.ColorIndex (中略) Case 2601 To 2800 Cells(n, m).Interior.ColorIndex = Range("N1").Interior.ColorIndex Case Else End Select Next Next End Sub 今度はどうでしょうか。

ebio
質問者

お礼

本当にありがとうございます! きれいに色塗りができました! 完全にやりたかったとおりのものが!! この文章?(式のような)が判るようになりたいです。

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

その他の回答 (2)

回答No.2

回答をつくって送信しようと思ったところ先を越されてしまいました。残念。 下の人と同じなんですが、せっかくなので送信します。 Sub 色塗り() Dim a, m, n As Integer For m = 1 To 24 For n = 1 To 50 a = Int(Cells(n, m)) Select Case a Case 0 To 200 Cells(n, m).Interior.ColorIndex = 1 Case 201 To 400 Cells(n, m).Interior.ColorIndex = 2 (中略) Case 2601 To 2800 Cells(n, m).Interior.ColorIndex = 14 Case Else End Select Next Next End Sub こんなもんでいかがでしょうか。

ebio
質問者

補足

みなさん、ありがとうございます!! 色塗りができました。 今回は数値の変えやすい、tamagawa49さんの式を使わせていただきました。 Case 1000 To 1200 Cells(n, m).Interior.ColorIndex = 20 ですが、できれば、20という色番号を参照して塗るのでなく、シートの1行目(例えばA1)に使う人が色を塗って、 マクロを実行すると該当セルがA1の色でに塗れるようにしたいのです。 式の20を書き換えることで、可能になるのでしょうか。 可能な場合、なんと書けばよいのですか?

すると、全ての回答が全文表示されます。
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

>1行目の条件を元に、色塗り(14色)をするマクロが組まれているのですが この意味は分かりませんので >色塗りは、標高0~200m:a色、201~400m:b色・・・というようにしたいのですが・・・ を書いてみました。意味をとらえていればいいんですが。標高2600m超はインデックスを14にしています。 >標高のデータを0~200m=1、201~400m=2というように、書き換えられる式があれば・・・ は下の = Int((rg.Value - 1) / 200) + 1 になります。(0mは特別) 色の設定は分かりませんのでテキトーに書いています。= の次にある数字がそうです。色を塗る処理を記録すれば数値の意味がはっきりすりと思います。Helpにもあった? ご参考に。 Sub ColorPaint()   Dim rg As Range 'セル   Dim HyokoIdx As Integer '標高を200m毎にインデックス化   Dim colIdx As Integer 'カラーパターン   For Each rg In Range("A1:Z50")     HyokoIdx = Int((rg.Value - 1) / 200) + 1     If rg.Value = 0 Then HyokoIdx = 1     Select Case HyokoIdx       Case 1: colIdx = 2 '以下、カラーインデックスをテキトーにセットしています       Case 2: colIdx = 34       Case 3: colIdx = 35       Case 4: colIdx = 36       Case 5: colIdx = 4       Case 6: colIdx = 6       Case 7: colIdx = 40       Case 8: colIdx = 44       Case 9: colIdx = 38       Case 10: colIdx = 7       Case 11: colIdx = 37       Case 12: colIdx = 42       Case 13: colIdx = 50       Case Else: colIdx = 51     End Select     rg.Interior.ColorIndex = colIdx   Next End Sub

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

関連するQ&A