プロが教えるわが家の防犯対策術!

既出かもしれませんが質問です。Accessでやると簡単なのでしょうが、Excelの関数のみで行えますか?

具体的には、sheet1、2、3のデータを使用して、
(1)sheet3でリンクさせて表示(使用するのはsheet1、2のみ)
(2)かつsheet3で並べ替えて表示(使用するのはsheet1、2、3)
となりますが、とりあえず(1)だけでも早急にできるようにしたいと思っています。

【sheet1】(データベース2:A列=検索被対象コード、B列=氏名、C列=社員コード(各行はB列=C列です))
A列 B列 C列
1912 A子 123
1912 B子 1234 
1912 C子 2345
2001 C子 2345
2001 D子 34567
2001 A子 123

【sheet2】(データベース2:A列=社員コード、B列=氏名、C列=地域コード(各行はA列=B列=C列です。))
A列 B列 C列
123   A子 3
1234 B子 1 
2345 C子 2
2345 C子 2
34567 D子 4
123  A子 3

【sheet3】(表示用:A1=検索対象コード、A3以下=sheet1A列の中から対象となるC列の情報を、(可能であればsheet2C列の地域コード順に)表示させたい)
A列 B列
2001(sheet1A列の検索対象コード:手入力により可変とする。)

2345(sheet1C列のC子の社員コード(sheet2C列の地域コード2))
123(sheet1C列のA子の社員コード(sheet2C列の地域コード3))
34567(sheet1C列のD子の社員コード(sheet2C列の地域コード4))

A 回答 (2件)

質問文が長くて、質問の真意をつかめているかどうか判らないが、下記のようなことかな。

質問の書き方を下記で勉強して。
ーー
例データ Sheet1 A列からF列(見出しは直接書くべき)
検索コード氏名社員番号氏名地域コード作業コード
1912A子123A子3
1912B子1234B子1
1912C子2345C子2
2001C子2345C子21
2001D子34567D子42
2001A子123A子33
ーーー
Sheet1にSheet2のデータを社員コードで集約している。
D2の式 =VLOOKUP(C2,Sheet2!$A$1:$C$100,2,FALSE)
下方向に式を複写
E2の式 =VLOOKUP(C2,Sheet2!$A$1:$C$100,3,FALSE)
下方向に式を複写
F列は作業列で、検索に該当する連番を振っている。
F2の式 =IF(A2=Sheet3!$A$1,MAX($F$1:F1)+1,"")
下方向に式を複写。
結果
検索コードが2001の場合上記F列。
ーーー
Sheet2
社員コード氏名地域コード
123A子3
1234B子1
2345C子2
2345C子2
34567D子4
123A子3
データのまま
ーーー
Sheet3  のA1  に2001(一例で変えてよい)
第2行 検索コード氏名社員番号氏名地域コード作業コード
第3行以下
A3 =INDEX(Sheet1!$A$1:$F$100,MATCH(ROW()-2,Sheet1!$F$1:$F$100,0),COLUMN())
B3からE3はA3の式を複写。
A3:E3の式を下方向に式を複写。
要らない項目があればCOLUMN()のところを1,2,3、など具体的に
Aheet1の列と合わせて指定。
結果
2001
検索コード氏名社員番号氏名地域コード作業コード
2001C子2345C子2
2001D子34567D子4
2001A子123A子3
#N/A
#/Aの防止は
IF文でRow()-2がSheet1のF列のMAXを超えていると空白という式をかぶせて出来る。
以上「imogasi方式」と自称。
ーー
質問の書き方
質問文の
(1)>早急にできるようにしたいと思っています。
までは不要。
(2)A列=検索被対象コード、B列=氏名、C列=社員コード(各行はB列=C列です
は具体例の列の上に書く方が判りやすい。画面でのづれはあるかもしれないが。
(3)「データベース2」の意味不明
(4)Sheet3
2001の場合
2001C子2345C子2
2001D子34567D子4
2001A子123A子3
と出てほしいと書けば判りやすい。
D列はあえて重複そのままとしているが良くないかな?。
    • good
    • 0
この回答へのお礼

ご回答と質問の仕方を教えてくださいまして、ありがとうございます。
質問の記載ミスも多々あり、お恥ずかしい限りです。

出力はイメージ通りにできました。関数も勉強させていただきます。

どうもありがとうございました。

お礼日時:2008/07/25 17:05

>可能であればsheet2C列の地域コード順に


これがあれば VBAを使う事になると思います。
例えば Seet1に
  A列 B列 C列   D列
1 1912
2
3 検索 氏名 社員ID  地域ID
4 1912 A子 123
5 1912 B子 1234 
6 1912 C子 2345
7 2001 C子 2345
5 2001 D子 34567
と Sheet1に3行ほど追加して
D4は =VLOOKUP(C4,Sheet2!A:C,3,FALSE) 下フィル

シート名のタブを右クリックして コードの表示で VBエディターを起動
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Range("A3:D1000").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=Range("A1").Value
Selection.Sort Key1:=Range("D4"), Order1:=xlAscending, Header:=xlGuess
End If
End Sub
をコピイして 閉じる
A1に1912とか2001を入れてみてください。

この回答への補足

早速のご回答ありがとうございます。
基本的な関数しか分からない状況で、理解するのが難しいですが、オートフィルターの形で自動的に抽出されました。

実は、これ以外にも縦横の分析が必要なデータのため(実は他にもsheetがある)、表示用のsheet3以外は、データベースとしてデータを蓄積していきますので、現時点ではsheet1と2の情報をリンクさせて、sheet3に入力したキーで社員コードを出力できるようにしたいのです。

教えていただいたVBAを実行してみて、検索対象コードから社員コードさえ抽出できれば、表示用のsheet3に地域コードをリンクさせてオートフィルタでもかまわないと思いました。

補足日時:2008/07/25 00:46
    • good
    • 0
この回答へのお礼

読みにくい上に、記載ミスのある質問にお答えいただきまして、ありがとうございました。

こういう方法もあるんだと大変参考になりました。

ありがとうございました。

お礼日時:2008/07/25 17:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!