『日付けが勝手に逆になる 』(つむ) CSV UTF-8で保存されているファイルを 編集し、もう一度CSV UTF-8で自動的に保存するVBAを作成しました。 このマクロをつかうと、編集していないはずのセルの年月日が 2018/01/01から01/01/2018になってしまいます。 どうすれば、勝手に編集されずにすみますか? なにか方法があれば、教えて下さい。 < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- ちなみに、VBAを利用せずに、編集保存した場合は、 次にファイルを開いたとしても、きちんとした形で保存されています。 (つむ) 2018/05/22(火) 13:40 ---- CSVで保存する部分のVBAはどのように記述しているのだろうか? また、 >2018/01/01から01/01/2018になってしまいます。 これはどのようにして確認したか? (ねむねむ) 2018/05/22(火) 13:49 ---- マクロを使わなければ問題ないのだから、マクロを見せてもらわないと何とも…。 とりあえずは、マクロで処理しているならば、CSVをシートに読み込んだ後に、日付の入った列の書式設定を「YYYY/MM/DD」と、日本式に指定してから処理してはいかがでしょうか? とにかく、どこかで日付フォーマットを好みの順に変換しないと駄目っぽいと思います。 (???) 2018/05/22(火) 13:50 ---- ああ、 >次にファイルを開いたとしても、きちんとした形で保存されています。 とあるからEXCELで開いて確認しているようだな。 メモ帳などのテキストエディタで開いても形式が変わっているのだろうか? (ねむねむ) 2018/05/22(火) 13:53 ---- ???様 返信有難うございます。 書式を変更してもだめでした・・・ vbaはこんなかんじです。 Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") Dim name As String Dim fl_name As String Dim fl_basename As String 'フォルダ指定 name = Range("B1").Value fl_name = Dir(name & "\*.csv*") If fl_name = "" Then MsgBox "csvファイルがありません。" Exit Sub End If Application.DisplayAlerts = False Do ' ファイルを開く Workbooks.Open Filename:=name & "\" & fl_name fl_basename = FSO.GetBaseName(name & "\" & fl_name) ' 削除作業 Call F列削除 Call AA_AE列削除 ' UTF-8のcsvで保存する ' ActiveWorkbook.SaveAs Filename:= _ ' "C:\Users\" & fl_basename & ".csv", FileFormat:=xlCSVUTF8 _ ' , CreateBackup:=False ActiveWorkbook.SaveAs Filename:=name & "\" & fl_name, FileFormat:=xlCSVUTF8 _ , CreateBackup:=False ' 作業したファイルを閉じる ActiveWorkbook.Close '次のファイルをfl_nameに代入 fl_name = Dir Loop Until fl_name = "" (つむ) 2018/05/22(火) 14:09 ---- ねむねむ様 返信ありがとうございます。 Excel で開くものを作成しています。 ちなみに、テキストで開いても逆になっていました。 (つむ) 2018/05/22(火) 14:12 ---- >xlCSVUTF8 は2016で追加されたものなのか。 あいにく当方は2010なので確認できない。 とりあえず日付データを文字列に変換してから保存するとどうなるだろうか? (ねむねむ) 2018/05/22(火) 14:20 ---- ねむねむ様 文字列にしてしまうと完全に/がなくなってしまうため、無理でした… (つむ) 2018/05/22(火) 14:25 ---- 例えばA1セルに日付があるとして >Range("A1").NumberFormat = "@" >Range("A1") = Format(Range("A1"), "yyyy/mm/dd") こんなので/付きの文字列にできないか? (ねむねむ) 2018/05/22(火) 14:37 ---- ねむねむ様 有難うございます。 そうすると解決できました。 ただ、縦1列指定したいのですが、 どうしたらいいのでしょうか? お手数ですが、教えていただけたらと思います。 (つむ) 2018/05/22(火) 14:45 ---- 区切り位置で日付を文字列にしてはどうかと思ったが、手動で行うとうまくいくのだがそれをマクロの記録で記録して、 マクロから実行するとyyyy/m/dがd/m/yyyyになってしまう。 誰か解決策をご存じないだろうか? (ねむねむ) 2018/05/22(火) 15:34 ---- ねむねむ様 Range("A1").Select Do ActiveCell.NumberFormat = "@" ' ActiveCell.Font.ColorIndex = 4 ActiveCell = Format(ActiveCell, "yyyy/mm/dd") ActiveCell.Offset(1, 0).Select Loop While ActiveCell.Value <> "" でいくと1行はうまくいきました。 (つむ) 2018/05/22(火) 15:54 ---- ActiveCellを使うとそのたびにカーソルの移動が起こるので Dim WK_RANGE As Range としておいて Set WK_RANGE = Range("A1") Do WK_RANGE.NumberFormat = "@" ' WK_RANGE.Font.ColorIndex = 4 WK_RANGE = Format(WK_RANGE, "yyyy/mm/dd") Set WK_RANGE = WK_RANGE.Offset(1, 0) Loop While WK_RANGE.Value <> "" としてはどうだろうか? (ねむねむ) 2018/05/22(火) 16:15 ---- ねむねむ様 セル指定を頭でしていたので、 動くことはなかったです! (つむ) 2018/05/22(火) 16:18 ---- 解決はでき、正しい形での保存ができました。 ただ、原因としては保存するマクロに原因があるのではないかと考えられる、 (つむ) 2018/05/22(火) 16:20 ---- Workbooks.Open と Workbook.SaveAs の引数に Local:=True を追加するとどうでしょうか https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/workbooks-open-method-excel https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/workbook-saveas-method-excel 説明を見ると、 True : Excel の言語設定 False : VBA の言語設定(既定値) 通常、英語 (U.S.) となってるので、省略時は英語圏の書式設定になるのでしょうか ・・・googleで検索(excel csv 日付 逆)した結果ですけど (2u) 2018/05/22(火) 22:02 ---- UTF8とか関係なしに、マクロでcsvとして保存する時にOS依存の日付設定になっていると (日付の欄から選ぶ時に左側に*がついてる書式)、英語の日付で保存されるみたいですね。 しかも日本語ではサポートされてないから、次に開く時は文字列扱いになってて、 後から書式設定も効かないですね。 2uさんのレスを補足させて頂くと、Local:=True を追加するのはSaveAsの方だけで良いみたいです。 変換されたcsvでは文字扱いになってるので、開く時には Local:=True を記述しても変わらないですね。 もしくはcsvを開いてから日付の列を、NumberFormatLocal = "yyyy/m/d;@"、 とでもしてOS依存じゃない方の日付設定に変更しておけば、Local:=True なしで保存しても大丈夫みたいです。 (sy) 2018/05/23(水) 00:32