• 締切済み

選択セルに色がついている場合に削除して左へ移動

選択しているセルに色(具体的には何色でもいいのですが、初期設定は黄色)がついているセルを削除して左に移動するマクロを作りたいです。 想定しているのは、 1.選択する行は1列に限定(たとえば、A列) 2.上から順番に色がついているか判定 3.色がついていれば、セルを削除(左側へずれる) 4.次の行の判定(1に戻る) 5.選択しているセルの一番最後まで来たらマクロを終了する という具合のマクロを作りたいのですが、マクロの記録でわかるのは3の行を削除するところだけでした。 繰り返しと選択しているセルの判定がよくわからないのですが、どのようにすれば実現可能かお教えください。 -- Sub 選択セルにいろがついている場合() '【選択したセルに色がついているか判定】 '色がついているときは、削除する Selection.Delete Shift:=xlToLeft '【次のシートへ移る・選択している最後まで繰り返す】 End Sub

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 横からお邪魔します。 >【次のシートへ移る・選択している最後まで繰り返す】 とありますので、 Sheet見出しの一番左側から最終SheetまでのA列「黄色」セルを削除するようにしてみました。 標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub Sample1() Dim i As Long, k As Long For k = 1 To Worksheets.Count 'Sheet見出しの一番左から最後のSheetまで With Worksheets(k) For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row '1行目~A列最終行まで If .Cells(i, "A").Interior.ColorIndex = 6 Then '←黄色だけ .Cells(i, "A").Delete shift:=xlToLeft End If Next i End With Next k End Sub ※ 「選択されている列」ではなくA列としています。 ※ 手作業で黄色に塗りつぶされているセルが対象です。 (条件付き書式で色がついている場合は反応しません)m(_ _)m

r2san
質問者

お礼

すばらしいご回答ありがとうございます。 A列を指定したい列に換えれば応用がきききれいなフォームありがとうございました。 しっかり復習します

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

ご利用のエクセルのバージョンが不明のご相談ですが、たとえばエクセル2007以降を用いてオートフィルタを使ってセルの色で絞り込み、まとめて選択して左に詰めるといった手順でも実現できます。 今回はとりあえず「繰り返す」「判断(分岐)する」といったマクロの基本構文について勉強したいというお話なので、こんな具合にします。 sub macro1()  dim h as range  for each h in range("A1:A" & range("A65536").end(xlup).row)   if h.interior.colorindex <> xlnone then    h.delete shift:=xlshifttoleft   end if  next end sub それぞれの命令の詳細については、この程度の内容はどんな「初めてのExcel VBA」タイプの参考書にも判りやすく書いてあるので、いちど書店で手に取って勉強してみて下さい。

r2san
質問者

お礼

すばらしいご回答ありがとうございました。 構文としては、理解できるのですがどうやってこのマクロを書いていいのかわからないレベルです。 最初にご指摘いただきました、オートフィルタで抽出一括して削除する、という方法もExce2007で試してみたのですが、うまくいきませんでした。(一括して削除のメニューが出ませんでした)

関連するQ&A

専門家に質問してみよう