[[20220121001213]] 『M33.1.0の置換』(Tokko) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『M33.1.0の置換』(Tokko)

マクロ初心者です。
A1、B1に表示形式が日付の和暦でM33.1.0とあります。
M33.1.0を×にする置換をマクロの記録で作成しましたが、マクロを実行しても変換されません。
ただ、検索と置換で実行すると変換されます。
どこに原因があるのか、教えて頂けますでしょうか。
よろしくお願いいたします。

マクロの記録
Sub 置換()

    Range("A1:B1").Select
    Selection.Replace What:="1900/1/0", Replacement:="×", LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False

End Sub

< 使用 Excel:Excel2016、使用 OS:Windows8 >


 Sub 置換2()
    With Range("A1:B1")
        .Value = .Value
        .Replace What:="12:00:00 AM", Replacement:="×", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    End With
 End Sub

(通行人) 2022/01/21(金) 00:47


通行人 さま

教えて頂きましたコードで、実行しましたが変換はされませんでした。

(Tokko) 2022/01/21(金) 01:18


 まずA1セルとB1セルの表示形式を標準に変更。
 その後0を×に変更(セル内容が完全に同一であるものを検索にチェックを入れて)して表示形式を和暦に戻す。
 では、どうだろうか? 
(ねむねむ) 2022/01/21(金) 09:28

 おっと
 >その後0を×に変更
 は
 その後0を×に置換
 で。
(ねむねむ) 2022/01/21(金) 09:42

 >和暦でM33.1.0とあります。
 ただの文字列です。末尾の 0 は日付として認識しません。

 Sub 置換()
    Range("A1:B1").Select
    Selection.Replace What:="M33.1.0", Replacement:="×", LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False
 End Sub 

(・・・) 2022/01/21(金) 10:00


 実験くんです。 新規シートをアクティブにして、ステップ実行でお試しください。

 Sub 実験()
   With Range("A1:A10")
       .FormulaR1C1 = "=Row()-1"
       .Value = .Value
       .NumberFormatLocal = "[$-ja-JP]ge.m.d;@"
    ' ここまで準備 A1:A10 に M33.1.0 から M33.1.9 までが入力されます。
  ' 日付型のリテラルで指定    
       .Replace What:=#1/2/1900#, Replacement:="×", LookAt:=xlWhole  ' M33.1.3が置換される(1日ずれてる)
       .Replace What:=#1/1/1900#, Replacement:="×", LookAt:=xlWhole  ' M33.1.2が置換される(1日ずれてる)
  '  #1/0/1900# はコンパイルエラーになる。 ならばと
       .Replace What:=CDate(1), Replacement:="×", LookAt:=xlWhole    ' M33.1.1が置換される
       .Replace What:=CDate(0), Replacement:="×", LookAt:=xlWhole    ' 何も置換されない
    End With
 End Sub

 VBAとワークシートで日付型の値が1日ずれるのはよく知られてますが、
 ワークシート上の日付型でシリアル値が0の場合、それをVBAで指定する方法がない....

 なので、ねむねむさんの回答のように、
 いったん表示形式を日付型から変更するしかないですよね
(´・ω・`) 2022/01/21(金) 10:46

 >教えて頂きましたコードで、実行しましたが変換はされませんでした。

 With Range("A1:B1")
     .Value = .Value
 End With

 昨夜は↑で表示が M33.1.0 ⇒ 12:00:00 AM となり置換えすることが出来たのですが
 今朝はなぜかできないです。????
 それで表示形式を"h:mm:ss AM/PM"にすると置き換えできましたが・・・
 ちなみに M33.1.0 は 12:00:00 AM を表示形式 "ge.m.d" にして作成しました。
 当方 Excel2019

 Sub Test()
    With Range("A1:B1")
        .NumberFormatLocal = "h:mm:ss AM/PM"
        .Replace What:="12:00:00 AM", Replacement:="×", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    End With
 End Sub

(通行人) 2022/01/21(金) 11:43


 日付の検索・置き換えはちょっと癖があります。

 OfficeTanakaさんは「検索値はDate型にすべき」みたいな趣旨の発信をしていますが、正しくない。

 私は、英語版から日本語版への移植が完璧に出来ていないことに起因する不具合だと思っています。
 そもそも完全な移植が不可能なのか、単なる移植作業ミスなのかも判断はできないです。

 以前「テキストプロパティのようなもの」を検索しに行っているので、
 米国式テキスト形式(m/d/yyyy)でやれば旨く行くと提唱したのですが理解されなかったことがあります。

 今回もその趣旨に沿って下のコードでトライしたら問題なく置換えが行われました。

  Sub 実験by半平太()
    With Range("A1:A10")
        .FormulaR1C1 = "=Row()-1"
        .Value = .Value
        .NumberFormatLocal = "ge.m.d;@"
     ' ここまで準備 A1:A10 に M33.1.0 から M33.1.9 までが入力されます。
     ' 米国式日付型のテキストで指定
        .Replace What:="1/0/1900", Replacement:="×" ' M33.1.0が置換される
     End With
  End Sub

(半平太) 2022/01/21(金) 12:38


 半平太さん
 できました。
 なるほど...
(´・ω・`) 2022/01/21(金) 12:59

マクロ NumberFormatLocal = "ge.m.d;@" では日付形式にになるが、
書式設定ユーザー定義で ge.m.d;@ にして入力しても日付形式とならない。
他の形式にしても同じ。
質問者はどうやって入力しているのだろうか。
(・・・) 2022/01/21(金) 15:23

 >書式設定ユーザー定義で ge.m.d;@ にして入力しても日付形式とならない

 ひょっとして、直接「M33.1.0」と入力されてませんか?
 表示形式を設定したら0を入れてみてください。
(コナミ) 2022/01/21(金) 16:37

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.