
No.4ベストアンサー
- 回答日時:
1.以下のマクロを標準モジュールに登録してください。
2.各シートのシート名は
更新前データ
更新後データ
差分データ
としています。
3.差分データの見出し行(1行目)は予め、作成しておいてください。
Option Explicit
Public Sub 差分データ作成()
Dim wsb As Worksheet '更新前データシート
Dim wsa As Worksheet '更新後データシート
Dim wsd As Worksheet '差分データシート
Dim maxrowb As Long '更新前データ 最大行
Dim maxrowa As Long '更新後データ 最大行
Dim maxrowd As Long '差分データ 最大行
Dim rowa As Long '更新後データ 行
Dim rowd As Long '差分データ 行
Set wsb = Worksheets("更新前データ")
Set wsa = Worksheets("更新後データ")
Set wsd = Worksheets("差分データ")
maxrowb = wsb.Cells(Rows.count, 1).End(xlUp).row
maxrowa = wsa.Cells(Rows.count, 1).End(xlUp).row
maxrowd = wsd.Cells(Rows.count, 1).End(xlUp).row
If maxrowb >= maxrowa Then
MsgBox ("更新データなし")
Exit Sub
End If
rowd = maxrowd + 1
For rowa = maxrowb + 1 To maxrowa
wsd.Cells(rowd, 1).Resize(1, 23).Value = wsa.Cells(rowa, 1).Resize(1, 23).Value
rowd = rowd + 1
Next
MsgBox ("完了")
End Sub
ご指導頂きまして、大変ありがとうございます。
他の方の指導もございましたが、
希望通りの仕様になっておりまして、
今後のやりたいことにもつながるため、
ベストアンサーにさせて頂きました。
No.5
- 回答日時:
No1です。
>更新後データ範囲、更新前範囲は、
>単純にシート全体を指定したいと思っていたのですが、
それでも不可能ではありませんけれど、実際にデータのある範囲は、シート全体に対して何万分の一とかの範囲だと想像します。(数十万分の一かも・・)
それを、シート全体で計算させると、数万倍(数十万倍)の計算をさせることになるので、効率が悪すぎますし、計算が重くなる原因になりかねません。
可能性のある範囲に限定しておくのが常識的です。
>IDは抜き出し作業後に当たるため、
>現状は秒単位まで出ている日付(D列)くらいしか思いあたりませんでした。
抽出する際に、どこかの列の値で追加データかどうかを判断できないということでしょうか?
ひょっとして、1行分のデータを全部比較して同じかどうかを判断する必要があるということでしょうか?
大抵の場合はどこかの列をの値を代表として(=ID代わり)比較して、更新前に存在したかどうかを判断できるものと想像しますけれど・・・?
(そのように利用できる列を、「IDにできる列」と表現しました)
添付図が判読できないのでわからないのですが、B列やC列のタイトルに「コード」の文字があるようですが、これって行に対してのID代わりにならない値ってことでしょうか?
>現状は秒単位まで出ている日付(D列)くらいしか思いあたりませんでした。
D列の値が使えるのならそれでもかまいませんが、「重複がない」ことと「更新前後で同じデータの日付は完全一致する」という条件を満たしていないとID代わりには利用できません。
ご質問文ではシート名もよくわからないので、No1のように抽象的な表現をするしかないのですけれど、無理矢理式っぽくしてみるのなら
それぞれが、別シートであるものとして、
=FILTER(更新後データ!A2:W5000,COUNTIF(更新前データ!D2:D5000,更新後データ!D2:D5000)=0,"")
みたいな感じになるはずです。
細かく指導して頂きましてありがとうございます。
とても勉強になりました。
大変心ぐるしいですが、
個人的にtatsumaru77様のご回答の方が、
今後のやりたいことにもつながるため、
そちらをベストアンサーにさせて頂きました。
ご指導頂きましてありがとうございます。
No.3
- 回答日時:
No2です。
行が増える場合、添付図のように増えるケースもあるのでしょうか。
このような増え方もありえる場合は、緑の行が増えたことになるので、
2,5行を差分データにコピーすることになります。
又、更新前データ、更新後データには関数式が埋め込まれていますか?

No.2
- 回答日時:
>単純に増えた分を抜き出したいと考えております。
添付図のように
単純に行が増えるだけなのでしょうか。
そうであれば、5,6行が増えた行なので、その行を差分データにコピーします。(5,6行の内容はチェックしません)

No.1
- 回答日時:
こんにちは
画像がほとんど識別できないので、以下は勝手な推測での回答です。
お門違いの場合はスルーしてください。
どこかに個別のIDにできるものがあるとして、
「更新データに存在するIDで更新前に存在しない行を抜き出す」
ということをなさりたいのかと推測しました。
>office365のエクセルを使用しております
とのことですので、抽出自体は関数でも可能です。
抽出結果を表示したい左上のセルに
=FILTER(更新後データ範囲,COUNTIF(更新前ID列範囲,更新後ID列範囲)=0)
の式を入力すれば、そのまま上記の内容がスピルされます。
VBAでなさりたいのであれば、抽出範囲の左上のセルに、上記の式を代入すれば同じものが得られるはずと思います。
セルから関数を外したければ、
結果のセル範囲.Value = 結果のセル範囲.Value
とすることで、固定値にすることができます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでのリスト不一致抽出について
Visual Basic(VBA)
-
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
Excelマクロの差分抽出のコードを教えていただきたいです。
Excel(エクセル)
-
-
4
【VBA】異なる行だけを抜き出す数式/マクロについて
Visual Basic(VBA)
-
5
VBAでセル同士を比較して色付け
Visual Basic(VBA)
-
6
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
7
Excelで[表1]にあって、[表2]にないものを抽出する関数
その他(Microsoft Office)
-
8
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
9
Excel VBA:セルを新旧1つずつ比較して同分を上書き、差分を蓄積追加
Excel(エクセル)
-
10
VBA 列全体を別シートの列と比較し、同じ値がある行の、右端に値をコピーする方法について
Excel(エクセル)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
Excelマクロ 差分抽出の方法が知りたいです。
Excel(エクセル)
-
13
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
14
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
15
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
16
EXCEL VBA 一致しないデータの抽出及びデータ更新
Excel(エクセル)
-
17
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
18
エクセルでマクロにてセル色と文字を他シートのセルへコピーしたい
その他(コンピューター・テクノロジー)
-
19
ExcelVBAで今開いているユーザ情報を取得できますか?
Visual Basic(VBA)
-
20
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
更新前と更新後の差分をVBAを使...
-
【エクセル】区切り位置で分割...
-
エクセルに入力された日付「S40...
-
ピボットテーブル 0個の行を...
-
エクセル マクロ 連続する空...
-
エクセル、正数のみの集計[(負...
-
オートフィルのマクロを作りたい
-
値の入っているセルのうち、一...
-
エクセルで別のシートに数行お...
-
SUMIFで数値が入力されているセ...
-
【Excel】歯抜けデータの集約
-
SUMPRODUCT関数 行が増えても...
-
SUMIFとCOUNTIFの違いについて
-
《エクセル2000》重複している...
-
エクセル タイム入力とデータ...
-
Excel関数:「0」を除いた標準...
-
A and B or Cの合計の出し方
-
エクセル 担当者ごとにブラン...
-
エクセル 別のファイルにデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
【エクセル】区切り位置で分割...
-
更新前と更新後の差分をVBAを使...
-
Excel関数:「0」を除いた標準...
-
SUMIFで数値が入力されているセ...
-
値の入っているセルのうち、一...
-
エクセル、正数のみの集計[(負...
-
ピボットテーブル 0個の行を...
-
エクセルに入力された日付「S40...
-
エクセル 8ケタの数字から日数...
-
Excel関数で、範囲内の最後のセ...
-
複数の候補列から、検索値と一...
-
【Excel】歯抜けデータの集約
-
エクセルで何種類のデータがあ...
-
correl関数の範囲指定
-
《エクセル2000》重複している...
-
SUMPRODUCT関数 行が増えても...
-
EXCEL 階段状のグラフ
-
エクセル2000で〇×の並び替えを...
-
Excelのマクロで行を間引きたい
おすすめ情報
ご回答ありがとうございます。
単純にしたの方向に増えていくだけになっております。
二つのデータには関数式は埋め込んでおりません。
ご回答ありがとうございます。
ド素人過ぎて多少補足頂けますと幸いです。
更新後データ範囲、更新前範囲は、
単純にシート全体を指定したいと思っていたのですが、
どうも書き方がよくわかりませんでした。
IDは抜き出し作業後に当たるため、
現状は秒単位まで出ている日付(D列)くらいしか思いあたりませんでした。
今一度、ご指導をお願い致します。