『*付き日付書式の設定』(もげら)
VBAで対象セルに日付の*付き表示設定(OSの地域設定に応じて日付の表示形式が変化する)を追加したいですがやり方がわかりません どなたかわかる方おられませんか?
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
日付の表示形式にある最初の二つが * 付きのものですが、 その設定動作をマクロ記録したもの、ということではないでしょうか。(自信なし) (xyz) 2025/06/27(金) 15:11:56
日付の表示形式にある最初の * 付きのものでマクロ記録してみましたが、 Selection.NumberFormatLocal = "yyyy/m/d" となり、 ユーザ定義で yyyy/m/d と設定したのと同じになりますね。 余計なおせっかいでした。 (タイチ) 2025/06/27(金) 15:30:46
タイチさんの言われる通り"yyyy/m/d"と記録されます これを設定しても*付き表示設定と異なる結果になることをOSの言語設定を変えて確認しています なので別の設定があるはずなんですがそれが分からず困っています (もげら) 2025/06/27(金) 15:47:47
*付きの2番目で書式をマクロの記録すると
Selection.NumberFormatLocal = "[$-x-sysdate]dddd, mmmm dd, yyyy"
となるので、[$-x-sysdate]をキーワードに検索してみるといいのでは (´・ω・`) 2025/06/27(金) 16:04:23
失礼しました。
追記です。 日付の(長い形式のマクロ記録 .NumberFormatLocal = "[$-x-sysdate]dddd, mmmm dd, yyyy" が得られます。
ネット記事によると、 >[$-x-sysdate]:システムの日付設定に基づいて表示形式を適用することを意味します。 > 例えば2024年7月27日という日付の場合、この表示形式では「土曜日, 七月 27, 2024」と表示されます。 とされていますが、 実際の表示は「2025年6月27日」であり(これはシステムの日付形式です)、上の説明と不一致です。
ですから、詰まるところMS社はこの機能を切り捨てたままにしているのかもしれません。 ですから、望まれていることは不可能かもしれません。
(極端なコメントから極端なコメントに振れ幅が大きく、忸怩たるものを感じております😢))
(xyz) 2025/06/27(金) 16:19:30
あたりが関連記事でしょうか。Exel365の状況も考慮されているようです。
(xyz) 2025/06/27(金) 16:28:35
<Copilotの見解>
✅ 結論:アスタリスク付きの書式をVBAで設定するには
Selection.NumberFormat = "[$-x-sysdate]yyyy/m/d"
この形式は理論上正しいのですが、Excel VBAでは [$-x-sysdate] を直接使っても反映されないことが多いです。 これは、Excelの内部で「アスタリスク付きの形式」がOSのロケールに依存して動的に変化する特殊な形式であるため、 VBAから直接指定する方法が公式には提供されていないためです。
とのことです。
(タイチ) 2025/06/27(金) 16:44:07
ChatGPTによる情報です。(生成AIによる回答のため、正確性は保証されません)
【質問】
Excelの日付形式について質問します。 OSでの日付(長い日付形式)に追随する(設定を変更すれば、その変更に従って変化する)ような日付形式はありますでしょうか。 (以下補足説明しているがその部分は省略)
【ChatGPTの回答】 Excelで OSの「長い日付形式」設定に追従する日付表示形式について、詳しくご説明します。
■ 結論(先に要点) Excelには OSの「長い日付形式」に完全に追従する書式指定子は存在しません。 記録マクロで得られる .NumberFormatLocal = "[$-x-sysdate]dddd, mmmm dd, yyyy" は、 「OSのロケールに従って曜日・月名などを英語で表示」する試みですが、 OSの「長い日付形式」そのものを使うものではありません。
■ 詳細説明 1. [$-x-sysdate] とは何か? これはExcel独自の記法で、OSのロケール設定(言語)に依存して日付を表示しようとする特殊なプレフィックスです。 ですが、これは**「OSの言語ロケール」に追従するだけで、「OSでカスタム設定した日付形式(表示順序や接尾辞など)」には対応しません**。
つまり: ロケールが日本語なら日本語で「金曜日」や「6月」などになる(ただし場合によって英語になるバグも)。 しかし「2025年6月27日」のような 年月日の順番・表記スタイルは無視される。
2. 実際の「OSの長い日付形式」とのズレ OS(Windows)の「長い日付形式」は、コントロール パネル → 「地域」設定で yyyy年M月d日 や dddd, yyyy年M月d日 などにカスタマイズできます。 しかし、Excelはこの 「カスタム日付書式」自体を参照する方法を提供していません。
3. 表示をOSに合わせたいときの対応策
以下のような方法が考えられます: 方法A:OSの「長い日付形式」に合わせた書式を手動で設定 たとえば、以下のように: Range("A1").NumberFormatLocal = "yyyy年m月d日" これは「2025年6月27日」のように日本語で表示します。
方法B:WMIやAPIを使ってOS設定をVBAで取得し、NumberFormatを動的に決定する(やや高度) 例えば、WMI経由でレジストリから現在の「長い日付形式」設定を取得し、VBAでその文字列を .NumberFormatLocal に 反映させる、という方法はあります。
以下は例: vba Sub SetDateFormatToSystemLongDate() Dim objShell As Object Dim longDateFormat As String
Set objShell = CreateObject("WScript.Shell") longDateFormat = objShell.RegRead("HKEY_CURRENT_USER\Control Panel\International\sLongDate")
MsgBox "OSの長い日付形式: " & longDateFormat
' 注意: ExcelのNumberFormatとは少し記法が違うので変換が必要 Dim fmt As String fmt = Replace(longDateFormat, "yyyy", "yyyy") fmt = Replace(fmt, "yy", "yy") fmt = Replace(fmt, "MMMM", "mmmm") fmt = Replace(fmt, "MMM", "mmm") fmt = Replace(fmt, "MM", "mm") fmt = Replace(fmt, "M", "m") fmt = Replace(fmt, "dddd", "aaaa") fmt = Replace(fmt, "ddd", "aaa") fmt = Replace(fmt, "dd", "dd") fmt = Replace(fmt, "d", "d")
Range("A1").NumberFormatLocal = fmt End Sub ※この変換は簡易的で、完全ではありません。OSの記法とExcelの記法の違いには注意が必要です。
■まとめ 方法 OSの「長い日付形式」への追従度 実用性 ------------------ ------------------------------ ------------- [$-x-sysdate]使用 ×(ロケール依存、形式は固定) △ 書式を手動で設定 △(都度更新必要) ◎(確実) レジストリから取得 ◎(完全同期可能) ◯(やや高度) (xyz) 2025/06/27(金) 16:49:00
ありがとうございます システムの日時にはなったものの日本の表示はyyyy/m/d 英国の表示はm/d/yyyyのような形がよいそうで"[$-x-sysdate]dddd, mmmm dd, yyyy"ではだめだと言われてしまいました また"[$-x-sysdate]yyyy/m/d"ですが表示は"[$-x-sysdate]dddd, mmmm dd, yyyy"と変わらない表示になることを確認しこれも要望に応えられないことがわかりました・・・ 提供されてないならもう*日付のセルをコピペして表示書式以外コピーするくらいしかないんですかね・・・? (もげら) 2025/06/27(金) 17:25:42
あれだけ悩んでいましたが対象セルのNumberFormatLocalプロパティをウォッチ式で確認したところ"m/d/yyyy"が入っていました それをNumberFormatLocalに入れたところ思い通りの動きになりました お騒がせしました・・・ (もげら) 2025/06/27(金) 17:34:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.