プロが教えるわが家の防犯対策術!

久しぶりにVBAプログラムでハマってしまったので、教えてほしいです。

(1)エクセルシート上のボタンを押す

(2)セルの内容を読み込む

(3)CSVファイルに出力する

というプログラムを組んでいるのですが、variant型で作った
日付のデータの形が変になってしまいます。
入力時は yyyy/mm/dd なのですが、出力されたCSVファイルを見ると、
mm/dd/yyyy と勝手に変換されていました。

何とか修正しようと試みたのですがうまくいきません。
ソースを書き込みます。

Dim data_input(11) As Variant '項目数11項目
Dim i As Integer
Dim j As Integer
Dim mydir As String
Dim conv_data As Variant 'データ変換用
Dim rng As Variant
Dim input_date As Date '入力日付(日付型)
Dim conv_date As Variant '変換後の日付(ヴァリアント型)

i = 0

For i = 0 To 8
data_input(i) = Worksheets("画面").Cells(4 + i, 3)
Next i

'A列の一番下のセルを検索する
e = Worksheets("local_data").Cells(1, 1).End(xlDown).Row '終端検索(空白のセルまで検索)

'日付のデータはそのままCSV化するとおかしな表示となってしまうので、テキスト文字列に変換する
'For Each rng In Range("A1:A10")
'テキスト文字列に変更します。
' rng.Value = "'" & rng.Text←何故か上手くいかなかった
'Next rng

e = e + 1 '最終行+1
For i = 0 To 8
'申込日の時は文字化する為、別処理にする
If (i = 0) Then
input_date = data_input(i)
tmp = CVar(input_date) 'Date型からVariant型に変換し、文字データとして書き込む

'tmpのデータを解体して組み替える
'split?
Dim MyStr() As String

'この地点では月/日/年
MyStr() = Split(tmp, "/")

'年/月/日に戻す
MyStr (0) '月
MyStr (1) '日
MyStr (2) '年

'再結合する
tmp = MyStr(2) & "/" & MyStr(0) & "/" & MyStr(1)

Worksheets("local_data").Cells(i, i + 1) = tmp
'Worksheets("local_data").Cells(e, 1) = tmp
Else
Worksheets("local_data").Cells(e, i + 1) = data_input(i) '上部で入力したデータを書き込む
End If
Next i

どうにかyyyy/mm/ddの形で日付が表示されるようにしたいのですが・・・・・
どなたか助言をお願いします。

A 回答 (5件)

>Range("A1").NumberFormatLocal = "yyyy/mm/dd"


>にて書式を変えてみようとしましたが、エラーが出てうまくいきませんでした。

どんなエラーですか?
Range("A1").NumberFormatLocal = "yyyy/mm/dd"
で問題ないはずです。
Cells(1, 1).NumberFormatLocal = "yyyy/mm/dd"
でもOKです。

local_dataシートのe行1列の場合は、
Worksheets("local_data").Cells(e, 1).NumberFormatLocal = "yyyy/mm/dd"

もしかして、書式が変更できないようロックが掛かっているということはないですか。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。

デバッグしていたら、何が起こっていたのかがやっと解ったので、もう一度質問を作成します。
MSの仕様なのかもしれませんが・・・・・

お礼日時:2012/07/31 11:39

Worksheets("local_data").Cells(i, i + 1) = tmp



No.3はなかったことに・・・・・

Worksheets("local_data").Cells(i, i + 1) = Format(Date,tmp)
これでいけませんか??
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
問題が変わってしまったので、もう一度質問させていただきます。

お礼日時:2012/07/31 11:40

Worksheets("local_data").Cells(i, i + 1) = tmp



これを書き換えてもダメでしたか?
Worksheets("local_data").Cells(i, i + 1) = Format(tmp,"yyyy/mm/dd")
    • good
    • 0

セルの値を変えるのではなくて、セルの書式の表示形式を変えたらどうですか。



というより、セルごとコピーして貼り付ければいいのでは。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Range("A1").NumberFormatLocal = "yyyy/mm/dd"
にて書式を変えてみようとしましたが、エラーが出てうまくいきませんでした。
Range("A1")がダメみたいですね・・・

Cellsなら使えるのですが・・・・・・

お礼日時:2012/07/30 16:19

日付処理結構悩まされます。



Format(Date, "yyyy/mm/dd")
私は、Format()使って無理やり日付入力していますが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Formatも試してみましたがうまくいきませんでした。

PasteSpecialを試してみようと思います。

お礼日時:2012/07/30 16:17

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

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