Excelのカレンダーを Google スプレッドシートで開くと曜日が「aaaa」になるのはなぜ
問いは木下が出したもので、答えは Claude Code と調べて書いたものです。
Q(木下):サークル企画カレンダー2026 を Google スプレッドシートで開いたら曜日のところが全部 aaaa になった。なんで?
A:aaaa は「日本語版 Excel だけが解釈する曜日の表示形式コード」で、Google スプレッドシートはこのコードを知らないため、書式として解釈せず文字そのまま「aaaa」を表示してしまう。セルの中身は壊れていない——中身は日付(シリアル値)のままで、それをどう見せるかの指示だけが通じていない状態。
そもそも Excel の日付書式には ddd(Sun)/dddd(Sunday)という曜日コードがあるが、これは日本語版 Excel でも英語表記になる。そこで Microsoft が日本語版だけに独自拡張として足したのが aaa(日)と aaaa(日曜日)で、国際規格の OOXML には無い方言にあたる。方言なので、Excel 以外の実装(Google スプレッドシート、LibreOffice の一部、各種変換ライブラリ)では素通りして文字列扱いになる。
回避策は3つ。①書式を dddd に変える(スプレッドシートのロケールが日本語なら「日曜日」と出るが、ロケール依存)。②Google スプレッドシート側で「表示形式→数字→カスタム数値形式」を開いて曜日を指定し直す。③一番確実なのは、書式に頼らず数式で曜日の文字列そのものを作ってしまう方法==INDEX({"日曜日";"月曜日";…;"土曜日"},WEEKDAY(日付セル))。これならロケールにも実装にも依存しない。今回は③でファイルを作り直した(別名で作り直した)。
補足(タブ名を月と連動させたい):シート(タブ)の名前は、Excel でも Google スプレッドシートでも
数式で動かせない。セルの値や書式と違い、シート名はセルの中身ではなくドキュメントの構造の一部なので、
=DATE(...) のような式を置く場所がそもそも無い。「A1 の月をタブ名に出したい」は、素の表計算の
機能では実現できない類の要求にあたる。
実現するなら2択。①静的に改名する——タブを実際の月(2026-09…)に手で付け替える。どこで開いても
正しく、追加の仕組みも要らない。ただし年や開始月を変えたときは付け替え直しになる。②Google Apps Script
——各シートの A1 を読んで setName() でタブ名を書き換える十数行のスクリプトを仕込み、onOpen で
毎回走らせる。これが本当の「連動」だが Google 専用で、Excel では動かない。
なお改名するときは、シート名を参照している数式と名前付き範囲を一緒に直す必要がある。サークル企画
カレンダーは2枚目以降の A1 が DATE('1'!AD18,'1'!AD20+1,1) のように1枚目を参照し、名前付き範囲
開始_日 も '1'!$AD$24 を指していたので、タブ「1」を改名すると全シートの日付が壊れるところだった
(改名と同時に計23箇所を追随させた)。