Excel VBAでファイルを開いて別名で保存する方法

このQ&Aのポイント
  • Excel VBAを使用してファイルを開き、別名で保存する方法について教えてください。
  • 現在のExcel VBAプログラムでは、ユーザにフルパスでのファイル名入力が必要であり、それを改善したいと考えています。
  • また、保存するときもフルパスでの入力が必要であり、自動的に名前を変えて保存する方法についても知りたいです。
回答を見る
  • ベストアンサー

Excelマクロでファイルを開き、別名での保存方法

Excel VBAについて確認させてください。 Excel VBAで下記のようなプログラムを作成しました。 簡単に言えば元のファイルを開いて、元のファイルにある処理をして ファイル名を変えて保存するといったマクロです。 ですが、下記のプログラムはInputBox 関数で ユーザにわざわざフルパス(C:\・・・)で入力させる必要があります。 (変数A1の部分です。) この部分をこのマクロの存在するディレクトリの場所を何らかの関数?で あらかじめ検索してその場所を引数に渡して指定しておき、 ユーザにはファイル名のみ入力させる方法に改良したいのですが その方法をご教授いただけますでしょうか。 (チェックするファイルはこのマクロと同じディレクトリにあることになっている設定です。) そして保存するときもフルパス(C:\・・・)でわざわざ入力する必要があります。 (下記のプログラムでは変数A2) そこでこのマクロの存在するディレクトリの場所を何らかの関数?で あらかじめ検索してその場所を引数に渡して指定しておき、 そこに自動的に名前を変えて保存する方法に改良したいのですが その方法をご教授いただけますでしょうか。 (たとえば111.txtを処理した場合、111処理済.txtとして自動的に保存。) 以下、プログラム本文です。 ------------------------------------- Sub charactercheck() Dim a As String Dim y As Long Dim A1 As String Dim A2 As String A1 = InputBox("チェックしたいファイル名をパス名から入力してください。") A2 = InputBox("チェック結果を保存するファイル名をパス名から入力してください。") With CreateObject("Scripting.FileSystemObject").GetFile(A1).OpenAsTextStream a = .ReadAll For y = 1 To Cells(Rows.Count, 1).End(xlUp).Row a = Replace(a, Cells(i, 1), "") Next .Close End With With CreateObject("Scripting.FileSystemObject").OpenTextfile(A2, 2, True) .Write a .Close End With End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

>この部分をこのマクロの存在するディレクトリの場所 ThisWorkbook.Path です。

rotawota7
質問者

お礼

遅くなって申し訳ございません。 早速のご回答ありがとうございます。 分かりやすいご説明、誠にありがとうございます。 ご参考にさせていただきます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Sub test01() a = CurDir MsgBox a End Sub をやってみて(標準モジュールで)、この場合に、使えるかどうか考えてみて。 使うときは、この文字列最後に\が必要と思うが。

rotawota7
質問者

お礼

遅くなって申し訳ございません。 早速のご回答ありがとうございます。 アドバイスご参考にさせていただきます。

関連するQ&A

  • Excelマクロでファイルで重複する文字の削除方法

    Excel VBAについて確認させてください。 下記のExcelマクロはエクセルのA列に入力されてある文字を順に読み込んで ユーザが入力したテキストファイル(=FN1)を読み込んで エクセルのA列に入力されてある文字が見つかった場合は削除する動作の繰り返し作業を行い、 エクセルのA列の文字が入力されてある最後の行まで行ったら 出力ファイル(=FN2)として保存するプログラムです。 ここで出力ファイルにはエクセルのA列に入力されていない文字が 残るものと思われますが、ここで入力されていない文字で 重複する文字があった場合はまとめて一つにする方法をを ご教授いただけますでしょうか。 以上お手数おかけしますがよろしくお願いします。 以下、プログラム本文です。 ----------------------------------------------- Sub sample() Dim a As String Dim y As Long Dim x As String Dim FN1 As String Dim FN2 As String x = InputBox("チェックするファイル名を入力してください。(拡張子も含めてください。)") FN1 = ThisWorkbook.Path & "\" & x FN2 = ThisWorkbook.Path & "\チェック済" & x With CreateObject("Scripting.FileSystemObject").GetFile(FN1).OpenAsTextStream a = .ReadAll For y = 1 To Cells(Rows.Count, 1).End(xlUp).Row a = Replace(a, Cells(y, 1), "") '読み込んだテキストファイルにエクセルのA列にある文字が見つかった場合削除 a = Replace(a, vbCrLf, "") '改行コードの削除 a = Replace(a, vbTab, "") 'タブコードの削除 Next .Close End With With CreateObject("Scripting.FileSystemObject").OpenTextfile(FN2, 2, True) .Write a .Close End With End Sub

  • 文字列aを一文字ずつExcelのセルに入力する方法

    Excel VBAについて確認させてください。 下記のエクセルマクロはエクセルのA列に入力されてある文字を順に読み込んで ユーザが入力したテキストファイル(=FN1)を開いて エクセルのA列に入力されてある文字が見つかった場合は削除する作業を 文字が入力されてある最後の行までループによって行い、 最終的に処理した文字列aを出力ファイル(=FN2)に保存するプログラムです。 このプログラムを改良して文字列aを出力ファイル(=FN2)に保存するのをやめて 文字列aを一文字ずつ、Excelのセルごとに1行ずつ入力するプログラムを作成したいのですが どのようにすればよいかご教授いただけますでしょうか。 以下、プログラム本文です。 ------------------------- Sub sample() Dim a As String Dim y As Long Dim x As String Dim FN1 As String Dim FN2 As String x = InputBox("チェックするファイル名を入力してください。(拡張子も含めてください。)") FN1 = ThisWorkbook.Path & "\" & x FN2 = ThisWorkbook.Path & "\チェック済" & x With CreateObject("Scripting.FileSystemObject").GetFile(FN1).OpenAsTextStream a = .ReadAll For y = 1 To Cells(Rows.Count, 1).End(xlUp).Row a = Replace(a, Cells(y, 1), "") '読み込んだテキストファイルにエクセルのA列にある文字が見つかった場合削除 a = Replace(a, vbCrLf, "") '改行コードの削除 a = Replace(a, vbTab, "") 'タブコードの削除 Next .Close End With With CreateObject("Scripting.FileSystemObject").OpenTextfile(FN2, 2, True) .Write a .Close End With End Sub

  • エクセル・名前を付けて保存するマクロ 不要な文字を消す方法

    お世話になります。 エクセルで「名前をつけて保存」のマクロを作って使用していますが、 一部、改造したいところがあります。 B20セルの文字が自動でファイル名になるようにしています。 「件名:●×商店納品見積書_20090125_1326」という感じなのですが、 最初の「件名:」という文字が不要で、毎回手動で消しています。 しかし、この文字を最初から消しておくわけにはいかず、 マクロ実行時のみ「件名:」が消えるようにしたいのです。 よい方法はありますか? どうぞよろしくお願いします。 Sub ブック保存() Dim SaveFileName As String, re As Variant, WSH As Variant, Path As String Set WSH = CreateObject("WScript.Shell") Path = WSH.SpecialFolders("Desktop") & "\" With Sheets("見積書").Range("B20") If .Value = "" Then MsgBox "店舗名が入力されていません", vbExclamation Exit Sub Else SaveFileName = Path & .Value & "_" & Format(Now, "yyyymmdd_hhmm") End If End With Set WSH = Nothing re = Application.GetSaveAsFilename(SaveFileName) If re = False Then MsgBox "保存中止", vbExclamation Else ActiveWorkbook.SaveAs SaveFileName MsgBox "保存OK", vbInformation End If End Sub

  • エクセルファイルをフロッピーに保存するマクロで教えて下さい

    今、フロッピーにファイルを保存する為のマクロを創っているのですが ワイルドカードの使い方を教えて下さい ここから***** Sub フロッピー保存() ' ' Dim fNAME As String fNAME = ActiveWorkbook.Name 'アクティブなブックのファイル名を取得 'ファイルが新規に作成された場合の処理(book1,book2等と成っている場合) If fNAME = "Book*" Then fNAME = Application.InputBox(prompt:="新規ファイルですね。ファイル名を入力して下さい", _          Title:="新規ファイル入力", Type:=2) Else ActiveWorkbook.Save End If '取得したファイル名でフロッピーディスクに保存 ActiveWorkbook.SaveAs Filename:="A:\"&fNAME, _    FileFormat:=xlNormal, _ Password:="",WriteResPassword:="",ReadOnlyRecommended:=False, _ CreateBackup:=False End Sub ここまで***** >>'ファイルが新規に作成された場合の処理(book1,book2等と成っている場合) >> If fNAME = "Book*" Then この、If fNAME = "Book*" Then が有効に働いていないみたいなんです。 「ワイルドカード・・・* や ? はマクロではどの様な書式が正しいのでしょう それと、エラー処理なんですが InputBoxメソッドでキャンセルやファイル名を入力しないで「OK]が押された 場合の処理、又フロッピーが挿入されていなかった場合などの エラー処理の対処法を教えて下さい

  • ExcelVBAマクロでGUIによるファイル名指定

    ExcelVBAマクロについて確認させてください。 下記のようにマクロのあるカレントフォルダに存在するファイルのなかから 読み込みたいファイルの名前を手入力してそれを変数aに読み込ませています。 ですが、この方法ですとユーザがいちいち手入力しなければならず、 ユーザ負担が大きいのと入力漏れおよび入力ミスが発生する恐れがあります。 そこで、マウスでファイルをクリックして指定するように基礎的な操作をマウスによって 行うGUIを作成したいのですが、ExcelVBAマクロで可能でしょうか。 あるいはExcelVBAに導入が可能なソフトウェアおよびそれが可能なソフトウェア があればぜひご教授ください。 以上、よろしくお願いいたします。 ---------------------------------- Sub sample() Dim FN As String Dim FullPathFileName1 As String Dim a As String FN = InputBox("読み込むファイル名を入力してください。(拡張子も含む。)") FullPathFileName1 = ThisWorkbook.Path & "\" & FN a = CreateObject("Scripting.FileSystemObject").GetFile(FullPathFileName1).OpenAsTextStream.Readall a = Replace(a, vbCrLf, "") '改行コードの削除 CreateObject("Scripting.FileSystemObject").GetFile(FullPathFileName1).OpenAsTextStream.Close End Sub

  • 【VBA】ExcelマクロでCSVファイルに保存したデータが""で囲まれてしまう

    添付図のような、Excel2003で作成した表内のデータを CSVで保存するマクロを作成したのですが、 図のように、CSVファイルに「""」で値が囲まれた状態で、 保存されてしまいます。 下記にマクロを記載しますので、 どうすれば文字列が「""」で囲まれずに、 カンマ区切りだけのデータで出力されるのか、 ご存知の方おられましたら、ご教示お願い致します。 Sub csv保存() Dim フォルダ名 As String Dim パス名 As String Dim ファイル名 As String Dim データ As Variant Dim 行数 As Long, 列数 As Integer Dim i As Integer, j As Long, k As Long ファイル名 = "test.csv" フォルダ名 = "csv" パス名 = ActiveWorkbook.Path & "\" & _ フォルダ名 'csvフォルダが存在しなければ作成する If Dir(パス名, vbDirectory) = "" Then MkDir パス名 End If ChDir パス名 Open ファイル名 For Output As #1 For i = 1 To Worksheets.Count Worksheets(i).Activate Worksheets(i).Cells(1, 1).Select ActiveCell.CurrentRegion.Select 行数 = Selection.Rows.Count 列数 = Selection.Columns.Count For j = 1 To 行数 For k = 1 To 列数 - 1 データ = Selection.Cells(j, k) _ .Value Write #1, データ; Next k Write #1, Selection.Cells(j, 列数) _ .Value Next j Next i Close #1 End Sub

  • ExcelVBAマクロでワードファイル読み込み方法

    ExcelVBAマクロについて確認させてください。 下記のように読み込みたいファイルをフォームで指定して それを変数aに読み込ませています。 ですが、この方法ではテキスト文書しか読み込みが出来ないようです。 ワードファイルも読み込むように設定したいのですが可能でしょうか? 可能でしたらその方法をご教授いただけますでしょうか。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream '指定したファイルを開く a = .ReadAll 'テキスト文書の内容を文字列aに代入 .Close '指定したファイルを閉じる End With End Sub

  • Excelマクロのエラー

    お世話になります。 マクロは、超初心者で只今、本やネットで勉強中なのですが、本の通りに作成しましたが、 エラーが出てしまいます。 急いでおりまして、大変お手数ですがご教示お願いできますでしょうか? Excel2007でマクロを作成中(実際に業務で使用する環境は2003です)。 2点あります。 (1)サブフォルダ内の全ブックを開く  ファイルは開くのですが、下記のエラーが出てしまいます。  C:¥...... "\web保存\"が見つかりません。ファイル名およびファイルの保存場所が  正しいかどうかを確認してください。 (2)開いたファイルをhtm保存する。  htm保存できるのですが、ファイル名が「●●●.xls.htm」  となってしまい、元のファイル名の.xlsの拡張子が付いたままです。  ファイル名を変えず、「●●●.htm」となるようにしたいです。 どうぞ宜しくお願い致します。 (1)サブフォルダ内の全ブックを開く Sub 全ブックを開く() Dim パス名 As String Dim ファイル名 As String パス名 = ThisWorkbook.Path & "\web保存\" ファイル名 = Dir(パス名 & "*.xls*") Do While ファイル名 <> " " Workbooks.Open パス名 & ファイル名 ファイル名 = Dir() Loop End Sub (2)開いたファイルをhtm保存する Sub htm保存() Dim wb As Workbook Dim wbname As String For Each wb In Workbooks wb.Activate If wb.Name <> ThisWorkbook.Name Then wb.SaveAs FileName:=ThisWorkbook.Path & "\" & wb.Name & ".htm", FileFormat:=xlHtml, CreateBackup:=False wb.Close savechanges:=False End If Next End Sub

  • ExcelVBAマクロでワードファイル書き込み方法

    ExcelVBAマクロについて確認させてください。 下記のように読み込みたいWordファイルをフォームで指定して Wordファイルの内容を変数aに読み込ませてます。 変数Xにある任意の文字列を代入し、変数aでその変数Xが検索された場合は その検索された文字列全てを赤文字にして別の名前で保存という方法は可能でしょうか。 可能であればその方法をご教授下さい。 以上、よろしくお願いいたします。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream '指定したファイルを開く a = .ReadAll 'テキスト文書の内容を文字列aに代入 .Close '指定したファイルを閉じる End With End Sub

  • エクセルのマクロを利用して

    マクロ初心者でです。 いろんなサイトから引用させて頂き次のようなマクロを作成しました。 実行すると、日付と担当者氏名(A1)がファイル名となるものです。 そこで教えて頂きたいのですが、実行すると保存先がマイドキュメントに なるのですが、これを例えば「C:\日報」というフォルダが指定されるようにしたいのですが、 自分なりに、いろいろ試したのですが全くできません。 宜しくお願い致します。 Sub 名前をつけて保存() Dim SaveFileName As String, re As Variant With Sheets("sheet1").Range("A1") If .Value = "" Then MsgBox "名前が入力されていません", vbExclamation Exit Sub Else SaveFileName = Format(Now, "yyyymmdd") & "_" & .Value End If End With re = Application.GetSaveAsFilename(SaveFileName) If re = False Then MsgBox "保存を中止しました", vbExclamation Else MsgBox "日報をを保存しました", vbInformation End If End Sub

専門家に質問してみよう