[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファイル名から数字を取り出す方法』(できるかな?)
windows Xp Excel 2000 or 2003
ファイル名にバージョンのような数字を入れてあります。
この数字のみを取り出す方法はありますでしょうか?
例。v2-Pg.xls から2のみを抽出する。
宜しくお願いします。
開いたブック自体のブック名を取り出すのか、任意のフォルダの閉じたブック名
から処理したいのかでやり方はずいぶん変わりますし、
数字も特定の位置にあるのか、任意の位置にあるのかによっても
処理方法は違うと思います。
(みやほりん)
関数でもできると思いますが、マクロの例です。 標準関数に下記を置いて、適当なセルや数式の中で =getNumOfBook() のように使ってどうでしょうか。 (Mook)
Function getNumOfBook() Dim RE, regExpMatch With CreateObject("VBScript.RegExp") .Pattern = "\d+[\.]\d*" .Global = True Set regExpMatch = .Execute(ThisWorkbook.Name) If regExpMatch.Count > 0 Then getNumOfBook = regExpMatch(0) Else getNumOfBook = "No Number" End If End With End Function
V数字-PG.xls の形です。最初にVで始まりその後に数字が入ります。その後ろは-PG.xlsです。ブックは自分自身です。
宜しくお願いします。
Mook様へ
試してみます。ありがとうございます。
=LOOKUP(99^9,--LEFT(SUBSTITUTE(MID(CELL("filename"),FIND("[",CELL("filename"),1)+1,FIND(".",CELL("filename"),1)-FIND("[",CELL("filename"),1)-1),"v",),ROW($A$1:$A$20)))
(みやほりん)
=-LOOKUP(1,-RIGHT(REPLACE(CELL("filename",A1), FIND("-PG.xls",CELL("filename",A1)),100,""),ROW($1:$100)))
(GobGob)
UDF 第一引数と第二引数の間の数字のみを抽出
=CheckNum("v","-")
Function CheckNum(ByVal str1 As String, ByVal str2 As String) With CreateObject("VBScript.RegExp") .Pattern = "(" & str1 & ")(\d+)(?=" & str2 & ")" CheckNum = .Execute(ThisWorkbook.Name)(0).submatches(1) End With End Function (seiya)
Mook様へ
ファイル名から数字が検出されませんでした。
みやほりん様へ
うまくいきました。
GobGob様へ
コピーの仕方が悪かったのかな?うまくいきませんでした。
2行を1行につないでやってみたのですが・・・・・
Seiya様へ
うまくいきました。
できればマクロでやりたいと考えています。上記の方法ですと正規表現を使用しているとおもわれます。
これからのメンテナンス等で正規表現が自分に扱えるかが心配です。(できるかな?)
正規表現は一見難しそうに思えますが、基本を習得してしまえば数式のようなものです。 VBA 正規表現 メタ文字 等で検索すると、詳しく説明されたサイトが多数見つかると思います。 (seiya)
>GobGob様へ >コピーの仕方が悪かったのかな?うまくいきませんでした。 >2行を1行につないでやってみたのですが・・・・・
↓ もしかして、コレ? (大文字小文字)
>例。v2-Pg.xls から2のみを抽出する。 >V数字-PG.xls の形です。最初にVで始まりその後に数字が入ります。その後ろは-PG.xlsです。ブックは自分自身です。
=-LOOKUP(1,-RIGHT(REPLACE(CELL("filename",A1), SEARCH("-PG.xls",CELL("filename",A1)),100,""),ROW($1:$100)))
(GobGob)
正規表現調べてみましたが、(?=-)の意味がわかりません。
Seiya様、教えていただけるとありがたいです。(できるかな?)
◆これでいかがでしょう =-LOOKUP(1,-LEFT(REPLACE(CELL("filename",A1),1,SEARCH("[V",CELL("filename",A1))+1,),{1,2,3})) または、 =-LOOKUP(1,-LEFT(REPLACE(CELL("filename",A1),1,LEN(INFO("directory"))+2,),{1,2,3})) (Maron)
(? で始まる部分は、「後方参照をしない」、という意味です。
この場合 (?=-) ですよね? -が次に続く文字列だけど、"-"自体は後方参照の必要がありませんよ、 という意味です。
.Execute(ThisWorkbook.Name)(0) でマッチ全体を表示させた場合でも "v"は残りますが、"-"は含まれません。
長いPattern 文字の場合、(? で後方参照から除外しておくと、メモリの節約にもなりますし、 多少高速になるはずです、 (seiya)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.