2016-03-09 75 views
0

因此,我有workbook1(wbThis)和workbook2(wbTarget),並在wbThis'表單中填充了一些單元格。這些細胞具有的格式:使用VBA複製部分長度和內容都不相同的單元格

A6

P2123:開始程序

A7

P1234:代碼

A8

P4456-6:文檔

|

V

(向下箭頭)

A27

它繼續這樣。現在我有兩個問題。

問題1我想複製PXXXxX:(小x就像任意總和 - 或_或> etc等)代碼到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 

將無法​​正常工作,很遺憾。

Problem2現在沒有辦法到wbThis'範圍A6的所有細胞 - >A27將充滿每次有新的文檔,因爲我不想不必要的複製/粘貼我想腳本停止複製/粘貼PXXXxX:如果腳本在例如A16中找不到P。 (如果沒有P,那麼沒有PXXXxX,那麼這個單元格將是空的,因此是冗餘的 - 這同樣適用於同一列中的它下面的所有單元格) 我想你可以使用else代碼來使用上面的If語句:

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

雖然這看起來不正確,但我對此沒有多少發現。

回答

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 
+0

Huzzah!有用!你能簡要地解釋一下'InStr'的功能。因爲我無法從代碼中弄清楚它,谷歌搜索結果並不能真正幫助我。謝謝。 –

+0

@ this.guy - 請參閱[MSDN Instr](https://msdn.microsoft.com/en-us/library/8460tsh1(v = vs.90).aspx)文章。 –

0

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

是你想要的嗎?或者,一種解決方案可能是用「」替換字符,例如,

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

不幸的是,不會工作,因爲「:」不是最右邊的字符。 –

相關問題