• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セルの値が0はクリアするマクロ)

セル内の値が0のセルをクリアするマクロ

このQ&Aのポイント
  • エクセル2003の集計表において、セル内の値が0のセルを空白にするマクロを作成しました。
  • 特定の範囲のセルに対して、値が0である場合にセルをクリアする処理を行います。
  • マクロを使用することで、手作業で値が0のセルを探し、クリアする手間を省くことができます。

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

  • ベストアンサー
  • mar00
  • ベストアンサー率36% (158/430)
回答No.3

'列の分のFor~Nextを追加してやれば1箇所分だけ記述するだけで済みます。 Sub 数字0クリア() '2012年2月3日節分 Dim 最終行 '最終列をG列で求めます 最終行 = Cells(Rows.Count, 7).End(xlUp).Row Application.ScreenUpdating = False For i = 8 To 39 For 処理行 = 4 To 最終行 If Cells(処理行, i).Value = 0 Then Cells(処理行, i).ClearContents End If Next 処理行 Next i End Sub 'For i = 8 To 39で列の変数を設定してやる(H列からAM列まで) 'For 処理行 = 4 To 最終行の処理が終わるとiが8、9、10と変化していきます。

gx9wx
質問者

お礼

For Next の中でもう1回 For Next をまわすんですね。 うまく出来ましたね。 ありがとうございました。

その他の回答 (4)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

No4です。失礼しました Columns("H:M").Replace "0", "", xlWhole で試してみてくださいね。 Columns("H:M").Replace "0", "" なら、30 とかの 0まで消えてしまいますので。

gx9wx
質問者

お礼

Columns("H:M").Replace "0", "", xlWhole はい、これは気がついていました。 データ内には 1.04 とか0.05 とか400とかありますので。 ありがとうございました。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

既に回答が出ていますが、 For(繰り返し)の勉強なら 縦方向の繰り返しの中に横方向の繰り返しを加えることになりますね。 ただ、やりたい内容を H~M列に含まれる 0 を空白に置き換える と考えると(たぶん、最終列の取得も不必要では?) Columns("H:M").Replace What:="0", Replacement:="" の一行で済むのではないでしょうか? それで足りるかどうかは マクロの記録で H~M列の選択 置き換え の実行で 試してみてください。

gx9wx
質問者

お礼

システムから吐き出されたデータは 列AMまでしかないので Columns("H:AM").Replace What:="0", Replacement:="" で行いました。 NO.5で月頂いた件はきがついていましたので Columns("H:AM").Replace "0", "", xlWhole で行いました。 ありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

わざわざVBAでクリアする必要があるのでしょうか? 事前にセルの書式設定で0を非表示するだけで十分の様な気がします。 ユーザ定義で「G/標準;-G/標準;」で設定で如何でしょうか

gx9wx
質問者

お礼

教えていただいた方法でできました。 最初に説明しなくてすいません。 確かに非表示ですが セル内にデータが0として存在しているので まずいです。 この表はシステムから毎夜夜間バッチで出力されるので 毎日、この作業が必要でして マクロ化を考えました。 ありがとうございました。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

「置換」機能を使うのが、簡単だと思います。 Sub 数字0クリア() '2012年2月3日節分 Dim 最終行 '最終列をG列で求めます 最終行 = Cells(Rows.Count, 7).End(xlUp).Row Application.ScreenUpdating = False '0のセルを置換で消す Range(Cells(4, 8), Cells(最終行, 13)).Replace 0, "", xlWhole Application.ScreenUpdating = True MsgBox "終了しました" End Sub

gx9wx
質問者

お礼

Range(Cells(4, 8), Cells(最終行, 13)).Replace 0, "", xlWhole ↓ Range(Cells(4, 8), Cells(最終行, 39)).Replace 0, "", xlWhole であっという間に完了しました。 ありがとうございました。

関連するQ&A