「教えて!ピックアップ」リリース!

初心者です。

エクセルのあるボタンを押すと指定のセルが黄色、
またあるボタンを押すと指定のセルがグレーになるようにしたいです。

指定のセルというのが、
2行のセルが統合されています。
また、ボタンを付けたいのはTの行、
色を変えたいのはそのTのボタンがあるところの左全部()AからSの列)です。

その時々で、いろを変えたい行がちがうので、
T行の上に黄色、下にグレーボタンを作り、
いずれかのボタンを押すとその左側全部いろを変えれるようにしたいのです。

説明が下手ですみません。
お力を貸してください。

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

  • ありがとうございます。
    セルは、行が2行つづセル統合されていて、
    幅は、(A)(B)(C)(D)(E.F)(G.H)(I.J.K.L.M)(N.O.P.Q.R)(S)で分かれています。

    ボタンを押すと、
    この統合された2行と、AからSのセルを黄色かグレーに変えたい。
    ただ、時によって
    1.2の行だったり、36.37の行だったりと様々ですので、
    1.2のAからSのセルにいろを変えるときは、T1.2を押すと色が変えられればいいかな?と思っています。

    このようなことは実際できますか?
    参考にとコードを書いてくださったものの、
    初心者すぎて理解できていません。

    もう一度、上の状況ならどうすれば良いか教えてください。
    また、ボタンの作り方も教えてくださると嬉しいです。

      補足日時:2020/04/22 17:09
  • すごいです!
    ありがとうございます!!!
    思ってたのができました。
    お陰様でボタンも自分で作れました。

    セルが無駄に結合されているのは、
    意見を言えない先輩方何故かこう言う謎なセル結合をしていたんです…
    結構、行の統合は消していいよー!と言われましたが…

    あとすみません。
    グレーをRGB217.217.217のこの色より少し薄めの色に変えたいのですが、自分なりにいじってみたら
    黄色、黄色、透明になってしまいます。

    どこを変更すれば良いですか?
    自分でも触ったり調べてみます。

      補足日時:2020/04/23 14:36

A 回答 (5件)

こんにちは、


>黄色、黄色、透明になってしまいます。
これは、エラーが発生しているためです。
Interior.ColorIndex = 6 (黄色) この6は、カラーインデックスの6番を指しています。
RGBでこれを指定する場合は、Interior.Color カラーで直接指定します。(インデックスではありません)
該当箇所を書き換えると、、になります。

  Select Case Number
    Case 0
      Rng.Interior.Color = RGB(255, 255, 0) ’黄色
      Number = 15
    Case 15
      Rng.Interior.Color = RGB(217, 217, 217) ’グレー
      Number = 1
    Case Else
      Rng.Interior.ColorIndex = 0
      Number = 0
  End Select

RGBの見本は、検索すると多くヒットすると思いますので参考にされてください。
    • good
    • 0

ボタンの作り方解りましたか?


#3画像忘れましたので参考に
「エクセル ボタンを押すとセルの色が変わる」の回答画像4
    • good
    • 0

追記します。


補足での条件で実行する場合、内容の理解は、必要が出た時に学習してください。
T列のセルにボタンが設置されR列の結合セル行に準じ色がつけられます。

R列の行結合範囲は、任意の行数でOK、ボタンは、対応R列結合セル範囲内に設置する

Sub Smple()
  Static Number As Long
  Dim r As Long, r1 As Long, r2 As Long
  Dim MrgCel As String
  Dim Rng As Range
  On Error Resume Next
  r = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
  MrgCel = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
  If Range(MrgCel).Offset(, -2).MergeArea.Count > 0 Then
    r1 = Range(MrgCel).Offset(, -2).MergeArea(1).Row
    r2 = r1 + Range(MrgCel).Offset(, -2).MergeArea.Rows.Count - 1
    Set Rng = Range("A" & r1 & ":S" & r2)
  Else
    Set Rng = Range("A" & r & ":S" & r)
  End If
  Select Case Number
    Case 0
      Rng.Interior.ColorIndex = 6
      Number = 15
    Case 15
      Rng.Interior.ColorIndex = 15
      Number = 1
    Case Else
      Rng.Interior.ColorIndex = 0
      Number = 0
  End Select
  Set Rng = Nothing
End Sub

結合セルがあるとこんなにややこしくなります。
やはり、結合セルを作らない表組が良いですね。。
    • good
    • 0

#1です。


列の結合に付いては、今回の処理では影響されません。
問題は、行です。
#1に示した処理を追って説明します。(この場合、ボタンは対象セルに1つです)
Static Number As Long  Numberは変数で数値の入れ子です。
通常、End Sub 処理が終了すると変数は初期化されますが、Staticの為、維持されます。(特殊な場合を除き)
On Error Resume Next はエラー対策

r = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row は、ボタンの位置をTopLeftCell.Rowで取得します。セルの行番号です。

Select Case Number 先ほどの変数の値で処理を分けます。

Case 0 変数が0だった場合
      Range("A" & r & ":S" & r).Interior.ColorIndex = 6 A列からS列のセルの色を6 =黄色に設定しています。
      Number = 15 次のボタンクリックに備え変数の値を変えています。


問題の場所は、r = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row です。

縦方向の結合セルは一番左の一番上がインデックス1番のアドレスになるので
1行目2行目が結合されている場合にボタンが、2行目に設置されていると 変数 r は2になりますが、結合セルのインデックス一番のアドレスは1なので
2行目も結合されているにも関わらず、色が変わりません。

使用になりたい目的などを把握できないのですが、結合セルの上の行にボタンを設置すれば、結合セルも色が変わります。
画像参照
なんかかっこ良くないかと思いますね。 r2を作り、結合セルをMergeCellsなどで確認して r2 などを変える方法も浮かびますが。。
取敢えず。

>もう一度、上の状況ならどうすれば良いか教えてください。
どうすれば良いかを経験上、進言すると、結合セルは使わない方が良いです。少なくとも作業シートでは。
どうしても使う必要があるケースは少ないと思います。(印刷や配布PDFなど閲覧するシートくらいかな?)
表組や項目、シート分けなどがExcelのツボになります。初歩的な事ですが、ここをしっかり学習するとすべてにおいて良い知識になりすので

>また、ボタンの作り方も教えてくださると嬉しいです。
なるほど、、 ご自分で調べる癖も付けるべきと考えます。こちらを参考にしてください。
https://kokodane.com/macro9_2.htm
「エクセル ボタンを押すとセルの色が変わる」の回答画像2
    • good
    • 0

こんにちは、結合セルがどの様になっているか分からないのですが


参考のコードを書きました。
T列対象セル内にボタンを設置して(ボタンは1つ)複数回押す事で色を変化させます。
ボタンの設置セル行の取得方法や色を付けるところなどのコードが参考に成ればと思います。

Sub Test()
  Dim r As Long
  Static Number As Long
  On Error Resume Next
  r = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
  Select Case Number
    Case 0
      Range("A" & r & ":S" & r).Interior.ColorIndex = 6
      Number = 15
    Case 15
      Range("A" & r & ":S" & r).Interior.ColorIndex = 15
      Number = 1
    Case Else
      Range("A" & r & ":S" & r).Interior.ColorIndex = 0
      Number = 0
  End Select
End Sub
    • good
    • 0
この回答へのお礼

お礼が遅くなってしまい申し訳ありません。詳しく教えて下さり、活用しております。ありませんございました。また何かありましたら宜しくお願いします。

お礼日時:2020/05/15 12:39

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング