1つのシートに旧名簿欄があります。
2つ目のシートに新しい名簿欄があります。
名簿のデータが毎週増えるのですが、増えた分のリストを別のシートにピックアップするにはどうすればいいでしょうか?
例えば古いリストにあたるシート1のA1の行には佐藤さんのデータが、Bの行には田中さんのデータがあるとします。
具体的に言うとA列に名前、B列に連絡先とします。
次にシート2の1行目に佐藤、2行目に増田、3行に田中さんとします。
つまり2行目の増田さんだけ増えたという事ですが、その増田さんのデータをもう一つ違うシートにピックアップしたい(シート3にA2、B2の増田さんのデータ)のですがどうすればいいでしょうか?
詳しい方ご教授お願いします。
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とかは変更してある場合、それに合わせる必要があります。
質問の内容がちょっとわかりにくいのですが、シート2に追加したとき
countifを用いて シート1に一致するものがあるかないか調べることができます。
それで件数が0のものを ほかのシートにコピーすればいいでしょう。
これを自動的にやるならマクロ(VBA)を使うことになります。
全て自動にする事は無理という事で、マクロを使う事になるんですね。
有難うございます。
参考にさせていただきます。
他の意見もありましたらお願いします。
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以降の列のデータは反映されませんでした。
どうすればいいでしょうか?
こんな感じに変更すればいいですね。
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の列だけが違うデータが入っている場合もあるのですが、そのコマンドも教えていただけますか?
たびたびすいませんがよろしくお願いします。
最初に答えた方の例だと
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回繰り返すというコードです。
これらを組み合わせることで必要なデータを抽出することが可能です。
何度も質問に答えて頂いてありがとうございました。
一度いろいろ検証してみたいと思います。
有難うございました。
有難うございます!すごく便利ですね!
しかしマクロはまったくわからないものでして、実はこのデータベースはHの列まであるんですよ。
さっき実験してみたらC以降の列のデータは反映されませんでした。
どうすればいいでしょうか?