Excel97のVBAで
 f-name = Application.GetOpenFilename()
とするとf-nameにはオープンしたファイルのパスを含めたファイル名が代入されます。
これをそのまま
 Workbooks(f-name).close
とすると、パス部分が余分なのかエラーになります。
そこで、このf-nameからファイル名(ブック名)だけ切り出す方法があれば教えてください。
もしくはこのオープンからクローズまでの流れとして良いやり方があれば教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

Excel97の場合は、最後の『\』を探しにいく必要があると思います。

下記は処理例です。
キャンセルした時のf-nameは別途処理してください。

Public Function myFileName(flName As String)
  Dim L As Integer
  For L = Len(flName) To 1 Step -1
    If Mid(flName, L, 1) = "\" Then
      myFileName = Right(flName, Len(flName) - L)
      Exit For
    End If
  Next
End Function
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ばっちり動きました。
元々UNIX屋なので(マクロの様に用意されていて)もっと簡単にできるかと思っていました。

お礼日時:2001/10/02 09:36

EXCEL2000でですが、GetOpenFilenameの後に、


Dim ファイル名 As String
ファイル名 = Dir(CurDir() & "\*.*")
とすると、選んだファイル名のみ、ファイル名に格納されました。

EXCEL97で出来るか判りませんが、試してみてはいかがでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
残念ながらExcel97ではうまく行きませんでした。
でもなんとなくDir()とCurDir()の組み合わせでGetOpenFilename()の選択ファイルが認識できるとは思えないんですが......

お礼日時:2001/10/02 09:39

こんにちは。

maruru01です。
以下の関数を作成しました。
参考になりますか。
では。

' フルパスからファイル名を取り出す
Public Function MakeFileName(fileName As String) As String

  Dim z0 As Long

  z0 = InStrRev(fileName, "\")
  If z0 <> 0 Then
    MakeFileName = Mid(fileName, z0 + 1)
  Else
    MakeFileName = fileName
  End If

End Function
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
残念ながらInStrRev()がundefineになってしまします。
私の環境がおかしいか、Excel97にはないのかもしれませんね。

お礼日時:2001/10/02 09:34

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフォルダ内で、一致するファイル名の数を表示してフォルダ名を修正してくれるソフト

 はじめまして。
 ベクターでソフト探したのですが見つかりませんでした。知っている方いらっしゃいましたらお願いします。

○やりたいこと
1、フォルダ内でファイル名を検索(例えばyoshioフォルダ内の「出張」)
2、条件に当てはまるファイル数を表示(△○件)
3、そのフォルダ名を変更(yoshioのフォルダ-△○)

 ファイルをリストで表示するソフトは見つけられましたが、検索式に当てはまるファイル数を表示させて、そのフォルダ名を変更するようなソフトがみつかりませんでした。
 フォルダ名を変えるのが難しいのであれば、せめて上記2のファイル数を表示まで行えるソフトがあれば助かるのですが、どなたかよろしくお願いいたします。

 只今、手作業でこの作業(フォルダ内で出張に関するファイルの数を調べてフォルダの名前の後に数量を表示させる)を行っていますが、ソフトで自動化できないかと思っています。フォルダ数が沢山あるうえに定期的に数の確認をしていますので、作業の軽減を図りたいと思っています。

 よろしくおねがいいたします。

Aベストアンサー

>2回目で…でエラー
すみませんm(_ _)m
ソフトを点検した時は、うまく行っていたのですが、
なぜかアップした時に、文字が変わっていました。
>if folder.Name <> folderNmae then 'フォルダ名に変更が有った時名前を変更する
の行の
folderNmae

folderName
に変更して下さい。
なぜか、aの位置が違っています??

>VBScriptのテキスト
あんまり初心者用のラーニングテキストではないのですが、サンプルプログラムや、サンプルケースが載っている本として
『WSHクイックリファレンス』オライリージャパン/発行所、オーム社発売元(3500円+税)がでています。
あと、
参考URLから以下のドキュメントがダウンロードできます。いわゆるヘルプ形式なので良いです。
結局大元のドキュメントなので、最終的にはここを確認しないといけません。
VBScript ドキュメント
Windows Script Host ドキュメント
Windows スクリプト コンポーネント ドキュメント

参考URL:http://www.microsoft.com/japan/msdn/scripting/default.asp

>2回目で…でエラー
すみませんm(_ _)m
ソフトを点検した時は、うまく行っていたのですが、
なぜかアップした時に、文字が変わっていました。
>if folder.Name <> folderNmae then 'フォルダ名に変更が有った時名前を変更する
の行の
folderNmae

folderName
に変更して下さい。
なぜか、aの位置が違っています??

>VBScriptのテキスト
あんまり初心者用のラーニングテキストではないのですが、サンプルプログラムや、サンプルケースが載っている本として
『WSHクイックリファレンス』オラ...続きを読む

QWorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】

よろしくお願いします。
今あるブックにあるシートを別のブックにコピーしたいのですが、今考えているのは

ここから////////
'ブックを開く
Workbooks.Open コピー元のブックのパス
'シートをコピー
Worksheets.Item(コピーするシート名).Copy _
after:=Workbooks(コピー先のブック名).Sheets(1)

'ブックを閉じる
Application.DisplayAlerts = False
Workbooks.Item(コピー元のブック名)Close True
Application.DisplayAlerts = True
ここまで////

なのですが、コピーものとのブックが複数ある時、画面がチラチラしてしまいます。ブックをオープンさせずにシートを他ブックにコピーさせる方法ってないでしょうか。
ご存知の方がいらっしゃいましたら、ご教授お願いします。

Aベストアンサー

画面のチラツキを押さえたいだけなら、画面の更新をやめればいいだけじゃないでしょうか?

ブックを開く前に
Application.ScreenUpdating = False
ブック閉じてから
Application.ScreenUpdating = True

Qファイル名一括変換ソフト

100個以上のWindows(XP,2000)のファイルのファイル名を、任意の名称から、異なる任意の名称に名称変更したいのですが、1つづつ修正するのは間違いが生じるので、予めファイルを作成しておき一括返還したいと考えています。

 変換ファイルは、CSVやテキストファイルで、たとえば、(変換前ファイル名、変換後ファイル名)という形式で指定できるとベストです。他の指定方法でも構いませんが、返還前に再確認できることが望ましいと考えます。
 フォルダは、すべてのファイルが同じところにある前提(どこかで指定する)とします。

 以上のような、フリーソフト、フリーウェア(小額なら、シェアウェアも可)を紹介いただけないでしょうか。

Aベストアンサー

初めまして

これはどうでしょう?
Excel のマクロを使用してファイルの一覧表シートを作成し、指定されたファイルのリネーム又はコピーをする
http://www.vector.co.jp/soft/win95/util/se383332.html

他にもいっぱいありどれが合うか?
http://www.vector.co.jp/vpack/filearea/win95/util/file/name/

Q商品名から余分な情報を省きたい

商品名が並ぶ同じ列の中を見比べて、
途中まで同じ名称があれば、
次のシート上で、同じ文字や数字の範囲までのみにカットして、
異なる部分からを次の列に移動させることはできますか?

エクセル利用して、棚おろし用の管理データ(図赤枠)から
同じ商品名をまとめた表(図緑枠)をつくりたいたいのですが、
発行月やセット数などが商品名にくっついてしまっていて
ひとつづつカウントしたり、名称をコピペ修正しています。

マクロをご利用いただいても構いません。
もしくは図の緑枠のようにならなくてもいいので
図の青枠のように商品名以降が分断される形でも大丈夫です。

下手な説明文で申し訳ございません。
もしご存じの方がいらっしゃいましたら
どうぞよろしくおねがいします。

Aベストアンサー

#4です。

A2 あいうえお10月用
A3 あいうえお11月用

A2 あいうえお1  B2 0月用
A3 あいうえお1  B3 1月用
にするのなら、

Sub try()
Dim i As Integer
Dim st As String

For i = 1 To Len(Range("A2").Value)
If Mid(Range("A2").Value, i, 1) = Mid(Range("A3").Value, i, 1) Then
st = st & Mid(Range("A2").Value, i, 1)
Else
Exit For
End If
Next

Range("B2").Value = Replace(Range("A2").Value, st, "")
Range("B3").Value = Replace(Range("A3").Value, st, "")
Range("A2:A3").Value = st

End Sub

こんなのでも出来ますが、これを1万行に対してやるとなると対策もややこしそうです。(私の頭の中では)

#4です。

A2 あいうえお10月用
A3 あいうえお11月用

A2 あいうえお1  B2 0月用
A3 あいうえお1  B3 1月用
にするのなら、

Sub try()
Dim i As Integer
Dim st As String

For i = 1 To Len(Range("A2").Value)
If Mid(Range("A2").Value, i, 1) = Mid(Range("A3").Value, i, 1) Then
st = st & Mid(Range("A2").Value, i, 1)
Else
Exit For
End If
Next

Range("B2").Value = Replace(Range("A2").Value, st, "")
Range("B3").Value = Replace(Range(...続きを読む

Qフォルダー名がファイル名になるフリーソフト

たくさんの画像フォルダとその中にそれぞれ大量の画像ファイル(jpeg)があります。

一括してファイル名変換するソフトの中で、

フォルダ名をファイル名+ナンバーに一括変換するフリーソフトは、ないものでしょうか。
少し、特殊なファイル名変換です。

Windows7で動くとありがたいです。
よろしくお願いします。

Aベストアンサー

リネームソフトを一つ用意しておくと便利ですよ。
例えば【 Flexible Renamer 】などの定番ソフトをインストール
します。このようなソフトなら画像ファイル以外のファイルも
簡単に一括変換できます。
http://hp.vector.co.jp/authors/VA014830/FlexRena/

複数の画像フォルダが一つのフォルダの中にある場合ならば、
[下位フォルダ以下も対象]へとチェックを付け、[ターゲット]
を[ファイル]にして[フィルタ]を[ *.jpg ]にします。
[メニュー]から[連番や文字列の追加]を開きます。
[フォルダ名 + 連番]を指定して開始番号や桁数を指定。
[リネーム]が指定してあれば、右の一覧にある[新しい名前]が
フォルダ名と連番の組み合わせに変わっているでしょうから、
[リネーム]ボタンを押して一括変換します。

このようなソフトを一つ持っておけば、様々な応用ができて、
活用範囲が広がりますから、定番ソフトとしてお勧めします。

QエクセルVBA Application.GetSaveAsFilenameでのフォルダー名指定

いつも大変お世話になりありがとうございます。
早速ですが、教えてください。

以下のマクロでファイル名を指定して保存させようと思うのですが、デフォルトで表示するフォルダーをたとえば、Cドライブの「AAAAA」という指定はできますでしょうか?
また、そのパソコンに「AAAAA」というフォルダーが無かったら、作るようにしたいのですがどう記述すればよいのでしょうか?


Sub test()
Dim aaa As String
aaa = Format(Now, "MMDDHHmm")
FName = Application.GetSaveAsFilename(InitialFilename:=aaa & ".csv", FileFilter:="CSVファイル(*.csv), *.csv")

'以下略

End Sub

Aベストアンサー

エラーナンバーで判断してフォルダ追加する方法はいかがでしょう。


Sub test()
Dim aaa As String
Dim ddd As String
On Error Resume Next
bbb = "C:\AAAAA"
ChDir bbb
If Err.Number = 76 Then
 response = MsgBox( _
  "フォルダ" & bbb & "は存在しません。作成しますか?", _
  vbYesNo + vbQuestion, _
  "フォルダの追加" _
  )
 If response = vbYes Then
  MkDir bbb
  ChDir bbb
 End If
End If
aaa = Format(Now, "MMDDHHmm")
fname = Application.GetSaveAsFilename(InitialFilename:=aaa & ".csv", _
  FileFilter:="CSVファイル(*.csv), *.csv")
End Sub

エラーナンバーで判断してフォルダ追加する方法はいかがでしょう。


Sub test()
Dim aaa As String
Dim ddd As String
On Error Resume Next
bbb = "C:\AAAAA"
ChDir bbb
If Err.Number = 76 Then
 response = MsgBox( _
  "フォルダ" & bbb & "は存在しません。作成しますか?", _
  vbYesNo + vbQuestion, _
  "フォルダの追加" _
  )
 If response = vbYes Then
  MkDir bbb
  ChDir bbb
 End If
End If
aaa = Format(Now, "MMDDHHmm")
fname = Application.GetSaveAsFil...続きを読む

Q複数のファイルのファイル名を一括に変換するフリーソフトは?

複数のファイルのファイル名を一括に変換するフリーソフトは?

複数のファイルのファイル名を一括に変換して

運動会01
運動会02
...

という風に順番号名を付けることができる
いいフリーソフトを教えてください。

Aベストアンサー

http://www.vector.co.jp/soft/win95/util/se230280.html

Q相対パスでExcel Bookのオープン

こんにちわ。

相対パスでブックをオープンしようとすると、
「オブジェクト変数、またはwithブロック変数が設定されていません。」というエラーが表示されてしまいます。
絶対パス指定だと、正常にオープンできますし、同じ相対パス指定で、ブックのコピー&ペーストもできています。

なぜなのでしょうか?

Aベストアンサー

カレントディレクトリが正しくないとか?
CurDir関数?で確認してみてはいかがでしょうか。
最初に起動したときは開いたファイルのディレクトリがカレントになっていない気がします。

ChDirステートメントを使って変更するとうまくと思います。
(それだと絶対パス指定と同じになりますが。。。)

見当違いでしたらすみません。

Qフォルダ内のファイル名変換ソフト

沢山あるファイルのファイル名を変更して、ファイルの整理をしたいと
思っております。

フォルダを指定して、中にある沢山のファイルに、同じ条件を指定して、
ファイル名に変換をかけるソフトは持っております(001~099といった連番
をつける等)。

それぞれのファイルに個別の名前をつけたい場合、ひとつひとつのファイル名を
「右クリック→名前の変更→名前入力」で変更しているのですが、もっと簡単に変
換したいです。

イメージとしてはフォルダを指定して、フォルダ内のファイル名が一覧に並んで
表示され(エクセルの表のように)、それを変更すればフォルダ内のファイル名も
変換できてしまうような事がしたいです。

探したのですがそういったソフトが見つかりませんでした。
原理的に不可能なのでしょうか?

そういった事を実現できるソフトをご存知の方、教えてください。
宜しくお願い致します。

Aベストアンサー

次のようなフリーソフトでは,どうでしょうか。

テキストエディタのように変更したいなら
http://www.vector.co.jp/soft/win95/util/se317503.html

エクセル上でやりたいなら
http://www.vector.co.jp/soft/win95/util/se208296.html

QPrivate Sub Workbook_BeforeSaveについて

エクセル2000です。
腑に落ちない現象が起きているので質問させてください。
Sheet1にテキストボックス(OLEオブジェクトのTextboxではありません)とボタンが貼ってあり、Visble=Falseで非表示にしています。それを保存する際には表示させたいので、BeforeSaveイベントで

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.TextBoxes("テキスト").Visible = True
Sheet1.Buttons("ボタン").Visible = True
MsgBox "保存されちゃった!"
End Sub

と書いてみました。
手動で保存する場合には正しく、テクストボックスやボタンは正しく表示されます。もちろんMsgboxも出ます。

ところが、標準モジュールに書いた以下のコード、

Sub 保存()
ActiveWorkbook.Save
End Sub

を走らせてみても、"保存されちゃった!"と、Msgboxは出ますが、肝心のテクストボックスやボタンが表示されません。
試行錯誤の結果、
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.Shapes("テキスト").Visible = True
Sheet1.Shapes("ボタン").Visible = True
MsgBox "保存されちゃった!"
End Sub

と書くと、標準モジュールから、ActiveWorkbook.Saveでも表示されることがわかりました。
どうしてでしょうか?

エクセル2000です。
腑に落ちない現象が起きているので質問させてください。
Sheet1にテキストボックス(OLEオブジェクトのTextboxではありません)とボタンが貼ってあり、Visble=Falseで非表示にしています。それを保存する際には表示させたいので、BeforeSaveイベントで

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheet1.TextBoxes("テキスト").Visible = True
Sheet1.Buttons("ボタン").Visible = True
MsgBox "保存されちゃった!"
End Sub

と...続きを読む

Aベストアンサー

>を走らせてみても、"保存されちゃった!"と、Msgboxは出ますが、肝心のテクストボックスやボタンが表示されません。

ユーザー関数を抜けて「シートが待ち状態になるまで」は、シート上の子コントロールのVisibleプロパティの変化は反映されません。

ところが「セーブしちゃうと、Visibleプロパティが変化したのを忘れてしまう」ので「Sub 保存()を抜け、Visibleプロパティの変化が反映されるタイミング」には、もう「Visibleプロパティが変化したのを忘れている」のです。

つまり、Sub 保存()を抜けるまで、Visibleプロパティを変化させても反映されません。

しかし、ShapesのVisibleプロパティは「見た目だけを即座に画面に反映する」ので、Visibleプロパティを変更した瞬間に画面に反映されます(但し、反映されるのは「見た目だけ」なので、そのコントロールがクリック可能とは限りません)


人気Q&Aランキング

おすすめ情報