いつもお世話になっております。

標題の件なのですが、Excelで"2011/04/28"と入っている項目を
VBSでCSVに変換して出力すると、"4/28/2011"と出力されます。

objExcel.ActiveWorkbook.SaveAs ファイル名, xlCSV, true

とすると、コントロールパネルの地域と言語のオプションにある短い形式で出力されるという記事を見つけたのですが、"4/28/2011"と出力されてしまいます。

解決方法をご教授願います。よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

言語設定の「短い形式」が"yyyy/mm/dd"になっているにも関わらず、


"mm/dd/yyyy"で保存される現象が問題なのでしょうか。

だとすると、VBSに限った話ではありません。
Excelでも手動保存時は発生せず、VBAの場合に同現象が発生します。

ExcelVBAで確認してください。
Sub test1()
  With Workbooks.Add
    With .Sheets(1)
      .Range("A1").Value = "2011/4/28"
      .Range("B1").Value = "'2011/04/28"
    End With
    .SaveAs Filename:="C:\temp\test1.csv", FileFormat:=xlCSV
    .Close False
  End With
End Sub

Sub test2()
  With Workbooks.Add
    With .Sheets(1)
      .Range("A1").Value = "2011/4/28"
      .Range("B1").Value = "'2011/04/28"
    End With
    .SaveAs Filename:="C:\temp\test2.csv", FileFormat:=xlCSV, Local:=True
    .Close False
  End With
End Sub

SaveAsメソッドのヘルプを参照の事。
>Local   省略可能です。バリアント型 (Variant) の値を使用します。
>Excel の言語設定 (コントロール パネルの設定を含む) に合わせてファイルを保存するには、
>True を指定します。
>Visual Basic for Applications (VBA) の言語設定に合わせてファイルを保存するには、
>False (既定値) を指定します。
>通常この設定は、Workbooks.Open を実行する VBA プロジェクトが Excel バージョン 5
>または 95 の各国語版で作成されたプロジェクトでない限り、英語 (U.S.) になります。

という事で、
>objExcel.ActiveWorkbook.SaveAs ファイル名, xlCSV, true
>とすると、コントロールパネルの地域と言語のオプションにある短い形式で出力される...
VBSでの引数Localの指定の仕方が少し違います。
objExcel.ActiveWorkbook.SaveAs ファイル名, 6, , , , , , , , , , True
    • good
    • 1

ご参考。


http://www.gizcollabo.jp/vbtomo/boards/vbqanda.p …

なお、この処理をすると「システム全体が変わったまんま」になるので、変えた後に元に戻さないと「変えてあるのを想定してないアプリケーションが誤動作」します。

変更前に、直前の設定値を保存しておいて、CSV出力が終わったら、元に戻しましょう。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q英語OS+英語ソフト環境で日本語での日付表示

ちょっと不思議な現象にあっています。
英語のフリーソフトで使いたいソフトがあったのでwinXP日本語にインストールしたのですがエラーで使えませんでした。
そこでwin2Kの英語OSにインストールしたらちゃんと使えたのでいま試用期間中なのですが、日付表示が日本風の”2007/11/28”になってしまいました。
それでそのソフト上で日付にマウスオーバーすると"2007年11月28日"と漢字まで表示されている始末。
私として"28/11/2007"もしくは"28/Nov/2007"となって欲しいのです。
なぜならその分表示させなければならないセルの幅が小さくてすむので多くの日数を表示できるようになります。
基本的に英語OSなのでwindowsのシステムから取り出した日付ならこんなことにはならないはずなんですけど、どこをいじればいいのかわかりません。
ソフト側の問題ではないと思います。

よろしくお願いします。

Aベストアンサー

コントロールパネル-地域のオプション-日付 の設定を確認して下さい。

http://support.microsoft.com/kb/883021/ja

QVBからCSVにデータを落とすときに、日付の変化

前後略

FileName = "C:\My Documents\完成粉末付替明細.csv"
Open FileName For Output As #1

Write #1, "事業所名", "日付", "発送量"
RSOUT.MoveFirst

While Not RSOUT.EOF
Write #1, RSOUT!事業所名,RSOUT!日付,RSOUT!発送量
RSOUT.MoveNext
Wend

Close #1
MsgBox "出力完了しました。", vbOKOnly,Title:="知らせ"
Exit Sub

 日付のことを聞きたいですが、
 CSVにデータを落とすと日付が#2003-11-06#になるですが、2003/11/06のまま、落とす方法があるでしょうか?

 よろしくお願いいたします。

Aベストアンサー

日付の変数をフォーマット文にて固定してあげればそのまま落ちたと思います。

Q英語での日付表記について

英語でのテキストを作っております。日付表記について教えてください。

日本では、例えば2009年4月24日を省略した書式で、
09/04/24
と表すことがありますが、
これを、
04/24/09
と表して、英語圏向けの日付表記として問題ないでしょうか?
八文字で収まる条件で他にもっと一般的な書式はあるでしょうか?

よろしくお願いします。

Aベストアンサー

諦めて
04Apr09
が無難な気がする. もしくはいっそのこと ISO 完全準拠の
20090424
あるいは
09-04-24
とか.

QVB.net データセットからのCSV出力で日付ソートで書き込めないです。

VB.netでデータを読み込みました。
何もしないで読み込むと下記のような右の昇順になります。
2016/07/31,1306453
2016/07/30,1326235
2016/07/27,1434311
2016/07/28,1475040
2016/07/29,1740547

そこでデータセットに格納後
'昇順ソートを実施
DataGridView1.Sort(DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
を処理後は下記のように表示されますが
2016/07/27,1434311
2016/07/28,1475040
2016/07/29,1740547
2016/07/30,1326235
2016/07/31,1306453


CSV出力を行うと最初の順で出力されます。
2016/07/31,1306453
2016/07/30,1326235
2016/07/27,1434311
2016/07/28,1475040
2016/07/29,1740547


どうしたらよいでしょうか?

VB.netでデータを読み込みました。
何もしないで読み込むと下記のような右の昇順になります。
2016/07/31,1306453
2016/07/30,1326235
2016/07/27,1434311
2016/07/28,1475040
2016/07/29,1740547

そこでデータセットに格納後
'昇順ソートを実施
DataGridView1.Sort(DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
を処理後は下記のように表示されますが
2016/07/27,1434311
2016/07/28,1475040
2016/07/29,1740547
2016/07/30,1326235
2016/07/31,1306453

...続きを読む

Aベストアンサー

DataGridViewとDataSetおよびDataTableは別物ですよ。
DataGridViewをソートしたからといって、DataTableの並び順が変わるわけではありません。

ループする対象は、DataTableではなく、DataGridViewでしょうね。

また、いくつかの方法論が出てきますが、ここら辺の説明のように、DataViewを利用するとか、ソートしたものを別なDataTableに落とし込むとかします。
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/27b4157e-701a-4cd3-b370-08ece4aabc28/datagridview-sort-datatable-datatable?forum=vbgeneralja
http://www.atmarkit.co.jp/fdotnet/dotnettips/363dtsort/dtsort.html
http://jehupc.exblog.jp/9814663/
http://noqisofon.hatenablog.com/entry/20110328/1301238234
http://futuremix.org/2009/03/datatable-select-sort

が、可能ならば、そもそも求めるソート順で読み込むという方が楽です。

DataGridViewとDataSetおよびDataTableは別物ですよ。
DataGridViewをソートしたからといって、DataTableの並び順が変わるわけではありません。

ループする対象は、DataTableではなく、DataGridViewでしょうね。

また、いくつかの方法論が出てきますが、ここら辺の説明のように、DataViewを利用するとか、ソートしたものを別なDataTableに落とし込むとかします。
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/27b4157e-701a-4cd3-b370-08ece4aabc28/datagridview-sort-datatable-datatable?forum=vb...続きを読む

Q日付の英語表記の正しいものは

たとえば、日記や手紙などに英語で日付を記入する場合、


feb.14.2009

と書くのか、


14.feb.2009


と書くのか、どちらが正しいのか、もしくはどちらでもいいのか、
一般的な方を教えて下さい

Aベストアンサー

こんばんは。

よく見かける質問ですね。

はるか昔に、NHK講座のテキストで覚えましたが、

Feb. 14, 2009

(Feb[ピリオド+1文字空白]14[カンマ+1文字空白]2009)

が一般的です。

ピリオドは、「Febというのは、略した書き方ですよ」という意味で、
カンマは、「(2月14日にも色々あるけれども)2009年の2月14日ですよ」の「の」に相当します。



一応、過去のQ&Aも貼っておきますね。

http://oshiete1.goo.ne.jp/qa3656908.html
↑英語カテゴリーのスーパースター2名様のご回答あり

http://oshiete1.goo.ne.jp/qa1718332.html

http://oshiete1.goo.ne.jp/qa2198910.html

http://oshiete1.goo.ne.jp/qa3512375.html

http://oshiete1.goo.ne.jp/qa1982247.html

ご参考になりましたら。

こんばんは。

よく見かける質問ですね。

はるか昔に、NHK講座のテキストで覚えましたが、

Feb. 14, 2009

(Feb[ピリオド+1文字空白]14[カンマ+1文字空白]2009)

が一般的です。

ピリオドは、「Febというのは、略した書き方ですよ」という意味で、
カンマは、「(2月14日にも色々あるけれども)2009年の2月14日ですよ」の「の」に相当します。



一応、過去のQ&Aも貼っておきますね。

http://oshiete1.goo.ne.jp/qa3656908.html
↑英語カテゴリー...続きを読む

Qvb.netでCSVファイルを変換して新しいCSVファイルを作りたいの

vb.netでCSVファイルを変換して新しいCSVファイルを作りたいのですが、どのようにすれば良いかヒントを教えていただけないでしょうか?

A組,10代,10
A組,20代,20
A組,30代,30
B組,10代,40
B組,20代,50
B組,30代,60
C組,10代,70
C組,30代,80

この様なCSVファイルを変換して

,A組,B組,C組
10代,10,40,70
20代,20,50,
30代,30,60,80

という表のようなCSVファイルを作りたいのです。
データベースなどに入れずに、ファイルtoファイルでの変換がしたいです。
最初のファイルの1列目と2列目の項目をそれぞれ配列に入れて重複をなくす位までは思いつくのですが、そこから先がどの様にすれば良いかよく分かりません。
ヒントだけでも良いのでよろしくお願いいたします。

Aベストアンサー

SortedDictionaryを使うのは如何でしょう?
Dim Q As New SortedDictionary(Of String, _
    SortedDictionary(Of String, Integer))
Qのキーは10代、20代、等の項目になります。
QのデータはSortedDictionaryで、キーはA組、B組等、
データは数値(3列目)です。
ランダムに書き込んでも、ソートされて記録されますので、
ファイルの入力処理後にFor Each文でデータを出力すれば
目的のように出力できます。

Dim A As New StreamReader("C:~.csv", _
    Encoding.GetEncoding("shift_jis"))
Dim B As New SortedDictionary(Of String, Integer)
Dim C As New SortedDictionary(Of String, _
    SortedDictionary(Of String, Integer))
Dim D As String
Dim E
Do Until A.EndOfStream
    D = A.ReadLine
    E = D.Split(",")
    If Not B.Keys.Contains(E(0)) Then B.Add(E(0), 0)
    Dim F As SortedDictionary(Of String, Integer)
    If C.Keys.Contains(E(1)) Then
        F = C(E(1))
        If F.Keys.Contains(E(0)) Then
            F(E(0)) = F(E(0)) + E(2)
        Else
            F.Add(E(0), E(2))
        End If
    Else
        F = New SortedDictionary(Of String, Integer)
        F.Add(E(0), E(2))
        C.Add(E(1), F)
    End If
Loop
A.Close()
Dim G = New StreamWriter("C:\~.csv", False, _
    Encoding.GetEncoding("shift_jis"))
For Each H As String In B.Keys
    G.Write("," & H)
Next
G.WriteLine("")
For Each H As String In C.Keys
    G.Write(H)
    Dim F As SortedDictionary(Of String, Integer) = C(H)
    For Each D In B.Keys
        If F.Keys.Contains(D) Then
            G.Write("," & F(D).ToString())
        Else
            G.Write(",0") '省略時はコメントアウト
        End If
    Next
    G.WriteLine("")
Next
G.Close()

SortedDictionaryを使うのは如何でしょう?
Dim Q As New SortedDictionary(Of String, _
    SortedDictionary(Of String, Integer))
Qのキーは10代、20代、等の項目になります。
QのデータはSortedDictionaryで、キーはA組、B組等、
データは数値(3列目)です。
ランダムに書き込んでも、ソートされて記録されますので、
ファイルの入力処理後にFor Each文でデータを出力すれば
目的のように出力できます。

Dim A As New StreamReader("C:~.csv", _
    Encoding.GetEncoding("shift_jis"))
Dim B As...続きを読む

Qこの写真の英語と数字をどうしたら 誕生日などにできますか? ちなみに 0212と0410の日付を教え

この写真の英語と数字をどうしたら
誕生日などにできますか?
ちなみに
0212と0410の日付を教えて欲しいです、


ちなみにこれは、カップルのアプリので彼氏も英語全くです
バカなカップルでごめんなさい

よろしくお願いします!

Aベストアンサー

0212→2月12日→February 12 0410→4月10日→April 10

QOutLookのアドレス帳データをVBで取得・CSVに変換する

こんにちは。

掲題のとおり、今作成しているアプリに、
ボタンをクリックすると、
OutLookのアドレス帳データをボタンVBで取得・CSVに変換する機能を付け加えたいのですが、
技術的に、可能なのでしょうか?

よろしくお願いいたします。

Aベストアンサー

可能みたいです。
「Visual Basic 6.0 300の技 ネットワーク+データベース編(技術評論社)」という本に書いてありました。
MAPIコントロールを使うそうです。

参考URL:http://www.galliver.co.jp/book/vb300/

QMovableTypeでブログを投稿した時の日付表記を英語にするには?

最近MovableTypeを使い始めた者です。
ちなみにバージョンは3.2-ja-2です。

ネットで無料でダウンロード出来るテンプレートを組み込んでブログを作りました。
ですが、このテンプレートは新規エントリーでブログを書いて投稿した時に投稿した日付が入りますが、日本語で「2006年02月25日」という風に入ります。
他の人のMTで作られたサイトを見ていると、ブログ投稿の日付が「February 25,2006」って感じに入っているのを見ました。僕もこう言う風にしたいんですが、その方法が解りません。

デフォルトのテンプレートは確か英語表記だったので、この僕が組み込んだテンプレートは何かタグがいじられていたのかもしれません。デフォルトに全部戻してしまうのもイヤなので何か方法はないのでしょうか?


管理画面のメインメニューから、設定→基本(設定)のところで日付表示用の言語を選べれるので、これかと思って英語にしてみたのですが、変わったのは月別アーカイブの表記だけで、相変わらずエントリーしたときの日付は日本語のままです。


MTを使い慣れている人で解る人が居られたらどうか教えてください。

宜しくお願いします。

最近MovableTypeを使い始めた者です。
ちなみにバージョンは3.2-ja-2です。

ネットで無料でダウンロード出来るテンプレートを組み込んでブログを作りました。
ですが、このテンプレートは新規エントリーでブログを書いて投稿した時に投稿した日付が入りますが、日本語で「2006年02月25日」という風に入ります。
他の人のMTで作られたサイトを見ていると、ブログ投稿の日付が「February 25,2006」って感じに入っているのを見ました。僕もこう言う風にしたいんですが、その方法が解りません。

デフォルト...続きを読む

Aベストアンサー

英語表記といっても、何パターンかあるので、
どのように表示したいのかを書いたほうが、答えやすいかも知れません。

取り合えず、方法は、

各テンプレート内の
<$MTEntryDate format="ここを変更します"$>


簡単なのは、
<$MTEntryDate format="%x"$>
と書くと、
April 12. 2004
と表示される方法です。


その他、
%a曜日を省略文字で表示(Mon)
%A曜日を文字で表示(Monday)
%b月を省略文字で表示(Apr)
%B月を文字で表示(April)

等いろいろあります。

QVB4⇒VB6の移植時の注意点は?

VB4で開発してるのですが
VB6とのDLLなどの競合問題を避けるために
VB6への移植を検討してます。

VB4ファイルをVB6で開いて
保存してコンパイルするだけ
では動かないのでしょうね。

移植時には
どんな注意点が必要ですか?

Aベストアンサー

[VB] 16 ビット版から Visual Basic 6.0 への移植時の注意事項
http://support.microsoft.com/default.aspx?scid=kb;ja;412583

[VB] 32 ビット版から Visual Basic 6.0 への移植時の注意事項
http://support.microsoft.com/default.aspx?scid=kb;ja;412580


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報