Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : その他)
グラフの横軸に割り当てた日付の書式が変わる
投稿日時: 21/06/14 16:59:55
投稿者: George

こんにちは。Georgeです。
 
Excelのバージョン:Excel 365
 
 横軸に日付を表示しているグラフを再描画しようとしたら日付の書式が
yyyy/mm/ddからmm/dd/yyyyに変わってしまいます。
 
特別に書式設定をしたりしてないですし、NumberFormatLocalで"yyyy/mm/dd"としても
mm/dd/yyyyで表示されてしまいます。
 
なお、Excel365では再現するのですが、Excel2016や2019では再現しません。
 
どなたか何かご存じの方がいましたら些細なことでもいいのでお願いします。

回答
投稿日時: 21/06/14 17:10:37
投稿者: simple

私は手元に365が無いので確認できません。
そういう事象が発生するのであれば、不具合なんでしょうね。
それで、質問は何でしょうか?
 
そういう事象が発生することへのクレームですか?
マイクロソフト社でないと回答できないので、
質問する場所が違うのではないかと思いますが、いかがでしょうか。

投稿日時: 21/06/14 17:22:44
投稿者: George

simple さんの引用:

そういう事象が発生するのであれば、不具合なんでしょうね。
それで、質問は何でしょうか?

不具合なんですかね。
それがわからなかったので、何か有益な情報が得られないかと思って書きました。
 
targetChartObjectはChartObject型です。
targetChartObject.Chart.Axes(xlCategory).TickLabels.NumberFormatLocal = "yyyy/m/d"

という風に書いたのですが、Excel365上で動かすと変わらずmm/dd/yyyyになるとのことなんです。
このコードでおかしなところはないでしょうか?
 
simple さんの引用:
そういう事象が発生することへのクレームですか?
マイクロソフト社でないと回答できないので、
質問する場所が違うのではないかと思いますが、いかがでしょうか。

マイクロソフトに質問するということなのでしょうか?
どこかに不具合であるエビデンスがあれば教えてもらいたいと思います。
それと、マイクロソフトに質問するということ自体やったことないので、
どこから行ったらよいかわからないので、ご教授いただければと思います。

回答
投稿日時: 21/06/14 18:16:32
投稿者: sk

引用:
横軸に日付を表示しているグラフを再描画しようとしたら日付の書式が
yyyy/mm/ddからmm/dd/yyyyに変わってしまいます。

横軸のプロット元であるセル範囲の各セルの表示形式も
同じく yyyy/mm/dd とされているのでしょうか。
 
引用:
targetChartObject.Chart.Axes(xlCategory).TickLabels.NumberFormatLocal = "yyyy/m/d"

NumberFormatLinked プロパティは False に設定されているのでしょうか。

投稿日時: 21/06/15 08:38:28
投稿者: George

引用:
引用:
横軸に日付を表示しているグラフを再描画しようとしたら日付の書式が
yyyy/mm/ddからmm/dd/yyyyに変わってしまいます。

横軸のプロット元であるセル範囲の各セルの表示形式も
同じく yyyy/mm/dd とされているのでしょうか。

書式設定で日付を選んで、種類の中で一番上のものが選ばれています。
 
引用:
引用:
targetChartObject.Chart.Axes(xlCategory).TickLabels.NumberFormatLocal = "yyyy/m/d"

NumberFormatLinked プロパティは False に設定されているのでしょうか。

XValuesプロパティに範囲を設定したとしても
NumberFormatLinkedプロパティをFalseに設定するのでしょうか?

回答
投稿日時: 21/06/15 15:30:06
投稿者: sk

引用:
書式設定で日付を選んで、種類の中で一番上のものが選ばれています。

その場合、そのセル範囲の実際の表示形式は、実行中のシステムの
地域設定における日付形式オプションの影響を受けることになるはず。
(いわゆる「アスタリスク(*)で始まる日付形式」)
 
引用:
targetChartObject.Chart.Axes(xlCategory).TickLabels.NumberFormatLocal = "yyyy/m/d"

そして実行する環境によっては、上記のコードが
「アスタリスク(*)で始まる日付形式」を設定するのと
同じ挙動を示す場合があります。
( NumberFormat プロパティの方も確認されるとよいと思います)
 
引用:
XValuesプロパティに範囲を設定したとしても
NumberFormatLinkedプロパティをFalseに設定するのでしょうか?

・そのグラフの最初の Series オブジェクト(系列)の XValues プロパティに
 ( 1 次元配列ではなく)Range オブジェクトを渡すコードを実行しており、
 かつ渡された Range オブジェクト(セル範囲)の各セルに格納されている
 データの型は全て日付/時刻型である。
 
・そのグラフの横軸を示す Axis オブジェクトのメンバーである
 TickLabels プロパティによって返された TickLabels オブジェクトの
 NumberFormatLinked プロパティの値は True である。
 
以上の設定条件が重なっているのであれば、横軸のラベルの表示形式は
そのプロット元であるセル範囲に設定された表示形式の通りになります。
(横軸の種類がテキスト軸/日付軸のどちらであるかによって
挙動に多少の違いがあります)
 
但し、TickLabels オブジェクトの NumberFormatLocal プロパティに
任意の日付/時刻書式が設定された場合、通常はそれに伴って
NumberFormatLinked プロパティの値は自動的に False に変更されます。
(問題の環境ではこの辺りの挙動が異なる、ということなのかも
知れませんが、現時点ではそう断言できるほどの判断材料は揃っていません)
 
もし NumberFormatLinked プロパティを明示的に設定するコードが
一切記述されておらず、かつ NumberFormatLocal プロパティに
任意の(システムの地域設定に依存しない)日付/時刻書式を設定した
にもかかわらず、ラベルの表示内容がその通りにならないのだとすれば、
次に疑うべきは実際のプロット元のデータの方でしょう。

トピックに返信