• ベストアンサー

Excelで文字を抽出したい

A列に文字がはいっており(IかHかOかPを含む文字 23~25文字)、B列にはA列中の一文字(IかHかOかP)だけを表示させたいんです。 つまり、 ●もしA1セルに****I***・・・が入っていたら→B1セルにはI ●もしA2セルに****H***・・・が入っていたら→B2セルにはH、 というふうにしたいです。 この場合、B列にはどういった関数を入れればいいんでしょうか? 尚、***の部分にIかHかOかPは1文字しか入りえません。

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

  • ベストアンサー
  • hirumin
  • ベストアンサー率29% (705/2376)
回答No.1

***が何か判りませんが、 常に5文字目であるならば、 [B1]=MID(A1,5,1) で、A1の5番目から1文字を出力することができますよ。

kaori_china
質問者

お礼

ありがとうございました~!! きれいにできました

その他の回答 (3)

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

既出の回答で満足できてますか。 もしI、H、O、Pのこの順で検査して、ある文字列において存在すればその1文字を返すユーザー定義関数を考えました。他の文字が先出していても、4文字の 序列が優先する場合です。 ツール-マクローVBEの画面で、挿入-標準モジュールの画面を出し、下記を貼り付けます。 Function findx(a, b) For Each c In b p = InStr(a, c) If p <> 0 Then findx = c Exit Function End If Next End Function 使い方はA列に文字列かあるとして、B1に =FINDX(A1,{"I","H","O","P"})と入れて、下方向に 式を複写します。 例 ABCDJ 0 AIHJJK I AHIKLMM I SPLLK P SPOILLL I もしI、H、O、Pのこの順で検査して、4文字のうちのどれでも初出の文字を出したいなら(4文字に優先序列なし) Function findx(a, b) Dim d(100) Min = 99 For Each c In b p = InStr(a, c) If p <> 0 Then If p < Min Then Min = p w = c End If End If Next findx = w End Function で 実例は ABCDJ 0 AIHJJK I AHIKLMM H SPLLK P SPOILLL P HIGHI H になりました。 大文字小文字や、4文字が見つからないときの問題は 対処を省略してます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

=LOOKUP(SUMPRODUCT((ISERROR(FIND({"I","H","O","P"},UPPER(A1)))=FALSE)*{1,2,3,4}),{0,"";1,"I";2,"H";3,"O";4,"P";5,""}) これは、二重に入ると、空白になります。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

=MID("IHIOIHIPIHIOIHIO",SUMPRODUCT(ISNUMBER(FIND({"I","H","O","P"},UPPER(A1),1))*{1,2,4,8}),1) 上記でできませんか?2文字以上の場合はI>H>O>Pの順で優先的に表示になります。

関連するQ&A