
セルA1に0を入力し
書式設定で日付→yyyy/m/dを選択しました。
しかし下記のマクロ実行しても
0が空白になりません。
Sub 日付置換()
Cells.Replace what:="1900/1/0", Replacement:="", LookAt:=xlPart
Cells.Replace what:="00/01/00", Replacement:="", LookAt:=xlPart
Cells.Replace what:="0", Replacement:="", LookAt:=xlWhole
End Sub
なら最初から0なんか入力しなきゃいいじゃん。
と思われるかもしれませんが
これはCSVファイルで出力したもので
最初から0の数値にも書式設定がかかってて「1900/1/0」となっています。
「1900/1/0」のデータをなくしたいのですが
どんな方法がありますか?
データ量が多いためマクロなどで一度に行ないたいです。
アドバイスよろしくお願いします。
No.9
- 回答日時:
こんにちは。
#5の回答者です。
少し、読み直し、いろいろ考えてみました。
>これはCSVファイルで出力したもので
>最初から0の数値にも書式設定がかかってて「1900/1/0」となっています。
たぶん、マクロか何かでインポートしているのでしょうか?
書式設定が掛かっているかは別として、型キャストが起きていれば正しい日付値になっているはずです。しかし、「1900/1/0」が存在していますから、どうやらワークシート上では、日付値にもなっていないはずです。つまり、型キャスト(該当する書式で値が変更)が、おきていないようです。
テキストのソースのまま、処理しても可能だと思うのですが、CSVは、列に対しては、取り扱いが煩雑になります。だから、ワークシートにインポートし、もう一度、区切り位置で処理すれば、ワークシート上なら、日付書式にならないものは、はじき出されて、文字列になるはずです。それは、手動でも、そんなに大変ではないはずです。
ご質問の要求が、マクロ・コードを書かれていますから、あえてマクロ化しました。
「0」自体は、そのままなら、置換できるはずですから、その部分のコードは書いていません。
こちらの書いた、マクロについては評価しなくても構わないのですが、Excelの持つ機能からの操作は、マクロを使わなくても分かるはずです。ご質問者さんの技術の理解度とは別に、数値と日付値の区分け程度は、VBAで求めた方が良いのではないかなって思います。
'-------------------------------------------
Sub FindStrings()
Dim rng As Range
Dim col As Range
Dim r As Range
With ActiveSheet
Set rng = .Columns("A:B") 'インポートされた範囲
On Error Resume Next
For Each col In rng.Columns
If WorksheetFunction.Count(col) > 1 Then
col.TextToColumns _
Destination:=col.Cells(1, 1), _
FieldInfo:=Array(1, 5)
Set r = col.SpecialCells(xlCellTypeConstants, xlTextValues)
If Not r Is Nothing Then
r.ClearContents '書式はクリアしない・値だけ
End If
End If
Next col
On Error GoTo 0
End With
Set rng = Nothing
End Sub
'-------------------------------------------
No.6
- 回答日時:
回答3、myrangeです。
上手くいったようで何より。。
>一度、"G/標準"にすることにより、0は文字列と認識されて
>Replaceで置換できるのでしょうか?
0は文字列ではなく数値です。
どうもReplace関数について勘違いがあるようです。
●Replace関数は、文字列、数値、どちらでも置換可能●
新しいシートで以下を試してみれば分かるでしょう。
A1とB1に、0
A2とB2に、100
A3とB3に、1020
を入力しておき次を実行
Sub Test()
Range("A:A").Replace What:="0", Replacement:="", LookAt:=xlPart
Range("B:B").Replace What:="0", Replacement:="", LookAt:=xlWhole
End Sub
どうでしょう、0は置換されてるはずです。
これで数値も置換されるということが分かりますね。
また、A列とB列の結果に違いがあることも気付いた思います
これは、引数LookAtの値(xlPart,xlWhole)の違いによります。
質問の件では回答3で示したとおり、xlWholeを使わなければいけません。
理由は分かりますよね。
Replace関数のように引数のある関数を理解するときは
引数の値を変えながら色々試してみることをお勧めします。
以上ここまで。
再度ご回答ありがとうございます。
Replace関数は数値でも文字列でも使えるのですね。
まだよく理解していない為わからないのですが
最初に書式を"G/標準"にするのはなぜなのでしょうか?
質問ばかりですいません、、、
No.5
- 回答日時:
こんばんは。
この出来ないのは、Excel 2000 での仕様だと思っていました。上位バージョンでもメニューから置換する方法は出来るのですが、VBAからはできません。当然と思う方もいるようですが、私は、これは、隠れたバグのようなトラブルのひとつだと思っています。
ただし、置換する方法もあるのですが、ものすごく難しいテクニックが必要になってしまいます。
以下は、数値の1 は、"1900/1/1" と区分けします。
書式は、そのままで行います。
'--------------------------------------------------------
Sub Tes1()
Dim r As Range
Dim c As Range
Const sD1 = "1900/1/1"
Const sD2 = "1900/1/0"
Const sD3 = "0"
With ActiveSheet
On Error Resume Next
Set r = .UsedRange.SpecialCells(xlCellTypeConstants, 23)
If r Is Nothing Then MsgBox "検索対象の数値がありません。", vbExclamation: Exit Sub
On Error GoTo 0
For Each c In r
If StrComp(sD1, c.Text) * StrComp(sD2, c.Text) * StrComp(sD3, c.Text) = 0 Then
c.ClearContents
End If
Next c
End With
Set r = Nothing
End Sub
'--------------------------------------------------------
No.3
- 回答日時:
方法はいくつかあると思いますが、一案。
A列を対象とした場合。
(1)A列の書式を標準にする
(2)0を変換する
(3)A列の書式を、yyyy/m/d に戻す
'-------------------------------------
Sub 日付置換()
Range("A:A").NumberFormatLocal = "G/標準"
Range("A:A").Replace What:="0", Replacement:="", LookAt:=xlWhole
Range("A:A").NumberFormatLocal = "yyyy/m/d"
End Sub
'-------------------------------------
以上ここまで。
できました。
ありがとうございます。
一度、"G/標準"にすることにより、0は文字列と認識されて
Replaceで置換できるのでしょうか?
No.2
- 回答日時:
Replaceは文字に対して有効です。
例えば、102345という「数字」が入っているセルに、ご質問のReplaceを実行しても、0が無くなって12345にはなりませんよね?
日付はエクセルでは特殊なデータですが、どちらかと言えば数字に近いもので、文字ではありません。(計算が可能)
手っ取り早いのは、
「ツール」-「オプション」-「表示」で「ゼロ値」のチェックをはずせば0が表示されなくなります。(2003の場合)
ただし、この方法だと、他のセルに(表示が必要な)数字の0が入っていても表示されなくなってしまいます。
マクロでやる場合は、面倒ですが、各セルの値(または表示文字)をチェックして置き換えてあげる必要がありそうです。
先に、対象になるセルの範囲が限定できれば
For Each Cell In Range
などの方法でループするのがよろしいでしょう。
その範囲内に、普通の数字0(←こちらは消したくない)が含まれているような場合は、表示書式と値の両方をチェックするか、または、表示テキストが
1900/1/0のものを決め打ちで空白にすればよいのでは?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel vba で1と10を正確に判断させる方法を教えてください。 TからU列に1と入力があれば 3 2022/12/26 16:54
- Excel(エクセル) エクセルマクロで教えてください 2 2022/05/04 09:07
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Excel(エクセル) マクロで特定日より1日前の日を求めたい 6 2022/05/08 09:23
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
このQ&Aを見た人はこんなQ&Aも見ています
-
参照先セルに値が入っていない時に、「0」や「1900/01/00」などが入らないようにしたいのですが
Excel(エクセル)
-
31:30:00が1900/1/1 7:30:0
その他(Microsoft Office)
-
日付が未入力の際はゼロか、空白にしたい
その他(Microsoft Office)
-
-
4
エクセルで1月0日と表示される!!
Excel(エクセル)
-
5
参照先は空白なのに、なぜ年月日表示になるのですか?
Excel(エクセル)
-
6
リンク元の日付が空白の時リンク先セルも空白にしたい
Excel(エクセル)
-
7
VBAでの日付の置換方法を教えてください
Excel(エクセル)
-
8
Excel データ抽出 日付 1900/1/0 1月0日
Excel(エクセル)
-
9
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
10
Excel書式設定が24時間以上の設定の時の数式バーの内容について
財務・会計・経理
-
11
【Excel】24:00と表示したい!
Excel(エクセル)
-
12
Excel 関数に詳しい方教えてください。 filter関数を使って、 ・B列のシリアル値の月がA1
Excel(エクセル)
-
13
エクセルの複数のセルを一括で絶対参照にする方法
Excel(エクセル)
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
あるセルに特定の文字列を打つと、他のセルに決められた文字が自動入力するように
Excel(エクセル)
-
16
エクセル 関数 セルの値が0だったら 他の文字を代入する
Excel(エクセル)
-
17
展示会を見に行くことを何という?
その他(ビジネス・キャリア)
-
18
複数のエクセル相対参照を絶対参照に一発変換したい。
Excel(エクセル)
-
19
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
20
エクセルで入力した文字列を他のセルにも自動的に入力できるようにしたいです。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで文字が白くなる
-
エクセル条件付書式で指定の時...
-
エクセルで文字を含む式に、カ...
-
Excelで、空白を表示したい
-
EXCELの散布図で日付が1900年に...
-
アクセスで#エラーを表示させ...
-
エクセルで、時間 0:00を表示...
-
Excelのテーブルでセルの書式設...
-
小数点以下の数字だけ小さいフ...
-
エクセルで上付き,下付き文字...
-
Excel 書式の一致を調べる関数...
-
Access ¥マークを表示しない
-
アルファベットにフリガナ
-
エクセルでゼロ「0」が「-」に表示
-
Googleスプレッドシートで特定...
-
エクセル書式設定。数値桁の先...
-
today関数で日付を全角文字で表...
-
INDESIGNで空改行などのマーク...
-
Excelで勝手に小数点以下が増える
-
強調の・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで文字を含む式に、カ...
-
エクセルで文字が白くなる
-
Excelで、空白を表示したい
-
エクセル条件付書式で指定の時...
-
EXCELの散布図で日付が1900年に...
-
エクセルで、時間 0:00を表示...
-
アクセスで#エラーを表示させ...
-
Excelのテーブルでセルの書式設...
-
小数点以下の数字だけ小さいフ...
-
Excelのセルでの配置です。
-
today関数で日付を全角文字で表...
-
Excel 書式の一致を調べる関数...
-
強調の・
-
Access ¥マークを表示しない
-
Excelで勝手に小数点以下が増える
-
エクセルでゼロ「0」が「-」に表示
-
エクセル書式設定。数値桁の先...
-
excelの軸
-
INDESIGNで空改行などのマーク...
-
TO_CHARでのゼロ非表示について
おすすめ情報