- ベストアンサー
右側に半角数字がある場合の抜き出し方法
A列に あいうえお123 というようなデータがあります。 このデータの中から123を抜き出したいのですが、 A列データは下記のように色々なパターンで入っております。 ※⇒が抜き出したいデータです。 右側に1個以上連続してある数字があれば抜き出し、 無ければ空白にしたいです。 あいうえお123 ⇒123 あいうえお4 ⇒4 あいう567 ⇒567 あいう111えお890 ⇒890 以下の過去ログで近いことがやれそうだったのですが、 http://oshiete1.goo.ne.jp/qa4865977.html 右に連続してある数字を全て抜き出すにはどうしたらよろしいでしょうか。 よろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
・文字列の結果が欲しい場合 =RIGHT(A1,LEN(A1)-MIN(FIND("0",A1&"0"),FIND("1",A1&"1"),FIND("2",A1&"2"),FIND("3",A1&"3"),FIND("4",A1&"4"),FIND("5",A1&"5"),FIND("6",A1&"6"),FIND("7",A1&"7"),FIND("8",A1&"8"),FIND("9",A1&"9"))+1) 結果は文字列なので「あいう01234」は、文字列で「01234」になります。 また「かきくけこ」は「空白セル」になります(末尾に数字が無い) ・数字の結果が欲しい場合 =VALUE("0"&RIGHT(A1,LEN(A1)-MIN(FIND("0",A1&"0"),FIND("1",A1&"1"),FIND("2",A1&"2"),FIND("3",A1&"3"),FIND("4",A1&"4"),FIND("5",A1&"5"),FIND("6",A1&"6"),FIND("7",A1&"7"),FIND("8",A1&"8"),FIND("9",A1&"9"))+1)) 結果は数値なので「あいう01234」は、数値で「1234」になります。 また「かきくけこ」は、数値で「0」になります(末尾に数字が無い) どちらも、やっている事は、以下の通りです。 ・FIND関数で0から9の文字がある場所を探す。 「FIND("0",A1&"0")」とやっているのは「A1セルに文字"0"が含まれていない時に、結果が#VALUE!にならないようにする細工」です。 ・0から9の文字がある場所のうち、一番手前の位置にあるのをMIN関数で求める。 ・一番手前の位置が判ったら「全体の文字数 - 一番手前の位置 + 1」で「右から何文字必要か」を求める。 ・「右から何文字必要か」が判ったら、RIGHT()関数で、右から必要な文字数分を取り出す。 ・数値で返す場合は「先頭に"0"を文字列連結して、空文字の場合は、数値で0になるように細工をして」からVALUE関数で数値に変換する。
その他の回答 (6)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 無理矢理って方法になりますが・・・ 配列数式になりますので 下の数式をコピー&ペーストしただけでは多分エラーになると思います。 貼り付けた後、F2キーを押すか、数式バー内で一度クリックして編集可能にし、 Shift+Ctrl+Enterキーを押してください。 { } 記号が数式の前後に入り配列数式になります。 尚、A列のデータが20文字まで対応できるようにしています。 ↓の画像でB1セルに =IF(A1="","",MID(A1,MATCH(TRUE,ISNUMBER(MID(A1,ROW($A$1:$A$20),20)*1),0),COUNT(MID(A1,ROW($A$1:$A$20),20)*1))) という数式をいれて(配列数式にした後に)オートフィルで下へコピーすると 画像のような感じになります。 以上、参考になれば幸いですが、 他に良い方法があれば軽く読み流してくださいね。m(__)m
お礼
数式、大変勉強になりました。 また図までご用意いただきまして助かりました。 無事解決いたしました。ありがとうございました。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
追記。 ちょっと判り難くなりますが、定数リスト配列を利用して RIGHT(A1,LEN(A1)-MIN(FIND({"0","1","2","3","4","5","6","7","8","9"},A1&"0123456789"))+1) や =VALUE("0"&RIGHT(A1,LEN(A1)-MIN(FIND({"0","1","2","3","4","5","6","7","8","9"},A1&"0123456789"))+1)) でも構いません。
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No1です。 過去ログなどで見られるのは一か所のみに数値が並んでいる場合です。 今回は複数個所に数値が並んでいますので式は複雑になりますね。 次の式がより確実ですね。 =IF(ISNUMBER(MID(A1,LEN(A1)-4,5)*1),MID(A1,LEN(A1)-4,5),IF(ISNUMBER(MID(A1,LEN(A1)-3,5)*1),MID(A1,LEN(A1)-4,5),IF(ISNUMBER(MID(A1,LEN(A1)-2,5)*1),MID(A1,LEN(A1)-2,5),IF(ISNUMBER(MID(A1,LEN(A1)-1,5)*1),MID(A1,LEN(A1)-1,5),RIGHT(A1,1)))))
- WWolf
- ベストアンサー率26% (51/192)
自分で考えるより、過去にネット上で見た記憶をたどり、到達しました。質問者さんの要望を叶えれてると思いますので、参考に見てください。 その3の一番下の式かと・・・
お礼
URL先、大変勉強になりました。 教えてくださってありがとうございました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
もしも、最後ある数値が3ケタ以内であれば、B1セルに次の式を入力し下方にオートフィルドラッグします。 =IF(ISNUMBER(MID(A1,LEN(A1)-4,1)*1),MID(A1,LEN(A1)-4,5),IF(ISNUMBER(MID(A1,LEN(A1)-3,1)*1),MID(A1,LEN(A1)-4,5),IF(ISNUMBER(MID(A1,LEN(A1)-2,1)*1),MID(A1,LEN(A1)-2,5),IF(ISNUMBER(MID(A1,LEN(A1)-1,1)*1),MID(A1,LEN(A1)-1,5),RIGHT(A1,1)))))
お礼
数式、大変勉強になりました。 無事解決いたしました。ありがとうございました。
お礼
詳しく教えていただきまして本当にありがとうございました。 無事解決いたしました。ありがとうございました。