- 締切済み
エクセルでファイル名を任意のセルに入力するマクロを組むには?
エクセルにて、マクロを実行すると、 ダイアログボックスが出てきて、ファイルを 選ぶと、そのファイル名が任意のセル (たとえばB10とか)に入力されるような マクロを組みたいのですが、うまくいきません。 しかも、そのファイル名についている拡張子なしで 入力されるようにしたいです。 どなたかご教授ください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
Sub teat02() ofilenam = Application _ .GetOpenFilename("すべての ファイル (*.txt), *.txt") If ofilenam <> False Then s = Dir(ofilenam) p = Split(s, ".") Range("B10") = p(0) End If End Sub #1、#2のご解答より厳密性に欠けるかも知れませんが。
- papayuka
- ベストアンサー率45% (1388/3066)
#1です。 上手くいかなかったのは私が作ったサンプルが上手く動かなかったって事でしょうか? それとも組み込み方が良く解らないって事? もしそうなら、 'これをモジュールにコピペして Function myExt(ByVal s As String) Dim i As Integer myExt = s For i = Len(s) To 1 Step -1 If Mid(s, i, 1) = "." Then myExt = Mid(s, 1, i - 1) Exit For End If Next i End Function Sub Macro1() fileToOpen = Application _ .GetOpenFilename("すべての ファイル (*.txt), *.txt") If fileToOpen <> False Then '↓これを入れる Range("A1").Value = myExt(Dir(fileToOpen)) With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & _ fileToOpen, Destination:=Range("B11"))
- papayuka
- ベストアンサー率45% (1388/3066)
サンプルを書いた環境(Win95+Excel97)では FileSystemObject が使えなかったので、拡張子を削る関数を入れてます。 FileSystemObject が使えれば GetBaseName が使えます。 Sub Test() Dim myfiles myfiles = Application.GetOpenFilename(MultiSelect:=True) If Not IsArray(myfiles) Then Exit Sub For i = 1 To UBound(myfiles) ActiveCell.Offset(i - 1, 0).Value = myExt(Dir(myfiles(i), vbHidden + vbSystem)) ActiveCell.Offset(i - 1, 1).Value = Dir(myfiles(i), vbHidden + vbSystem) ActiveCell.Offset(i - 1, 2).Value = myfiles(i) Next i End Sub Function myExt(ByVal s As String) Dim i As Integer myExt = s For i = Len(s) To 1 Step -1 If Mid(s, i, 1) = "." Then myExt = Mid(s, 1, i - 1) Exit For End If Next i End Function
お礼
とりあえず、やってみます。 どうもありがとうございました。
補足
papayuka様からいただいた回答を組み込んで みたのですが、うまくいきませんでした。 いろいろといじってみたのですが・・・。 当方のエクセルは2000です。 下記を用いて、ダイアログから選んだテキストファイル (外部データのインポート)を各セルに張り付けて いくようにマクロを組んだんですけど、これを利用して、ついでにその選んだテキストファイル名(拡張子なし)を 任意のセルに張り付けるにはどうしたらいいんでしょか? Sub Macro1() fileToOpen = Application _ .GetOpenFilename("すべての ファイル (*.txt), *.txt") If fileToOpen <> False Then With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fileToOpen, Destination:=Range("B11"))