人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルの関数を使った処理の質問です。


1つのシートに旧名簿欄があります。
2つ目のシートに新しい名簿欄があります。

名簿のデータが毎週増えるのですが、増えた分のリストを別のシートにピックアップするにはどうすればいいでしょうか?

例えば古いリストにあたるシート1のA1の行には佐藤さんのデータが、Bの行には田中さんのデータがあるとします。
具体的に言うとA列に名前、B列に連絡先とします。

次にシート2の1行目に佐藤、2行目に増田、3行に田中さんとします。

つまり2行目の増田さんだけ増えたという事ですが、その増田さんのデータをもう一つ違うシートにピックアップしたい(シート3にA2、B2の増田さんのデータ)のですがどうすればいいでしょうか?
詳しい方ご教授お願いします。

●質問者: justdaemon
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:エクセル データ ピックアップ リスト 佐藤
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● きゃづみぃ
●15ポイント

質問の内容がちょっとわかりにくいのですが、シート2に追加したとき

countifを用いて シート1に一致するものがあるかないか調べることができます。

それで件数が0のものを ほかのシートにコピーすればいいでしょう。

これを自動的にやるならマクロ(VBA)を使うことになります。

http://www3.tokai.or.jp/excel/kansu/countif.htm

◎質問者からの返答

全て自動にする事は無理という事で、マクロを使う事になるんですね。

有難うございます。

参考にさせていただきます。

他の意見もありましたらお願いします。


2 ● SALINGER
●30ポイント ベストアンサー

VBAで書きますと、

Sub Macro()
 Dim i As Long
 Dim j As Long
 Dim k As Long
 Dim f As Boolean
 k = 1
 i = 1
 While Worksheets("Sheet2").Cells(i, 1).Value <> ""
 j = 1
 f = False
 While Worksheets("Sheet1").Cells(j, 1).Value <> ""
 If Worksheets("Sheet1").Cells(j, 1).Value = Worksheets("Sheet2").Cells(i, 1).Value And _
 Worksheets("Sheet1").Cells(j, 2).Value = Worksheets("Sheet2").Cells(i, 2).Value Then
 f = True
 End If
 j = j + 1
 Wend
 If f = False Then
 Worksheets("Sheet3").Cells(k, 1).Value = Worksheets("Sheet2").Cells(i, 1).Value
 Worksheets("Sheet3").Cells(k, 2).Value = Worksheets("Sheet2").Cells(i, 2).Value
 k = k + 1
 End If
 i = i + 1
 Wend
End Sub

http://excelvba.pc-users.net/fol1/1_1.html

こんな感じで標準モジュールにコピーして実行させてみてください。

注意。シート名のSheet1、Sheet2とかは変更してある場合、それに合わせる必要があります。

◎質問者からの返答

有難うございます!すごく便利ですね!

しかしマクロはまったくわからないものでして、実はこのデータベースはHの列まであるんですよ。

さっき実験してみたらC以降の列のデータは反映されませんでした。

どうすればいいでしょうか?


3 ● udagawa0613
●0ポイント

age


4 ● SALINGER
●30ポイント

こんな感じに変更すればいいですね。

Sub Macro()
 Dim i As Long
 Dim j As Long
 Dim k As Long
 Dim l As Integer
 Dim f As Boolean
 k = 1
 i = 1
 While Worksheets("Sheet2").Cells(i, 1).Value <> ""
 j = 1
 f = False
 While Worksheets("Sheet1").Cells(j, 1).Value <> ""
 If Worksheets("Sheet1").Cells(j, 1).Value = Worksheets("Sheet2").Cells(i, 1).Value And _
 Worksheets("Sheet1").Cells(j, 2).Value = Worksheets("Sheet2").Cells(i, 2).Value Then
 f = True
 End If
 j = j + 1
 Wend
 If f = False Then
 For l = 1 To 8
 Worksheets("Sheet3").Cells(k, l).Value = Worksheets("Sheet2").Cells(i, l).Value
 Next l
 k = k + 1
 End If
 i = i + 1
 Wend
End Sub

一応、ここでは同じ名前の人がいるかもしれないので、名前と住所で判別しています。

◎質問者からの返答

先ほど実験しましたがすいません、Gの列だけとかGとHの列だけが違うデータが入っている場合もあるのですが、そのコマンドも教えていただけますか?

たびたびすいませんがよろしくお願いします。


5 ● SALINGER
●40ポイント

最初に答えた方の例だと

 Worksheets("Sheet3").Cells(k, 1).Value = Worksheets("Sheet2").Cells(i, 1).Value
 Worksheets("Sheet3").Cells(k, 2).Value = Worksheets("Sheet2").Cells(i, 2).Value

の部分がシート3にコピーしている部分です。

1行目がある行の1列目すなわちA列のセルを、2行目がある行の2列目すなわちB列のセルをコピーしています。

A?H列までをコピーする場合、これを8行書いて1・2・3・・・8と数字だけ変えればいいわけです。


ちなみに後に答えた方では、8行も同じようなのを書くのが嫌なので次のように書いてます。

 For l = 1 To 8
 Worksheets("Sheet3").Cells(k, l).Value = Worksheets("Sheet2").Cells(i, l).Value
 Next l

これはlに1?8を代入して8回繰り返すというコードです。

これらを組み合わせることで必要なデータを抽出することが可能です。

◎質問者からの返答

何度も質問に答えて頂いてありがとうございました。

一度いろいろ検証してみたいと思います。

有難うございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ