- ベストアンサー
VBAでの背景色分岐後の結合セルの処理について
VBAで対象範囲の背景色が黒の部分のみ"-"をいれるという処理をしたいのですが、ループがうまく動いておらず最初のセルのみ"-"が入った状態です。 ※対象範囲のセルは3列ずつ結合されています コードは以下になります。VBA初心者のため、初歩的な質問かもしれませんがご回答よろしくお願いいたします。 Private Sub CommandButton1_Click() Dim C As Range Sheets("sheet1").Select T33:BA74 の範囲を1セルずつ繰り返す For Each C In Range("T33:BA74") セルが黒のとき If C.Interior.ColorIndex = 1 Then C.Value = "-" end If '次のセルへ Next End Sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
A1:F10の範囲で、 [A1+B1][C1+D1][E1+F1] [A2+B2][C2+D2][E2+F2] : [A10+B10][C10+D10][E10+F10] というようにセルを結合して、[E3+F3][A4+B4][C6+D6]を黒くして、 Dim C As Range For Each C In Range("A1:F10") If C.Interior.ColorIndex = 1 Then C.Value = "-" End If Next を試してみたところ、黒いセルのすべてに"-"が入りましたよ。
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
セルを結合して結合されている2番目3番目のセルを参照するような場合を想定しているのでしょうか それならユーザー関数を使って左肩のセルを取り出してやればいいように思います Function GetTopLeftCell( r as Range) as Range if r.MergeCells = false then ' 結合していないので そのままrを返す Set GetTopLeftCell = r else Set GetTopLeftCell = r.MergeArea.Reange("A1") end if End Function
お礼
左肩のセルを取り出す関数があるんですね! これで左肩のセルをT33:BA74 の範囲でループさせることは可能でしょうか?
- higekuman
- ベストアンサー率19% (195/979)
結合範囲の最初のセルにしか"-"入らない、ということですが、どのようなことで困っていますか? 結合しているんだから、最初のセル以外に何かが入っていたとしても、見えませんよね?
補足
私の説明がたりなかったようです。 このプログラムではT33:BA74 の範囲の黒い部分の最初のセルしか"-"が入らないといういう意味です。 分岐条件(If C.Interior.ColorIndex = 1)を満たし、次の結合セルに移動してくれないということです。 このような説明で大丈夫でしょうか?
- redfox63
- ベストアンサー率71% (1325/1856)
これはExcelの仕様のようですよ A1:C1に 『1』『1』『1』と入力して セルの結合をしてみてください アラートが出ると思います その文言の中に『左上のセルのデータのみ保持されます』とあります つまり A1セル以外のデータは削除されてしまいます このアラートで OKを押してから A10セル選択 =A1、B10を選択 =B1、C10を選択 =C1 と入力 結果は 『1』『0』『0』になると思います
お礼
回答ありがとうございます。 指摘いただいたとおりでした。 ではVBAで結合セルの処理は不可能ということでしょうか?
お礼
ありがとうございました(*Θ_Θ*) 解決しました