Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
数値を文字列のまま置換する方法
投稿日時: 19/04/23 22:28:44
投稿者: LOTO

■セル(A1〜A10)にある数個の★を表示形式も「文字列」のまま「09:00」に置換したい。
 ※ちなみにB1〜B10の★はまた別の数値に置換します
 
シート全体を「文字列」にした状態で下記を実行(マクロの実行・終了で作成)すると
 
    Range("A1:A10").Select
    Selection.Replace What:="★", Replacement:="09:00", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
 
表示形式もユーザ定義(h:mm)に変わり9:00になってしまう。

回答
投稿日時: 19/04/23 22:45:55
投稿者: simple

Replacement:="'09:00"
とアポストロフィをつけてみては?

投稿日時: 19/04/23 22:53:57
投稿者: LOTO

すいません。書き忘れました。
アポストロフィなしで作成したいです。

回答
投稿日時: 19/04/23 23:05:35
投稿者: simple

単純に繰り返しで、
If r.Value = "★" Then r.Value = "09:00"
としてみては?

回答
投稿日時: 19/04/23 23:50:55
投稿者: simple

置換でうまくいかないのは、Excelが気を利かせているからです。
コードに問題があるわけではないと思います。
ただ、それを受けたExcelがいわば「余計なお世話」をしていると言えなくもない。
直接、"09:00"を入力してうまくいくのも、結果オーライであって、
"お世話"の仕方が微妙に違うのでしょう。
このあたりの差異を論理的につきつめようとしても、無駄に終わるものと思います。
そういうものだと割り切るのもひとつの対処法でしょう。

回答
投稿日時: 19/04/24 07:46:14
投稿者: WinArrow
投稿者のウェブサイトに移動

>アポストロフィなしで作成したいです。
 
アポストロフィは、目視では見えませんよね?
アポストロフィがあるどのような問題があるのでしょう?
 
その問題にっては、別のアドバイスが貰えるかも?
 

回答
投稿日時: 19/04/24 13:13:53
投稿者: sk

WinArrow さんの引用:
アポストロフィは、目視では見えませんよね?
アポストロフィがあるどのような問題があるのでしょう?

LOTO さんの引用:
Range("A1:A10").Select
Selection.Replace What:="★", Replacement:="09:00", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

セルのテキスト自体を "09:00" に置換しようとしているのではなく、
セルのテキストに含まれる "★" を "09:00" に置換しようとしているのですから、
そりゃダメでしょう。

回答
投稿日時: 19/04/24 14:55:22
投稿者: WinArrow
投稿者のウェブサイトに移動

すみません
>LookAt:=xlPart
を見落としてました。
 
↓ではいかがでしょうか?
 
Dim myCeLL As Range
    For Each myCeLL In Range("A1:A10")
        myCeLL.Value = Replace(myCeLL.Value, "★", "09:00")
    Next

投稿日時: 19/04/24 17:39:52
投稿者: LOTO

WinArrowさん、ありがとうございました。
 
下記で出来ました。
ちゃんと置換後も表示形式「文字列」をキープ出来てました。
=============================================================
>↓ではいかがでしょうか?

>Dim myCeLL As Range
> For Each myCeLL In Range("A1:A10")
> myCeLL.Value = Replace(myCeLL.Value, "★", "09:00")
> Next
=============================================================