重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは

ExcelVBAでワークブックの名前を別のワークブックを作成して名前を変える方法ではなく、
そのままで名前のみ変える方法などはないでしょか?

よくExcelVBAで「ワークブックの名前を変える方法」などと検索しても、以下のような名前を変えたワークブックを作成するというようなプロシージャしか出てきません。

Sub ブックの名まえを変える
   ActiveWorkbook.SaveAs FileName:="新しいワークブック.xlsm"
End Sub

しかし、このような方法では既存のワークブックを削除する手間が生じて面倒です。

上記のプロシージャでなく、新規のブックを作成せずに済むプロシージャを知りたいです。


イメージとしてはシートの名前を変える際に使うプロシージャみたいな感じです。

Sub シートの名前を変える
  WorkSheets("シート").Name="新しいシート"
End Sub

教えていただけたらありがたいです。

A 回答 (5件)

こんにちは



思っていらっしゃるほどには簡単でないかも知れませんが・・・

FileSystemObjectなどを利用することで、ご質問のような処理が実現可能と思います。
例として、以下の解説の中ほどに似たような記述法が紹介されています。
http://www.officetanaka.net/excel/vba/tips/tips9 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

教えていただいたサイト、大変参考になりました。

閉じているブックだとこんな簡単にブックの名前を変えるとこができるのですね。
感動いたしました。

ただ、やはりアクティブのワークブックだと名前を変えるのがかなり難しいみたいですね。

お礼日時:2017/11/24 21:58

Sub RenameExecl() 名称訂正です。


名称は、RenameExcel() でした。
    • good
    • 0

必要性は認めるけれども、いままで、そういうことは考えたことがありませんでしたね。

排他的制御が働くから変更できないのです。ただ、面白そうなので、やってみました。
ただ、画面がかなり動くのが問題ですね。もう少しきれいに動けばよいのですが。

個人用マクロブックか、アドインの標準モジュールにしてください。

'//
Sub RenameExecl()
 Dim objFS As Object
 Dim Wb As Workbook
 Dim sh As Worksheet
 Dim shName As String
 Dim winSt As Long
 Dim BaseName As String
 Dim FPath As String
 Dim fName As Variant
 Dim objFile As Object
 Dim ext As String
 Set Wb = ActiveWorkbook
 Set sh = ActiveSheet
 shName = sh.Name
 winSt = Wb.Windows(1).WindowState
 BaseName = Mid(Wb.Name, 1, InStrRev(Wb.Name, ".") - 1)
 ext = Replace(Wb.Name, BaseName, "")
 FPath = Mid(Wb.FullName, 1, InStrRev(Wb.FullName, "\"))
 If MsgBox(Wb.Name & "の名前の変更を行います " & vbCrLf & _
   "拡張子の変更はできません ", vbOKCancel) = vbCancel Then
  Exit Sub
 End If
 Set objFS = CreateObject("Scripting.FilesystemObject")

 fName = Application.InputBox("名前の変更", "名称変更", BaseName)
 If fName = False Then Exit Sub
 If InStrRev(fName, ".") > 0 Then
 fName = Mid(fName, 1, InStrRev(fName, "."))
 End If
 Application.EnableEvents = False
 Wb.Close True
 Set objFile = objFS.GetFile(FPath & BaseName & ext)
 objFile.Name = fName & ext
 Workbooks.Open FPath & fName & ext
 ActiveWorkbook.Worksheets(shName).Select
 ActiveWorkbook.Windows(1).WindowState = winSt
 Application.EnableEvents = True
End Sub
'//
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

以前の「ExcelVBAを武器に就活できるか?」に引き続きまたの回答ありがとうございます。

上記のプロシージャ、まだ僕には早いようです・・・

いつか理解できるときに参考にさせていただきます。

本当に詳細に回答していただいて感謝しかないです、ありがとうございます。

お礼日時:2017/11/24 22:03

#1です。



#2様がご指摘のように、現在開いているファイルが対象の場合は、#1の方法は使えないはずですね。
(開いていないファイルと思い込んでしまっていました)

失礼いたしました。m(__)m
    • good
    • 0

それは無理では?今開いているファイルハンドルをそのままでファイル名を変えると言う機能は、Excel自身にないし、他のソフトでもそれができるものはないでしょう。

いや、もっと根幹の話でOSのファイルシステムがそれを許せるのか?無理そうな予感しかしない…

開いてないファイルなら、すでに紹介済みの方法でいけるんですけどね。
    • good
    • 0

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