• ベストアンサー

エクセルの文字列検索でお知恵をお貸し下さい。

エクセルのA1~A5セルに次のようなデータがあるとします。 1-01-0 1-01-1 2-01-11 10-111-0 100-1111-111 B1~B5セルに、これらのデータから以下のようなデータを検索・抽出する関数が分からずに困っています。 1-01 1-01 2-01 10-111 100-1111 つまり各セルの右側の"-"(ハイフン)より左にある、可変な全文字列をB列に抽出したいのです。 どうか宜しくお願いいたします。

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

  • ベストアンサー
回答No.3

セルB1に、以下の式を貼り付けてください =MID(A1,1,(SEARCH("-", A1,(SEARCH("-",A1, 1))+1))-1) ご希望通りの値が一発表示されます セルB2以降は、式をコピーして貼り付けでOKです MID関数はセルから文字を抜き出す関数です。 SEARCH関数はある文字(今回はハイフン)が、何文字目にあるかを判断する関数です。 式の一部を日本語にすると =MID(A1,1,(2つめのハイフンの文字位置)-1) となります 式の意味は 「セルA1のうち、1桁目から、(2つめのハイフンの文字位置-1)桁目までを抜き出せ」です。 A1セルが「1-01-0」なら、1桁目から4桁目までを抽出します 「2つめのハイフンの文字位置」は、「(SEARCH("-", A1,(SEARCH("-",A1, 1))+1))」で求めています 式の一部を日本語にすると 「(SEARCH( "-", A1, (1つめのハイフンの文字位置+1))」 です 式の意味は 「1つめのハイフンより後ろにあるハイフンの文字位置を求めろ」です 分かりづらかったら、ゴメンナサイ でも、ご希望の値は出ますよ

alpha-01
質問者

お礼

ありがとうございます。 ここまで丁寧なるご説明で、とても感謝しております。 関数の本当の使い方が、少し分かったような気がします。 ありがとうございました。

その他の回答 (2)

noname#22222
noname#22222
回答No.2

Excel は一度も使用したことがない門外漢ですが... B1に =Cutstr(A1,"-", 1) & "-" & Cutstr(A1,"-", 2) 後は、ズズーッと! 一応これで出来ました! ただし、 (1)Sheet1のタグを右クリックし、 (2)コードの表示(V) をクリックし、 (3)[挿入]-[標準モジュール]をクリックし、 (4)以下のコードをコピー。 Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function 参考にならなければゴミとして無視して下さい。

alpha-01
質問者

お礼

ありがとうございます。 ユーザー定義関数を作成するということですね。 ちょうど良い機会なので、ご回答を参考に今回挑戦してみます。 ありがとうございました。

noname#33629
noname#33629
回答No.1

複数箇所あるハイフンのうち、最後のハイフンとその後ろを消すことになりますね。 関数で出来なくは無いでしょうが、 想像するに、おそらく結構データ数が多いでしょう? 多いから、手作業でなく関数でやりたいんですよね? だとすると、データ本体すなわち文字データのサイズ自体よりも、関数セルの部分が非常に大きなサイズになってしまい、重くなります。 特に、大量のデータを扱う場合、最悪、固まったりします。(編集途中のファイルがおじゃん =私もかつて何度も経験しました。) さて、 私であれば、関数は使わずに、その目的を果たします。 以下、説明です。 そのファイルをいったんテキスト(CSVかTXT)ファイルとして新規保存し、 次に、その新規ファイルをあらためてExcelで開きます。 すると、「区切りの文字は何ですか」ということを聞いてくるので、区切り文字を「-」にします。 こうして開けば、 100-1111-111 が 100 1111 111 という3つの列に分割されます。 あとは、文字同士の足し算とかやれば、目的のことができると思いますよ。 もしも、上記でうまく行かなければ、 いったん、全部の「-」を検索・置換機能を使って、全部「,」(半角のカンマ)に置換してしまいます。 そして、拡張子「TXT」で保存します。 そして、(Excelの外でのことですが)、そのファイルの拡張子をTXTからCSVに変更してしまいます。 あとは、そのファイルをダブルクリックすれば、やはり上記と同じく、3列に分割したデータになります。 このように、 元々、細かく列分割されていれば便利なデータについては、まず分割してから次の仕事(文字列同士の足し算など)をするのが、本来のやり方です。

alpha-01
質問者

お礼

ありがとうございます。 今回はあくまでエクセル上の関数にこだわりました。 ただ、テキストファイルにしてからの列分割というのは今後の自分の良い知恵になりました。 ありがとうございました。

関連するQ&A

  • excelで文字列を検索する関数を教えてください。

    いつもお世話になります。 エクセルの関数で、シートAのセルA1に入っている文字列をシートBのC列から探し出し、同じ文字列があればTrueをなければFalseを返す関数を教えてください。 わからないながらも色々調べてみたのですが、検索にはVLOOKUPがよく使われているようですが、シートBのC列は、データの並べ替えができないので、VLOOKUPは、使えないのです。 よろしくお願いします。

  • エクセルで、異なる文字列を抽出するには。

    エクセルで、A1からA10に文字列のデータがあるとします。 10個のセルのデータは「あああ」が4こ「いいい」が3こ「ううう」が2こ「えええ」が1こ順不同であった場合、B1に「あああ」B2に「いいい」B3に「ううう」B4に「えええ」と異なる文字列のみ1個ずつ抽出するにはどうすればいいでしょうか。

  • エクセル 特定の文字列を抽出・挿入

    例えば A列にあるセルの中から特定の文字列を検索・抽出して、その特定の文字列だけB列に挿入していく関数はありますか? またはA列にあるセルの中から特定の文字列に挟まれた文字列を検索・抽出してその特定の文字列だけB列に挿入していく関数はありますか? マクロを組まないと難しいのでしょうか?

  • エクセルでの文字列の操作(エクセル初心者)

    地域の私的なグループのデータの修正を頼まれました。 エクセルで作成されたファイルなのですが、次のようなことをする必要がある。 1.123456という文字列を3桁で区切り、123-456というようにハイフンを入れる 2.12 34 5678というようにスペース混じりの文字列のスペースの部分をハイフンにして12-34-5678というようにする 3.ある列の全カラムのうち、文字数が20文字を超えるセルを抽出する エクセル初心者ばかりなので、手で修正することも考えたのですが、全員、仕事のある身、省力化したいと考えています。 折角、エクセルになっているのだから良い方法はあるのでは思うのですが、如何でしょうか。 よろしくお願いいたします。

  • 【エクセル】結合した文字列の検索について

    エクセルで、複数セルの文字列を「=A1&A2&A3&…」という感じで、B1セルに結合するとして、 例えばA2の文字列に「★」という文字が含まれているとします。 検索で「★」を指定した場合、A2のものは引っかかるのですが、B1の結合された文字列は引っかかりません。 B1セルの文字列も通常通り検索できるようにするには、B1セルでどのような処理をすれば良いのでしょうか。

  • EXCEL2007で文字列の右側から特定文字を抽出

    EXCEL2007で1つのセルの文字列の右側から最初の"/"が出現したときまでの文字を抽出する方法を教えてください。 (例)  A 1エクセル/関数/123456/ここがターゲット 2 3 ⇒関数を使用し、上記A1セルの「ここがターゲット」の文字列を抽出したいのです。 神様、どうか教えてください!

  • Excelの文字数が決まっていない文字列の抽出

    教えてください。Excelで、文字数の決まっていない文字列を抽出したいのですが、例えば、 セルA1 : プロジェクト1 簡単な文章 2352 PD_JOK セルA2 : プロジェクト13 複雑な文章列とは決まっていない 2453 AO_JKI ・・・・・・ というセルから、 プロジェクト名から、半角数字前までの文字数が決まっていない文字列「簡単な文章」や「複雑な文章~」をセルB列に抽出する方法を教えていただきたいのですが、 そして、半角数字後の半角英字「PD_JOK」をセルC列に抽出する方法も同時に教えてください。 万単位でデータがあるので、関数を使わないと難しいです。 よろしくお願い致します。

  • Excelで文字列の中から部分一致したものを抽出

    エクセルで特定の文字を含むセルを抽出する方法を探しています。 A列に元データ、C列に検索条件があります。 C列の条件に一部でも一致するデータを抽出したいです。(結果イメージを添付します) 可能であれば、関数で対応したいです。 どなたかお分かりになる方いらっしゃいましたら、 教えていただけないでしょうか? よろしくお願いいたします。

  • エクセルで文字列の5桁目が9なら0に変更

    エクセル初心者です。 インターネットで調べてみたのですが、同様の質問にヒットしませんでしたので、教えてください。 A列に8桁の会員番号が文字列で表示されています。 この8桁のうち右側の5桁を関数(RIGHT(a8,5))でB列に抽出しています。 抽出された5桁の数字ですが、最上位桁が9の場合、0に変えたいのです。 A        B 01004567    04567  02015678    15678 03098765    98765 → 9を0に入替して「08765」と表示 このような対応が出来る関数を調べたのですが分かりませんでした。 ご教示のほど、よろしくお願いします。

  • エクセルで文字列の最大値を抽出する方法

    文字列の最大値を抽出したいのですが 4つのセルにA、B、C、Dが入力されている場合の文字列の最大値Dを抽出する関数式を知りたい エクセルヘルプで見るとMAXAとなっていたのですが抽出する答えは”0”となってしまいます。