- 締切済み
Excel CSVファイル セル名を名前として保存
いつもありがとうございます。エクセル2003XPです。 毎回USBメモリーに上書きされてくる、同名のCSVファイルを別エクセルファイルに読み込む作業をしております。 その作業は外部データの読み込みを記憶マクロとして問題ないのですが、エクセルに読み込んだCSVファイルは、かぶらないようにそのつど、Kill を使い削除しております。 ただ完全に削除なので対策として、 読み込んだCSVファイルの1行目のセル名をファイル名として名前を変えて保存、 PCの"C:\Documents and Settings\元データ に毎回CSVもしくは、エクセルファイルに名前を変更して保存する処理をボタンひとつで出来ないか、考えております。 ネットで色々と検索をしておりますが、勉強不足です。 参考でサンプルマクロは見つけましたが、どのように変更すれば良いか分かりません。ご享受いただければ助かります。 CSVファイル名 : log001.csv(毎回、USB) 保存したいファイル名 : CSVファイルを開いた時のA1のセル名(日付です) 保存場所 : PCのマイドキュメントの元データファイル 保存したいファイル形式 : CSVもしくはExcelファイル Sub THSFILE_SAVE() Dim myFname0 As String Dim myFname As String On Error GoTo ERRH '現在のファイル名取得 myFname0 = ThisWorkbook.Name '新しいファイル名をセルA1の値とする myFname = Sheets(1).Range("A1").Value '同じ階層に保存 ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & myFname If myFname0 <> myFname & ".xls" Then '前の名前のファイルを削除する場合は下の一行を有効にしてください 'Kill ThisWorkbook.Path & "\" & myFname0 End If Exit Sub ERRH: End Sub この処理はCSVファイルの読み込み先のエクセルファイルから、行いたいと考えております。 よろしくお願致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
本来、WScript で十分だと思います。それをデスクトップに置けばよいのですが、わざわざ、VBAにしたところで、どこかのブックに置かなくてはなりません。以下のマクロの登録先は、PERSONAL.XLS や一般のブックに登録することになります。 Kill ThisWorkbook.Path & "\" & myFname0 もとのマクロですが、ThisWorkbookというのは変ですね。 以下は、log数字.csv なら通るようにしてあります。 '// Sub CsvConvertFile() Dim FName As String Dim oFName As String Dim oFullName As String Dim oName As String Dim sPath As String Dim sExt As String Dim i As Long sExt = IIf(Val(Application.Version) > 11, ".xlsx", ".xls") 'デフォルトパス sPath = Application.DefaultFilePath oFName = ActiveWorkbook.Name oFullName = ActiveWorkbook.FullName If Not StrConv(oFName, vbLowerCase) Like "log###*" Then MsgBox "Logファイルではありません。", 16: Exit Sub If InStrRev(oFName, ".csv", , 1) = 0 Then MsgBox "csvファイルではありません。", 16: Exit Sub If ActiveSheet.Range("A1").Value = "" Then MsgBox "A1に文字がありません。", vbCritical Exit Sub End If FName = ActiveSheet.Range("A1").Value '同名ファイルがあった場合に名前を変更 oName = FName Do If Dir(sPath & FName & sExt) <> "" Then i = i + 1 FName = oName & Format(i, "(0)") '重複があった時のファイル名 End If Loop Until Dir(sPath & FName & sExt) = "" ActiveWorkbook.SaveAs sPath & FName, FileFormat:=xlWorkbookNormal If MsgBox(oFName & "を削除してよろしいですか?", vbOKCancel) = vbOK Then Kill oFullName End If End Sub
- kybo
- ベストアンサー率53% (349/647)
以下の様にしてはどうでしょうか? Sub THSFILE_SAVE() Dim myFname0 As String Dim myFname As String myFname0 = Workbooks("log001.csv").FullName myFname = Workbooks("log001.csv").Sheets(1).Range("A1").Value '実行しているブックと同じパスにCSVファイルのコピーを保存 Workbooks("log001.csv").SaveCopyAs ThisWorkbook.Path & "\" & myFname & ".csv" 'CSVファイルを保存しないで閉じる Workbooks("log001.csv").Close False '削除 Kill myFname0 End Sub