Page 872 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼ファイル名取得について ポリンキー 03/3/6(木) 11:39 ┗Re:ファイル名取得について パピー 03/3/6(木) 12:36 ┗Re:ファイル名取得について【追加】 パピー 03/3/6(木) 12:50 ┗Re:ファイル名取得について【追加】 ポリンキー 03/3/6(木) 13:37 ┗拡張子を取るには? ポリンキー 03/3/11(火) 14:39 ┗Re:拡張子を取るには? ichinose 03/3/11(火) 22:01 ┣Re:拡張子を取るには? ポリンキー 03/3/13(木) 10:58 ┃ ┗Re:拡張子を取るには? ichinose 03/3/13(木) 12:11 ┃ ┗Re:拡張子を取るには? ポリンキー 03/3/13(木) 13:29 ┃ ┗Re:拡張子を取るには? ichinose 03/3/13(木) 23:24 ┃ ┗Re:拡張子を取るには? ポリンキー 03/3/14(金) 9:49 ┗Re:拡張子を取るには? Kein 03/3/13(木) 23:34 ┗Re:拡張子を取るには? ichinose 03/3/13(木) 23:39 ─────────────────────────────────────── ■題名 : ファイル名取得について ■名前 : ポリンキー ■日付 : 03/3/6(木) 11:39 -------------------------------------------------------------------------
任意のファイルを選択して開き、散布図を作成するマクロを作っていますが、 わからないところがありますので、どなたか教えてください。ファイルを選択して 開くところは、以下のように記述し、実際にうまく開くことができています。 Dim fName As String fName = Application.GetOpenFilename( _ FileFilter:="すべてのファイル(*.*),*.*") Workbooks.OpenText Filename:=fName, ・・・(以下省略) 散布図を作成する時シートの見出しを記述するところが2箇所あり、上のfNameから なんとかシート名を取得しようと思っているのですが、もとのファイル名に決まったネーミングルールがないので、どうやって取得したらよいのかわかりません。例えば、fNameが \\111.111\public\aaa\xxx\EXCF100.12A の場合シート名はEXCF100と表示されますが、 \\111.111\public\aaa\xxx\EXCO.12A の場合のシート名はEXCO.12Aと表示されます。 散布図の記述の ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets(シート名)・・・ ActiveChart.Location Where:=xlLocationAsObject, Name:=シート名(同じシートに埋め込む) シート名のところに取得したファイル名を記述するにはどうしたらよいでしょうか? 以前はファイルのネーミングルールが決まっていましたので、Mid関数を使ってうまくいったのですが、今回はファイル名がバラバラでどうしたらよいものか・・・。よろしくお願いいたします。 |
▼ポリンキー さん:こんにちは。 単純に変数にしては駄目ですか? fNameには、パス名をはずしたファイル名が入っていることが前提ですが。 (パス名とファイル名の分離は、mid関数の名前が上がっていたので省きました) Dim シート名 As String シート名 = fName ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets(シート名)・・・ ActiveChart.Location Where:=xlLocationAsObject, Name:=シート名 ご質問の意を外していたらごめんなさい。 |
パピーです。 度々です。 念のため、パス名とファイル名を分離したコードも記述しておきます。 Dim FILE_Directry As String Dim FILE_Name FILE_Name = fName FILE_Directry = "" Do Until InStr(FILE_Name, "\") = 0 FILE_Directry = FILE_Directry & Left$(FILE_Name, InStr(FILE_Name, "\")) FILE_Name = Mid$(FILE_Name, InStr(FILE_Name, "\") + 1, Len(FILE_Name)) Loop ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets(FILE_Name)・・・ ActiveChart.Location Where:=xlLocationAsObject, Name:=FILE_Name なお、拡張子のついているものとついていないものは何を基準に判断するのでしょうか? |
パピーさん、この度もありがとうございます。助かります。 前回パピーさんからいろいろ教えていただいたので、変数についてもわかってきました。どうもありがとうございました。今回の疑問は、エクセルでファイルを読み込むと ファイルの名前で勝手にシート名がつけられていると思うのですが、そのシート名というのがパスを除いたファイル名とは限らないということについてなんです。元のデータファイルがエクセルのデータファイルだったり、テキストファイルだったり特定のファイルだったらよいのですが、すべてのファイルを選択しないと出てこない変な拡張子がついたファイルばかりなんです。(どなたかがプログラムを用いて作成したデータだそうで、そのプログラムも実行形式しか残っていないそうです。)最初の質問にも書いたように、ファイル名の最初の6桁がシート名になっている場合もあれば、ファイルの拡張子まで全部シート名になっている場合もあるのです。あっ、変な拡張子は取ってしまって、わかりやすいファイル名をつけてから、パピーさんが教えてくださったようにやってみればいいのかな?そうだ!そうしてみます。分離の記述までご丁寧に教えてくださってありがとうございました。がんばってみます。 |
どなたかが作ったプログラムで作られたファイルがたくさんあり、いろいろな拡張子がついています。EXGO.24Aですとか、CF3000.12Aですとか・・・。拡張子前のファイル名にもネーミングルールはなく、文字数も決まっていません。.拡張子を切り取ってファイル名だけを取得したいのですが、文字数が決まっていない場合どんな関数を使えばよいのでしょうか?簡単すぎる質問でかもしれませんが、ヘルプとマニュアルを見てもよくわかりません。よろしくお願いいたします。 |
▼ポリンキー さん: こんばんは。 > どなたかが作ったプログラムで作られたファイルがたくさんあり、いろいろな拡張子がついています。EXGO.24Aですとか、CF3000.12Aですとか・・・。拡張子前のファイル名にもネーミングルールはなく、文字数も決まっていません。.拡張子を切り取ってファイル名だけを取得したいのですが、文字数が決まっていない場合どんな関数を使えばよいのでしょうか?簡単すぎる質問でかもしれませんが、ヘルプとマニュアルを見てもよくわかりません。よろしくお願いいたします。 File System Objectを使用した方法です。他にも色々方法はあると思いますが、おもしろいんで多用しています。 '================================================================== Sub test() MsgBox 拡張子を取った名前("\\111.111\public\aaa\xxx\EXCF100.12A") End Sub '=================================================================== Function 拡張子を取った名前(fnm As String) As String Dim fso Set fso = CreateObject("Scripting.FileSystemObject") With fso 拡張子を取った名前 = Replace$(.getfilename(fnm), "." & .GetExtensionName(fnm), "") End With Set fso = Nothing End Function 試してみて下さい。 |
▼ichinose さん: こんにちは。お世話になりますがよろしくお願いいたします。 私は超初心者ですので、File System Object も Functionメソッドも 初めてで、マニュアルを見ながら勉強しました。でも、マニュアルの使用例だけでは理解できないので、たぶん基本的なことだと思うのですが教えてください。 教えていただいた処理は、Subの中から呼び出すような形ですよね?その際の変数の引渡し方について教えてください。 ================================================================== Sub test() MsgBox 拡張子を取った名前("\\111.111\public\aaa\xxx\EXCF100.12A") End Sub '=================================================================== Function 拡張子を取った名前〜 End Sub 拡張子を取った名前というのはSubの中でも宣言するのでしょうか? Subの中で、拡張子を取った後のファイル名を使って、散布図を作成する処理が あります。拡張子を取った名前をシート名に記述して、実行してみると、 コンパイルエラーで引数は省略できませんというメッセージが表示されるのですが? それから、教えていただいた処理というのは、 \\111.111\public\aaa\xxx\EXCF100.12A → EXCF100 にするものですか? それとも、 EXCF100.12A → EXCF100 にするものですか? マニュアルにfsoについてほんの少ししか載っていなくて、理解できていなくてすみません。 前回パピーさんに教えていただいて、パスを取り除く処理をして、現在のところEXCF100.12Aというようなファイル名になっています。一気に \\111.111\public\aaa\xxx\EXCF100.12A → EXCF100 という風にできる処理があれば、そちらの方が簡単かなぁと思いまして・・・。 超初心者ですので、できましたら説明などと加えていただければ嬉しいのですが・・・。お手数をおかけいたしますが、よろしくお願いいたします。 |
▼ポリンキー さん: こんにちは。 > > こんにちは。お世話になりますがよろしくお願いいたします。 > 私は超初心者ですので、File System Object も Functionメソッドも >初めてで、マニュアルを見ながら勉強しました。でも、マニュアルの使用例だけでは理解できないので、たぶん基本的なことだと思うのですが教えてください。 > > 教えていただいた処理は、Subの中から呼び出すような形ですよね?その際の変数の引渡し方について教えてください。 > >================================================================== >Sub test() > MsgBox 拡張子を取った名前("\\111.111\public\aaa\xxx\EXCF100.12A") >End Sub >'=================================================================== >Function 拡張子を取った名前〜 >End Sub > > 拡張子を取った名前というのはSubの中でも宣言するのでしょうか? >Subの中で、拡張子を取った後のファイル名を使って、散布図を作成する処理が >あります。拡張子を取った名前をシート名に記述して、実行してみると、 >コンパイルエラーで引数は省略できませんというメッセージが表示されるのですが? ↑の意味がよくわかりません、理解力に乏しいんで・・・。 出来ましたら、「こういうコードをで動かしたら、ここの個所でエラー番号xxxxのエラーが発生した」と言う形で教えてください。 それとも私のコードをそっくりコピーして実行したらエラーということでしょうか? もしそうだとしたら、Fsoが使えない環境かもしれません。 それと掲載したコードは、Excel2000で動作確認課しています。 > > それから、教えていただいた処理というのは、 >\\111.111\public\aaa\xxx\EXCF100.12A → EXCF100 にするものですか? >それとも、 >EXCF100.12A → EXCF100 にするものですか? 両方出来ます。 |
▼ichinose さん: 説明の仕方が悪くて大変申し訳ありませんでした。実行したのはほとんどichinoseさんが教えてくださった通りです。拡張子を取った名前というのをSName、FILE_Nameには前の処理で読み込んだファイル名が入っているので、そこを変えただけです。 Sub test〜(ファイルを読み込み、データを変更する処理をしてから) MsgBox SName("FILE_Name") ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets(SName)★★★★★コンパイルエラー .Range("A1:A" & CStr(r), "B1:B" & CStr(r)), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:=SName With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = sam.Offset(, 2) .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With ActiveChart.HasLegend = False End Sub Function SName(fnm As String) As String Dim fso Set fso = CreateObject("Scripting.FileSystemObject") With fso SName = Replace$(.getfilename(fnm), "." & .GetExtensionName (fnm), "") End With Set fso = Nothing End Function コンパイルエラーのところは、引数は省略できませんと表示されています。散布図を作成する処理のところは、ちゃんと動いているものをコピーしてきたものです。現在使っているエクセルのバージョンは2000です。ご面倒をおかけいたしますが、超初心者ですので、よろしくお願いいたします。 |
▼ポリンキー さん: こんばんは。返事が遅くなりました。 > 説明の仕方が悪くて大変申し訳ありませんでした。実行したのはほとんどichinoseさんが教えてくださった通りです。拡張子を取った名前というのをSName、FILE_Nameには前の処理で読み込んだファイル名が入っているので、そこを変えただけです。 > >Sub test〜(ファイルを読み込み、データを変更する処理をしてから) > >MsgBox SName("FILE_Name") ' ↑FILE_Nameって、String型の変数ですよね? MsgBox SName(FILE_Name) 'ですが、ポリンキー さんのコードには不要ですよね > >ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets(SName(FILE_Name)) .Range("A1:A" & CStr(r), "B1:B" & CStr(r)), PlotBy:=xlColumns > ActiveChart.Location Where:=xlLocationAsObject, Name:=SName(FILE_Name) > With ActiveChart > .HasTitle = True > .ChartTitle.Characters.Text = sam.Offset(, 2) > .Axes(xlCategory, xlPrimary).HasTitle = False > .Axes(xlValue, xlPrimary).HasTitle = False > End With > ActiveChart.HasLegend = False > >End Sub > >Function SName(fnm As String) As String > Dim fso > Set fso = CreateObject("Scripting.FileSystemObject") > With fso > SName = Replace$(.getfilename(fnm), "." & .GetExtensionName(fnm), "") > End With > Set fso = Nothing >End Function > > > コンパイルエラーのところは、引数は省略できませんと表示されています。散布図を作成する処理のところは、ちゃんと動いているものをコピーしてきたものです。現在使っているエクセルのバージョンは2000です。ご面倒をおかけいたしますが、超初心者ですので、よろしくお願いいたします。 |
▼ichinose さん: どうもありがとうございました。うまくいきました。基本的なことがわかっていないので、質問すらうまくできない状態で、ご迷惑をおかけしました。元のマクロの記述がとても長かったのですが、教えていただいたようにしましたら、記述が短く簡潔になりました。職場に詳しい人が一人もいないので、本当に助かりました。お世話になりました。 |
FileSystemObject を使って、拡張子なしのファイル名を取得するなら・・ Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") MsgBox FSO.GetBaseName(ThisWorkbook.FullName) |
▼Kein さん: こんばんは。 >FileSystemObject を使って、拡張子なしのファイル名を取得するなら・・ > >Dim FSO As Object >Set FSO = CreateObject("Scripting.FileSystemObject") >MsgBox FSO.GetBaseName(ThisWorkbook.FullName) GetBaseNameまで調べてませんでした。ありがとうございます。 |