• ベストアンサー

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

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

  • ebio
  • お礼率67% (23/34)

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

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

  • マクロの修正ができません

    エクセルのマクロで下記の作業をしています。 よくわからないまま使っているので障害箇所がわかりません。 教えていただけないでしょうか・・ 説明の仕方も下手で申し訳ありませんがよろしくお願いいたします。 [マクロの用途] ・別シートに請求データを作成しています。 ・請求番号を入力するセルに請求番号を入力します。 ・登録したマクロボタンを押すと抽出範囲に該当する請求書のデータが抽出されます。 [障害の内容] 請求データが4行以上になると、3行まで抽出され、 4行以降は抽出されません。 以下はマクロの内容です。 Sub 抽出() ' ' 抽出 Macro ' マクロ記録日 : 2007/2/19 ユーザー名 : ***' Dim myRow1 As Long, myRow2 As Long myRow1 = Sheets("データ").Range("B65536").End(xlUp).Row myRow2 = Sheets("抽出範囲").Range("B65536").End(xlUp).Row If myRow2 >= 5 Then Sheets("抽出範囲").Range("A4:Q40" & myRow2).ClearContents End If Sheets("データ").Columns("A:Q").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("A4:Q40"), Unique:=True End Sub

  • マクロの修正点について

    マクロの修正点について Excel2003で、下記の作業をマクロで作りました。  ↓↓↓↓↓↓↓↓↓↓ 「あ行」~「わ行」までの全てのシートのA列を昇順に並び替えて、 「あ行」~「わ行」までの全てのシートを作業グループにする。 マクロを実行しますと下記のエラーが出ます。 実行時エラー '1004': この操作には、同じサイズの結合セルが必要です。 エラーの思い当たる節は、1行目に結合セルがありますのでそれが原因と思われます。 2行目は項目名があります。 3行目から、数字の連番が振られてますので、3行目以降を昇順にしたいと考えています。 試しに、1行目の結合セルを解除してからマクロ実行してみたら エラーは出なかったのですが、表はメチャクチャになりますし、作業グループにもなりません。 マクロの内容を書き出したかったのですが、 文字数制限によりオーバーしますので、ファイルバンク(オンラインストレージ)に、 テキストファイルでアップロードしました。  ↓↓↓↓↓↓↓↓↓↓↓↓↓ http://www.filebank.co.jp/filelink/fa491db9e4d6bfca44fad4fea1d0cf38 マクロのどこを修正したら宜しいでしょうか? 宜しくお願い致します。

  • マクロ 列ごとの条件付き書式

    マクロで列ごとの条件付き書式を作成したいです 条件としては ・列ごとに上限値が1行目に下限値が2行目に入力されている ・3行目以降に測定値が入力される ・その3行目位以降の測定値のセルの書式を上下限値から外れた値は色を変えたい ・50列ほどデータがある (例) A1 10 A2 5 A3~A100 数字 条件をA3~A100に設定 A1(10)より大きいもの、A2(5)より小さいものはセルの色を黄色 B1 15 B2 7  B3~B100 数字 条件をB3~B100に設定 B1(15)より大きいもの、B2(7)より小さいものはセルの色を黄色 こんな感じで列ごとにデータと規格値が入っているものが50列あります。 どうかよろしくお願い致します。

  • マクロでのデータ抽出

    毎月の売上データの一覧から必要なデータのみ抽出して、伝票を作成します。 伝票は明細単位で抽出します。 マクロを組もうとしているのですが、1、2行目のように1案件につき明細が2つある場合があるので、どのようなコードになるのかがわかりません。 コードの中で明細をカウントして、その分だけコピーするような手順になるのでしょうか? また伝票は「分類」ごとに作成します。 こちらは分類ごとにシートを作成し、フィルタにかけたデータをコピーしようと思っています。 マクロは初心者で説明不足な部分がありましたら申し訳ありません。 よろしくお願い致します。

  • Excelマクロ 途中まで作成したマクロの修正をお願いします

    Excelマクロ 途中まで作成した下記のマクロの修正をお願いできませんでしょうか。 【マクロ-途中 説明】 全シートのアクティブセルを「A1」にして、最後に左端のシートにして終了。→ファイル保存時、見栄えを良くするために使用 【修正点】 アクティブセル「A1」に移動を変更。 B列の一番下から「END+↑」でとんだ位置で止まる。 複数のシート(20以上)を同じ作業(ブック内の全シート) 同じく最後に一番左端のシートでをアクティブシートにして終了 ※A列は空白行のため、必ず埋まっているB列を基準にしたい 上記の【修正点】を下記の【マクロ-途中】に反映したい。 ↓ 【マクロ-途中】 Sub 全シートをHOMEポジションに() Dim ws As Variant For Each ws In Worksheets If Sheets(ws.Name).Visible = True Then Sheets(ws.Name).Select Range("A1").Select End If Next Sheets(1).Select End Sub

  • マクロの記録

    マクロを使用して●をたくさん打てるようにしたいのですが、1個ずつしか打てません。 色塗りの場合は選択範囲ごと色を塗れるのですが文字の場合は1つずつしか打てないのでしょうか

  • 【Excel2003】コピーするマクロ

    【Excel2003】コピーするマクロ Excelファイルで以下のようなデータがあります。   A       B 1 佐藤雄一 2 男 3 (空白行) 4 山本優子 5 女 6 (空白行) 7 ・・・ 8 ・・・ 9 (空白行) 上記のようなデータを下記のように変更したいです。 マクロ等を使用し、楽に修正するやり方を教えて下さい。 マクロを使用しなくても楽に修正する方法があればそれでも良いです。 分量が膨大なのでよろしくお願いします。   A       B 1 佐藤雄一  男 2 山本優子  女 3 ・・・     ・・・

  • エクセル:マクロの起動条件

    お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。  (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。

  • Excelでマクロを組んで、データを繰り返し抜き出したいのですが

    Excelでマクロを組んで「データ取得→データ並び替え→データ取得・・」と繰り返す作業を自動的に行いたいと思っています。 元データ       一回目     二回目    │A│        │A│      │A│    │列│       │列│     │列│   ─┼─┼─  ──┼─┼  ──┼─┼ 1行 │k │    3行│m│   2行│d │ ──┼─┼─  ──┼─┼  ──┼─┼ 2行 │d │    5行│z │   4行│r │ ──┼─┼─  ──┼─┼  ──┼─┼ 3行 │m │    8行│e │   6行│p │ ──┼─┼─  ──┼─┼  ──┼─┼ 4行 │r │    9行│f │   7行│s │ 例えば、上記の元データのようにデータ(小文字アルファベット)を入力し、その後一回目、二回目・・・とデータの並べ替えを繰り返し、その都度上から二段目のデータのセルのデータ(この場合それぞれz、r)を取得して変数xに収めるという作業を繰り返し自動的に行うようにしたいのですが、「x=Cells(2,1)」とマクロを書くと非表示になっているセルA2のデータ(この場合d)を常に取得してしまいうまくいきません。 これはどのような方法で解決できるのでしょうか。 OSはWindows2000、ExcelはExcel2000を使っています。 よろしくお願いします。

  • マクロ 書式の条件に合致したら〇をつける

    添付をご覧ください。 A~C列、D~F列、G~I列、それぞれの3グループのうち、1行ずつで、色塗りがあり、かつ太字フォントがあれば、J列に〇を付けるというマクロが知りたいです。添付の例だとJ10に〇が付きます。分かりにくいですが、赤と緑のフォントが太字で、どちらも含める、色は3色あり、すべて含める、としたいので、「色塗りで太字なら、」で大丈夫です。エクセル2013使用です。

専門家に質問してみよう