ここから本文です

エクセルファイルを ドラッグ&ドロップ でCSVに変換するスプリクトを 探して...

アバター

ID非公開さん

2018/3/2719:31:54

エクセルファイルを ドラッグ&ドロップ でCSVに変換するスプリクトを
探しております

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

閲覧数:
145
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

Prometheusさん

2018/3/2721:20:44

「VBScript」による回答ですので、「Windows限定」です。

このプログラムは、「xlsx」ファイルを1つだけ、プログラムファイルにドラッグ&ドロップすると、ドラッグ&ドロップしたブックのアクティブシートを、ドラッグ&ドロップしたファイルと同じフォルダ内に、同じ名前(「abc.xlsx」→「abc.csv」)で、保存します。

最後に、「Finished!」と表示しますので、「OK」を押して、終了してください。

以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。

「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず、半角です。

できたプログラムファイル(「~.vbs」ファイル)に、拡張子が「xlsx」ファイルを1つだけドラッグ&ドロップしてください。

Option Explicit
Dim bk, ex, f, n, so, wa
Set so = CreateObject("Scripting.FileSystemObject")
Set wa = WScript.Arguments
If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "xlsx" Then
MsgBox("ドラッグ&ドロップできるのは、xlsxファイル1つだけです")
WScript.Quit
End If
f = so.GetParentFolderName(wa(0))
n = so.GetBaseName(wa(0))
Set ex = CreateObject("Excel.Application")
ex.Application.DisplayAlerts = False
ex.Visible = False
Set bk = ex.Workbooks.Open(wa(0))
bk.SaveAs f & "\" & n & ".csv", 6
bk.Close
ex.Quit
Set bk = Nothing
Set ex = Nothing
Set wa = Nothing
Set so = Nothing
MsgBox("Finished!")

簡単な説明です。

Option Explicit

「厳密に」というような意味ですが、気にしないでください。

Set so = CreateObject("Scripting.FileSystemObject")

ファイルやフォルダを扱えるようにしています。

Set wa = WScript.Arguments
If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "xlsx" Then
MsgBox("ドラッグ&ドロップできるのは、xlsxファイル1つだけです")
WScript.Quit
End If

ドラッグ&ドロップされるのを待っていて、ドラッグ&ドロップされると、その数や拡張子を調べ、想定外なら、メッセージを表示して、プログラムそのものを終了してしまいます。

f = so.GetParentFolderName(wa(0))

ドラッグ&ドロップされたいファイルが存在するフォルダを調べています。

n = so.GetBaseName(wa(0))

ドラッグ&ドロップされたファイルのベースネーム(「abc.xlsx」→「abc」)を調べています。

Set ex = CreateObject("Excel.Application")

エクセルを扱えるようにしています。

ex.Application.DisplayAlerts = False
ex.Visible = False

「上書きしますか?」などと聞いてこないように、また、エクセルを表示しません。

Set bk = ex.Workbooks.Open(wa(0))

ドラッグ&ドロップされたブックを開いています。

bk.SaveAs f & "\" & n & ".csv", 6

同じフォルダ内、同じ名前で「csv」形式で保存しています。

bk.Close

閉じています。

ex.Quit

エクセルそのものを終了しています。

Set bk = Nothing
Set ex = Nothing
Set wa = Nothing
Set so = Nothing
MsgBox("Finished!")

あとは、終了処理で、最後に「Finished!」と表示しています。

アバター

質問した人からのコメント

2018/3/27 22:29:21

ありがとうございました
完璧です
解説もしていただき感謝いたします
こういうの書ける人本当に尊敬します
勉強さしていただきました

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる