- ベストアンサー
セル書式の必要性とは?
- 質問者は、時間相当(mm:ss 又は hh:mm:ss)をフォーマット変更して別シートに書き出そうとしています。
- しかし、D列の書式を事前に文字列にしないと正しいフォーマットにならないという問題が発生しています。
- 質問者は、なぜD列の書式設定が必要なのか疑問に思っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> D列の見た目は、変更しても変更しないでも > 同じで文字列として書き込まれているので区別が付きません。 変更せずに標準のままだと、ユーザー定義に変更されると思います。00:00でしたらh:mm:ssとかで右寄せ。数値としては「0」です。 なので mj = mj & wst.Cells(i, "D") & ".000" で CHAPTER01=0.000 となるのだと思います。 > 又、事前のD列の書式設定以外に対策はありますか ? 手動での説明ですが、事前に書式設定しておくという方法ですね。 数値の表示形式を設定する https://support.microsoft.com/ja-jp/office/%E6%95%B0%E5%80%A4%E3%81%AE%E8%A1%A8%E7%A4%BA%E5%BD%A2%E5%BC%8F%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B-f27f865b-2dc5-4970-b289-5286be8b994a 表示形式の設定 http://officetanaka.net/excel/vba/cell/cell08.htm こちらでは、VBAの説明で「先に表示形式を設定しなければなりません」とありますので、方法はないのかもしれません。 数値関連を文字列として入力したい場合は、先に文字列設定しておくと思っていたらいいのではないでしょうか。
その他の回答 (1)
- kkkkkm
- ベストアンサー率66% (1719/2589)
エクセルの自動書式設定のせいじゃないでしょうか。 書式設定していないセル(標準とか)はエクセルの思惑で表示するみたいな。
お礼
kkkkkmさん、お世話になります。 以下をコメントに変えて wst.Range("D:D").NumberFormatLocal = "@" 以後を実行しても D列の見た目は、変更しても変更しないでも 同じで文字列として書き込まれているので区別が付きません。 なのに別シートにD列を利用して書き出された結果が以下のように異なります。 CHAPTER01=0.000 CCHAPTER01=0:00:00.000 どんな時にこんな分かるにくい状態が発生するかの 目安のような考え方は有るのですか? (目安がわかれば、今回のような試行錯誤する時間が短縮されるような思えます。) 又、事前のD列の書式設定以外に対策はありますか ?
お礼
ありがとうございます。 書式設定以外に対策は無くて、 数値関連を文字列として入力したい場合は、 先に表示形式を事前に文字列設定にすると言うことですね。 記事参考になりました。 データを入力してから表示形式を設定しても、逆に表示形式を設定してからデータを入力しても同じです。 ただし、「0123」のようなデータを文字列として入力したいようなケースでは、先に表示形式を設定しなければなりません。 入力すると自動的に表示形式が設定される日付データでも、 あらかじめ表示形式が設定されているセルの場合はExcelが自動的に設定することはありません。 先に設定している表示形式が有効になります。 セルにテキスト形式を適用すると、 この数値の 自動書式設定を防ぐことが可能です。