• ベストアンサー

エクセルで数値と文字が入ったセルからの数値の抽出

皆さんこんにちは。 エクセルの使い方についての質問です。 添付画像の例のようにA列に 「XXYYYZZ(XとZは文字、Yは数値で3桁または4桁)」というフォーマットで 数値と文字が入っているセルがあります。 同様にB列には「WWZ(Wは数値)」というフォーマットで、 同様に数値と文字が入っているセルが並んでいます。 これらからDやE列にあるように数値のみを取り出すためには DやE列にどのような関数を入れてやればよいのでしょうか。 どなたか教えていただければ幸いです。 よろしくお願いします。

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

  • ベストアンサー
  • a987654
  • ベストアンサー率26% (112/415)
回答No.3

>A列に「XXYYYZZ(XとZは文字、Yは数値で3桁または4桁)」 >B列には「WWZ(Wは数値)」 A列は7or8文字B列は4文字かつ数値は全角半角どちらでも という前提で 1.MID関数での方法  D1に=VALUE(MID(A1,3,LEN(A1)-4))  E1に=VALUE(MID(B1,1,2)) 2.RIGHT、LEFT関数での方法  D1に=VALUE(LEFT(RIGHT(A1,LEN(A1)-2),LEN(A1)-4))  E1に=VALUE(LEFT(B1,2)) 2行目以降はどちらもオートフィル ご注意としてVALUE()の関数は抽出数字(文字列)を確実に 数値にするために入れています。 VALUEを入れないと抜きだし結果は、数字の文字列として 展開されます。 EXCELの仕様にて数字の文字列でも計算には使えますので 数字であればVALUE関数なしでも使用可能ですがVALUE関数で 確実に数値に変換しておく方が宜しいかと思います。 又これにより、全角半角およびその入り混じりにも適応します。

aghaergeas
質問者

お礼

SUBSTITUTE関数を使っていてでてきた数値が文字列扱いになっていて困っていましたが、 VALUEを使うことで解決できるのがわかって大変ためになりました。 今回はこのご回答をベストアンサーにさせていただきます。 ご回答ありがとうございました。

その他の回答 (5)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.6

A1に「年収330万円」や「40歳」が入力されているとき =MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&123456789)),LEN(A1)*10-SUM(LEN(SUBSTITUTE(A1,{0,1,2,3,4,5,6,7,8,9},""))))*1 で、それぞれ「330」、「40」を取り出すことが出来ます なお「年収3,300万円」のように「カンマ」で桁区切りが使われている場合の式は =MID(A3,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A3&123456789)),LEN(A3)*11-SUM(LEN(SUBSTITUTE(A3,{0,1,2,3,4,5,6,7,8,9,","},""))))*1 となります。 でも「年収」「万円」「歳」のように決まった文言であれば#01さんの回答にあるように =SUBSTITUTE(SUBSTITUTE(A1,"万円",""),"年収","")*1 の方が簡単ですし、応用が利くと思いますよ

aghaergeas
質問者

お礼

皆さんの回答は本当に参考になります。 エクセルの勉強もまだまだしないといけませんね。 今回はご回答ありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんばんは! 一例です。 セル内の数値は必ず連続していて飛び飛びで存在しないという前提です。 画像の配置ですと・・・ D1セルに =IF(A1="","",MID(A1,MATCH(TRUE,ISNUMBER(MID(A1,ROW($1:$20),1)*1),0),COUNT(MID(A1,ROW($1:$20),1)*1))) これは配列数式になってしまいますので、この画面からD1セルにコピー&ペーストする場合は D1セルに貼り付け後、数式バー内でクリック → 編集可能になりますので Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これを列方向と行方向にオートフィルでコピーしてみてください。 ※ とりあえず、セル内の文字数が20文字まで対応できるようにしています。 以上、参考になればよいのですが・・・m(_ _)m

aghaergeas
質問者

お礼

いくつかのご回答を見ていますと、今回のケースではMIDを使うのがよさそうですね。 配列については今まで何度かやってみたことがあるのですが、 理屈については今ひとつわからずじまいなのでまた勉強させていただきます。 ご回答ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

エクセルの関数では苦手な課題です。適当な関数が無い。 そういうことを覚えないとこんなところへ質問して手間隙かけることになる。 ーー 関数では http://www.geocities.jp/chiquilin_site/data/050223_numerical_extraction.html などに解説が有る 関数マニアで無いと、普通の人はアイデアそのものを思いつかないでしょう。 Googleで「エクセル関数 数字抽出」で照会。 ーー 1つの方法は、VBAができれば、1文字ずつ数字かどうかを判定して、数字だけ残せば良い。 標準モジュールに Function su(a) st = "n" For i = 1 To Len(a) If IsNumeric(Mid(a, i, 1)) Then s = s & Mid(a, i, 1) st = "y" Else If st = "y" Then su = Val(s) Exit Function End If End If Next i End Function でも入れて、ユーザー関数として使う。 ーーー 下記例ではB1に =su(A1) と入れて下方向に式を複写。 例データ 当社1000円 1000 定価1200円 1200 定価1235円 0 ーーーー 全角だとうまく行かない。 さらに上記プログラムに手を加える必要がある。 Function su(a) st = "n" MsgBox a For i = 1 To Len(a) If IsNumeric(Mid(a, i, 1)) Then s = s & StrConv(Mid(a, i, 1), 8) st = "y" Else If st = "y" Then su = Val(s) Exit Function End If End If Next i End Function ーー 結果 当社1000円 1000 定価1200円 1200 定価1235円 1235 単位が必要な場合は表示形式の設定で揶揄こと。

aghaergeas
質問者

お礼

過去に何度かエクセルの使い方でここで質問をさせてもらってきたのですが、 その度に関数で処理するよりVBAを覚えたほうがいいのかなと思います。 これを機に少しずつ勉強しようと思います。ありがとうございました。

  • tamiemon96
  • ベストアンサー率49% (658/1341)
回答No.2

A列を コピーしてください。 コピーした列全体に  編集 → 置き換え   検索する文字列  年収   置換後の文字列     (何もいれません)  実行で「年収」が消えます。  もう一度 編集 置き換え   検索する文字列  万円   置換後の文字列     (何もいれません) 実行で 万円 が消えます。   

aghaergeas
質問者

お礼

実はこの方法は実は真っ先に思いついたのですが、 いかんせん複数のエクセルファイルで同じ事をしたかったので、 置換処理よりテンプレートを使えば処理しやすい関数で、と思って質問させていただきました。 ご回答ありがとうございました。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

こんにちは フォーマットが決まっているのなら、 SUBSTITUTE 関数 や LEFT 関数、RIGHT 関数、MID 関数 (必要に応じて LEN 関数を組み合わせる) が使えます。 ご質問の画像の例では D1に =SUBSTITUTE(SUBSTITUTE(A1,"年収",""),"万円","") 以下オートフィル E1に =SUBSTITUTE(B1,"歳","") 以下オートフィル で出来ます。

aghaergeas
質問者

お礼

ご回答ありがとうございます。 SUBSTITUDE関数を使う手は考えてみたのですが、 恥ずかしながら入れ子にする発想がなかったです。 もっと柔軟に考えなければいけませんね、参考になりました。

関連するQ&A

  • EXCEL セル内の数値から、5桁目だけを抽出する方法について

    EXCELシートのセル内に、以下のような30桁からなる数値が入力されている 列が複数あります。 この列内の数値の右端から「5桁目」だけ、または左端から「10桁目」だけを 抽出したいと思っているのですが、EXCELの仕様で数値の先頭にある「0」は 表示されないため、各セルごとに表示されている数値の桁数はバラバラです。 数値の先頭に「0」が付いているセルが多数あり桁数が不揃いなことと、 数値が30桁もあるため、セルの数値表示が「1E+29」のように「E+29」で表示 されてしまっており、うまく数値を抽出することが出来ません。 ◆元データ   「列1」     (1) 1234567890  →(本当は30桁:000000000000000000001234567890)    (2) 111111111100000000001111111111   (3) 1      →(本当は30桁:000000000000000000000000000001)  (4) 123456789012345678909999999999  ◆右端から5桁目だけを抽出する   「列1」      (1)  6      (2)  1      (3)  0      (4)  9   お手数お掛けいたしますが、ご指導下さいますよう宜しくお願い致します。

  • エクセルのセル内の文字に対し抽出?したい

    エクセルのセル内の文字にたいしてのほかの列の合計を出したいです。説明が上手くなくてすみません。 ファイル添付したのでそれを見てもらえばわかります。 A列にある★のついたものの数量の合計(E列)が出したいです。 DGET関数だと、複数あった場合はだめですので、他の関数が知りたいです。 説明が上手くなくてすみません。 ご教授お願い致します。

  • Excel セル内の文字だけを取り出すには

    Excelの1つのセルに 01234 ABCDEFG のように、「数字5つ(固定)+半角スペース+(任意の数の)文字」 が入力されています。数値は必ず5桁と決まっていますが、 文字列の数はさまざまです。 関数で文字の部分だけ、別のセルに取り出したいのですが、 どの関数を使うとできますか?教えて下さい。 よろしくお願いします。

  • エクセルであるセルの文字が他のセル内で1文字でも存在するかを知る関数は?

    エクセルであるセルの文字が他のセル内で1文字でも存在するかを知る関数はありますか? たとえばA列の値に存在する文字がB列に1文字でもあるかを チェックすることができるのでしょうか。 A列    |   B列    |   C列 -------+----------+---------- ABCD  |  XYZB   |  ○ --> Bがある XY    |  ABSCE  |  X --> XもYもない HD     |  XUDM  |  ○ --> Dがある マクロ(VBA)でなく関数で表したいのですが このような関数はありますか? 関数のヘルプを調べたのですが、出来そうで出来ません。 どうぞよろしくお願いします。

  • 《急》Excelで数値の抽出方法を教えてください

    ExcelでA B C D という数値列があり、A(不連続)で得た結果がC,B(不連続)で得た結果がDとした場合、AおよびBがグラフでいうx軸に当たり、CおよびDがy軸に当たります。A列とB列の数字が同じときの結果(CとD)を別の列に表示するというものです。すなわち、x軸を同じにして不連続な数値y軸(C、D)のグラフを書きたいと考えています。適当な関数があればご教授いただけると幸いです。ぜひよろしくお願いいたします。 画像添付します。このように数値を抽出したいと考えています。

  • エクセル 数値だけ抽出するには?

    エクセルで、文字列+スペース+数字と入力されているセルから数値だけ取り出す方法を教えていただけますか? 文字列とスペースの字数は一定で、数値の桁数は6-8桁と変動します。 A列からb列のように変換したいのです。 A列          B列 PMID:_12345678    12345678 PMID:_123456     123456 宜しくお願いいたします。

  • エクセルVBA/ Formatで文字列が数値に化ける?

    いつもお世話様です。 エクセルVBAでFormatを使うと、文字列中にeが一つ入っていると、「指数」とみなされて勝手に数値に化けてしまうようです。 話を簡単にするため、問題のコートを簡易化したコードが下記のtest1です。 入力されるのは常に3文字以内の英数です。 test1のコードは、ab9と入れればAB9、01とか20とか入れると、予定通り001や020を返してくれます。 ところが、なかには1E1や4E3なども入力する必要があり、これを入れると010や4000に化けてしまいます。 現在は、対処するため、下記test2のように、文字列中に"E"があるかどうかで処理を分岐させていますが、ほかに何か良い方法はないでしょうか? Sub test1() Dim x As String, y As String, z As String x = Application.InputBox("CODEを入力してねん。", Type:=2) y = StrConv(StrConv(x, vbUpperCase), vbNarrow) z = Format(y, "000") MsgBox z & " Typeだよ。" End Sub Sub test2() Dim x As String, y As String, z As String x = Application.InputBox("CODEを入力してねん。", Type:=2) y = StrConv(StrConv(x, vbUpperCase), vbNarrow) If InStr(y, "E") > 0 Then z = y Else z = Format(y, "000") End If MsgBox z & " Typeだよ。" End Sub

  • エクセル関数で条件が二つの時の数値抽出

       列方向のそれぞれ三つのセルに数値が入った78行  (75行から152行)のテーブルがあります。       今,これらと異なる列方向の三つのセルの内の左側二  つに,テーブル内の任意の行の数値をそれぞれ選択した  時,残るセルにテーブル内の残された行の数値を抽出し  たいと思いますがうまくいきません。      何方かエクセル関数で出来る方法を教えていただけま  せんか。   なお,選択行は4行だけとしており,これらを連続させず  に一行毎に設け,各行毎の抽出セルにDSUMで計算式を  作成すると数値の抽出ができますが,この方法は避けた  いと思います。     (数値選択列)(抽出列)   (テーブル)   73行 X  ,Y   ,Z      , AA  ,AB  ,AC   74行開始 終了 期間     開始 終了 期間   75行,0005 ,0011 ,0010 (空欄),0004 ,0012 ,0010   76行,0007 ,0009 ,0010 (空欄),0005 ,0011 ,0010   77行,0004 ,0011 ,0009 (空欄),0006 ,0010 ,0010 (空78行,0008 ,0003 ,0004 (空欄),0007 ,0009 ,0010  --------------------(空欄),0004 ,0011 ,0009 (空79行(空            欄),0005 ,0010 ,0009 (空80行(空            欄),0006 ,0009 ,0009 (空                 欄),0007 ,0005 ,0006 (空152行(空           欄),0008 ,0003 ,0003    以上で,(空,あるいは(空欄)乃至は数字で00を含む4  桁としているのは,文字化けを避けるために便宜上入れた  もので,数値そのものは2桁の範囲です。                   何度もトライしておりますができません。どうかよろしくお  願いします。なお,エクセルVBAによる方法もお教えいただ  ければ有難いです。

  • Excel 1つのセルに入力された文字列(数値)を 最初の2桁は、次の

    Excel 1つのセルに入力された文字列(数値)を 最初の2桁は、次の3桁はなど別々のセルにその数値を張るつけることは可能でしょうか??c=232

  • エクセルで特定文字列の抽出する方法を教えてください。

    エクセルで特定文字列の抽出する方法を教えてください。 たとえばG00X-483.931Y-412.2R5.0 と書かれてるセルからXの値「-483.931」だけを抽出したいのですが分からなくて困ってます。 またこの数値は8文字と決まってないのでX~Yの間の数値と言う感じで抽出したいです。 よろしくお願いします。

専門家に質問してみよう