【问题标题】:Set values based on two range values in Excel VBA根据 Excel VBA 中的两个范围值设置值
【发布时间】:2017-06-13 00:25:53
【问题描述】:

我正在努力寻找一种表达方式。

我有一个包含两个工作表“Final”和“Raw”的电子表格。 Final 有一个范围,用户可以在其中将 ID 输入到单元格 C3 到 C13 中。

从那里我想循环遍历该范围直到它为空,然后使用这些值循环遍历 Raw 中的一个范围,最终将这些值拉入 Final 的第三个范围。

如果我们用 SQL 术语讨论一对多关系,它本质上就是一个内连接。

我已经想到了几种不同的方法,包括使用application.worksheetfunction.index,但我正在努力想出一种方法来实现它。

编辑以添加代码:

Dim indexPO As Long
Dim i As Long
Dim endRow As Long

endRow = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row

indexPO = Sheets(1).Cells(2, "C")


Do While Worksheets(1).Cells(i, "C").Value <> ""
    indexPO = indexPO + 1
    Do While Worksheets(2).Cells = indexPO
        Worksheets(1).Cells(i, "A") = Worksheets(2).Cells(i, "A")
        If Worksheets(2).Cells(i, "A") = "" Then
            Exit Do
        End If

    Loop
Loop

范围 1 ID AAAA BBBB 中国交建

范围2 标识说明 AAAA 奶牛 AAAA 奶牛 AAAA 奶牛 AAAA 奶牛 BBBB 驼鹿 BBBB 驼鹿 BBBB 驼鹿 FFFF 猪 FFFF 猪 FFFF猪

期望的输出

ID 说明 AAAA 奶牛 AAAA 奶牛 AAAA 奶牛 AAAA 奶牛 BBBB 驼鹿 BBBB 驼鹿 BBBB驼鹿

【问题讨论】:

  • 你能粘贴你已经尝试过的代码吗?你考虑过 VLookup 吗?
  • 我需要在第三个范围内填充第二个范围内的尽可能多的记录,但要使用第一个范围内的索引,然后我可以查找其余部分。所以我需要解决我猜的第一步。
  • 我必须同意 rayzinnz,这听起来像是您在寻找多重查找解决方案。也许如果您提供一个数据示例以及预期输出,它会更好地解释您的请求。
  • 好的..告诉我是否符合您的要求,因为您确实提到了与内部联接的相似性。因此,假设您有 A 列和 B 列的数据。您是否要在 A 列和 B 列之间找到匹配项并将这些匹配值复制到 C 列?
  • 是的。我想将这两个范围合并为范围 C。我将在主帖中提供一些示例数据和所需的输出。

标签: vba excel


【解决方案1】:

假设 Worksheets(1) 是您的“最终”工作表,而 Worksheets(2) 是您的“原始”工作表,请先尝试以下方法:

Dim userRangeRow As Long, rawRow As Long, mergedRow As Long
Dim ID As Variant

mergedRow = 3

For userRangeRow = 3 To 13
    ID = Worksheets(1).Cells(userRangeRow, "C").Value
    If ID = "" Then
        Exit For
    End If

    rawRow = 1
    Do While Worksheets(2).Cells(rawRow, 1).Value <> ""
        If Worksheets(2).Cells(rawRow, 1).Value = ID Then
            Worksheets(1).Cells(mergedRow, 1) = Worksheets(2).Cells(rawRow, 1)
            Worksheets(1).Cells(mergedRow, 2) = Worksheets(2).Cells(rawRow, 2)
            mergedRow = mergedRow + 1
        End If
        rawRow = rawRow + 1
    Loop
Next

【讨论】:

  • 这非常有效。我只需要偏移 mergeRow 以适合我的目标范围。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多