【问题标题】:Need help on Vlookup between two sheets between two linked columns在两个链接列之间的两个工作表之间需要 Vlookup 帮助
【发布时间】:2021-02-17 14:48:51
【问题描述】:

我有以下格式的 sheet1 数据

我需要 VBA 代码在 sheet2 中的 Group Id 和 Product ID 中的 vlookup,并插入以黄色突出显示的新行,称为 BT 订单,并根据 Wk8 和 Wk9 列填充 DMD 列中的 400 和 600 值 vlookup第二张纸的第几周的值。

Dim i As Long 

For i = 2 To Range("E" & Rows.Count).End(xlUp).Row 
    If Trim(Range("E" & i).Value) = RTrim("CMT") Then 
        Rows(i + 1).Insert shift:=xlShiftDown 
        Range("A" & i + 1 & ":D" & i + 1).Value = Range("A" & i - 1 & ":D" & i - 1).Value 
        Range("E" & i + 1).Value = "BT/Order" 
    End If 
Next i

【问题讨论】:

  • 像这样我有多个组 ID 和产品 ID
  • 为什么第 2 周和第 3 周的数据会转到第 8 周和第 9 周?您尝试过什么,遇到了什么具体问题?最简单的方法就是遍历 sheet2 上的行并在 Group+Product 上进行匹配 - 你尝试过吗?
  • weeks 从 0,1,2 开始,依此类推,相应的值必须根据 sheet1 列中的周数填充
  • 这里如果 sheet2 中的第 0 周为 0,则 sheet1 中的 wk6 列与 sheet1 中的第 1 周 wk7 一样,sheet1 中的 wk8 的第 2 周
  • 我尝试过,但在选择范围时遇到了困难,我有多个组 ID 和产品 ID

标签: excel vba


【解决方案1】:

试试这个:

Sub Tester()

    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim i As Long, i2 As Long, grp, prod, amt, wk
    
    Set ws1 = ThisWorkbook.Worksheets("Sheet1")
    Set ws2 = ThisWorkbook.Worksheets("Sheet2")
    
    i = 2
    Do While i <= ws1.Cells(Rows.Count, "E").End(xlUp).Row
        If Trim(ws1.Range("E" & i).Value) = RTrim("CMT") Then
            
            ws1.Rows(i + 1).Insert shift:=xlShiftDown
            ws1.Cells(i + 1, "A").Resize(1, 4).Value = ws1.Cells(i, "A").Resize(1, 4).Value
            ws1.Cells(i + 1, "E").Value = "BT/Order"
            
            'current group/product id's
            grp = ws1.Cells(i, "A").Value
            prod = ws1.Cells(i, "C").Value
            
            'loop sheet2 and find matches
            For i2 = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row
                If ws2.Cells(i2, "A").Value = grp Then
                    If ws2.Cells(i2, "B").Value = prod Then
                        'got match - check amount and week
                        amt = ws2.Cells(i2, "D").Value
                        wk = ws2.Cells(i2, "E").Value
                        If amt > 0 Then
                            'insert amount in relevant column  
                            ws1.Cells(i + 1, "F").Offset(0, wk).Value = amt
                        End If
                    End If
                End If
            Next i2
        
        End If
        i = i + 1
    Loop

End Sub

【讨论】:

  • 我试过了,谢谢它的工作,但它插入 2 个 BT/Order 行值分别为 400 和 600
  • 它对我有用,但我只有你的小样本数据......
  • 我收到此错误选择无效确保复制和粘贴区域不重叠,除非它们的大小和形状相同
  • 我没有做任何复制/粘贴,所以不清楚你指的是什么。
猜你喜欢
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
相关资源
最近更新 更多