[[20120512104710]] 『ファイル名から数字を取り出す方法』(できるかな?) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ファイル名から数字を取り出す方法』(できるかな?)

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.