dポイントプレゼントキャンペーン実施中!

Nouhin_20171231.csvのようなファイル名のデータが毎日送られてきます。
20171231の部分のファイル名は毎日変化します。

このファイルを、仕入取込用.xlsx という固定したファイル名にして、Access2016の取込用ファイルに使用しています。(csvファイルをEXCElで立ち上げ、名前を変えて保存をしている)

単純な作業ですが、立ち上げ、いくつかクリック、ファイル名の入力、保存先の指定など、素早く作業したい状況の中では、結構煩わしいくなります。

そこで、送られてきたCSVファイルを、数クリックまたはドラックなどで簡単に変換できないものでしょうか?

A 回答 (11件中1~10件)

No.9 の簡単な説明です。



☆「Private Sub Workbook_Open()」~「End Sub」
 なるべく手間を省くため、このブックが立ち上がったときに自動で「ファイル変換()」が実行されるようにするものです。手動で起動させるから不要だ!というならもちろん丸々不要です。
☆「Const パス As String = "C:\Users\dore\Desktop"」
 ファイル選択を少しでも手間を省くために、最初に開くホルダーを指定しています。環境に合わせて変更してください。
☆「Const 出力ファイル As String = "C:\Users\dore\Desktop\取込専用フォルダ\仕入れ取込用.xlsm"」
 出力ファイル名がパスも含めて固定みたいなのでここで指定しています。環境に合わせて変更してください。
☆「If MsgBox("再読み込みしますか?", vbYesNo) = vbYes Then」~「End If」
 存在しないファイルを指定した場合にエラーを出さないで再指定できるようにしたり、中止したいとき「いいえ」を選べば何もせず終了出来ます。
☆「If Workbooks.Count = 1 Then」~「End If」
 このブックのみ開かれた時はエクセル自体も終了しますが、他のブックが開かれていた場合は、このブックのみ閉じるようにしています。
☆「FileFormat:=52, _」
 Excel2003 以前で互換パックで適応している場合に対応するために数値指定しています。Excel2007 以降ならば「FileFormat:=xlOpenXMLWorkbookMacroEnabled, _」の方が判りやすいかもです。
    • good
    • 0
この回答へのお礼

丁寧な解説をありがとうございます。
これで仕事の流れがスムーズになりそうです。

別種データの、別ファイル名作成用に2本立ての運用もできそうです。
パス名を整理して現場での構築ができそうです。

本当にありがとうございました。

お礼日時:2018/01/03 00:27

もしかしたら標準モジュールに書き込んだ「Sub ファイル変換()」の「ファイル変換」を何か別なものに変更しませんでしたか?もし変更したならば「Call ファイル変換」の「ファイル変換」も合わせて変更しないとダメです。

    • good
    • 0
この回答へのお礼

標準モジュールではないところに貼り付けていました。
起動するとすぐに選択画面になりました。

ありがとうございました。

お礼日時:2018/01/03 00:17

それでは以下のようなものはいかがですか?



☆ 標準モジュールへ
--------------------------------------------------------------------------------
Sub ファイル変換()
Const パス As String = "C:\Users\dore\Desktop"
Const 出力ファイル As String = "C:\Users\dore\Desktop\取込専用フォルダ\仕入れ取込用.xlsm"
Dim ファイル名 As Variant
Dim 再読込 As Boolean
Do
ChDir パス
ファイル名 = Application.GetOpenFilename( _
FileFilter:="データファイル(*.csv),*.csv", _
MultiSelect:=False)
If ファイル名 = False Then
If MsgBox("再読み込みしますか?", vbYesNo) = vbYes Then
再読込 = True
Else
再読込 = False
End If
Else
Workbooks.Open Filename:=ファイル名
If Dir(出力ファイル) <> "" Then Kill (出力ファイル)
ActiveWorkbook.SaveAs _
Filename:=出力ファイル, _
FileFormat:=52, _
CreateBackup:=False
ActiveWindow.Close
End If
Loop While 再読込
If Workbooks.Count = 1 Then
Application.Quit
Else
ThisWorkbook.Saved = True
ThisWorkbook.Close
End If
End Sub
--------------------------------------------------------------------------------

☆ ThisWorkbook の Workbook_Open イベントへ(下図の赤で囲んだ部分をダブルクリックで開いた所へ)
--------------------------------------------------------------------------------
Private Sub Workbook_Open()
Call ファイル変換
End Sub
--------------------------------------------------------------------------------

※ コードを書き込んだら一度必ず保存してください。
※ コードを書き換えたいときは、適当なファイルを読み込んでいる最中に[Esc]キーで中断させて行ってください。(自動で進んでしまって中断出来ない為)
「CSVファイルををリネームしてxlsxに」の回答画像9
    • good
    • 0
この回答へのお礼

ありがとうございました。思い通りにファイルができました。

ただ、実行後、EXCELが閉じられて、
再度立ち上げたときに
コンパイルエラー  subまたはFunctionが定義されていません
と出ます。
エラーを何もせずに閉じて、マクロを実行すれば問題なく動くのですが?

お礼日時:2018/01/02 19:04

念の為の確認です「134333NouhinSyokai_yyyymmdd.csv」(「yyyymmdd」は実行日)を読み込んで、ただ「仕入れ取込用.xlsm」で保存するだけで良いのでしょうか?


ちなみに読み込むファイル名指定は次のどれが良いですか?
① 当日の日付から自動で決定する(完全自動で出来るが、日付の変更など出来ない)
② カレンダーのようなもので日付(過去数日程度)を選択して後は自動処理。
③ ファイル選択画面を出して選択して後は自動処理。
    • good
    • 0
この回答へのお礼

「仕入れ取込用.xlsm」で保存するだけでよいです

読み込むファイル名は
仕入れテータを入手する際、その日の分、または、期間を指定してまとまった分でダウンロードできます。ダウンロードした日付がファイル名についているようです。
それで、入力もれ、重複を起こさないように、毎日1日分をダウンロードしておき、溜まっても処理しやすいように、③の方法がよいと思います

お礼日時:2018/01/02 14:46

VBAの力を借りても良いのであれば


・CSVファイルをエクセルに取り込むマクロ
https://ameblo.jp/hokora2016/entry-12325451176.h …
・添付ファイル(OutLookの)を自動保存するマクロ
https://ameblo.jp/hokora2016/entry-12321851997.h …
・複数のファイルのデータをまとめるマクロ
https://ameblo.jp/hokora2016/entry-12319754037.h …
辺りが参考になりませんでしょうか。
https://ameblo.jp/hokora2016/entry-12331462428.h …
年始の休みももう少しありますので、のんびりと構想を練ってみて下さい。
>フィールド数が30もあり、必要なのは5列のみだったりで・・
も列の順番が統一されているのであれば、マクロの組み込みも楽になるでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
年末年始、ACCESSとEXCEL漬けです。
調べてみます。

お礼日時:2018/01/02 14:49

マクロの記録ですが出来れば次のようにやっていただけませんか?



EXCELを立ち上げる
マクロ記録開始
CSVファイルを開く
操作
マクロ記録終了

なおフォルダー名など公表してはいけないものは適当に変更してください。
    • good
    • 0
この回答へのお礼

Sub Macro1()
'
' Macro1 Macro
'

'
Workbooks.Open Filename:= _
"C:\Users\dore\Desktop\134333NouhinSyokai_20180102.csv"
ChDir "C:\Users\dore\Desktop\取込専用フォルダ"
ActiveWorkbook.SaveAs Filename:="C:\Users\dore\Desktop\取込専用フォルダ\仕入れ取込用.xlsm" _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Application.Left = 124
Application.Top = 446.5
Windows("Book1").Activate
End Sub

となりました。

お礼日時:2018/01/02 13:57

NO4です。


>Access2016の取込用ファイル・・・
多分に社内で作成されたシステムですよね。
こちらに、CSVファイルも取り込めるように変更してもらう方法が早いのでは?
VBAを使えれば、メールのファイルを保存しなくても
メールに添付されているファイルを直接操作も出来ますので
保存すると言う操作から全てを、ボタンのワンクリックに置き換えられます。
    • good
    • 0

>Nouhin_20171231.csvのようなファイル名のデータが毎日送られてきます。



>csvファイルをEXCElで立ち上げ、名前を変えて保存をしている
ですが、メールから名前を付けて保存する際に
Access2016の取込用ファイル に上書き保存するではダメなのですか。

>csvファイルをEXCElで立ち上げ、名前を変えて保存をしている
ですが、エクセルのお節介機能で
数字だけの文字型情報が 数値に変換(最初の0が消えたりします)
また1-1 などの文字が 1月1日に変換されたりもします。
知る人は、通常、操作しない手順です。
    • good
    • 0
この回答へのお礼

ACCESSに取り込む際に、直接csvやtxtファイルを指定して読み込めれば簡単なのですが、
項目の先頭行が無いために、既存のEXCELファイルでデータ部分のみを削除-貼り付けでによって更新したり、 
別のファイルではフィールド数が30もあり、必要なのは5列のみだったりで、不要列を削除したり、何かと前処理をしています。
これらは年一回程度のマザーマスタの更新なので、作業の手間はあまり問題になっていません。

今回質問のファイルの取り込みは、そのままの形式で取込できるのですが、ACCESSの ”保存済みインポート操作” を利用してフォームから自動実行でデータ追加をさせるとき、ファイル名が同じでないと実行できないので、やはり一度EXCELでリネームしています。この作業は毎日やる作業なので、できるだけ簡略化し、失敗、漏れ、重複が無いようにしようと思っています。

会社のシステムというよりも、私個人が、EXCELとACCESSの解説書をにらめっこしながら作成している状態です。

ご指摘のようなEXCELのおせっかい機能があるのなら、EXCELを通さない方法を考えなくてはならないですかね*****

お礼日時:2018/01/02 13:20

マクロ(VBA)を使えばかなり簡単に出来ますが、マクロの記録とか使ったことが有りますか?また使っても良いのでしょうか?


実際の作業をマクロを記録して、出来たコードを提示いただければ具体的な回答を得られやすいと思います。
    • good
    • 0
この回答へのお礼

VBAの使用は可です

CSVファイルをダブルクリック
EXCELが立ち上がる
マクロ記録開始
操作
マクロ記録終了

以上の操作で以下の記録がされました。

Sub リネーム()
'
' リネーム Macro
'

'
ChDir &quot;C:\Users\dore\Desktop\取込専用フォルダ&quot;
ActiveWorkbook.SaveAs Filename:=&quot;C:\Users\dore\Desktop\取込専用フォルダ\仕入れ取込用.xlsm&quot; _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

お礼日時:2018/01/02 12:46

>>Nouhin_20171231.csvのようなファイル名のデータが毎日送られてきます。


csvファイルをEXCElで立ち上げ、名前を変えて保存をしている

仕事で、そういう処理を行なうプログラムを作成しました。
内容としては、指定のディレクトリに保存されている、xxx.csv、xxx.tsvというふうなファイルを全てxxx.xlsxに変換して別のディレクトリに出力するってものでした。
言語としては、C#を使いましたが、NuGetライブラリから必要なルーチンをダウンロードすることで、わりと簡単でした。

しかし、こういうプログラムを作るのは、素人さんには難しいと思います。

最近では、クラウドワークスとか、お仕事お願いサイトがあります。
そういうところに有償でお願いすればいいのでは?
    • good
    • 0
この回答へのお礼

そのようなサービスがあるのですね、個人事業なので、高額なサービスは利用できないのでが、調べてみます。
情報ありがとうございました

お礼日時:2018/01/02 13:23

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