• 締切済み

文字列の抽出方法について

アクセス2000を使っています。 D:\test\image\image.bmp 上記したようなファイル名のフルパスから、下記のようにフォルダ名のみを取り出したいのですがうまくいきません。  D:\test\image\ InStr関数で"\"の位置を抽出して、left関数で抽出した位置より左側のデータを取り出そうと思ったのですが、InStr関数では、最初に見つかった"\"の位置を抽出してしまうため、left関数で取り出した値が下記のようになってしまい、正確なデータが取り出せません。どうしたらいいでしょうか?  d:\

みんなの回答

  • j_euro
  • ベストアンサー率25% (29/115)
回答No.1

instr()だと こうですが・・・・・・・・・・ dim tmp dim last last = 0 do tmp = instr(last, fullpath, "\") if tmp = 0 then exit do endif last = tmp loop foldername = left(fullpath, last) 最近のヴァージョンでは、instrrev()があるので、 foldername = left(fullpath, instrrev(fullpath, "\")) でいいかと思います。 #実はわたし、この質問で instrrev() を知った・・

関連するQ&A

  • アクセスでの文字抽出について

    以前に、ファイル名のフルパスからフォルダ名だけを取り出す方法を質問しました。  ファイル名フルパス=D:\test\image\image.bmp  フォルダ名=D:\test\image\  この質問に対して、ファイル名をフルパスを fullpath とし、フォルダ名を foldernameとすると、下記のコードで取得できるとの回答をいただきました。 foldername = left(fullpath, instrrev(fullpath, "\"))  そこで、フォームに、「フルパス」という名前のテキストボックスと、「フォルダ名」という名前のテキストボックスを作成し、コマンドボタンのクリック時イベントに、下記のコードを記述しました。  Me.フォルダ名 = left(Me.フルパス, instrrev(Me.フルパス, "\"))  しかし、実行すると、「プロ-ジャーの呼び出し、又は引数が不正です。」というエラーメッセージが表示されてしまいます。  どうすればよいのでしょうか?

  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • 指定した文字列が抽出できる関数

    Excelで、指定した文字列だけを抽出表示する場合、「文字列を先頭(左)から抽出する」などの関数は「LEFT関数」や「RIGHT関数」がありますが、位置の指定ではなく、文字列の中にある、特定の文字だけを指定して抽出してできる関数は何でしょうか? たとえば「ラーメン」「うどん」「そば」いずれかを「含む」文字列が入っているセルの中から、「うどん」のセルだけを抽出して表示するという場合です。

  • Accessで文字列の一部を抽出する方法を教えてください。

    Accessで文字列の一部を抽出する方法を教えてください。 下記の商品名から、[ ]でくくられた部分を抽出する関数があれば教えて頂きたいです。 よろしくお願いいたします。 ■ガラス|[ ceiling light/シーリングライト ]■

  • エクセルで文字列を抽出する関数

    エクセルでデータ処理をしています。 例えばA列に Iwate kenichi Akita hachiro gata (1992) Yamagata shi,1905 というデータがあり、同じ関数を使ってそれぞれB列に Iwate kenichi Akita hachiro gata Yamagata shi と抽出したいので、 =IF(FIND("(",A1),LEFT(A1,FIND("(",A1)-1),IF(FIND(",",A1),LEFT(A1,FIND(",",A1)-1),A1))という式を作ってみましたが、うまく処理できません。 どのような式を作れば上手くいきますか?マクロは使えませんので、関数でお願い致します。

  • 文字列データの抽出容易にしたい

    あるログから特定の文字列を抽出したいのですが 方法が思いつかず困っています ログには下記に示したパターンが複数個あります。 TEST: *****: 種別コード  **************** ************************  テスト結果(OKorBAD) *:可変長の文字列 この中からテスト種別コードと テスト結果を抜き出して ☆☆☆☆,OK ★★★★,OK ■■■■,BAD   : : 上記のデータにまとめたいのですがどうすればよいのでしょうか? 私自身はC言語はある程度理解しているつもりですが 文字列処理は苦手です。 このようなケースを対処しようした場合、最適なスクリプト言語 や方法論でも構いませんのでご教示いただければと思います。 いちからじっくり挑戦したいと思っています。 出来れば参考になるコードも合わせて記載していただけると 助かります。 どうか御願いいたします。

  • アクセス2000のVBAで変数に係数をつける方法

    アクセス2000を使っています。 一つのレコード内に、下記のように、「半角4文字の番号+スペース」という規則正しいデータがあります。  ↓↓ 11A11 10A11 22B11 09A22 しかし、このデータの数は不規則で、番号が1個のものもあれば、20個のものもあります。  ↓↓ 11A11 11A11 10A11 22B11 09A22 ・・・ このデータ内にある半角4文字の番号を全て別々のデータにしたいと思い、VBAのコードを使って、InStr関数でスペースを検索し、そのスペースの手前から4文字のデータをleft関数やMid関数で抽出し、それを変数data(x)に代入し、次に、InStr関数で前のスペースの位置から次のスペースを探して、また、そのスペースの手前から4文字のデータをMid関数で抽出し、それを変数data(x)に代入する。 要するに、data(x) の中の x を1から1づつ増加させていき、data(1),data(2),data(3)という変数を自動的に生成し、その生成された各変数にデータを代入していきたいのですが、どうすればいいのでしょうか?

  • エクセルで、半角文字列を抽出するには

    使用機種はXPでEXCEL2003です。 住所のデータ整理をしています。 地名の後の番地のみ半角数字(ハイフンも半角)で入力されており、その部分だけを別の列に移動させる作業です。 関数で、半角文字列だけを抽出することはできますか? left関数を使おうとも思いましたが、文字数がバラバラなので、難しいと思いました。 私は、一つひとつコピー→ペーストをするしか思いつかないほどの初心者です。 どうぞよろしくお願いいたします。

  • EXCEL 文字列条件抽出

    特定の文字列を検索条件として別シートに抽出する方法を御教授願います。 使用する関数はLEN,MID,LEFT,ISERR,もしくはワイルドカードなどを使用すればいいのかと考えておるのですがいまいちやりたいような数式を組めず悩んでおります。 やりたいことを言葉で表現するならば以下のような感じとなります。 「sheet1のF列に<107>という文字が含まれていた場合」 ・顧客別シートのD列に顧客ごとに分けて抽出 ・含まれていない場合、抽出しない と、単純なことなのです。が、制約がある為にうまくいきません。 制約は以下となります。 ・検索対象の文字列が以下のように決まった形ではない。 (1)A-BB-107○#----- (2)A-BB-107○#----- (3)ABB107○C #----- (4)ュウリABB-107○#----- (5)ュウリABB107○#----- (6)BB-107○C-D9#-----  など、その他にも数種類存在。(○部分には違う数字が入ります) ・上記でも分かるように<107>が始まる文字列の位置が決まっていない。 という具合です。 操作しているブック構成は下記のとおりです。 ・sheet1・・・参照用シート 4行目 /D列・・・顧客No / E列・・・顧客名 / C列・・・製品仕様 (A列,B列,G~AD列まで使用中) 5行目 / 1 / A / A-BB-107○#----- 6行目 / 2 / B / ュウリABB-107○#----- 7行目 / 1 / A / BB-107○C-D9#----- 8行目 / 3 / C / A-BB-107○#----- 9行目 / 3 / C / BB-107○C-D9#-----  10行目 / 4 / D / A-BB-107○#----- (会社のサーバーで管理している情報がそのままエクセルに打ち出されたシート。 情報量として約1000行ほど) ・sheet2,3,4,5(開始行,項目列は同じ位置)・・・特定の顧客別ごとに分け、特定の製品仕様だけを抽出したシート(参照用から引用)。 4行目/ B列・・・顧客No / C列・・・顧客名 / D列・・・製品仕様 5行目 / / A-BB-107○#----- 6行目 / / ュウリABB-107○#----- 7行目 1 / A / BB-1234C-D9#----- 8行目 / / A-BB-1115#----- 9行目 / / BB-107○C-D9#-----  10行目 / / A-BB-3498○#----- 特定の顧客NoをB列(一つのセルになってます。C列も同様一つのセルになってます)に入力すると、製品仕様すべてを抽出するように作成したシート。このシート内のG列から新たに表を作成し<107>の文字列が含む製品仕様を抽出しようと考えております。 出来れば、このような一度段階を踏んでから特定の仕様を抽出するのではなく各シートに対象となる顧客Noを入力すると特定の仕様が一回で抽出できるようなシートを作成したいのですが、関数初心者の為、うまく組めずこのような形となりました。(現在、参照用シートに作業列を作り対応。作業列ばかりが増えて正直困っているのも確かなのです) 【御教授頂きたいこと】 ・<107>の文字列を条件として別表に抽出する関数の数式 です。 また、出来ればでいいのですが、 ・顧客Noを入力すると特定の仕様が一回で別表に抽出できるような方法が御座いましたら、そちらも合わせてお願いしたいと思っております。 長々と書き綴り、大変申し訳御座いませんが、宜しくお願い致します。

  • Access InStr関数 AかBが入っていた場合、抽出したい

    Access2003です。 フィールドに「A-A」というデータがあります。 「-」より前のデータを抽出する方法として、 Left([フィールド],InStr([フィールド],"-")-1) というコードを使っていました。 ※「-」より前の文字数は1文字とは限らないので・・・。 しかし 「A-A」「A+1」のように、「-」または「+」より前のデータを抽出する というのは可能でしょうか? orを使って Left([フィールド],InStr([フィールド],"-"or"+")-1) と書き直しましたが、エラーになってしまいます(安易にコードを修正しすぎですが)。 どうやってコードをかけば良いのでしょうか?

専門家に質問してみよう