gpt4 book ai didi

excel - 如何在阵列之间更新此补偿数据?

转载 作者:行者123 更新时间:2023-12-04 22:28:10 29 4
gpt4 key购买 nike

我有一个工作簿,有两张表(表 1 和表 2)。表 1 有 A:E 列(TSR = 目标薪资范围)
Job Code job title TSR min TSR mid TSR max10001 job 1 55k 60k 65K10003 job 3 65k 70k 75K10005 job 3 75k 80k 85K
在我的工作表 2 上,我只更新了其中两项工作的数据:
Job Code job title TSR min TSR mid TSR max10001 job 1 65k 70k 75K10005 job 3 85k 90k 95K
基于 Sheet2,我只想更新工作 1 和 3 的 C:E 列中的数字,并且不更改工作 2 的工资范围。

这是我尝试过的代码,但我在这一行没有收到下标错误:Set varSheetB = wbkA.Sheets(2) ,而且我一般不认为我在那里(为什么我在这里伸出手)。

Option Explicit

Sub test()

Dim wbkA As Workbook
Dim varSheetA As Variant, varSheetB As Variant
Dim strRangeToCheck As String
Dim iRow As Long
Dim iCol As Long 'I'll want to check for differing values between columns C:E

Set wbkA = ThisWorkbook

Set varSheetA = wbkA.Sheets(1)
Set varSheetB = wbkA.Sheets(2)

strRangeToCheck = "A2:E3000"

varSheetA = Worksheets("Sheet1").Range(strRangeToCheck)
varSheetB = Worksheets("Sheet2").Range(strRangeToCheck)

For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)

For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2)

If varSheetA(iRow, iCol) <> varSheetB(iRow, iCol) Then '
varSheetA(iRow, iCol) = varSheetB(iRow, iCol)
Else
'do nothing
End If

Next iCol

Next iRow

End Sub

如有必要,我将链接屏幕截图,但想象一下两者都从 A1 开始(带有标题)

worksheet

该表显示了您的代码更新的 OG 内容,但随后它具有稍高薪水的迭代,也需要更新。

最佳答案

我对您的代码进行了一些更改以清理它并使其更高效。首先,由于 Sheet2 包含所有更改,我们将遍历该工作表并搜索工作表 1 中的值。这更有效,因为它不会浪费循环遍历 sheet1 中没有任何更改的单元格的操作.

此外,我已将 Ranges 设为动态,因此在所有情况下您都不会被限制在“A2:E3000”范围内。如果我理解正确,sheet2 将是 sheet1 的子集,因此在某些情况下它的行数会更少。没有理由遍历空白行。

最后,我使用 Match搜索匹配的功能。请记住,该函数返回相对于范围的位置。因此,如果您在 Range("A5:A10") 中搜索匹配项,并且在单元格 A5 中找到匹配项,函数将返回 1(而不是 5)。这就是为什么我抵消fndRow多变的。

让我知道这是否适合您,或者您是否还有其他问题。

 Sub Test()
Dim wbk As Workbook
Dim wsA As Worksheet
Dim wsB As Worksheet
Dim rngA As Range
Dim rngB As Range
Dim rIterator As Range
Dim fndRow As Long

Set wbk = ThisWorkbook
Set wsA = wbk.Sheets("Sheet1")
Set wsB = wbk.Sheets("Sheet2")

'CurrentRegion should work to bring in the entire
'necessary range so long as it is contiguous data
Set rngA = wsA.Range(wsA.Range("A2"), wsA.Range("A2").End(xlDown))
Set rngB = wsB.Range(wsB.Range("A2"), wsB.Range("A2").End(xlDown))

For Each rIterator In rngB
On Error Resume Next
fndRow = Application.Match(rIterator.Value, rngA, 0) + _
rngA.Range("A1").Row - 1
If Err.Number <> 0 Then
'What happens if it isn't found?
Else
wsA.Cells(fndRow, 3).Value = rIterator.Offset(, 2).Value
wsA.Cells(fndRow, 4).Value = rIterator.Offset(, 3).Value
wsA.Cells(fndRow, 5).Value = rIterator.Offset(, 4).Value

wsA.Cells(fndRow + 1, 3).Value = rIterator.Offset(, 2).Value * 1.1
wsA.Cells(fndRow + 1, 4).Value = rIterator.Offset(, 3).Value * 1.1
wsA.Cells(fndRow + 1, 5).Value = rIterator.Offset(, 4).Value * 1.1

wsA.Cells(fndRow + 2, 3).Value = rIterator.Offset(, 2).Value * 1.2
wsA.Cells(fndRow + 2, 4).Value = rIterator.Offset(, 3).Value * 1.2
wsA.Cells(fndRow + 2, 5).Value = rIterator.Offset(, 4).Value * 1.2

'.... Repeat for all rows
End If

Err.Clear

Next rIterator

End Sub

关于excel - 如何在阵列之间更新此补偿数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55751639/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com