アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル2003です。

ある集計表において
4行目のH列からAM列まで
数値データがあります。
最終行は常に変化します

この表内にてセルの値が0のセルは
セル内を空白にしたいです。
以下のマクロを作成しましたが

If Cells(処理行, 8).Value = 0 Then
Cells(処理行, 8).ClearContents

をあと(処理行, 13)から(処理行,31)
まで記述しなければなりません。
構文的にも処理的にも不利?
と思うので、なにかいい方法を教えてください。

Sub 数字0クリア()

'2012年2月3日節分

Dim 最終行

'最終列をG列で求めます
最終行 = Cells(Rows.Count, 7).End(xlUp).Row
Application.ScreenUpdating = False

For 処理行 = 4 To 最終行

If Cells(処理行, 8).Value = 0 Then
Cells(処理行, 8).ClearContents
End If

If Cells(処理行, 9).Value = 0 Then
Cells(処理行, 9).ClearContents
End If

If Cells(処理行, 10).Value = 0 Then
Cells(処理行, 10).ClearContents
End If

If Cells(処理行, 11).Value = 0 Then
Cells(処理行, 11).ClearContents
End If

If Cells(処理行, 12).Value = 0 Then
Cells(処理行, 12).ClearContents
End If

If Cells(処理行, 13).Value = 0 Then
Cells(処理行, 13).ClearContents
End If
Next 処理行

Application.ScreenUpdating = True

MsgBox "終了しました"

End Sub

A 回答 (5件)

'列の分の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と変化していきます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/06 08:23

No4です。

失礼しました
Columns("H:M").Replace "0", "", xlWhole
で試してみてくださいね。

Columns("H:M").Replace "0", ""
なら、30 とかの 0まで消えてしまいますので。
    • good
    • 0
この回答へのお礼

Columns("H:M").Replace "0", "", xlWhole

はい、これは気がついていました。
データ内には
1.04
とか0.05
とか400とかありますので。
ありがとうございました。

お礼日時:2012/02/06 08:34

既に回答が出ていますが、


For(繰り返し)の勉強なら
縦方向の繰り返しの中に横方向の繰り返しを加えることになりますね。

ただ、やりたい内容を
H~M列に含まれる 0 を空白に置き換える
と考えると(たぶん、最終列の取得も不必要では?)

Columns("H:M").Replace What:="0", Replacement:=""

の一行で済むのではないでしょうか?

それで足りるかどうかは
マクロの記録で
H~M列の選択 置き換え の実行で
試してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/06 08:36

わざわざVBAでクリアする必要があるのでしょうか?


事前にセルの書式設定で0を非表示するだけで十分の様な気がします。
ユーザ定義で「G/標準;-G/標準;」で設定で如何でしょうか
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/03 16:58

「置換」機能を使うのが、簡単だと思います。



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
    • good
    • 0
この回答へのお礼

Range(Cells(4, 8), Cells(最終行, 13)).Replace 0, "", xlWhole

Range(Cells(4, 8), Cells(最終行, 39)).Replace 0, "", xlWhole

であっという間に完了しました。

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

お礼日時:2012/02/03 19:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A