• ベストアンサー

エクセルでアクセスの機能が使えますか?

次のような機能はアクセスでは一発で出来るのですが、今の会社のパソコンにはアクセスが入っておらず、しかもお金がかかるという理由で買ってもらえません。プログラムを組めば出来るものでしょうか? やりたい事 シート1 A:社員番号 B:氏名 C:学歴 D:入社年月日 シート2 A:社員番号 B:住所 C:電話番号 シート1と2のデータを社員番号をキーにして下のような1つのデータベースを作りたいのです。 シート3 A:社員番号 B:氏名 C:住所 D:入社年月日 アクセスでしたら、簡単に出来るのですが。。。エクセルでイチイチ貼り付けて処理をしているのですが、時間もかかるし、間違いも多くちょっと困っています。 何かいいアイディアがありましたら、教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

sakura4810
質問者

お礼

ありがとうござます!VBAは自分では作れませんが、作ってもらったものを解読したり、それを応用することは出来るので、非常に助かりました!

その他の回答 (4)

noname#37676
noname#37676
回答No.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の処理後、シート全体を範囲としてコピー、形式を選択して「値」貼り付けすればデータが確定されます。〉

sakura4810
質問者

お礼

本当にありがとうです。これでイライラしながら仕事せずに頑張れます。

noname#37676
noname#37676
回答No.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!

sakura4810
質問者

お礼

ありがとうございます!この方法でばっちり出来ました。すごく助かりました!

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

(1)VLOOKUP関数 (2)エクセルVBAで組む (3)エクセルでMSクエリを使う(検索中心) などあると思います。

sakura4810
質問者

お礼

ありがとうございます。解決しました!

sakura4810
質問者

補足

エクセルVBAですが、C言語はあまり詳しくないのですが、(というか、殆ど無知)、良かったらヒントをもらえると助かります。

回答No.1

関数のVLOOKUPを使えばいいのではないでしょうか? SHEETS3に社員番号のみコピーして他はVLOOKUPで引っ張ってくるのが簡単だと思います。

sakura4810
質問者

お礼

ありがとうございます。解決しました!

sakura4810
質問者

補足

SHEET1、SHEET2のデータ個数は一致していないです。 例えば、SHEET1には退職者を含めた830人。 SHEET2には退職者は入っていないが、休職者が含まれた782人。 このSHEET1、SHEET2で共通する社員のみを抽出かけたいのですが、この方法で可能でしょうか?

関連するQ&A