• ベストアンサー

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

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

  • ベストアンサー
  • higekuman
  • ベストアンサー率19% (195/979)
回答No.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 を試してみたところ、黒いセルのすべてに"-"が入りましたよ。

pleaseans
質問者

お礼

ありがとうございました(*Θ_Θ*) 解決しました

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

セルを結合して結合されている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

pleaseans
質問者

お礼

左肩のセルを取り出す関数があるんですね! これで左肩のセルをT33:BA74 の範囲でループさせることは可能でしょうか?

  • higekuman
  • ベストアンサー率19% (195/979)
回答No.2

結合範囲の最初のセルにしか"-"入らない、ということですが、どのようなことで困っていますか? 結合しているんだから、最初のセル以外に何かが入っていたとしても、見えませんよね?

pleaseans
質問者

補足

私の説明がたりなかったようです。 このプログラムではT33:BA74 の範囲の黒い部分の最初のセルしか"-"が入らないといういう意味です。 分岐条件(If C.Interior.ColorIndex = 1)を満たし、次の結合セルに移動してくれないということです。 このような説明で大丈夫でしょうか?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

これはExcelの仕様のようですよ A1:C1に 『1』『1』『1』と入力して セルの結合をしてみてください アラートが出ると思います その文言の中に『左上のセルのデータのみ保持されます』とあります つまり A1セル以外のデータは削除されてしまいます このアラートで OKを押してから A10セル選択 =A1、B10を選択 =B1、C10を選択 =C1 と入力 結果は 『1』『0』『0』になると思います

pleaseans
質問者

お礼

回答ありがとうございます。 指摘いただいたとおりでした。 ではVBAで結合セルの処理は不可能ということでしょうか?

関連するQ&A