ここから本文です

VBAで空白を埋める方法について sub test ( ) Dim a As String Dim r As ...

mau********さん

2018/6/2020:03:59

VBAで空白を埋める方法について

sub test ( )

Dim a As String

Dim r As Range

a = "A1:C" & ("C" & Format(Rows.Count)).End(xlUp).Row

For Each r In Range(a)

If r.Value = "" Then r.Value = r.Offset(-1,0).Value

Next

End If

↑このコードで穴埋めはできたのですが、
0から始まる数値の0が消えてしまいました。

001 → 1

となります。

0を残したままの状態の数値で穴埋めしたいのですが、可能でしょうか。

閲覧数:
87
回答数:
3
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

アバター

ID非公開さん

2018/6/2105:53:01

これって、ExcelのVBAでしょうか?
Excelだと、A1:C1セルには必ず何か入っていないとエラーになると思いますが、A1:C1が空(あるいは空文字列)ということはないということなのでしょうか?

Sub test()
Dim r As Range
For Each r In Range(Range("A2"), Cells(Rows.Count, "C").End(xlUp))
If r.Value = "" Then r.FillDown
Next
End Sub

くらいでいいように思います。

質問した人からのコメント

2018/6/21 19:29:06

ご回答頂いた内容で思っていた事ができました。
ありがとうございました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

db1********さん

2018/6/2109:12:29

空白のセルには、r.Value = r.Offset(-1,0).Valueによって、前行の値が代入されますが、書式までコピーされるわけではないです。もし、前セルの書式情報を持ってきたいなら、書式をコピーする必要があります。ですが、あらかじめ設定する書式が分かっているなら、その書式をマクロ内で設定してやれば良いとも言えます。
この書式の再設定を空白が見つかった毎に行うのか(1)、値代入の処理が終わってから、一括で書式の再設定を行うか(2)、いろいろあります。

例:

(1)
For Each r In Range(a)
If r.Value = "" Then
r.Value = r.Offset(-1, 0).Value
r.NumberFormatLocal = "000"
End If
Next

(2) for~nextの後に、下記を追加
Range(a).NumberFormatLocal = "000"


注:aの代入文は下記のようにしないとエラーになりました。
a = "A2:C" & Range("C" & Format(Rows.count)).End(xlUp).Row ' ★

注2:ご参考
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q121386390...

プロフィール画像

カテゴリマスター

aka********さん

2018/6/2020:59:44

それは 消えたのではなく セルの表示形式が 標準のセルに移っただけです。
全セル000の 形でいいのなら セルの書式設定を 000 と すれば いい

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる