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



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

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

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

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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/05/10 22:47:35
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:SALINGER No.2

回答回数3454ベストアンサー獲得回数969

ポイント30pt

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とかは変更してある場合、それに合わせる必要があります。

id:justdaemon

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

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

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

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

2008/05/10 20:43:06

その他の回答4件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント15pt

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

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

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

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

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

id:justdaemon

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

有難うございます。

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

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

2008/05/10 20:20:27
id:SALINGER No.2

回答回数3454ベストアンサー獲得回数969ここでベストアンサー

ポイント30pt

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とかは変更してある場合、それに合わせる必要があります。

id:justdaemon

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

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

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

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

2008/05/10 20:43:06
id:SALINGER No.4

回答回数3454ベストアンサー獲得回数969

ポイント30pt

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

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

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

id:justdaemon

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

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

2008/05/10 21:52:06
id:SALINGER No.5

回答回数3454ベストアンサー獲得回数969

ポイント40pt

最初に答えた方の例だと

            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回繰り返すというコードです。

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

id:justdaemon

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

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

有難うございました。

2008/05/10 22:45:23

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません