アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAで、A列 i行のシリアル値(例えば 42841)を月日データ(4月16日)に変換したいのですが、Cells(i, "A").NumberFormatLocal = "m""月""d""日"";@" の様にしても Cells(i, "A") の中味はシリアル値のままで全く変化しません。
i は1毎にインクリメントさせていますが、ネットで検索してもこの様な例を見つける事ができませんでした。
どなたか教えて頂ければ幸いです。

A 回答 (3件)

No1です。


以下のマクロを標準モジュールに登録し実行しました。
こちらの環境では、4月16日が表示されるようになりました。添付図の実行前と実行後を参照ください。

Public Sub test()
Dim i As Long
For i = 1 To 30
Cells(i, "A").NumberFormatLocal = "m""月""d""日"";@"
Next
End Sub


cells(i,"A")はアクティブシートに対して作用します。
あなたが、月日データにしたいシートはアクティブシートになってますか。
「VBA シリアル値から月日への変換」の回答画像3
    • good
    • 0
この回答へのお礼

今回も早速の回答、更に2枚のキャプチュア図を添付して頂き恐縮です。
最初の質問時のマクロと同じなのに、当方では旨く行っていなかったので、デバッガーを走らせて確認した所、上記のマクロ直後は正常に月日データに変換されていたのですが、その後方で(ある理由から)それらのセルに対して ClearFormats のコードを記述してしまっていて、ここで元のシリアル値に戻っている事に気付きました。
今回のトラブルの原因はこちらのうっかりミスでした。
tatsu99 さんには再度に渉り御指導頂いて御迷惑をお掛けしました。
しかし、これに気付かされたのも tatsu99さんのお蔭です。
心より感謝致します。

今後、また質問せざるを得ない時が来るかとは思いますが、その節はこれに懲りずに宜しくお願い致します。

お礼日時:2017/04/17 21:01

ふつうは、VBAでシリアル値を直接貼り付けることはしませんね。


面倒だからです。
>ネットで検索してもこの様な例を見つける事ができませんでした。
そのようなことをする人がいないだけです。
しかし、まったくないわけではありません。その時に気をつけなくてはならないのは、書式は先にしなければなりません。なぜかというと、後にいれると値が変わることがあるからです。日付にはありませんが、時間値がかわってしまったりすることがあるそうです。

'//
Sub TestSerial()
Dim Start As Long
Dim i As Long
Start = 42841
For i = 1 To 30
 Cells(i, 1).NumberFormat = "m月d日" '*
 Cells(i, 1).Value = Start - 1 + i
Next
End Sub

ではどうするかというと、

Sub TestSerial2()
Dim Start As Long
Dim i As Long
Start = 42841 'ただし、ここはデイト型にしたほうが可読性がよいです。
For i = 1 To 30
Cells(i, 1).Value = Format(Start - 1 + i, "m月d日")
Next
End Sub

'-------------
Dim Start As Date 'デイト型にして

Start = #4/16/2017#
For i = 1 To 30
 Cells(i, 1).Value = Format(Start - 1 + i, "m月d日") 'Format$にはしない
Next
    • good
    • 0
この回答へのお礼

折角、即座に回答して頂いた(しかも複数のサンプルで)にも関わらず、その後、風邪でダウンしてしまい返事が大変送れてしまい申し訳ありませんでした。

当方の舌っ足らずもあったとは思いますが、 インクリメンタル値の i はA列の各行のセル番号です。
そしてその各セル Cells(i, 1) に不連続なシリアル値が格納されているとお考え下さい。
そこで WindFallerさんのコードを参考にして闇雲に次のようにコーディングしたのですが、これでも各セルの値は元のシリアル値のままで変化はありませんでした(当然なのでしょうが)。

For i = 1 To 30
 Cells(i, 1).Value = Format(Cells(i, 1), "m月d日")
Next

もし、別な解決方法を教えて頂ければ有り難いのですが、宜しくお願い致します。

お礼日時:2017/04/16 16:45

そのセルの表示形式を日付にすれば、4月16日と表示されますが、それではだめなのでしょうか?


それとも、42841を直接"4月16日"の文字列に変換したいということでしょうか。
    • good
    • 0
この回答へのお礼

質問の投稿後、風邪でダウンしてしまい返事が大変送れてしまったことを深くお詫びします。申し訳ありませんでした。

先ず、「表示形式を日付にすれば」との件は、今回扱おうとしているデータは毎日数百個に上るので手作業では略不可能です。
従って、御指摘の通り、「42841を直接4月16日の文字列に変換したいということ」です。
良い解決策があれば御教示下さい。
宜しくお願い致します。

お礼日時:2017/04/16 16:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています