[[20170604162000]] 『表示形式が文字列の日付を日付書式にするには、』(てつ) ページの最後に飛ぶ

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

 

『表示形式が文字列の日付を日付書式にするには、』(てつ)

[[20170125162037]] 『表示形式が文字列のセルにある日付を日付や数値に』(ぽんとりん)

 を参考にして、 文字列となっている日付を日付として認識させることができたので
 ですが、(他にもセルのWクリックでも)これをマクロで行いたいと思っています。
 いろいろネットで調べてみたのですが、わかりません。
 よろしくお願いいたします。

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


 Sub 日付へ変換()

     Dim r As Range

     For Each r In Selection
         If r.Value <> "" Then r.Value = DateValue(r.Value)
     Next

 End Sub

 該当のセルを選択した状態でマクロ実行
(bi) 2017/06/04(日) 16:42


 「型が一致しません」とエラー表示が出ます。

 (てつ)

 参考です。

 マクロを「書いてみた」「動かした」「ダメでした」。
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200.html
(カエムワセト) 2017/06/04(日) 17:07

マクロにしたい目的がよくわかりません。
そのマクロを、既存のマクロに組み込もうとしているのでしょうか?

(マナ) 2017/06/04(日) 17:09


 そのとおりです。
 マクロの作業の中に入れこもうとしています。
 (てつ)

では、それを提示できますか。
どういう条件で実行したいのか知りたいです。
対象範囲は複数列なのかどうか
対象範囲には、日付外のデータもあるのか
対象範囲には、数式も含まれるのか
など

(マナ) 2017/06/04(日) 17:36


年月日を入れるD列があります。
 異なる人が入力するので、
 1 H.5.2. 3
 2 S58.5.8
 3 H2.3.6
 4 S59.4.6.
 等、日付と文字列の表示形式が入り混じります。
 そこで、文字列のセルのみ(1と4)選択し、
 For Each cl In Selection
    値 = cl.Value
    If Right(値, 1) = "." Then
        値 = Left(値, Len(値) - 1)
    End If
    値 = Replace(値, " ", "")
    値 = Replace(値, " ", "")
    値 = Replace(値, "H.", "H")
    値 = Replace(値, "H.", "H")
    値 = Replace(値, "S.", "S")
    値 = Replace(値, "S.", "S")
    値 = Replace(値, ".", "/")
    cl.Value = 値
    cl.Value = Format(cl.Value, "[$-411]ge.m.d;@")
 Next cl
 を実行します。
 1 H5.2.3
 4 S59.4.6
 とそれぞれのセルには、表示されていますが、
 数式バーをみると 西暦表示されていません。
 そのセルをWクリックすると、
 数式バーに西暦表示されます。
 このセルのWクリックの操作をマクロに
 組み込みたいと考えています。
 よろしくお願いいたします。

(てつ) 2017/06/04(日) 19:36


>cl.Value = Format(cl.Value, "[$-411]ge.m.d;@")

これより先に、biさんのコードを実行する必要があります。
これでエラーがでないと思います。
入力ミスの修正部分はこれで十分かどうかはわかりません。
そのままにしてあります。

 Option Explicit

 Sub test()
    Dim cl As Range
    Dim 値

    For Each cl In Selection.SpecialCells(xlCellTypeConstants)
        If Not IsDate(cl.Value) Then
            値 = cl.Value
            If Right(値, 1) = "." Then
                値 = Left(値, Len(値) - 1)
            End If
            値 = Replace(値, " ", "")
            値 = Replace(値, " ", "")
            値 = Replace(値, "H.", "H")
            値 = Replace(値, "H.", "H")
            値 = Replace(値, "S.", "S")
            値 = Replace(値, "S.", "S")
            値 = Replace(値, ".", "/")
            If IsDate(値) Then cl.Value = DateValue(値)
        End If
    Next cl

    Selection.NumberFormatLocal = "[$-411]ge.m.d;@"

  End Sub

(マナ) 2017/06/04(日) 21:00


 biさん、マナさん、ありがとうございました。
 すべて、日付書式に変えることが できました。

 DateValueの使い方を覚えておこうと思います。
 これで、すべてマクロで処理できます。
 ありがとうございました。

(てつ) 2017/06/04(日) 22:00


コメント返信:

[ 一覧(最新更新順) ]


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