使用VBA复制部分长度和内容不同的单元格

时间:2016-03-09 13:33:39

标签: excel vba excel-vba excel-2010

所以我有workbook1(wbThis)和workbook2(wbTarget),在wbThis'表格中我有一些填充的单元格。这些单元格的格式为:

来自A6

P2123:开始程序

A7

P1234:代码

A8

P4456-6:文件

|

V

(向下箭头)

A27

它继续这样。现在我有2个问题。

问题1 我想将PXXXxX:(小x就像 - 或_或>等等的任意求和)代码复制到wbTarget。正如您所见,此代码会有所不同,但总是在开头是“P”,在结尾处是“:”。关于这一点,我尝试了代码:

Dim wbThis As Workbook
Dim wbTarget As Workbook
Dim rowRng As Integer
Dim targetRowRng As Integer

For rowRng 6 To 27
   For targetRowRng 14 To 35 
      If Left((A:rowRng).Value,1) = "P" Then
         wbThis.Sheets("Sheet1").Range(A:rowRng).Copy
         wbTarget.Sheets("Sheet1").Range(E:targetRowRng).PasteSpecial
      End If
   Next
Next

然而,正如您可能已经注意到的那样,我没有编写代码,我希望它以“:”结束并复制其中的所有内容(包括“P”但不包括“:”)..我不知道如何编码,我希望得到你的帮助。

由于PXXXxX的长度不同 - 例如:

If Left((A:rowRng).Value,1) = "P" Then
   If Left((A:rowRng).Value,5) = ":" Then
不幸的是,

无法运作。

问题2 现在没有办法确定wb这个范围A6 - >的所有单元格。每次有新文档时都会填充A27,因为我不想要不必要的复制/粘贴,我希望脚本停止复制/粘贴PXXXxX:如果脚本没有找到P in {{{ 1}}。 (如果没有P,则没有PXXXxX,然后单元格将为空,因此是多余的 - 同样适用于同一列中其下的所有单元格) 我想你可以使用else将其编码到上面的If语句中:

A16

虽然看起来并不正确,但我对此并没有太多了解。

2 个答案:

答案 0 :(得分:1)

尝试使用此代码。根据需要更改对象名称。这将遍历每个单元格直到A27,检查“P ...:”组合。

Sub Test()

Dim wbThis As Workbook
Dim wbTarget As Workbook

Set wbThis = Workbooks("Workbook1.xlsx") 'change as needed
Set wbTarget = Workbooks("Workbook2.xlsx") 'change as needed

Dim wsThis As Worksheet
Dim wsTarget As Worksheet

Set wsThis = wbThis.Sheets("Sheet1")
Set wsTarget = wbTarget.Sheets("Sheet1")

Dim rowRng As Integer
Dim targetRowRange As Integer

targetRowRange = 14

For rowRng = 6 To 27

    With wsThis

        If Left(.Cells(rowRng, 1), 1) = "P" Then

            Dim iPos As Integer
            iPos = InStr(1, .Cells(rowRng, 1), ":")

            wsTarget.Cells(targetRowRange, 5).Value = Left(.Cells(rowRng, 1), iPos - 1)

            targetRowRange = targetRowRange + 1

        End If

    End With

Next

End Sub

答案 1 :(得分:0)

If Right((A:rowRng).Value,1) = ":" Then

你想要什么?或者,一种解决方案可能是用"",例如

替换字符
Replace (Replace ( your_string, "P", ""), ":","")