スプレッドシートの比較と更新


0

ここでExcelスプレッドシートについての助けが必要です。 2つのワークシートがあります。1つは古いレコードを保持し、もう1つは現在のレコードを保持しています。私がやりたいことは、コマンドボタンに関連付けられたvbaコードを開発することです。以下のサンプルを見つけてください。ボタンがクリックされると、古いレコードの値は新しいレコードの値に基づいて自動的に更新されます。わかりやすくするために、これはワークシートのスナップショットです。

Sheet1には古いレコードが含まれています。これはライブであり、100人以上のユーザーに表示されます。 sheet2にはさまざまなソースから更新されている新しいレコードが含まれており、フィールド/列のいずれもフィールドユーザーが変更できます。

両方のシートのフィールド1は、主制御フィールドを保持します。だから私がやりたいのは、sheet2のfield1の各値を取得してから、それをsheet1のfield1で検索することです。 。値がsheet1にまったくない場合は、sheet2のすべての値とすべての関連レコードをsheet1にコピーします。常に、sheet2の新しいアップデートに基づいてsheet1をアップデートし続けたいと思います。

私は自分自身を十分に明確にしたことを願っています。私は75フィールド/列とテーブル内の70,000以上のレコードを持っているので、サンプルテーブルは単なる単純化されたバージョンです。

これを達成するためのあなたの予想される助けとサポートをありがとう。

**SHEET1**
Field1  Field2  Field3  Field4
Radms Street    781772  2   76
Mapre Street    781772  31  76
Catapilar Av    781727  1   90
Aveb Park   781727  56  91

**SHEET2**
Field1  Field2  Field3  Field4
Aveb Park   781727  56  91
Radms Street    781770  2   76
Solution Way    761111  67  1
Aknyt Road  781720  91  90
Mapre Street    781772  31  76
weedred Park    781781  23  61
Raven Road  781781  76  61
Catapilar Av    781720  21  76

ワークシートのデータのサンプルを正しくフォーマットするためにコードブロックを使用してください
tumchaaditya

1
@tumchaadityaはい。書式設定のためにそれを編集することもできます。
Raystafarian

ユーザー、これまでに何を試しましたか?あなたはvlookupを調べましたか、しかしそれが十分に速く計算するには多すぎるレコードがありますか?マクロを使用しますか?どこに行き詰まっていますか?
Raystafarian

@ Raystafarian:ああ、そうなんです。しかし、私は明らかに問題を適切に投稿することに新参者であるOPを教育しようとしていました..
tumchaaditya

ご意見ありがとうございます。私は現在Vlookupでこれを管理していますが、データが今後6か月以内に増え続けるので、今必要なのはプロセスを管理するためのマクロです。
ondo

回答:


0

このVBAはうまくいくでしょう、あなたのセルに合わせて範囲を調整して無期限に動かないようにしてください。のforループも調整する i あなたが持っているフィールドの数を反映するために。

このVBAは、値が両方のシートで同じ順序で並んでいることを前提としていますが、空白の代わりにはなりません。 値を比較しない

Sub comparesheets()
Application.ScreenUpdating = False
Dim c As Range
Dim strFind As String
Dim rFound As Range
Dim i As Integer

For Each c In Sheets("sheet1").Range("A:A")
strFind = c.Value

    With Sheets("Sheet2").Range("A:A")
        Set rFound = .Find(What:=strFind, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not rFound Is Nothing Then
            For i = 1 To 4
                If rFound.Offset(, i) <> "" Then
                    c.Offset(, i) = rFound.Offset(, i)
                End If
            Next i

        End If
    End With

Next c
Application.ScreenUpdating = True
End Sub
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.