【发布时间】:2020-04-03 16:46:46
【问题描述】:
我正在尝试编写一个基本上执行以下操作的函数:
- 从工作簿 #1 中获取“名称”单元格值
- 从工作簿 #1 中获取“金额”单元格值
- 打开第二个工作簿(这是一个 2 列列表,其中 columnA = “Names”,columnB = “Amounts”)
- 扫描第二个工作簿的 A 列以查找重复的“名称”条目(来自步骤 1)
- 如果存在重复项,则使用步骤 2 中存储的值覆盖 B 列中相应的“金额”值
- 如果 no 重复存在,则将新的最后一行追加到列表中
- 在第二个工作簿的 A 列的最后一行写入“名称”
- 在第二个工作簿的 B 列最后一行写入“金额”
本质上,此函数将更新名称列表及其相应数量。如果列表中已存在名称,则此脚本将在 A 列中查找重复条目,并更新同一行 B 列中的关联金额。如果此列表中不存在名称,该函数将向列表中添加一个新行,然后将存储的“名称”值写入 A 列,并将存储的“金额”值写入 B 列。
我已经完成了第 1-3 步,但在为第 4-8 步创建循环时遇到了一些问题。这是我目前拥有的代码...任何帮助将不胜感激!
谢谢!
Sub Open_Updator()
Dim proj_name As String
Dim amount As Double
Dim updator As Workbook
Dim updator_sheet As Worksheet
Dim LastRow As Long
Dim arr() As Variant
Dim R As Long
Dim C As Long
Dim Destination As Range
proj_name_raw = ThisWorkbook.Sheets("Cover").Range("C7").Value
proj_name = Left(proj_name_raw, Len(proj_name_raw) - 3)
amount = ThisWorkbook.Sheets("Summary").Range("O110").Value
Set updator = Workbooks.Open(Filename:="C:\Users\XXXXX\Desktop\updator.xlsx")
updator.Activate
Set updator_sheet = Sheets("Table")
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
arr = Range("A1:B" & LastRow)
Set Destination = Range("A1")
For R = 1 To UBound(arr, 1)
For C = 1 To UBound(arr, 2)
If arr(R, C) = proj_name Then arr(R, C) = arr(R, 1)
Next C
Next R
Destination.Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub
谢谢!
【问题讨论】:
-
第一个工作簿中的名称也可以重复吗?如果是这样,应该在第二个工作簿中写入哪个值?
-
第一个工作簿中的“名称”每次都是来自同一个单元格的值,因此不会在第一个工作簿中重复。
标签: excel vba for-loop excel-formula