Excel (VBA)

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

 
(指定なし : 指定なし)
Re:日付を代入する時のフォーマット
投稿日時: 19/12/05 08:07:07
投稿者: simple

Re:日付を代入する時のフォーマット
https://www.moug.net/faq/viewtopic.php?t=78890
 
# 質問者さんのトライ結果を受けて、回答するつもりで、
# メモしておいたものをコメントしておきます。
# マクロ記録をとるのは、中級である私にとっても、
# 有効な手法です。そうしたことぐらいは試して欲しいです。
 
表示形式を指定する操作は、お分かりなんですよね。
 
日付が入ったA1セルを選択した状態で、マクロ記録を開始し、
表示形式の 「ユーザー定義」で、yyyy/mm/dd とします。
 
すると、マクロ記録の結果は、

Sub Macro1()
    Selection.NumberFormatLocal = "yyyy/mm/dd"
End Sub
こんな風になりませんか。
 
■この場合、Selectionとは、は選択されているセル範囲、
つまりRangeオブジェクトのことですから、
RangeオブジェクトのNumberFormatLocalプロパティで書式が指定できる、と分かります。
 
既存のコードには、次のように反映することができます。(Cells(i, 1)がRangeオブジェクトです)
 
Sub test1()
    Dim MaxRow As Long
    Dim i As Long
    MaxRow = Sheets("管理表").Cells(Rows.Count, 3).End(xlUp).Row
    For i = 1 To MaxRow
        Cells(i, 1).Value = Date
        Cells(i, 1).NumberFormatLocal = "yyyy/mm/dd"  '← ここを追加
    Next i
End Sub
とすればよいでしょう。
 
■全体を見直すと、シート特定しているもの、していないもの混じっていますから統一します。
例えば、 With ステートメントを使って、こんな風に書けます。
Sub test2()
    Dim MaxRow As Long
    Dim i As Long

    With Sheets("管理表")
        MaxRow = .Cells(Rows.Count, 3).End(xlUp).Row
        For i = 1 To MaxRow
            .Cells(i, 1).Value = Date
            .Cells(i, 1).NumberFormatLocal = "yyyy/mm/dd"
        Next i
    End With
End Sub

■さらに、繰り返しをしなくても書けそうです。
例えば、
Sub test3()
    With Sheets("管理表")
        With .Range("A1", "A" & .Cells(Rows.Count, 3).End(xlUp).Row)
            .Value = Date
            .NumberFormatLocal = "yyyy/mm/dd"
        End With
    End With
End Sub
最後の例はマストということではありません。
 
また、列ごと表示形式を指定するには、
2列目であれば、
Columns(2).NumberFormatLocal = "yyyy/mm/dd"
ですね。
Rangeオブジェクトの表現が変わっても、プロパティの使い方は共通です。
 
参考にして下さい。

投稿日時: 19/12/05 21:29:29
投稿者: simple

閉じます。