根据Excel VBA中的两个范围值设置值

时间:2017-06-13 00:25:54

标签: excel vba excel-vba

我正在努力寻找一种方法来表达这一点。

我有一个包含两个工作表“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 CCCC

范围2 ID说明 AAAA牛 AAAA牛 AAAA牛 AAAA牛 BBBB驼鹿 BBBB驼鹿 BBBB驼鹿 FFFF猪 FFFF猪 FFFF猪

期望的输出

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

1 个答案:

答案 0 :(得分:0)

假设工作表(1)是您的“最终”工作表,而工作表(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