- ベストアンサー
エクセルでアクセスの機能が使えますか?
次のような機能はアクセスでは一発で出来るのですが、今の会社のパソコンにはアクセスが入っておらず、しかもお金がかかるという理由で買ってもらえません。プログラムを組めば出来るものでしょうか? やりたい事 シート1 A:社員番号 B:氏名 C:学歴 D:入社年月日 シート2 A:社員番号 B:住所 C:電話番号 シート1と2のデータを社員番号をキーにして下のような1つのデータベースを作りたいのです。 シート3 A:社員番号 B:氏名 C:住所 D:入社年月日 アクセスでしたら、簡単に出来るのですが。。。エクセルでイチイチ貼り付けて処理をしているのですが、時間もかかるし、間違いも多くちょっと困っています。 何かいいアイディアがありましたら、教えて下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 VBAも視野に入れて…ということでしたら、このようなコードではいかがでしょうか? 上記のシート形式に沿って作ってますので、実際のシートに応用してみてください。 (コメントを入れてみたのでエディターに貼り付けてみてくださいませ) Sub DATA作成() Dim y As Integer, tmp As Range, i As Integer '***** sheets(1)にあって、sheets(2)にもあるもののみsheets(3)に転記する y = 2 '***** 1行目はタイトル行と仮定しました Do Set tmp = Sheets(2).Columns(1).Find(Sheets(1).Cells(y, 1), , xlWhole) '***** EXCEL2003以降の場合はxlwholeの前の,(カンマ)を3つにします If Not tmp Is Nothing Then '***** どちらにも社員番号が存在する場合 i = Sheets(3).Range("A65536").End(xlUp).Row + 1 '***** sheets(3)の最終行の行番号をiとします Sheets(3).Cells(i, 1) = Sheets(1).Cells(y, 1) '***** 社員番号 Sheets(3).Cells(i, 2) = Sheets(1).Cells(y, 2) '***** 氏名 Sheets(3).Cells(i, 3) = tmp.Offset(0, 1) '***** 住所 Sheets(3).Cells(i, 4) = Sheets(1).Cells(y, 4) '***** 入社年月日 End If y = y + 1 Loop Until Sheets(1).Cells(y, 1) = "" End Sub
その他の回答 (4)
#3です。#1さんへの補足に対して、 >SHEET1、SHEET2のデータ個数は一致していないです。 >例えば、SHEET1には退職者を含めた830人。 >SHEET2には退職者は入っていないが、休職者が含まれた782人。 >このSHEET1、SHEET2で共通する社員のみを抽出 シート3のA列に→SHEET1には退職者を含めた830人の社員番号 この状態で、#3で記載した数式を各列に入力(範囲は$A$1:$D$830とする) シート3の処理の結果、SHEET1、SHEET2で『共通しない』社員番号のセルにはエラー値「#N/A」が表示されるので、オートフィルタ([データ]-[フィルタ]-[オートフィルタ])などで抽出し、行削除。 〈シート3の処理後、シート全体を範囲としてコピー、形式を選択して「値」貼り付けすればデータが確定されます。〉
お礼
本当にありがとうです。これでイライラしながら仕事せずに頑張れます。
各シートのA:、B:、C:、D:はそれぞれ列番号ですか? まず、シート3のA列に社員番号を入力します。 シート1、シート2のデータが各1~100行までだとした場合、 シート3のB列 B1 =VLOOKUP(A1,Sheet1!$A$1:$D$100,2,FALSE) シート3のC列 C1 =VLOOKUP(A1,Sheet2!$A$1:$D$100,2,FALSE) シート3のD列 D1 =VLOOKUP(A1,Sheet1!$A$1:$D$100,4,FALSE) ※VLOOKUP(検索値,範囲,列番号,検索の型) 上記をフィルコピーでOK!
お礼
ありがとうございます!この方法でばっちり出来ました。すごく助かりました!
- imogasi
- ベストアンサー率27% (4737/17069)
(1)VLOOKUP関数 (2)エクセルVBAで組む (3)エクセルでMSクエリを使う(検索中心) などあると思います。
お礼
ありがとうございます。解決しました!
補足
エクセルVBAですが、C言語はあまり詳しくないのですが、(というか、殆ど無知)、良かったらヒントをもらえると助かります。
- -yellowtail-
- ベストアンサー率65% (43/66)
関数のVLOOKUPを使えばいいのではないでしょうか? SHEETS3に社員番号のみコピーして他はVLOOKUPで引っ張ってくるのが簡単だと思います。
お礼
ありがとうございます。解決しました!
補足
SHEET1、SHEET2のデータ個数は一致していないです。 例えば、SHEET1には退職者を含めた830人。 SHEET2には退職者は入っていないが、休職者が含まれた782人。 このSHEET1、SHEET2で共通する社員のみを抽出かけたいのですが、この方法で可能でしょうか?
お礼
ありがとうござます!VBAは自分では作れませんが、作ってもらったものを解読したり、それを応用することは出来るので、非常に助かりました!