質問: エクセルでの質問です。
回答: シート1は左の表で1行目は項目名で2行目から下方にデータがあるとします。 作業列を作って対応します。 G2セルには次の式を入力します。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(G$1:G1)+1,"")) H2セルには次の式を入力します。 =IF(ROW(A1)>MAX(G:G),"",INDEX(A:A,MATCH(ROW(A1),G:G,0))) I2セルには次の式を入力します。 =IF(B2="","",LOOKUP("ー",A$2:A2)&COUNTIF(I$1:I1,LOOKUP("ー",A$2:A2)&"*")+1) J2セルには次の式を入力します。 =IF(B2="","",LOOKUP("ー",A$2:A2)&B2) G2セルからJ2セルまでを選択して含まれるそれらの式を下方にドラッグコピーします。 その後にK1セルには次の式を入力して横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IFERROR(IF(ROW(A1)=1,INDEX($A:$A,MATCH(COLUMN(A1),$G:$G,0)),IF(ROW(A1)=2,"",IF(ROW(A1)>2,INDEX($B:$B,MATCH(K$1&ROW(A1)-2,$I:$I,0)),""))),"") 横方向には種類が並び下方には品種が並ぶ表となります。 その後にK列を選択してから「数式」メニューの「名前の定義」を選択します。 名前の窓にはK1セルの種類が表示されますのでそのままOKします。 L1,M1...と同じ操作を行ってそれぞれの列に名前をつけることになります。 その後にお求めの表をシート2に作るとします。 A2セルから下方のセルを選択してから「データ」メニューから「データの入力規則」を選択します。 入力値の種類では「リスト」を選び元の値の窓に次の式を入力してOKします。 =INDIRECT("Sheet1!H:H") 同じようにB2セルから下方のセルを選択してから入力規則の設定では次の式を入力します。 =INDIRECT(A2) その後にC列に産地をD列に値段を表示するとしてC2セルには次の式を入力してD2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーすればよいでしょう。 =IF($A2="","",IFERROR(INDEX(Sheet1!$C:$D,MATCH($A2&$B2,Sheet1!$J:$J,0),COLUMN(A1)),"")) なお、シート1の作業列が目障りでしたらそれらの列を選択して「非表示」にすればよいでしょう。