【问题标题】:VBA how do I edit cell contents based on contents of two other cells in same rowVBA如何根据同一行中其他两个单元格的内容编辑单元格内容
【发布时间】:2016-03-08 11:37:33
【问题描述】:

我需要帮助创建一个宏来清理包含产品销售信息(包括需要使用的运输方式)的 csv 表。我们大约有 10 种产品无法通过我们通常的运输方式发送,我需要覆盖分配给包含这些产品的订单的运输方式。

  • A 列是订单号
  • B 列是购买的产品
  • C 列是运输方式

如果有人在一个订单中购买了多件产品,则订单号在下一行中重复,运输方式仅显示在具有该订单号的第一行,并且在同一订单中购买的每个连续产品只会添加一个带有B列中的产品名称

我需要使用 VBA 检查 B 列中 10 种左右特定产品的列表,并更新整个订单的运输方式(C 列中最上面的单元格在单元格 A 中具有相同的值),如果它包含这 10 种产品中的一种。

我认为它需要做这样的事情:

  1. 查看 B 列并搜索一串文本
  2. 如果单元格与搜索条件匹配,请查看同一行中 A 列中的值
  3. 在 A 列中找到该值的第一个实例
  4. 将同一行 B 列中的内容替换为新的运输方式

我需要在循环中使用它,以便它为电子表格中 B 列中搜索字符串的每个实例执行此操作。

我希望这个问题很清楚,我已经搜索过,但找不到这个问题的答案。欢迎任何帮助或替代修复。

【问题讨论】:

    标签: vba excel replace shopify shipping


    【解决方案1】:

    试试下面的代码,给出的设置和结果如下截图:

    Sub test()
    
    Dim pRange As Range
    Dim nShip As Range
    
    Set pRange = Range("E2")
    pRange.Select
    
    While ActiveCell.Value <> ""
    
    Range("B2").Select
    
    While ActiveCell.Value <> ""
    
    If ActiveCell.Offset(0, -1).Value <> ActiveCell.Offset(-1, -1).Value Then
    
    Set nShip = ActiveCell.Offset(0, 1)
    
    End If
    
    If ActiveCell.Value = pRange.Value Then
    
    nShip.Value = pRange.Offset(0, 1).Value
    ActiveCell.Offset(1, 0).Select
    
    Else
    
    ActiveCell.Offset(1, 0).Select
    
    End If
    
    Wend
    
    Set pRange = pRange.Offset(1, 0)
    pRange.Select
    
    Wend
    
    End Sub
    

    首发名单:

    宏之后的结果:

    【讨论】:

    • 您好,感谢您从我所看到的它会做我需要它做的事情 - 但是有一个问题,它遍历每一行 X 我需要检查的产品数量。这意味着如果我说 1000 行和 10 个产品,它会一个一个地选择 10 000 个单元格。结果这个宏需要很长时间才能运行,我想知道是否有一种更有效的方法可以在产品购买列中搜索要搜索的产品列中的任何项目?
    • 另外,我认为可以减少这种情况的一种方法是,如果它不是在寻找完全匹配的产品。例如,如果我有产品要搜索为椅子和电视,那么它会将购买的产品列表中的“椅子 - 大”和“电视 -42 英寸”视为匹配项。我不知道该怎么做?
    • 抱歉 - 没有意识到在运行时关闭屏幕更新可以节省多少时间!当它不必担心向我展示所有内容时,速度会更快!
    猜你喜欢
    • 2019-04-05
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多