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

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

A6

P2123:开始程序

A7

P1234:代码

A8

P4456-6:文件

|

V

(向下箭头)

A27

它继续这样下去。 现在我有两个问题。

问题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现在没有办法让wbThis范围的A6 – > A27所有单元格都会在每次有新文档时被填充,因为我不希望不必要的复制/粘贴,我希望脚本停止复制/粘贴PXXXxX :如果脚本在例如A16找不到P。 (如果没有P,那么没有PXXXxX,那么这个单元格将是空的,因此是多余的 – 这同样适用于同一列下的所有单元格)我猜你可以用else来编码上面的If语句:

 ElseIf Pass 'Any code here that return to the rest of the script 

这看起来不正确,我还没有发现很多关于这个。

试试这个代码。 根据需要更改对象名称。 这将遍历每个单元格直到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 

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

成为你想成为的人? 或者,一种解决scheme可能是用“”replace字符,例如

 Replace (Replace ( your_string, "P", ""), ":","")