• 締切済み

エクセルの質問をさせて下さい!

今、帳票を作成するのに行き詰ってしまっています・・・。 画像を添付しますが、ABC(D)EF列とあって、 A列は数字/B列はアルファベット(大)/C列はひらがな/D列はなし/E列は 記号(もしくは漢字など)+アルファベット(大)+ひらがな+アルファベット(小)/F列は 空欄となっています。 E列にある文字の中で、B列にある「アルファベット(大)」&C列にある「ひらがな」が 合致しているものは、F列にA列の数字を返す、、、という事をしたいのです。 ※実際はB列の「アルファベット」・C列の「ひらがな」のそれぞれも1文字ではなく前後に  漢字等が入っていたりしますが、合致するキーワードで抽出出来れば。。。 分かりづらくて申し訳ありませんが、検索データが多く困ってしまっています。 (一つずつ照らし合わせていくのも時間がかかってしまって・・・) 宜しくお願いします!!!

みんなの回答

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

こんばんは! 横からお邪魔します。 関数で頑張ってみましたが作業列を使用するか、配列数式で対応するようですので、 手っ取り早く、VBAでやってみました。 データは↓の画像のように1行目は項目行で実データは2行目以降にあるとします。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, endRow As Long Application.ScreenUpdating = False endRow = Cells(Rows.Count, "F").End(xlUp).Row If endRow > 1 Then Range(Cells(2, "F"), Cells(endRow, "F")).ClearContents End If For k = 2 To Cells(Rows.Count, "E").End(xlUp).Row '←E列の2行目~最終行まで For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row '←A列の2行目~最終行まで If InStr(Cells(k, "E"), Cells(i, "B")) > 0 And InStr(Cells(k, "E"), Cells(i, "C")) > 0 Then Cells(k, "F") = Cells(i, "A") End If Next i Next k Application.ScreenUpdating = True End Sub 'この行まで ※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。 お望みの方法でなかったらごめんなさいね。m(_ _)m

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答No.2です。  前回頂いた補足内容では、数字を表示させる条件に不明な点があります。  例えば、前回の補足で頂いた A  B  C  D   E -------------------------- 1  あ  p  えk0  4 2  い  i  あp6  1 3  う  w  いi8  2 4  え  k  うw9  3 という表において、例えばA1セルに入力されている「1」という数値を表示するために必要な条件は、Excelにおいて B1&C1 という関数が表す文字列である、B1セルに入力されている文字列とC1セルに入力されている文字列を繋げた「あp」という文字列が含まれている場合のみなのでしょうか?  それとも「p」と「あ」が両方とも含まれてさえいれば、「あ」と「p」が連続していなくとも条件を満足していると見做すのでしょうか?  それとも、「p」と「あ」のどちらか一方でも含まれていさえすれば、条件を満足していると見做すのでしょうか?  又、「あpいiうw」の様に、B列~C列の複数の行の条件を満足している場合には、どの様に表示を行えば良いのでしょうか?  例えば、E1セルに入力されている文字列の中に、「あ」と「p」の両方の文字列が連続してはいなくとも、両方共に含まれている場合において、A1セルに入力されている「1」という数値を表示するという条件で、尚且つ、複数の行の条件を同時に満たしている場合には、A列の数値ではなく、満たしている条件が複数ある事を示す「(重複あり)」という表示を行う関数の一例は、次の様になります。 =IF($E1="","",CHOOSE(MIN(SUMPRODUCT(ISNUMBER(FIND($B$1:INDEX($B:$B,MATCH(9E+307,$A:$A)),$E1))*ISNUMBER(FIND($C$1:INDEX($C:$C,MATCH(9E+307,$A:$A)),$E1)))+1,3),"(該当無し)",SUMPRODUCT(($A$1:INDEX($A:$A,MATCH(9E+307,$A:$A)))*ISNUMBER(FIND($B$1:INDEX($B:$B,MATCH(9E+307,$A:$A)),$E1))*ISNUMBER(FIND($C$1:INDEX($C:$C,MATCH(9E+307,$A:$A)),$E1))),"(重複あり)"))

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 確認したいのですが、 >E列にある文字の中で、B列にある「アルファベット(大)」&C列にある「ひらがな」が合致しているものは、 というのには、例えば「E1セルに入力されている文字列の中には、B1セルやC1セルに入力されている文字列は含まれていないものの、B列やC列の他の行のセルに入力されている文字列が含まれている」という場合は該当するのでしょうか、それとも該当しないのでしょうか?  つまり、E列に入力されている文字列の中に含まれているのか否かを判定するのは、B列~C列の中でも、同じ行の中にある2つのセルのどちらかに入力されている文字列だけをチェックすれば良いのか、それとも他の行も含めた、B列~C列の全てのセルの中に入力されている文字列を全てチェックした上で、E列の文字列の中に含まれている文字列が入力されているセルが1個でもある場合も、合致していると見做すのでしょうか?  具体的に言いますと、例えば「A1セルには『1』が、B1セルには『A』が、C1セルには『あ』が、B2セルには『B』が、C2セルには『い』が入力されていた場合において、E1セルに『Bい』と入力されていた場合、F1セルに『1』を表示するのか否か」という事です。  因みに、「例えばA1セルには『1』が、B1セルには『A』が、C1セルには『あ』が、B2セルには『B』が、C2セルには『い』が入力されていた場合において、E1セルに『Bい』と入力されていた場合、F1セルに『1』を表示する」という様な事を行う関数は次の様になります。 =IF($E1="","",IF(OR(ISNUMBER(FIND($B1,$E1)),ISNUMBER(FIND($C1,$E1))),$A1,""))

jun_riki
質問者

補足

kagakusuki様、ご回答ありがとうございます! 言葉が足りず申し訳ありません。(画像も見辛くて・・・) すみません、すごく分かりづらいと思うのですが... A  B  C  D   E -------------------------- 1  あ  p  えk0  4 2  い  i  あp6  1 3  う  w  いi8  2 4  え  k  うw9  3 この表で・・・D列の中には必ずB列・C列の文字列が含まれています。ただし、D列の文字列にはそれ以外の文字も入っていて、順番はバラバラです。 そのD列の横(E列)に、B列・C列の文字列が含まれていた場合、A列の番号をE列に入力したいのです。 上手く説明できなくて本当に申し訳ありません・・・。 何卒宜しくお願い致します。

  • EFA15EL
  • ベストアンサー率37% (2657/7006)
回答No.1

実証してないので断言はしませんが、 ぱっと見た感じだと、複数条件(IF関数とAND関数)を使えば出来そうにも思えます。 つまり、 条件1:B列の文字がE列の中にある 条件2:C列の文字がE列の中にある この2つが同時に成り立つ場合、F列=A列である。 違う場合はnull。 という条件式です。文字を探すのはSEARCH関数で良いかな。 探すのがB列とC列を繋げたもので良いならCONCATENATE関数が使えますね。 この場合は複数条件は要りません。普通のIF関数です。

jun_riki
質問者

お礼

EFA15EL様 ご回答ありがとうございます。 IF関数やAND関数など色々やってみたのですが、ダメでした・・・。 諦めずやってみます!! 本当にありがとうございました。

関連するQ&A