• ベストアンサー

統一性のない書き方の適用の項目からある名前を抜き取って表示したい

A1セルでB1セルに、 下の左の名前から右の名前にして抜き取りたいです。 左は適用の項目です。 右はそこから抜き取りたいと思っている、項目名です。 適用は、名前は入っているけど、書き方に統一性がありません。 A1セル            B1セル 「1月分給料 田中真一」 は  「真一」 「田中真一 仮払い」    は  「真一」 「1月分給料 鈴木孝明」 は  「孝明」 「鈴木孝明 賞与」    は   「孝明」 「1月分給料 山田晶子」 は  「晶子」 「山田晶子 仮払い」    は  「晶子」 「1月分保険料 西田一郎」 は 「一郎」 「西田一郎 貸付金」    は  「一郎」 それ以外は、            「その他」 みたいにして、表示したいです。 どうしたらいいのでしょうか?

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

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

質問の例では名前を抜き出すのは「真一」「孝明」「晶子」「一郎」の4名で、それ以外は「その他」とするとなっています。 抜き出す対象が数個なら、 =IF(ISNUMBER(FIND("真一",A1)),"真一",IF(ISNUMBER(FIND("孝明",A1)),"孝明",IF(ISNUMBER(FIND("晶子",A1)),"晶子",IF(ISNUMBER(FIND("一郎",A1)),"一郎","その他")))) で抜き出すこと(合致するものがあるかの判定)が可能です。 もう少し個数が多い場合はIF関数の繰り返しではできませんが、「名前」のリストを作成しておくことで、同様に可能です。 でもそのリストすら作るのが困難なくらい名前の数が多いなら、#01さん、#02さんの言われるように難しいと思います。

GGG-SHOCK
質問者

お礼

このやり方で解決しました。 どうも、ありがとうございました。

その他の回答 (5)

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.6

◆作成途中で誤って回答してしまいました ◆改めまして        A              B     C     D 1  1月分給料 田中真一     真一        真一 2  田中真一 仮払い        真一        孝明 3  1月分給料 鈴木孝明     孝明        晶子 4  鈴木孝明 賞与         孝明        一郎 5  1月分給料 山田秋子     その他 6  山田晶子 仮払い        晶子 7  1月分保険料 西田一郎    一郎 8  西田一郎 貸付金        一郎 ★D列に該当する名前をあらかじめ入力しておきます ★名前抽出の式:B1 B1=IF(A1="","",IF(SUMPRODUCT(COUNTIF(A1,"*"&$D$1:$D$4&"*")),LOOKUP(1,0/FIND($D$1:$D$4,A1),$D$1:$D$4),"その他")) ★下にコピー

GGG-SHOCK
質問者

お礼

ありがとうございます。 それで、すみません、 (COUNTIF(A1,"*"&$D$1:$D$4&"*")),の *には、何を入れればいいのでしょうか?

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

こんにちは。 ワークシートの関数でもできると思いますが、その場合は、一旦、メニューのデータの「区切り位置」で、空白で切り分けして、A列,B列に分けます。 E1: =SUMPRODUCT(COUNTIF(A1,"*"&{"給料","払い","貸付金","賞与","保険"}&"*")) F1: =SUMPRODUCT(COUNTIF(B1,"*"&{"給料","払い","貸付金","賞与","保険"}&"*")) G1: =IF(E1=0,RIGHT(A1,2),IF(F1=0,RIGHT(B1,2),"その他")) として、フィルをドラッグしてコピーすれば出来上がります。 {"給料","払い","貸付金","賞与","保険"} のリストは、名前ではないと感知できるレベルの単語を並べてください。 そういう作業が面倒ならば、以下のような「ユーザー定義関数」が考えられます。 以下のリストも、ご自身で、名前ではないと感知できるレベルの単語を入れてください。 すべてでなくてよいです。 標準モジュールへの取り付け方: Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、 Alt + Q で、画面を閉じます。 後は、 =PickupName(A1,2) のように入れてあげれば、名前が出てきます。引数の2は、2文字ということです。 '----------------------------------------------------------------- 'Option Explicit 'ユーザー設定 Private Const LIST As String = "給料|払い|貸付金|賞与|保険" Function PickupName(rng As Range, num As Integer) Dim strText As String Dim buf As String Dim Matches As Object 'Matches   If IsEmpty(rng.Value) Then PickupName = "": Exit Function   strText = Replace$(Trim$(rng.Value), " ", " ", , , vbTextCompare)      With CreateObject("VBScript.RegExp")     .Pattern = "[^ ]*(" & LIST & ")[^ ]*"     .Global = False   If .Test(strText) = False Then PickupName = "その他": Exit Function      Set Matches = .Execute(strText)   buf = Matches(0)   buf = Replace$(strText, buf, "")   End With   If Len(buf) > 0 Then    PickupName = Right$(Trim$(buf), num)   Else    PickupName = ""   End If End Function

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.4

     A             B  C   D 1  1月分給料 田中真一    真一     真一 2  田中真一 仮払い      真一     孝明 3  1月分給料 鈴木孝明    孝明     晶子 4  鈴木孝明 賞与       孝明     一郎 5  1月分給料 山田秋子    その他 6  山田晶子 仮払い      晶子 7  1月分保険料 西田一郎   一郎 8  西田一郎 貸付金     一郎

noname#204879
noname#204879
回答No.2

「書き方に統一性」がないのなら無理かと。 「左の名前から右の名前」ですって?何処までが「左」で、何処からが「右」かはどうやって判断させるのですか? 例:「東海林太郎」は「東海 林太郎」か「東海林 太郎」か?

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

人間が手でやるのなら、人名から名前の部分だけ抜き出すのはたやすいでしょう。しかし、コンピュータにそれを求めてもなんらかの規則性がなければまだ無理です。 呈示された例だけであれば、スペースで別れた二つの文字列集団のうち4文字であるほうの後ろから2文字を抜き出すということなら数式で可能です。でもそれじゃ意味無いんですよね?

GGG-SHOCK
質問者

補足

文字列集団の書き方に規則性が無いので、後ろから2文字を抜き出すということは、意味が無いです。

関連するQ&A

専門家に質問してみよう