質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

1050閲覧

CSVファイルをテキスト形式で開いた後のファイル削除

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/01/24 13:25

CSVファイルをテキスト形式で開いてから指定の位置からコピーをしたく、以下のようなコードを考えています。
ただ、これだとコピー処理後にActiveSheetがある場所に、選択したCSVと同じ名前のtextファイルが生成されるのですが
削除方法が分かりません。
killメソッドを利用すればいいのかと思うのですが、textファイルのフルパスが開けずエラーになります。操作しているテキストファイルを閉じる方法などありましたら、ご教示いただけますと幸いです。

Sub OpenCsv()
Const MAX_COLS = 256 '最大列数
Dim strFileName As String
Dim vrnFieldInfo(MAX_COLS - 1) As Variant
Dim i As Integer
Dim Path As String

strFileName = Application.GetOpenFilename( _ "テキストファイル,*.txt,CSVファイル,*.csv") If strFileName = "False" Then Exit Sub End If If Right(strFileName, 4) = ".csv" Then Dim NewName As String NewName = Left(strFileName, Len(strFileName) - 4) + ".txt" FileCopy strFileName, NewName strFileName = NewName End If For i = 1 To MAX_COLS vrnFieldInfo(i - 1) = Array(i, 2) Next 'ファイルOpen Workbooks.OpenText Filename:=strFileName, StartRow:=1, _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _ :=False, Tab:=False, Semicolon:=False, Comma:=True, _ Space:=False, Other:=False, FieldInfo:=vrnFieldInfo

 

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Workbooks.OpenText では、拡張子がcsvでは区切り文字等の制御ができないので、
拡張子をtxtに変更したコピーファイルを生成してそれを開いている(csv以外ならそのまま開く)。
提示のコードはここまでですね。

その後、なんらかの処理をした後(指定位置からコピー?)、コピーファイルは不要なので削除したい、ということがご希望のことですね。
削除の方法は lazybones2000さんから既に回答が付いていますので、別案を。

Workbooks.OpenText だとtxtじゃないと制御できないのでコピーファイルが必要になりますが、
QueryTables.Add なら、csvでも制御可能なの、これで読み込めばどうでしょうか。
これならコピーファイルを作成する必要もないし、削除する必要もないです。

VBA CSV ファイルの読み込み (QueryTables.Add 関数を使う)

投稿2019/01/25 01:15

hatena19

総合スコア33620

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/25 02:27

ご回答ありがとうございます! こちらの手法でやりたいことが実現できたのでベストアンサーにさせて頂きました。 私の拙い説明から状況を汲み取って頂きありがとうございました! また、説明不足で申し訳ございませんでした。
guest

0

(回答依頼とはなんだろう。。。。)(独り言)

解決済のようですが、一応書いてみます。

CSVファイルをテキスト形式で開いてから指定の位置からコピーをしたく

「CSVファイルの固定の位置のデータを取り込みたい」

が、やりたいことならば、難しく考えず、

1)CSVファイルをエクセルで開く
2)指定の位置のセルをコピペ
3)開いたファイルを保存せずに閉じる

の作業工程で出来ると思います。
このコードを探りたいなら、その操作を、「マクロの記録」という機能で、
VBAに記録してもらえば、参考になるコードが得られます。
このコードを参考に再利用可能な形に改変すればマクロ化出来ると思います。

ただし、データ中に、
001
というような文字列や、エクセル君が日付と読める文字列があれば、
おせっかいして、変換してくれちゃいますので、
そういう場合は、「テキストファイルのインポート」の機能を使い、
列毎にデータの型を指定して文字列をデータとして取り込めばいいです。

あんまり、CSVファイルとかTXTファイルとか気にしなくていいです。
とりあえず、1回手動でエクセルで開いてみて、結果から、対応を判断すればいいと思います。
エクセルで開いてしまえば、それはエクセル君から見たら、
「ワークブック」
なので。

投稿2019/01/26 01:43

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/26 01:52

mattuwanさん 回答依頼したのに先に解決済みにしており申し訳ございません。 (他の方の回答で解決したため、先にベストアンサーをつけさせて頂きました…本当に失礼いたしました。) また依頼を出すかもしれませんが、もしお時間があればご確認頂けると幸いです…
guest

0

問題や知りたいことがいくつかあるように読めますが、どれでしょうか。

  • ファイルを開けない

提示されたコードで動作するように思います。

  • 開いたファイルを閉じる方法がわからない

ブックとして開かれているはずなので、ブックのCloseメソッドでいいと思いますが、OpenTextステートメントでは開いたブックを取得できないため、別途取得する必要があります。
*手抜きパターンActiveWorkBook.Close
ファイルを開いた状態のまま変更がなければアクティブなブックであるはずです。
変更される想定があるならこの方法は使えません。
*やや手抜きパターンWorkBooks(Dir(strFileName)).Close
ファイルが存在すればDir関数がファイル名を返す動作を利用します。無い場合は空文字列が返されますが、ファイルを開けているので無いはずがないので気にしないことにします。

  • 削除するファイル(名)の指定方法がわからない

前段で閉じられているはずなのでkill strFileNameで良いと思います。
ダイアログで取得したファイル名はフルパスであり、提示コードでは拡張子部分をを変更しているだけですので、フルパスになっているはずです。

もしかしたら誤解しているかも?ということで補足:
ファイルがコピーされるフォルダーはコピー元のファイルと同じになります。ActiveSheet(VBAを書いているブックのことですよね?)ではありません。もちろん、それらが同じフォルダーにあるならば結果的に同じことです。

投稿2019/01/24 16:20

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2019/01/25 00:56

おそらく拡張子を変更してコピーしたファイルを削除したいということだと思われますので、 コピーしたかどうかを変数に格納しておいて、コピーした時のみ kill strFileName を実行するようにしたほうがいいかもしれません。でないと、オリジナルのファイルを削除してしまう可能性があります。
退会済みユーザー

退会済みユーザー

2019/01/25 01:27

オリジナルのファイルは.csvであり、.txtは(例えば今回のようなケースで作成された)作業用ファイルなのだと決めつけてしまっていたので考えから外れていましたが、なるほどそうかもしれませんね。 本当に一時作業用ファイルならば、コピー先を%temp%あたりにするようなアドバイスも、と考えましたが、回答としてつけられたQueryTables.Addを使ったほうがスマートですね。
退会済みユーザー

退会済みユーザー

2019/01/25 02:25

lazybones2000様 私の拙い説明からここまで詳細なご説明を頂きありがとうございます! ちなみに、読み込むCSVやマクロを起動したExcelなどがすべて同じフォルダにあったので勘違いしてしまいました。 非常に勉強になりました。また、説明不足の投稿となり申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問