https://oshiete.goo.ne.jp/qa/9983012.html ← 前回この質問をし、解決しましたが、追記で

教えて頂きたいことがあります。

図の赤枠のデータを現在の「色分け」シートから「シート1」に移動し、「色分け」シートの
色付けたいです。
前回教えて頂いたコードをどのように修正すれば良いですか?

宜しくお願い致します。

「色を変えるマクロで参照しているデータの場」の質問画像

質問者からの補足コメント

  • うれしい

    返信が遅くなりすみません。

    またまた、ご丁寧にありがとうございます。

    >「色分け表」の配置は画像通りでシート1のD15~I26セルの範囲に作成してあるとします。
     はい。この範囲で大丈夫です。

    >※ コマンドボタンでなくても「シート1」のシートモジュールで構いません。
       もうひとつのモジュール(マクロ)に追記でも大丈夫ということですね。
    >※ 「色分け」シートの項目が表内にない場合、そのセルの色は「塗りつぶしなし」にしています。
       はい、そうです。

    このコードで、仕事の動作がすっきりしました。まさにこの通りにしたかったので
    とてもうれしいです。

    もし、「色分け」シートの「B列」を削除した場合のコードを教えて頂けると嬉しいです。
    色んなデータに対応できるパターンを知っておきたくて。

    もし、お時間があればで構いません。

    よろしくお願い致します。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/10/13 18:48
  • うーん・・・

    すみません、超・超初心者なので 理解が出来ていませんでした。「シート1」の「シートモジュール」→「コードの表示」を開き、そこにコードを貼り付けました。 ですが、色分けを開始する、ボタンに「マクロの登録」をしようとしましたが、何も表示されません。毎回「コードの表示」を開き「実行」を押すのでしょうか?

    >For j = 3 To wS.Cells(1, Columns.Count).End(xlToLeft).Column
    の「3」を「2」に変えるだけでいけるはずです。←こちらは理解できました!

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/10/13 21:33
  • うーん・・・

    NO.4~NO.6まで回答ありがとうございます。

    NO.5とNO.6を試して、色分けをボタンを使って出来ました。ボタンを使いたかったんです(#^.^#)

    したい作業をまとめると、「シート1」のある2つのマクロボタンAとB(A:色分け B:別の作業)を使って作業する。
    まず、①Aボタン「シート1」で「シート色分け」の作業をする。②Bボタン「シート1」の別の作業をする(標準モジュール使用 module1)

    NO.5とNO.6で色分けは上手く出来たのですが、②のボタンが起動しないので、デザインモードでダブルクリックしVBAを開くと ①と②のコード画面が表示されます。この後の設定が上手く出来なくて・・・・AボタンとBボタン使い分けしたいです。

    説明が下手くそですみません。宜しくお願い致します。

    No.6の回答に寄せられた補足コメントです。 補足日時:2017/10/14 11:26

A 回答 (7件)

どうも失礼しました。


No.5で抜けていた部分があります。

①の場合、ActiveXコントロールのコマンドボタンを挿入後、ボタン上でダブルクリックが必要でした。
そうしないとVBE画面が表示されません。

②は大丈夫だと思います。m(_ _)m
この回答への補足あり
    • good
    • 0

>②のボタンが起動しないので、デザインモードでダブルクリックしVBAを開くと ①と②のコード画面が表示されます。



コマンドボタンをクリックしたときのイベントなので
当然同じ画面に表示されるはずです。

Private Sub CommandButton1_Click()
End Sub

Private Sub CommandButton2_Click()
End Sub
のように二つのコードが存在していませんか?
(Aボタン・Bボタンのコード)

それぞれのボタンをクリックした場合のコードを
Private Sub ○○○()

End Sub
の間に記載すれば、お望みの動きになると思いますが・・・

おそらくどちらか一方が
Call ○○
(○○は標準モジュールにあるマクロ名)

といったコードになるのでは?m(_ _)m
    • good
    • 0
この回答へのお礼

こんばんは。

>おそらくどちらか一方が
 Call ○○
(○○は標準モジュールにあるマクロ名)

そうですね。色々触って、Private Sub CommandButton1_Click()・・・End Subの方は、「ActiveX」でボタンと作り、もう一つのボタンは
挿入からボタンを作り、「マクロの登録」をし直して起動させる事が出来ました。

色々と面倒なことを丁寧に教えて頂いて助かりました。 超・超初心者なのでVBAを学びたいなと思うのですが、独学だと難しいですよね・・・

お礼日時:2017/10/14 23:58

何度もごめんなさい。



もう一度補足を読み返してみて・・・
結局「シート1」にコマンドボタンを挿入する方法がお望みだったのですかね?

① コマンドボタンの場合
メニュー → 開発 → 挿入 → コマンドボタン(ActiveXコントロールのコマンドボタンの方が良いと思います。)を選択

>Private Sub CommandButton1_Click()
>|
>End Sub

となりますので、カーソル部分に前回のコード(1行目と最終行「End Sub」がダブらないように)
デザインモードを解除
これでコマンドボタンをクリックすれば大丈夫のはずです。

② オートシェイプにマクロの登録をする場合
メニュー → 挿入 → 図形から好みのオートシェイプを挿入 → 挿入したオートシェイプ上で右クリック → マクロの登録 → 新規作成
あとは①と同じです。

こちらの方が良かったのでしょうか?m(_ _)m
    • good
    • 0

続けてお邪魔します。



前回のコマンドボタンのコードを「シート1」のシートモジュールにする方法ですね。
マクロの登録ではなく、ご自身でコードを記載しなければなりません。

画面左下の「シート1」のシート見出し上で右クリック → コードの表示 → VBE画面にカーソルが点滅していますね。
そこにご自身で「マクロ名」を入力します。
たとえば「色付け」というマクロを登録したい(作りたい)場合は
(マクロ名は好きな名前で構いません)

sub 色付け と入力 → Enter (「sub」の後には必ず半角スペースを入れます)
これで

>Sub 色付け()
>| (←ココにカーソルが点滅する)
>End Sub

となり行間にカーソルが点滅しているはずです。
そこへNo.2のコードの最初の行(Private Sub CommandButton1_Click())と
最後の行(End Sub)以外の行をコピー&ペーストします。

これで「色付け」というマクロが「シート1」のシートモジュールとして出来上がりましたので
マクロを実行したい場合は
Alt+F8キー → お作りになったマクロ名が並んでいる場合は実行したいマクロをクリック → 実行

これで選んだマクロが実行されます。

※ 標準モジュールにマクロがある場合もここに表示されます。

尚、No.2のコードは
>With ActiveSheet・・・
としていますので、必ず「シート1」をアクティブにしてマクロを実行してみてください。

※ 余談ですが、Changeイベント、ダブルクリックイベントなどシートモジュールにしなければならない場合
も各シートのシートモジュールにします。m(_ _)m
    • good
    • 0

No.1です。



>もうひとつのモジュール(マクロ)に追記でも大丈夫ということですね。
追記とは「シート1」のシートモジュールに追記!という意味ですかね?
当方の記憶では
標準モジュールのマクロを呼び出すだけのコードだったような気がするのですが・・・
今回のコードであればもちろん標準モジュールのコードは不要ですし、
そのマクロを呼び出すシートモジュールも不要です。

>もし、「色分け」シートの「B列」を削除した場合・・・
というコトは色を付ける列はB列以降になる!というコトでしょうか?

そうであれば、コード内の
>For j = 3 To wS.Cells(1, Columns.Count).End(xlToLeft).Column
の「3」を「2」に変えるだけでいけるはずです。

「3」とはC列の列番号なので
C列から1行目最終列まで!
という意味なので・・・m(_ _)m
この回答への補足あり
    • good
    • 0

こんにちは!



前回、回答した者です。
今回の質問は「シート1」にコマンドボタンなりを配置し、クリックすると「色分け」シートの1行目項目セルの色を変えたい!
というコトですね。

前回は少し手抜きをして、標準モジュールに記載したコードをそのまま利用するようにしていましたが、
「シート1」のコマンドボタンにそのままコードを記載すれば大丈夫だと思います。
尚、「色分け表」の配置は画像通りでシート1のD15~I26セルの範囲に作成してあるとします。

コマンドボタンのコードを↓にしてみてください。

Private Sub CommandButton1_Click()
Dim j As Long, c As Range
Dim myRng As Range, wS As Worksheet
Set wS = Worksheets("色分け")
With ActiveSheet
Set myRng = .Range("E16:I26")
For j = 3 To wS.Cells(1, Columns.Count).End(xlToLeft).Column
Set c = myRng.Find(what:=wS.Cells(1, j), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
wS.Cells(1, j).Interior.Color = .Cells(c.Row, "D").Interior.Color
Else
wS.Cells(1, j).Interior.Color = xlNone
End If
Next j
End With
End Sub

※ コマンドボタンでなくても「シート1」のシートモジュールで構いません。
※ 「色分け」シートの項目が表内にない場合、そのセルの色は「塗りつぶしなし」にしています。

こんな感じではどうでしょうか?m(_ _)m
この回答への補足あり
    • good
    • 0

一つずつ自力で参照先の記述を修正するしかないんですけど(´・ω・`)



絶対参照なのか相対参照なのか、演算で参照先を求めているのか分かりませんが、
やり方に応じた修正をしましょう。
    • good
    • 0

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


人気Q&Aランキング