• ベストアンサー

エクセルのマクロ

Sub test() x = Selection.Row y = Selection.Column z = Selection.Columns.count Range(Cells(x, y), Cells(x, y + z - 2)).Select Selection.ClearContents End Sub 上記マクロは、同一行の連続するセルを二つ以上選択状態にして実行すると、範囲内の最も右にあるセルの値のみが残って他のセルの値は全て消去されます。 上記マクロを、複数のセレクションに対して対応できるようにするには、どうすればいいでしょうか? 例えば、c1~f1、d3~h3、e10~g10を選択して実行すると、f1とh3とg10の値のみ残って他の値は消えるということです。

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

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.1

こんにちは。 こんな感じでいかがでしょうか。  Sub test()  Dim myRange  For Each myRange In Selection.Areas   If myRange.Columns.Count > 1 Then    myRange.Resize(, myRange.Columns.Count - 1).ClearContents   End If  Next  End Sub

naruue
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

Sub test01() Dim cl As Range Set m = Selection(1) For Each cl In Selection If m.Row = cl.Row Then Range(m.Address).Value = "" Else End If Set m = cl Next End Sub CTRLキーを使ってセルを指定する。 その場合飛び飛び行をも指定する。 そして実行する。 データ aa sd ss 2 23 23 11 234 22 63 結果 == sd == == 23 == == == 22 63 (=は、OKWAVE回答画面で左に寄ってしまうことの防止のため入れたもの、実際は空白)

naruue
質問者

お礼

ありがとうございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

もしその用途が、表の中でタイトルや関数式は残して入力した数値だけ消したいとかなら、SpecialCellsが使えます。 下記の例は選択した範囲内の数値だけを消します。 Sub Test()  On Error Resume Next  Selection.SpecialCells(xlCellTypeConstants, xlNumbers).ClearContents End Sub

naruue
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう