• ベストアンサー

文字列を特定文字で分割したい

はじめまして。宜しくお願いします。 現在Access2002のVBAをつかってタイトルのようなことを実現したいと思っています。 Dim a As String Dim b As String という二つの変数を用意して 「C:\Documents and Settings\デスクトップ\test.csv」という文字列が与えられているとき 変数aには「test.csv」を、変数bには「C:\Documents and Settings\デスクトップ\」を 格納しようとしています。 スマートなやり方がわからず、 文字列の右から一文字ずつ比較して行き、何文字目に「¥」が出てくるかをカウントして、right関数とleft関数で分割を行っています。 このような処理を行う場合、なにか適した関数があると思い探しているのですが、 なかなか見つからず、行き詰っています。(そのような関数があるのかも分からず・・) もしもなにかお気づきの方が居られましたら、ご教授宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 フルパスを、ファイル名のみとパスのみに分けるということですね。 現状はInStrRev関数を使用しているということでしょうか。 Win32APIにはPath系関数群というのがあり、いろいろなパスの操作を行えます。 ファイル名のみを取り出すのは、 PathFindFileName関数または、PathStripPath関数で、 パスのみを取り出すのは、 PathRemoveFileSpec関数です。 各関数名で検索してみて下さい。 とりあえず、サンプルが載っているHPを1つ紹介しておきます。 http://plaza5.mbn.or.jp/~heropa/vb122.htm#PathFindFileName http://plaza5.mbn.or.jp/~heropa/vb122.htm#PathStripPath http://plaza5.mbn.or.jp/~heropa/vb122.htm#PathRemoveFileSpec 上記3つのおおもとのHP http://plaza5.mbn.or.jp/~heropa/index.html ついでにもう1つ http://homepage1.nifty.com/nishikawa/laboratory/Tips/Win/pathFunctions.html

参考URL:
http://plaza5.mbn.or.jp/~heropa/index.html,http://homepage1.nifty.com/nishikawa/laboratory/Tips/Win/pathFunctions.html
takatoo
質問者

お礼

こんにちは。早速のレスありがとうございます。 みなさんのレスの速さと丁寧さに感動しています。 ちょうど私も、InStrRev関数を発見して「使えるのでは」と思っていたところです。 API関数については知識がなかったので、大変勉強になりました。 本当にありがとうございます!

その他の回答 (2)

  • norakuma
  • ベストアンサー率29% (293/977)
回答No.2

Split関数とJoin関数を使ってみてはどうでしょう。 Split関数は、指定した文字で文字列を分割します。 この例では、\を分割のキーにして、 オリジナルの文字列を複数の文字列の集合にします。 集合の最後の文字列を変数aに代入して、それ以外のものを、Join関数を利用してくっつけます。 Join関数でできた文字列の最後尾に、#をくっつけて 文字列bに代入すればできあがり。 スマートか?といわれると疑問ですが、わかりやすい処理です。 また、例に出された内容であれば、 FileSystemObjectを利用して、フォルダ内のファイル一覧を出すことも可能ですよ~。 では。

takatoo
質問者

お礼

こんにちは。早速のレスありがとうございます。 回答をいただいたのですがmaruru01さんの方法がうまくいきそうなので それを使ってみたいと思います。 しかしFileSystemObjectのこともあわせ、貴重なアイデアをいただき ありがとうございます!

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

私もそうやっています。それが一般的なやり方なのではないでしょうか。

takatoo
質問者

お礼

こんにちは。早速のレスありがとうございます。 他の方からも回答をいただいたので、そちらで試してみようと思います。 レスしていただきありがとうございました!