如果找到特定文本,则复制单元格

时间:2014-05-22 14:25:09

标签: excel vba excel-vba

我似乎遇到了问题,目前还没有找到解决方案,这就是我向您提出这个问题的原因:

每天我都有来自不同供应商的发票和订单清单,订单基于零件编号和类型。 此列表作为文本导入,然后通过我制作的宏,以安排单元格中的所有内容。 我还需要根据订单类型(例如挡风玻璃,地毯,车轮等)设置一些步骤来格式化此列表。我通常做的是过滤所有内容并选择我感兴趣的订单类型,然后使用另一个工作表中的文本和公式复制相同的行单元格,名为" template&#34 ;,这是一个条件列表。 由于它每天都在变化,它可能不一定包含所有部件类型,这是我无法使用宏,我必须手动继续,有时列表超过200-300行。 举个例子,如果E2有"挡风玻璃"我在M2中复制了一系列来自"模板" (M2到Q2),如果"地毯"我将M3复制到Q3,依此类推。条件列表大约是15到20行,有时可能有2个条件(如果订单超过5000美元,我将其标记为红色,如果逾期我加粗所有内容等)但主要是我根据文件中的文本进行复制。 如果这可以复制到宏中,我真的很感激,因为我需要每次都采取一些步骤,比如自动调整,复制标题,将数量格式化为数字(来自文本),根据订单类型更改文本颜色等等,这也需要时间。 我希望这些信息足以让我们对此有所了解,如果没有,我可以发布一个我必须使用的列表示例。 非常感谢您的支持

2 个答案:

答案 0 :(得分:0)

使用Application.Worksheetfunction.Match查找模板中可以找到要复制的单元格的哪一行,然后复制该行的范围M-Q并粘贴到您的文件中

答案 1 :(得分:0)

你在一个问题上要求得太多以获得帮助。我们最擅长单一问题。下面的文字和代码旨在为您提供一些想法。如果您的代码不起作用,请在此处发布相关部分,并解释它的作用与您希望它执行的操作之间的区别。

你提到的问题听起来并不困难。我希望基本的VBA足以让你入门。您是否在不学习VBA的情况下寻找相关代码。如果你是,这是一个很大的错误。在网上搜索" Excel VBA教程"或访问一个大型图书馆并查看他们的Excel VBA入门。有许多教程和书籍可供选择,因此请选择适合您的教程和书籍。学习基础知识的时间很快就会回报。

Dim RowCrnt As Long
Dim RowLast As Long

With Worksheets("xxxx")
  RowLast = .Cells(Rows.Count,"E").End(xlUp).Row
  For RowCrnt = 2 to RowLast
    ' Code to process each row goes here
  Next
End With

以上可能是您的代码结构。 For循环将依次检查每一行,以便您采取相关操作。

我用过" E"作为专栏信,因为你的问题建议专栏" E"是最重要的。但是,以这种方式引用列的代码可能会非常混乱。更糟糕的是,如果列位置发生变化,您将不得不仔细考虑更改列字母的代码。最好在顶部发表一些声明:

Const ColDate As String = "A"
Const ColAmtInv As string = "B"
Const ColAmtPaid As string = "C"
Const ColProdType As String = "E"

使用这些常量,对列的每个引用都使用名称而不是字母。代码更容易阅读,如果列移动,对常量语句的一次更改将解决问题。

Select Case语句非常有用:

Select Case .Cells(RowCrnt, ColProdType).Value
  Case "carpets"
    ' code for carpets
  Case "windshield"
    ' code for carpets
  Case Else
    ' Unknown product type
    .Cells(RowCrnt, ColProdType).Font.Color = RGB(255, 0, 0)
End Select

您可以拥有一串If个语句,因此可以在一行中执行多项操作:

If DateAdd("m", 1, .Cells(RowCrnt,ColDate).Value) < Now() And _
   .Cells(RowCrnt,ColAmtInv).Value) > .Cells(RowCrnt,ColAmtPaid).Value Then
  ' Invoice overdue
  .Rows(RowCrnt).Font.Bold = True
End If

If .Cells(RowCrnt,ColAmtInv).Value) > 5000 Then
  ' Large invoice 
  .Rows(RowCrnt).Font.Color = RGB(255, 0, 0)
End If    

您不必一次编写整个宏。如果大多数操作是由于产品类型,那么首先尝试。

希望这有助于您入门。