• 締切済み

EXCEL/関数 特定の範囲を条件付で行方向に整形して表示したい

回答者の皆様 宜しくお願いします。 以下のようなEXCELシートがあります。 EXCELで開きやすいようカンマ区切りにしてあります。御了承ください ユニークな生徒コードがあり、受験した科目1-5と対応する点数1-5があります。 生徒コード,科目1,点数1,科目2,点数2,科目3,点数3,科目4,点数4,科目5,点数5 2001,4,9,1,4,5,7 2002,5,5,2,7,3,5,1,9,4,2 2003,1,4,3,7, *科目コードは、生徒ごとに行方向に昇順ではありません *科目1-5のうち、1-5全てを受験した生徒も居れば、そうでない生徒も居ます。 *生徒ごとに、受験した科目と結果のみが左詰で入力されています。 *点数は10点満点です これを、別シートに 生徒コード,科目1,点数1,科目2,点数2,科目3,点数3,科目4,点数4,科目5,点数5 2001,1,4,,,,,4,9,5,7 2002,1,9,2,7,3,5,4,2,5,5 2003,1,4,,,3,7,,,, *生徒ごとに、行方向に科目コード昇順(対応する点数も昇順) *受験していない科目は空欄(見出しに対応する位置に科目と点数が来る) ように表示したいのですが、関数を組み合わせて可能でしょうか。 大変厄介なことに点数が10点満点のため、検索系の関数でヒットした値が 『「科目」なのか「点数」なのか区別がつけられない』ということです。 VLOOKUP,HLOOKUP,MATCH,IFなど組み合わせて頭を捻っていたのですが どうしても解決方法が思い浮かびませんでした。 よいアイデアありましたら御教授宜しくお願いします。 検索キー EXCEL 文字列 検索 奇数行のみ 偶数行のみ 関数

みんなの回答

回答No.4

No.1、No.2のCoalTarです 別に配列数式にこだわったわけではないですが、 頭が回らなかったのが本当のところです。 ということで別案 条件1. 作業用のセルを設けてよい 条件2. 生徒コードの並びは「元の表」と「結果の表」が一緒 ということなら 1. 科目番号の取り出し B7セル =INDEX($B2:$K2,B$6*2-1) 右へ下へオートフィル 2. 点数の取り出し G7セル =INDEX($B2:$K2,G$6*2) 右へ下へオートフィル 3. 科目位置とその点数の取り出し B12セル =MATCH(B$11,$B7:$F7,0) C12セル =INDEX($G7:$K7,B12) B12:C12セルを右へ下へオートフィル 4. 結果の表の作成 B17セル =IF(ISNA(B12),"",B$11) C17セル =IF(ISNA(C12),"",C12) B17:C17セルを右へ下へオートフィル

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

このタイプは関数では複雑だな、と思って既出回答を見ると案の定、配列数式を使い、かつ式は長い。 >関数を組み合わせて可能でしょうか このタイプの課題は、生徒コード番号でソートし、同じ生徒の分は近接行に集め、VBAで科目コードー点数の2列のデータを組にして考え、科目コード列(=コード+1の列)のセルに点数を代入する、というロジックでやるのが素直なやり方です。(この場合同一生徒で同一科目が2度以上出てくると困りますが。) VBAの経験が無いため、関数でということだが、この関数を考え付く人はそう多くない。結局どちらも丸写しになる。 データ作成の段階から、生徒番号ー科目コードー点数で1行というデータの寄せ集めにでもしておくのが望ましい。 >『「科目」なのか「点数」なのか区別がつけられない 難しいのはそんなことでなく、生徒番号が連続して無いだろうし、科目コードの出現数が不定で、現れる位置が不定で有ることが、関数では難しい原因と思います。 科目コードと点数は、生徒番号の後に、ペアになっているから、VBAなら区別はつくと思います。 参考までにVBAの例 L列より右に科目点数を所定列に並べます。 ーーー 例データ A-K列(下記はA-E列の例) 11 1 44 2 55 11 4 33 12 3 56 14 1 76 4 36 コード Sub test01() d = Range("A65536").End(xlUp).Row k = 1 For i = 1 To d If Cells(i, "A") <> m Then k = k + 1 m = Cells(i, "A") End If Cells(k, "L") = Range("A" & i) r = Range("K" & i).End(xlToLeft).Column MsgBox r For j = 2 To r Step 2 c = Cells(i, j) Cells(k, c + 12) = Cells(i, j + 1) Next j Next i End Sub 結果 L-P列 コード 科目1 科目2 科目3 科目4 11 44 55 ー 33 12 ー ー 56 14 76 ー ー 36

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

ちょっと修正(わかりやすくしようとしたら反って悪くした =IF(OR(VLOOKUP($A7,$A$2:$K$4,{2,4,6,8,10},FALSE)=RIGHT(C$6,1)*1), INDEX($B$2:$K$4,MATCH($A7,$A$2:$A$4,0), MATCH(RIGHT(C$6,1)*1,VLOOKUP($A7,$A$2:$K$4,{2,4,6,8,10},FALSE),0)*2),"") [Ctrl]+[Shft] +[Enter] で確定、配列数式です({}で囲まれる) m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

B7セル =IF(C7="","",RIGHT(B$6,1)*1) C7セル =IF(OR(VLOOKUP($A7,$A$2:$K$4,{2,4,6,8,10},FALSE)=RIGHT(C$6,1)*1), INDEX($B$2:$K$4,MATCH($A7,$A$2:$A$4,0), MATCH(RIGHT(C$6,1)*1,VLOOKUP($A7,$A$2:$K$4,{2,4,6,8,10},0),FALSE)*2),"") [Ctrl]+[Shft] +[Enter] で確定、配列数式です({}で囲まれる) B7:C7セルを右へ下へオートフィル 根本的にデータの入力方法を見直したほうが良いと思います 生徒コード,点数1,点数2,点数3,点数4,点数5 2001,4,,,9,7 2002,9,7,5,2,5 2003,4,,7,,

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel2010でのHLOOKUP関数

    Excel2010で列(縦方向)に1組のデータ(200個程度)を入れ、現在140組のデータが入っています。別シートに票を作成し、票内の各セルにHLOOKUP関数を入れ、この140列×200行のデータベースから、指定した列(検索値)のそれぞれの行からデータを抽出し表示するようにしています。 これまでは、検索値を入力すると、該当する列内の値を票内に反映していてくれていたのですが、この度新たな列を増やしたところ、その列の値を表示してくれません。関数内のデータの範囲はその列以上に広く指定しています。わかりにくい説明で申し訳ないのですが、考えられる原因はありますか。よろしくお願いします。

  • 【ExcelVBAまたはExcel関数】成績管理

    ※Excel2010を使用しております。 約100名の成績一覧に入力した成績を、個人の成績表(学生ごとにシートがあります)に 反映させるようにしたいのですが、どのようにすればよいか分かりません。 Sheet1に、成績一覧があります(画像sheet1) なお、9001、9002、9003・・・は学籍番号で、3001、3002・・・は科目コードです。 生徒はすべての科目を履修しているのではなく、履修していない科目については、 空欄になっています。 sheet2以降に各生徒の成績表があります。(画像sheet2、sheet3・・・)成績表には、履修していない科目は表示 されていません。 ここで、成績一覧に入力されている成績を、個人の学籍一覧に反映させるように したいのですが、どのようにするのが最も効率的でしょうか。 VLOOk関数でできるかと考えましたが、できませんでした。

  • Excel関数で違った答えになってしまいます

    Excel関数で違った答えになってしまいます Excelで商品の管理をしているのですが、 関数を入れても答えが違ってしまいます。 [Sheet1]・・・コード入力シート (A1)(A2)・・・商品コード (B1)(B2)・・・数量 [Sheet2]・・・データベースシート (A列)・・・商品コード とあり、データベースの価格を 数量により変化させます。 例えば 商品コード(as400)の価格を 数量100個以上なら10円、100個未満だと15円 としたいのです。 作成した関数は IF(OR(AND('Sheet1'$A$1=A1,'Sheet1'$B$1>=100),AND('Sheet1'$A$2=A1,'Sheet1'$B$2>=100)),10,15) としました。 ただこれだと、[Sheet1]の1行目は正しく表示されるのですが 2行目になると、数量を1個にしても価格が10円になってしまいます。 どのようにすれば良いか悩んでいます。 よろしくお願いします。

  • 3つの条件のうち、2つを満たす人の人数を数える関数

    こんにちは。 とっても困っているのでよろしくお願いします! 例えば、クラスの生徒の試験3科目の点数を入力して、 3科目のうちどれでも2科目は50点以上の生徒の人数を 数えたい場合、数式はどのようになりますか? つまり、3つの条件のうち2つを満たす人の 数え方の関数を教えて下さい! どうぞよろしくお願いいたします。

  • エクセルでHLOOKUP関数の選択範囲について

    エクセルでHLOOKUP関数を使って、検索したいのですが、 シートは、一覧表のシートと データが入っているA101、B203、C305、...シートは300シートくらいあります。 一覧表のシートには、下のような表になっていて、      A列  B列  C列  D列 ...          1003、1004、1005、1006、... 2行目 A101  3行目 B203 4行目 C305       .       .       . データのはいっているシート、A101は下の表になっています。      B列 C列 D列、・・・、Z列 2行目 1004、1005、1006、... 3行目 100、 200、 150、... 一覧表のB列の2行目には HLOOKUP(B2、シートA2のB2:Z3、2行目、FALSE) という感じで、シート名をセルA2のものを参照にして 探して表示させ、B列、C列、D列の2行目から下の行も 表示させたいのですが、うめくできませんでした。 INDIRECT関数を使ってみましたが、セル範囲が無効という エラーがでてしまいます。↓こんな感じで入力してみたのですが... SUMPRODUCT((INDIRECT($A2&"!$B$2:$Z$3"))=$B$1,(INDIRECT($A2&"!$B$2:$Z$3"))) 1つづつデータを見て手打ちはデータが多く、 どんどんデータが増えていくので できれば関数を使って表示させたいと思っています。 詳しい方いらっしゃいましたら、どうか教えてください よろしくお願いします。

  • 関数で行の挿入、削除で範囲がズレてしまう

    HLOOKUP関数を使い検索値を日付にして、ある項目の時間を表示させているのですが、項目を挿入、削除によって時間がズレてしまいます。対応する関数はありますか? =HLOOKUP(AS$223,$D$3:$AH$110,108,FALSE)の110の範囲が変わってしまいます。分りづらいですが宜しくお願いします。

  • EXCEL2003 条件付書式が狂ってくる

    条件付書式は、見ためにどのセルに入っているのかわからないというのと、複数の条件付書式が入ると、なぜかその前に決めていた条件付書式が消えてしまっているということがあって、なかなか不便に思っています。(やりかたが悪いのかもと思うのですが) それで、VBAの entireculumn というのを見つけたのですが、 これで対応できるでしょうか? やりたい事は、 1 2*--------------------------- 3*--------------------------- 4 5 6*--------------------------- 7*--------------------------- 上記のように、「*」をつけた行にだけ、行全体に色をつけておく、 というのを条件付書式で、 「数式が」「=$A1="*"」 としたもので、その設定をしているシートに、横にずっと、いろんな関数を入れていってます。 ですが、関数を入れたり、そのプロセスで列挿入などすると、 色がずれてしまうのです。 その回避策として、VBAで最初に色の設定をしておけないでしょうか? 「*がある行だけに色をつける。」 よろしくお願いします。

  • エクセルのHLOOKUP関数の検索範囲指定で、複数のシートにわたる範囲

    エクセルのHLOOKUP関数の検索範囲指定で、複数のシートにわたる範囲指定は出来ないのでしょうか。 例えば、シート1からシート5まであり、各シートのA1:D10を指定するとか。

  • 複数の条件で抽出するExcel関数について

    Excel関数について確認させてください。 下図のように関数で本日の日付(2021/7/15)を検索してそこの行から1位、2位、3位、4位を検索して 1位から4位まで順に下図のようにピンク色で塗布したセルに記入する関数がありましたらご教授くださいm(__)m この場合だと1位=高橋、2位=田中、3位山田、4位=植田になります。

  • Excel関数で、複数条件を検索して値があれば○

    Excel関数の質問です。 シートAは貸出台帳で、シートBは返却台帳です。 貸出台帳に入力されているコードが、返却台帳にあれば、 貸出台帳の確認に○を表示したいです。 ややこしい点としては、返却台帳には以前返却された履歴(例えばAAが二つ)が 入力されているため、貸出した日付以降のコードのみを検索するようにしたいです。 シートAに、下記のような値があります。   A    B    C    1 貸出日 コード 返却確認 2  1/1   AA          ←ここには関数で○を入れたい 3  1/2   BB          ←ここは× 4  1/3   AA          ←ここは○ シートBには下記のような値があります。   A    B 1 返却日 コード 2 1/1   BB 3 1/2   AA 4 1/3   AA この場合、どのような関数を入力すればよいでしょうか?

専門家に質問してみよう