- ベストアンサー
エクセルのセル内から数字だけを抽出する方法を教えて下さい
エクセルのセル内から数字だけを抽出する方法を教えて下さい あるデータの列(備考欄)には様々な文字が入っていて、 その中に●名(●は数字)が入っています その数字だけを取り出して 別の列に移す関数を教えて下さい ※この列には他の数字は入っていません、最大で2ケタです よろしくお願いします
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
セル内の文字列の中に2桁までの数字が入っている場合に、その数字部分を抽出したいなら以下のような数式になります。 =MID(A2,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A2)&1234567890)),1)&IF(ISNUMBER(MID(A2,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A2)&1234567890))+1,1)*1),MID(A2,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A2)&1234567890))+1,1)*1,"")
その他の回答 (6)
- mu2011
- ベストアンサー率38% (1910/4994)
ワークシート関数では非常に厳しいと思いましたので専用の関数で如何でしょうか。 因みに数字(半角、全角)をそのまま抽出します。 (1)alt+F11キー押下→挿入→標準モジュール→以下のコードを貼り付け→alt+F4 (2)任意セルに=numget(対象セル)を入力、数値とするならば、=numget(対象セル)*1で下方向にコピー ユーザ定義関数 Function numget(rng As Range) For i = 1 To Len(rng) ch = Mid(rng, i, 1) If ch Like "#" Then wk = wk & ch End If Next i numget = wk End Function
お礼
有難うございました こちらの回答を見る前にベストアンサーを決定しましたが、 数値として合計も出したかったので、業務にはこちらを利用しました!! (関数の意味は全く分かりませんが・・・) 笑
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 一例です。 ↓の画像でE2セルに =IF(D2="","",MID(D2,MATCH(TRUE,ISNUMBER(MID(D2,ROW($A$1:$A$10),1)*1),0),COUNT(MID(D2,ROW($A$1:$A$10),1)*1))) これは配列数式になってしまいますので、この画面からコピー&ペーストしただけではエラーになると思います。 E2セルに貼り付け後、F2キーを押す、またはE2セルをダブルクリック、または数式バー内で一度クリックします。 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定します。 数式の前後に{ }マークが入り配列数式になります。 これをオートフィルで下へコピーすると画像のような感じになります。 尚、D列の10文字まで対応できる数式にしています。 そして、数値が連続していれば最初に数値が出てきたところから入っている数値は全て表示されます。 以上、参考になれば良いのですが・・・m(__)m
お礼
回答有難うございました おかげ様で解決しました
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No1です。 F列が備考であるとしてさまざまな文字が入っているとのことを見落としていました。 G1セルには次の式を入力して下方にオートフィルドラッグしてください。 =IF(OR(D1="",COUNTIF(D1,"*名*")=0),"",IF(ISNUMBER(MID(D1,FIND("名",D1)-2,2)*1),MID(D1,FIND("名",D1)-2,2)*1,IF(ISNUMBER(MID(D1,FIND("名",D1)-1,1)*1),MID(D1,FIND("名",D1)-1,1)*1,""))) この式でしたら数字の前に文字列が入っている場合にでも問題なく対応できます。
お礼
再回答までして頂いて有難うございました
- blue_r
- ベストアンサー率59% (92/155)
備考欄がA列だとすると、隣のB列に以下のように関数を記述して下さい。 (例は1行目の場合) =IF(ISNUMBER(VALUE(MID(A1,1,2))),MID(A1,1,2),IF(ISNUMBER(VALUE(MID(A1,1,1))),MID(A1,1,1),"")) 但し以下の様な条件があります。 ・先頭が数字で始まっていること。 「約1名」などは対象になりません。 ・数字は2桁以内であること。 3桁以上の場合は3桁目以降を無視して抽出します。 「123名」の場合「12」と抽出されます。 ・備考欄に2バイト(全角)で入力されている数字は、 そまま2バイト(全角)で抽出します。 「12名」の場合「12」と抽出され、 「12名」の場合「12」と抽出されます。 また数字の後ろ(2または3桁目以降)の文字が何であれ 先頭が数字であれば抽出します。 「12名」でも「12個」でも「12」と抽出されます。 例えば、何らかの人数を抽出することが目的だが、 中には「○個」という不要な情報も混ざっている、などの場合でも 先に「名」という文字を特定する方法はありますが、 もう少し複雑な関数になってしまいます。
お礼
回答有難うございました
- merlionXX
- ベストアンサー率48% (1930/4007)
○○名が最後にあれば簡単なんですがそうではなく、 あいうえお55名かきくけこ やゆよ8名ん のような任意の文字列中で場所不特定の「名」の前の1文字または2文字の数字のみを取り出すんですね? 数字の前以外に「名」という文字は存在しないんですね? そうであれば、 ・備考セル内に「名」が無ければ表示しない。 ・「名」の前の2文字を取り出し、数値化できなければ「名」の前の1文字だけを取り出す。 ・そうでなければ「名」の前の2文字を取り出し、数値化する。 という式でいけますね。 仮に対象がA1セルだとすると =IF(ISERROR(FIND("名",A1)),"",IF(ISERROR(VALUE(MID(A1,FIND("名",A1)-2,2))),VALUE(MID(A1,FIND("名",A1)-1,1)),VALUE(MID(A1,FIND("名",A1)-2,2))))
お礼
回答有難うございました
- KURUMITO
- ベストアンサー率42% (1835/4283)
例えばF列に備考があるのでしたらG1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(F1="","",SUBSTITUTE(F1,"名","")*1)
お礼
有難うございました コピペで簡単に出来ました!!