- ベストアンサー
Excelで文字列の抽出方法とその使い方
- Excelで文字列の抽出方法について教えてください。関数だけを使って実現できるのか、マクロが必要なのか、詳しく知りたいです。
- シート2のB列にシート1のG列からP列に登録されている担当者名に該当するB列の店名を最大4軒抽出したいです。具体的な手順や関数の使い方を教えてください。
- Excelを使って文字列の抽出を行いたいです。何か特別な関数やマクロが必要でしょうか?具体的な方法や手順を教えていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
シート1では1行目は空白の行として2行目から下方にお示しのようなデータが入力されているとします。 4行ずつが一つの店になっており、その行の最初の行のG列からP列までの間に担当者の名前が有るということですね。 そこで作業列を設けます。 R1セルから右横方向のセルに例えばXX1セルまでに担当者名を入力します。 その後にR2セルには次の式を入力して横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(OR($B2="",R$1=""),"",IF(COUNTIF($G2:$P2,R$1),MAX(R$1:R1)+1,"")) シート2でも同様にA列の2行目から下方に1名につき4行ずつで担当者が入力されているとします。 B2セルには次の式を入力して下方にドラッグコピーします。 =IF(COUNTIF(Sheet1!R$1:XX$1,INDIRECT("A"&ROUNDUP(ROW(A2)/4,0)*4-2))=0,"",IF(ISERROR(MATCH(MOD(ROW(A2)-1,4)+1,INDEX(Sheet1!R:XX,1,MATCH(INDIRECT("A"&ROUNDUP(ROW(A2)/4,0)*4-2),Sheet1!R$1:XX$1,0)):INDEX(Sheet1!R:XX,1000,MATCH(INDIRECT("A"&ROUNDUP(ROW(A2)/4,0)*4-2),Sheet1!R$1:XX$1,0)),0)),"", INDEX(Sheet1!$B:$B,MATCH(MOD(ROW(A2)-1,4)+1,INDEX(Sheet1!R:XX,1,MATCH(INDIRECT("A"&ROUNDUP(ROW(A2)/4,0)*4-2),Sheet1!R$1:XX$1,0)):INDEX(Sheet1!R:XX,1000,MATCH(INDIRECT("A"&ROUNDUP(ROW(A2)/4,0)*4-2),Sheet1!R$1:XX$1,0)),0))))
その他の回答 (2)
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No1です。 シート2のB2セルへの入力の式は次の式にしてください。入力後に下方にドラッグコピーします。 =IF(COUNTIF(Sheet1!R$1:XX$1,INDIRECT("A"&ROUNDUP(ROW(A1)/4,0)*4-2))=0,"",IF(ISERROR(MATCH(MOD(ROW(A1)-1,4)+1,INDEX(Sheet1!R:XX,1,MATCH(INDIRECT("A"&ROUNDUP(ROW(A1)/4,0)*4-2),Sheet1!R$1:XX$1,0)):INDEX(Sheet1!R:XX,1000,MATCH(INDIRECT("A"&ROUNDUP(ROW(A1)/4,0)*4-2),Sheet1!R$1:XX$1,0)),0)),"", INDEX(Sheet1!$B:$B,MATCH(MOD(ROW(A1)-1,4)+1,INDEX(Sheet1!R:XX,1,MATCH(INDIRECT("A"&ROUNDUP(ROW(A1)/4,0)*4-2),Sheet1!R$1:XX$1,0)):INDEX(Sheet1!R:XX,1000,MATCH(INDIRECT("A"&ROUNDUP(ROW(A1)/4,0)*4-2),Sheet1!R$1:XX$1,0)),0)))) 前回の式はROW(A2)になっていましたね。
- aokii
- ベストアンサー率23% (5210/22062)
式を簡略化するために、まず、新たなシートとしてSheet3に以下の表を作ります。 Sheet3のA1セルに以下の式を入力する。 =Sheet2!A1 Sheet3のA2セルに以下の式を入力する。 =A1 Sheet3のA3セルに以下の式を入力する。 =A1 Sheet3のA4セルに以下の式を入力する。 =A1 Sheet3のSheet3のA1~A4を全て選んだ状態で、下にドラッグコピーすると、以下のように4行毎に担当者名が自動表示されるはずです。 Aさん Aさん Aさん Aさん Bさん Bさん Bさん Bさん Sheet3のB1に以下の式を入力する。 =INDIRECT("Sheet1!B"&MATCH($A1,Sheet1!G$1:G$16,0)) Sheet3のB1を選んだ状態で、右にK1までドラッグコピーする。 Sheet3のSheet3のB1~K1を全て選んだ状態で、下にドラッグコピーする。 Sheet2のB1に次の式を入力する。 =IF(ISNA(HLOOKUP(Sheet1!$B$1,Sheet3!$B1:$K1,1,FALSE)),"",Sheet1!$B$1) Sheet2のB2に次の式を入力する。 =IF(ISNA(HLOOKUP(Sheet1!$B$5,Sheet3!$B2:$K2,1,FALSE)),"",Sheet1!$B$5) Sheet2のB3に次の式を入力する。 =IF(ISNA(HLOOKUP(Sheet1!$B$9,Sheet3!$B3:$K3,1,FALSE)),"",Sheet1!$B$9) Sheet2のB4に次の式を入力する。 =IF(ISNA(HLOOKUP(Sheet1!$B$13,Sheet3!$B4:$K4,1,FALSE)),"",Sheet1!$B$13) Sheet2のB1~B4を全て選んだ状態で、下にドラッグコピーする。
お礼
一度お礼を書き込んだつもりなのですが、見当たらないので再度、お礼を申し上げます。 早々にご回答いただき、本当にありがとうございました。
補足
私の質問内容が不明確だったので申し訳ございません。 ご回答いただいた内容を実施したところ、2点問題がありました。 解決策をご教示いただけると幸いです。 問題1 店は10店(注)あります。しかし、上位の4店しか対象になりませんでした。 (注)下記に変更しています。 Sheet3のB1は=INDIRECT("Sheet1!B"&MATCH($A1,Sheet1!G$1:G$40,0))) 問題2 同じ担当者が同じ列に複数あった場合でも、最上位の店しか対象になりませんでした。
お礼
一度お礼を書き込んだつもりなのですが、見当たらないので再度、お礼を申し上げます。 早々にご回答いただき、本当にありがとうございました。
補足
ご教示いただいた式をExcel2003/2010の2種類で検証しましたが、残念ながら、エラーになります。 何処か間違いがでしょうか?