[[20221222100850]] 『日付をyyyy-mm-ddに変換』(1222) ページの最後に飛ぶ

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

 

『日付をyyyy-mm-ddに変換』(1222)

2022/12/22 のように日付属性で入力されているセルのデータを
2022-12-22 に変換したいのですが上手くいきませんでした。
記述ミスあるいはstring関数の併用が必要でしょうか?


 試作1
 WScsv.Columns(26).Replace What:="/", Replacement:="-", Lookat:=xlPart

 試作2
 WScsv.Columns(26).Format ("yyyy-mm-dd")

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


 表示だけで構わなければ
 WScsv.Columns(26).NumberFormatLocal = "yyyy-mm-dd"
 と表示形式を変更してはどうだろうか?
(ねむねむ) 2022/12/22(木) 10:22:38

■1
>日付属性で入力されているセル
セルに入力されてものが【シリアル値】であるという意味なら[試作1]ではマズいですよね。
さらに[試作2]も構文的におかしいようにおもいます。

■2
なので↓のようなアプローチにしてみてはどうでしょうか?

 1. データをいったん配列に取り込む
 2. 1つずつ、Format関数で文字列に変換する
 3. 表示形式を文字列に変更する(これをやらないとエクセル君のおせっかい機能が働いてしまう)
 4. 配列から一気に書き出す

コードにするとこんな感じです。

    Sub test1()
        Dim 配列 As Variant
        Dim i As Long

        With Range("A1:A30")
            配列 = .Value

            For i = 1 To UBound(配列, 1) Step 1
                配列(i, 1) = Format(配列(i, 1), "yyyy-mm-dd")
            Next i

            .NumberFormatLocal = "@"
            .Value = 配列
        End With
    End Sub

■3
また、作業列を使えるのであれば↓のようにする手もあります。

    Sub test2()
        With Range("A1:A30")
            .Offset(, 1).Formula = "=TEXT(A1,""yyyy-mm-dd"")"
            .Offset(, 1).Copy
            .Cells.PasteSpecial Paste:=xlPasteValues
            .Offset(, 1).Clear
        End With
    End Sub

ただ、こちらの処理だと歯抜け(ブランクセル)があるとちょっと困ったことなります。

■4
質問から反れますが、そもそも論として本当に「WScsv.Columns(26)」全体を処理する必要があるのか再考されてみてはいかがでしょうか?

 (ブックとして開いたのであれば100万行以上ありますよね?)

(もこな2) 2022/12/22(木) 11:46:12


コメント返信:

[ 一覧(最新更新順) ]


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