区切られたテキストファイルにカンマを使用すると、地域設定でそのルーツが見つかります。コンマは米国で標準ですが、ドイツなどの国ではセミコロンを使用します。地域と言語設定でリストセパレータの値を変更し、Excelの[名前を付けて保存]ウィンドウからCSV(カンマ区切り)(.csv)を選択することができます。結果のファイルは、システム設定の値によって区切られます。このスクリプトは、デフォルトのリストセパレータ設定を変更します。次に、指定されたスプレッドシートを開き、それを再保存します。終了する前にシステム設定を以前の値に戻します。
2つのコマンドラインパラメータを受け入れます。最初のものは入力スプレッドシートです。 2番目はエクスポートされたファイルの出力ファイル名です。
strDelimiter = ";"
strSystemDelimiter = "" ' This will be used to store the current sytem value
Const HKEY_CURRENT_USER = &H80000001
' Get the current List Separator (Regional Settings) from the registry
strKeyPath = "Control Panel\International"
strValueName = "sList"
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
objRegistry.GetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strSystemDelimiter
' Set it temporarily to our custom delimiter
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strDelimiter
' Open spreadsheet with Excel and save it in a text delimited format
Const xlCSV = 6
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open(WScript.Arguments.Item(0))
objWorkbook.SaveAs WScript.Arguments.Item(1), xlCSV
objWorkbook.Close vbFalse ' Prevent duplicate Save dialog
objExcel.Quit
' Reset the system setting to its original value
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strSystemDelimiter
これは、Excelの[名前を付けて保存]ダイアログボックスでのみ有効で、コマンドラインや自動化では機能しないようです。 Excelのウィンドウを表示させるためにスクリプトを少し変更し、ショートカットキーを使用して、Excelインターフェイスを通じて[名前を付けて保存]ダイアログを開きます。これはトリックを行う必要があります。それはExcel 2007でVista x64で私のために働いた。私はこれがあなたのために働くことを願っています。
strDelimiter = ";"
strSystemDelimiter = "" ' This will be used to store the current sytem value
Const HKEY_CURRENT_USER = &H80000001
' Get the current List Separator (Regional Settings) from the registry
strKeyPath = "Control Panel\International"
strValueName = "sList"
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
objRegistry.GetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strSystemDelimiter
' Set it temporarily to our custom delimiter
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strDelimiter
' Open spreadsheet with Excel and save it in a text delimited format
Const xlCSV = 6
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = vbTrue
Set objWorkbook = objExcel.Workbooks.Open(WScript.Arguments.Item(0))
WScript.Sleep 500 ' Delay to make sure the Excel workbook is open
strWorkbookName = objExcel.ActiveWorkbook.Name
strTitlebar = strWorkbookName
Set WshShell = CreateObject("WScript.Shell")
WshShell.AppActivate strTitlebar ' Make the workbook active so it receives the keystrokes
WshShell.SendKeys "%fa" ' Keyboard shortcuts for the Save As dialog
WScript.Sleep 500
WshShell.SendKeys "%tc{ENTER}" ' Change the Save As type to CSV
If WScript.Arguments.Count > 1 Then
WshShell.SendKeys "+{TAB}" & WScript.Arguments.Item(1)
WScript.Sleep 500
End If ' This If block changes the save name if one was provided
WshShell.SendKeys "{ENTER}" ' Save the file
WScript.Sleep 500
WshShell.SendKeys "{ENTER}" ' Dismiss the CSV warning dialog
Set WshShell = Nothing
objWorkbook.Close vbFalse ' Prevent duplicate Save dialog
objExcel.Quit
' Reset the system setting to its original value
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strSystemDelimiter
,,,,,,,,,, ExcelObj.Workbooks(1).SaveAsたcsvfile、6理由それはまた、 'John Doe、Euro、" 1,234.00 "'はJohn Doe、Euro; "1; 234.00" 'に解決され、おそらくユーザーが望むものではないでしょう。 – AutomatedChaos
これがデータ型の場合は、明らかに役立たないでしょう。私がこれを投稿したときには、他の回答はなかったので、私は単に返事を出していました。 –
もちろん。また、ユーザーがカンマなしのデータセットが限られている場合はうまくいきます。しかし、データを正しいCSVファイルに変換することは曖昧です。マイクロソフトでさえ、[rfc4180](http://tools.ietf.org/html/rfc4180)フォーマット定義に追いつかない。 – AutomatedChaos