画像を参照下さい。
1.シートA、シートBがあります
2.ナンバーを軸(同一のナンバーは存在しません)に
シートAに在ってシートBにないものはシートCには載せない
3.シートBに在ってAにないものはCに載せる
4.AとB両方にある場合はBの情報をCに載せる
これをマクロで、ボタンをポチと押せばサッサッサーとできるよう
お願いいたします。質問などはコメント欄にお書きください。
Option Explicit Sub Macro1() ' データ対象範囲を指定 ' 終了行は後で求める Const startCol = "A" Const indexCol = "G" Const endCol = "AU" Const startRow = 4 Dim endRowA As Long Dim endRowB As Long Dim nowRowC As Long Dim indexA As Range Dim indexB As Range Dim sheetA As Worksheet Dim sheetB As Worksheet Dim sheetC As Worksheet Dim i As Long Dim res As Object ' それぞれのシートを指定 Set sheetA = Worksheets("SheetA") Set sheetB = Worksheets("SheetB") Set sheetC = Worksheets("SheetC") ' シートAとシートBの最終行を求める endRowA = sheetA.Cells(sheetA.Rows.Count, indexCol).End(xlUp).Row endRowB = sheetB.Cells(sheetB.Rows.Count, indexCol).End(xlUp).Row ' シートCのデータの追加行 nowRowC = startRow ' シートAとシートBのインデックスとなるナンバーの範囲 Set indexA = sheetA.Range(sheetA.Cells(startRow, indexCol), sheetA.Cells(endRowA, indexCol)) Set indexB = sheetB.Range(sheetB.Cells(startRow, indexCol), sheetB.Cells(endRowB, indexCol)) ' まずシートAの上から順に見ていく For i = startRow To endRowA ' シートBから同じナンバーを探す Set res = indexB.Find(what:=sheetA.Cells(i, indexCol).Value, _ LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True, Matchbyte:=True) ' 見つかったらシートCにコピーする If Not res Is Nothing Then sheetB.Range(sheetB.Cells(res.Row, startCol), sheetB.Cells(res.Row, endCol)) _ .Copy Destination:=sheetC.Cells(nowRowC, startCol) nowRowC = nowRowC + 1 End If Next i ' 次にシートBの上から順に見ていく For i = startRow To endRowB ' シートAから同じナンバーを探す Set res = indexA.Find(what:=sheetB.Cells(i, indexCol).Value, _ LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True, Matchbyte:=True) ' 見つからなかったらシートCにコピーする If res Is Nothing Then sheetB.Range(sheetB.Cells(i, startCol), sheetB.Cells(i, endCol)) _ .Copy Destination:=sheetC.Cells(nowRowC, startCol) nowRowC = nowRowC + 1 End If Next i End Sub
こんなところでいかがでしょうか。
1.シートA、シートBがあります
<<
この時、シートCはどうなってるのでしょうか?
シートCもあって、シートCにしか無いデータは残すと言う考えで間違いないですか?
意図されている条件という認識でよいでしょうか?
この時、シートCはどうなってるのでしょうか?
シートC項目(タイトル)のみ表示されていると思っていただいて結構です
>cno
意図されている条件という認識でよいでしょうか?
はい、その条件でお願いします
一番簡単なのはシートCを消し、シートBを複製してシートCにすることだと思う。
大元のデータがシートAに入力されています。
シートBは番号がランダムな状態で落とされてシートBに張り付けられています。
シートAの順番通りに並んだ状態でシートAとシートBのマッチングを行い
シートAの順番通りにシートCにデータを反映させる。ということがやりたいのです。
1.シートAにある番号順に並ぶ
2.シートAになくてシートBにある番号、つまり新たな番号は
シートAの番号の最後に追加される並び順でシートCに反映される
3.シートAにありシートBにない番号、つまり削除される番号は
シートAの番号順から削除(行削除)されシートCに反映される
あーやっぱり新しいはてなになってから回答がつかないなー
規約違反として通知
回答拒否になっていて 回答できないだけかと思う。