- ベストアンサー
VBAで名前を付けて保存する方法
- VBAを使用してテキストファイルを開き、名前を付けて保存する方法を教えてください。
- cells(4,4)にあるテキストファイルをエクセル形式に変換し、cells(6,4)に指定した出力先に名前をつけて保存する方法を教えてください。
- VBAで名前を付けて保存する際に発生するエラーについて解決策を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。お邪魔します。 > ActiveWorkbook.SaveAs Filename:=Sheets(1).Cells(6, 4).Value & ".xls" 目に見える間違いが2つあります。 ひとつは、 ...Sheets(1).Cells(6, 4)... これでは、開いたばかりのテキストファイル(アクティブシート)のセルを参照してしまいます。 部分的な修正としては、 ActiveWorkbook.SaveAs Filename:=Workbooks("○○.xlsm").Sheets(1).Cells(6, 4).Value & ".xls" のようにブックを正しく指定する必要があります。 2つ目は、 拡張子を".xls"で指定する場合、 Excelのファイル形式も、Excel 97-2003 ブックで指定してあげないとなりません。 部分的な修正を追記すると、 ActiveWorkbook.SaveAs Filename:=Workbooks("○○.xlsm").Sheets(1).Cells(6, 4).Value & ".xls", FileFormat:=xlExcel8 のようになります。 (FileFormat:=に指定する定数は、".xlsm"ならxlOpenXMLWorkbookMacroEnabled、".xlsx"xlOpenXMLWorkbook、です。) もう一点、間違いではありませんが、間違いの元になる可能性が高いので、 一般に避けられる記述として、 ...Sheets(1)... があります。 シートのインデックスをシートの並び順に依存して相対的に指定しても問題にならないのは、 例えばcsvファイル等のようにシート数がひとつであることが確実である場合や、 例えばマクロの中で新たに作成したブックのシートである場合、 等、限定的に考えておいた方が吉です。 特殊で明確な条件が無い場合は、 ...Sheets("Sheet1")...のようにシート名で指定する のが(少なくともVBAの質疑では)標準的で間違いが少ない方法です。 マクロ実行中にActiveSheetが変わってしまうような処理の場合、 必要なデータを事前に変数に格納するようにします。 以上を踏まえて、こんな感じにしてみては如何でしょう? ' ' /// Sub Re9042707a() Dim sPathSrc As String Dim sPathDst As String With Workbooks("○○.xlsm").Sheets("Sheet1") sPathSrc = .Cells(4, 4).Value sPathDst = .Cells(6, 4).Value ' ' 〓上2行↑↑または↓↓下2行〓のどちらかを選んで削除 sPathSrc = .Cells(4, 4).Value & ".txt" sPathDst = .Cells(6, 4).Value & ".xls" End With Workbooks.OpenText Filename:=sPathSrc ActiveSheet.SaveAs Filename:=sPathDst, FileFormat:=xlExcel8 ' ' (FileFormat:=に指定する定数は、".xlsm"ならxlOpenXMLWorkbookMacroEnabled、".xlsx"xlOpenXMLWorkbook、です。) End Sub ' ' /// 目に見えない(説明されていない)潜在的なエラーの原因としては、 ...Workbooks("○○.xlsm").Sheets(1).Cells(6, 4).Value & ".xls"... [○○.xlsm]ブック の 最左のシート の D4セルの値 がファイル名として適していない場合が考えられます。 > 例えばcells(4,4)に入力パスが設定されており(¥~~~.txt) > cells(6,4)に出力パスが設定されており(¥~~~xls) この説明は実際とは喰い違いがある、ということは察することが出来ますが、 実際はどうなのかこちらでは判りませんので、マジレスしますが、、、。 ここに拡張子が指定してあるのなら、(よく見るとxlsの前には.がありませんけれど) > オープンする場合は & ".TXT" > 保存の際に & ".xls" は不要、というより、あってはならない記述でしょう。 また、"¥"というのが、セパレータを意味しているのであれば、 "\"(半角の"¥")から始まるパスになっています。 現在開いているフォルダ(カレントディレクトリ)に保存するのであれば、 先頭の"\"は取り除く必要がありますし、、 指定のフォルダに保存したいのなら、(例えば仮にデスクトップだとして) "C:\Users\ユーザー名\Desktop" & "\~~~.xls" のように保存先のパスはフルパスにする必要があります。 ここら辺のことは、 全体のシステムや運用などをよく検討して、適切な設計を確立してから、 再度VBA側の記述を修正することになるのかと思います。 失敗しそうなポイントも複数ありますが、正解も多数あります。 お求めの挙動、と、マクロの記述内容、が、釣り合うように書ければ それで解決なんだと思います。 一応今の処、回答としては以上のようになりますが、 それでも解決に届かない場合は、曖昧さを避けた具体的実際的な説明を 補足欄にでも書いてみてください。
その他の回答 (1)
Workbooks("○○.xlsm") を書いてないからかと。 ActiveWorkbook.SaveAs Filename:=Workbooks("○○.xlsm").Sheets(1).Cells(6, 4).Value & ".xls"
お礼
回答ありがとうございます。 しかしエラーが出たままでした。 実行時エラー '1004': 'SaveAs' メソッドは失敗しました: '_Worksheet' オブジェクト
お礼
回答ありがとうございました。 丁寧な解説で、無事に処理できました!!