• 締切済み

Excel 複数条件一致による文字列取得

途中まで作成してみましたが、できなかったのでお教え願います。 (1)シート<入力用>に以下のように入力されています。 ┃ ┃A ┃B   ┃C  ┃D     ┃E     ┃  ━━━━━━━━━━━━━━━━━━━━━━━ ┃1┃日付┃社員番号┃休暇等┃業務開始時間┃業務終了時間┃ ┃2┃0926┃11111111┃休  ┃      ┃      ┃ ┃3┃0927┃11111111┃直  ┃8:30    ┃17:30    ┃ ┃4┃0928┃11111111┃   ┃8:30    ┃18:30    ┃ ┃5┃0926┃22222222┃研  ┃8:30    ┃17:30    ┃ といった状態で約120名のランダムなデータがべた打ちされてます。 (2)(1)を以下のような集計表に飛ばしたいのです。   ┃ ┃A   ┃B ┃C ┃D ┃E ┃・・・・・・ ━━━━━━━━━━━━━━━━━━━━━━━ ┃1┃    ┃0926┃0927┃0928┃0929┃・・・・・・ ┃2┃11111111┃休 ┃直 ┃  ┃・・・・・・ ┃3┃22222222┃研 ┃  ┃  ┃・・・・・・ ┃4┃33333333┃・ ┃・ ┃  ┃・・・・・・ ┃5┃44444444┃・ ┃・ ┃  ┃・・・・・・ 行:日付 列:社員番号 飛ばしたい情報は、(1)の<休暇等>文字列です。 ためしに、(2)のB2に以下の式を入れてみました。 B2=index(入力用!A2:E5,match(B1,入力用!A2:A5,0),match(A2,入力用!B2:B5,0)) 当然ですが、日にちが帰ってきました。が、なぜか0927が帰ってきました。 このINDEXとMATCHを利用して(1)のC2:C5にある文字列を拾えないでしょうか? 宜しくお願いいたします。

みんなの回答

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

◆少し、式が長くなりましたが B2=IF(ISNA(MATCH(B$1&$A2,INDEX(入力用!$A$1:$A$100&入力用!$B$1:$B$100,),0)),"",INDEX(入力用!$C:$C,MATCH(B$1&$A2,INDEX(入力用!$A$1:$A$100&入力用!$B$1:$B$100,),0))) ★右と下にコピー

s1070013
質問者

お礼

一行で実行できるのは、とても魅力的です。 ありがとうございました!

noname#204879
noname#204879
回答No.2

「集計表」のセル B2 に次の[条件付き書式]を設定    数式が    =ISERROR(B2)    フォント色  白 同セルに次の配列数式を入力して、此れを右方および下方にズズーッとドラッグ&ペースト    {=INDEX(入力用!$C$2:$C$1000,MAX((入力用!$A$2:$A$1000=B$1)*(入力用!$B$2:$B$1000=$A2)*ROW($2:$1000))-1)&""}

s1070013
質問者

お礼

簡潔に、有意義な情報提供ありがとうございます! 早速やってみます!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

基本的に関数は、表の組み換えは不得意です。 表が社員番号順に並んでいるとして、VBA向きの問題です。 例データ Sheet1 A1:F12 F列は関数で作成。 F2に=B2&A2と入れて下方向に式を複写。作業列。 日付 社員番号 休暇等 業務開始時間 業務終了時間 合成キー 926 11111111 休                 11111111926 927 11111111 直   8:30 17:30 11111111927 928 11111111     8:30 18:30 11111111928 926 22222222 研   8:30 17:30 22222222926 926 33333333 出 33333333926 928 33333333 休 33333333928 926 44444444 健診 44444444926 927 44444444 44444444927 928 44444444 研   44444444928 929 44444444 44444444929 930 44444444 出 44444444930 Sheet2 A-F列(A列は空白) B列は社員番号が順に重複なくあるものとして(注) 日付についても同じとする。 926 927 928 929 11111111 休   直       #N/A 22222222 研   #N/A #N/A #N/A 33333333 出 #N/A 休 #N/A 44444444 健診 0 研   0 C2セルに =INDEX(Sheet1!$C$1:$C$100,MATCH($B2&C$1,Sheet1!$F$1:$F$100,0),1 と入れて、横方向に式を複写。 次にy縦方向に式を複写。 結果 上記。 ーー ただし(注)はフィルターフィルタオプションの設定ー重複するレコードは無視するなどでできる(略) エラーが出ていることの対策は =IF(ISERROR(上記式),"",上記式) のようにする(略) -- エクセルの場合はこういう場合、合成キーを作らざるを得ないと思う。 日付は上記では数にしているが、本来日付シリアル値なのだが、その場合、式の変更なくうまく行くと思うが。(未検証) 合成キーは各項目ごと定桁で揃えて合成すべきだが、今回略。

s1070013
質問者

お礼

すごく丁寧に回答してくださり、ありがとうございます。 とても勉強になりました! VBAも少しずつ勉強してみたいと思います。