• ベストアンサー

パスをセルから取得し保存 VBA

エクセルVBAでの質問です。 Cドライブにテキスト形式で保存する場合は = xlAPP.GetSaveAsFilename(InitialFileName:="C:\test.txt",FileFilter:=cnsFILTER,Title:=cnsTITLE) となると思いますが、上記で使われている”C:\”の部分をセル(保存したいパスを入力)から取得する場合はどのように記述すればよいでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • mimeu
  • ベストアンサー率49% (39/79)
回答No.2

No1. さんが書かれた通りなのですが、言葉を変えてお答えします。 エクセルVBAで、セルに書かれた文字情報を取得するには = Application.Workbooks(ブック名).Worksheets(シート名).Range(セル範囲) とします。    ブック:  例えば "ABC.XLS"    シート名: 例えば "Sheet1"    セル範囲: 例えば "A1" もしあらかじめ、そのブックが選択されているなら    = Worksheets(シート名).Range(セル範囲) でも同じ結果が得られます。 更にもしあらかじめ、そのブックの、そのシートが選択されているなら    = Range(セル範囲) でも同じ結果が得られます。 更にもしあらかじめ、そのセルが選択されているなら    = Selection でも同じ結果が得られます。 (^-^) ですから、ご質問の答は    = xlAPP.GetSaveAsFilename(InitialFileName:=Range("A1"),FileFilter:=cnsFILTER,Title:=cnsTITLE) のようなイメージになります。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

「xlAPP」で引き当ててるってことは,エクセル上で稼働しているマクロでは無いのかな? ご質問の直接の回答としては,(あるエクセルオブジェクトの)あるブックのあるシートのあるセルに「C:\」などのパスが区切りの「\」まで書いてあるとすると = xlAPP.GetSaveAsFilename( _ InitialFilename:= xlapp.ブックオブジェクト.worksheets("シート名").range("セル番地").value & "test.txt", _ FileFilter:= … などのようになりますね。

関連するQ&A

  • エクセルVBAでテキスト保存

    エクセルのファイルをメモ帳で保存する場合に下記のコードが書いてあります。 strFILENAME = xlAPP.GetSaveAsFilename(InitialFileName:="データxxx_yyy_zzz.txt",FileFilter:=cnsFILTER, Title:=cnsTITLE) このうち、ファイル名の"データxxx_yyy_zzz.txt"、xxx, yyy,zzzをそれぞれ、特定のセルから取得したい場合、どのように直せばいいのでしょうか? xxx=A1セル yyy=A2セル zzz=A3セル といった感じです。 よろしくお願いします。

  • エクセル2007VBAの質問です。

    エクセル2007VBAで下記の事をしたいのですがうまくいきません。 ・エクセルシートの数式を消して値を残したものを別名で保存する。 ※保存時は「名前をつけて保存」ダイアログを出したいです。 現在は、下記内容で記述してみましたが、保存されません。 初心者がネットで調べて書いたので、めちゃくちゃな所があると思いますが宜しくお願いします。 ------------------------------------------------------------- Sub シートコピー() ' ' シートを別のブックにコピーする。 ' ' Const cnsTITLE = "エクセル作成" Const cnsFILTER = "エクセルファイル (*.xls),*.xls" Const xlsfile = "C:\temp\ファイル名を入力して下さい。" ' Columns("A:R").Select Selection.Copy Workbooks.Add Columns("A:A").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Set xlsApp = Application xlsApp.StatusBar = "出力ファイル名を指定して下さい。" strFILENAME = xlsApp.GetSaveAsFilename(InitialFileName:=xlsfile, _ FileFilter:=cnsFILTER, title:=cnsTITLE) End Sub -------------------------------------------------------------

  • GetSaveAsFilenameでマイドキュメン

    GetSaveAsFilenameでマイドキュメントを選択する方法は? Sub test() Dim xlAPP As Application Dim vntFileName As Variant ' ファイル名受取り用 Set xlAPP = Application xlAPP.StatusBar = "出力するファイル名を指定して下さい。" vntFileName = xlAPP.GetSaveAsFilename(InitialFileName:="SAMPLE.txt", _ FileFilter:="テキストファイル (*.txt;*.dat),*.txt;*.dat", _ Title:="テキストファイル出力処理") Set xlAPP = Nothing End Sub このダイアログで、マイドキュメントではなく、デスクトップから選択する方法 もしくは、 左側の保存先一覧から、デスクトップをクリックする方法をご教授ください。 XPを使用していますが、マイドキュメントしか選べません。

  • EXCELのVBAでの保存方法

    EXCELで以下のように記述したところ、 「ファイルを置き換えますか」のメッセージの後に 「いいえ」か「キャンセル」を選択すると 「400」というエラーメッセージが表示されます。 「いいえ」か「キャンセル」を選択した場合は、 エラーメッセージを表示させずに、 特定のシートのセルA1にカーソルを移動させたいのですが、可能でしょうか? ご指導よろしくお願いします。 ________________________ FileA = Application.GetSaveAsFilename( _ InitialFilename:="C:\test.xls", _ fileFilter:="XLSファイル (*.xls), *.xls") ActiveWorkbook.SaveAs Filename:=FileA ________________________

  • VBAでのテキストデータ追記

    VBAを使ってデータをテキストファイルに追記したいのですが、 A列だけじゃなく A列からF列までのデータを追記させたいと 考えているのですが、 どうやるのか理解できません。 教えていただけますでしょうか? -------------------------------------------------------------- Option Explicit ' テキストファイル書き出すサンプル Sub WRITE_TextFile() Const cnsTitle = "テキストファイル出力処理" Const cnsFilter = "テキストファイル (*.txt;*.dat),*.txt;*.dat" Dim xlAPP As Application ' Applicationオブジェクト Dim intFF As Integer ' FreeFile値 Dim strFileName As String ' OPENするファイル名(フルパス) Dim vntFileName As Variant ' ファイル名受取り用 Dim strREC As String ' 書き出すレコード内容 Dim GYO As Long ' 収容するセルの行 Dim GYOMAX As Long ' データが収容された最終行 Dim lngREC As Long ' レコード件数カウンタ ' Applicationオブジェクト取得 Set xlAPP = Application ' 「名前を付けて保存」のフォームでファイル名の指定を受ける xlAPP.StatusBar = "出力するファイル名を指定して下さい。" ' (1) vntFileName = xlAPP.GetSaveAsFilename(InitialFilename:="SAMPLE.txt", _ FileFilter:=cnsFilter, _ Title:=cnsTitle) ' キャンセルされた場合はFalseが返るので以降の処理は行なわない If VarType(vntFileName) = vbBoolean Then Exit Sub strFileName = vntFileName ' 収容最終行の判定(Excel認知の最終行から上に向かってデータがある行を探す) With ActiveSheet If .FilterMode Then .ShowAllData ' オートフィルタ解除 End With GYOMAX = Cells(65536, 1).End(xlUp).Row ' (2) If GYOMAX < 2 Then xlAPP.StatusBar = False MsgBox "テキストをA列2行目から入力してから起動して下さい。", , cnsTitle Exit Sub End If ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(出力モード) Open strFileName For Output As #intFF ' (3) ' 2行目から開始 GYO = 2 ' 最終行まで繰り返す Do Until GYO > GYOMAX ' A列内容をレコードにセット(先頭は2行目) strREC = Cells(GYO, 1).Value ' (4) ' レコード件数カウンタの加算 lngREC = lngREC + 1 xlAPP.StatusBar = "出力中です....(" & lngREC & "レコード目)" ' レコードを出力 Print #intFF, strREC ' (5) ' 行を加算 GYO = GYO + 1 Loop ' 指定ファイルをCLOSE Close #intFF xlAPP.StatusBar = False ' 終了の表示 MsgBox "ファイル出力が完了しました。" & vbCr & _ "レコード件数=" & lngREC & "件", vbInformation, cnsTitle End Sub -----------------------------------------------------------------------------

  • VBAでタブ区切りファイルを列区切りにしたい

    VBAで秀丸のテキストファイルをエクセルに読み込むとき、タブ区切りがエクセルでは連続した文字列になってしまいます。 これを列に区切って読み込みたいのですがどうしたらいいですか? 読み込むプログラムは、「Excelでお仕事!」のサンプルを使ったもので、ファイルを開く画面から選択する形です。コードは下記です。 ' Applicationオブジェクト取得 Set xlAPP = Application ' (1) ' 「ファイルを開く」のフォームでファイル名の指定を受ける xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _ Title:=cnsTITLE) ' (2) ' キャンセルされた場合は以降の処理は行なわない If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub ' (3) ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' (4) ' 指定ファイルをOPEN(入力モード) Open strFILENAME For Input As #intFF ' (5)

  • Excel 名前を付けて保存のVBA

    名前を付けて保存画面を表示して、自分でファイル名を入力して保存をしたいのですが、 以下で名前を付けて保存画面は表示されますが、 実際に保存をクリックしてもファイルが作成されませんでした。 保存されるVBAを教えてください。 Sub test() Save_Filename = "c:\" Save_File = Application.GetSaveAsFilename(Save_Filename, _ FileFilter:="Excelファイル,*.xls") End Sub

  • Excel VBAで新たな保存先のパスの取得方法は?

    エクセルVBAで新たに一度に作成する複数のブックを保存するフォルダーをあらかじめ指定したいのですが、下記のような方法しか思い浮かびません。 もっとスマートなやり方はないでしょうか?(直接入力以外の方法で) Sub Path_Get() Dim myPath As String, damy As Variant MsgBox "作成するファイルの保存先を選択します。" _ & vbCr & "なお、表示されたファイル名は気にしないで" _ & vbCr & "下さい。(笑)" damy = Application.GetSaveAsFilename(fileFilter:="Excel (*.xls),*.xls") MsgBox damy If damy = False Then Exit Sub For i = Len(damy) To 0 Step -1 If Mid(damy, i, 1) = "\" Then myPath = Mid(damy, 1, i) Exit For End If Next i MsgBox "パスは " & myPath & "です。" End Sub

  • Excel2010 VBAでテキストファイル読込

     初めて質問させていただきます。  Excel2010のVBAで下記のようなマクロを組み、テキストファイルを読込したところ、データの一部が誤変換されてしまいます。  誤変換内容  11/12/29 →2029/11/12  マクロを使用せず、Excelから直接テキストファイルウィサードを使って読み込んだ場合には、正しく「2011/12/29」となります。  (お恥ずかしい話ですが、Excelシートのセルに直接「11/12/29」と打ち込むと自動的に「2011/12/29」に変換されることを今回初めて知りました。)  同一項目には「11/12/29」形式と「20111229」形式が混在しており、「11/12/29は2011/12/29」、「20111229はそのまま」セルに格納するよう依頼されています。  従って、Array(1, 2)で文字列やArray(1, 5)でYMD形式の日付へ同一項目のデータを固定することはできなくなっております。  テキストデータは「カンマ区切り」の35項目です。  データはネットワーク内の他のPCドライブに保存されています。  因みに「 Workbooks.OpenText Filename:=」以下は、Excelのマクロ記録で取得したものです。  お忙しいところ恐縮ですが、よろしくお願いいたします。 【作成したマクロ】 Sub 読込() With CreateObject("WScript.Shell") .currentdirectory = "\\コンピューター名\c\フォルダ名\" End With Const cnsTITLE = "テキストファイル読み込み処理" Const cnsFILTER = "全てのファイル (*.*),*.*" Set xlAPP = Application xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _ Title:=cnsTITLE) If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub Workbooks.OpenText Filename:=strFILENAME, Origin:=932, _ StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True _ , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _ Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _ Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _ 16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _ Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array( _ 29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1)) _ , TrailingMinusNumbers:=True End Sub

  • VBAで名前を付けて保存

    テキストファイルをエクセル出力する処理を考えております。 テキストファイルを開き、名前をつけて保存する処理が上手くできません。 シート1のある2つのセルに入力パスと出力パスが設定されているとします。 例えばcells(4,4)に入力パスが設定されており(¥~~~.txt) cells(6,4)に出力パスが設定されており(¥~~~xls) 上記のような状態とします。 cells(4,4)にあるテキストファイルを開き、 それを拡張子をエクセルにしてcells(6.4)にある出力先に名前をつけて保存をしたいのです。 オープンする場合は Workbooks.OpenText Filename:=Workbooks("○○.xlsm").Sheets(1).Cells(4, 4).Value & ".TXT" で上手くいきました。 しかし保存の際に ActiveWorkbook.SaveAs Filename:=Sheets(1).Cells(6, 4).Value & ".xls" で実行するとエラーがでてしまいます。 どうすれば良いでしょうか。

専門家に質問してみよう