0

3つのワークシートを含むワークブックがあります。ワークブックAの列AとC、およびワークシートの列BとDの基準(インデックス?)に基づいて、ワークブックBの列K(行)の値をワークブックAの列CF(行)の値に変更する必要がありますB.つまり、これらのワークシートには異なる順序でデータが含まれているため、単純にループしてコピーすることはできません。ワークシートAのCF(行)の行番号を見つける必要があります。ワークシートAとCの列は、ワークシートのABとDの列と同じです。

PsuedoSQL

UPDATE 
    Worksheet B
SET
    Worksheet B.K = Worksheet A.CF
FROM
    Worksheet A
WHERE
    Worksheet A.B = Worksheet B.B

ワークシートA、列CFから選択します。AAとACはワークシートBBとBDに等しく、ワークシートBK(行)を値worksheetA.CF(行)に設定します。

私が持っているコードは、ワークシートAの列Aで、インデックスやマッピングなしで、一致するテキストを持つ最後の列を見つけるルックアップです。

Public Function FindPnum(keyword As Variant) As Variant
    Dim ws As Worksheet
    Dim rng1 As Range
    Dim rng2 As Range
    Dim tRow As Long
    Dim tCol As Integer

    Set ws = Sheets("Data")
    Set rng1 = ws.Cells.Find(keyword, ws.[b2], xlValues, , xlByRows, xlPrevious)
    Set rng2 = ws.Cells.Find(keyword, ws.[b2], xlValues, , xlByColumns, xlPrevious)

    If Not rng1 Is Nothing Then
        FindPnum = Cells(rng1.Row, rng2.Column).Address(0, 0)
    End If

End Function
4

1 に答える 1

1

ここでこれを試してください

Sub pair()
Dim r, r2, found
r = 8
r2 = 2
found = False
Application.ScreenUpdating = False
Sheets(2).Activate
Do Until Len(Cells(r, 2).Value) = 0
Do Until Len(Sheets(1).Cells(r2 + 1, 2).Value) = 0 Or found = True
    If Sheets(2).Cells(r, 2).Text = Sheets(1).Cells(r2, 2).Text Then
        If Sheets(2).Cells(r, 11).Value <> 0 Then
            Sheets(2).Cells(r, 11).Value = Sheets(1).Cells(r2, 84)
        End If
        found = True
    Else
        r2 = r2 + 1
    End If
Loop
r2 = 2
r = r + 1
found = False
Loop
Application.ScreenUpdating = True
End Sub

私はこれがそれをするべきだと思います。

于 2012-08-31T21:43:29.467 に答える