簡體   English   中英

如何將一個工作表中的單元格復制到另一個工作表中,正確的行

[英]how to copy a cell from one worksheet to another, to the correct row

我有一個csv文件(這是從打印機導出的文件),可讀性很差,並且還包含很多不需要的信息。 所以我寫了一個VBA宏將相關數據復制到第二張紙上。

使用vba代碼,我正在工作表1中查找要復制到工作表2的特定文本短語。這些文本短語不在工作表1的特定列中,因此我必須仔細閱讀整個工作表1。正在工作,但是我有一個麻煩的問題,這就是為什么我需要您的幫助。

就我而言,我正在尋找短語“ Druckbeginn =“(這是德語,表示Printstart),后跟一個unix時間碼。 在大多數行中,短語“ Druckbeginn =“存在,但在某些行中則不存在。

因此,讓我們在第1行,第2行和第4行說該短語存在,但在第3行則不存在。 問題是,我的vba代碼將單元格從工作表1復制到工作表2,但它復制到行1,2和3而不是行1、2和4。

如果您需要我的csv文件和/或完整的vba代碼,請告訴我。

這是我的代碼:

w1.Activate
For Each r In Intersect(Range("A:AS"), ActiveSheet.UsedRange)
   v = r.Value
   If InStr(v, "Druckbeginn =") > 0 Then
      r.Copy w2.Cells(B, 3)
      B = B + 1
   End If
Next r

解決方案:此代碼對我有用:

' Insert variable declarations etc.
Set w1 = ThisWorkbook.Sheets("Sheet1")
Set w2 = ThisWorkbook.Sheets("Sheet2")
For Each r In Intersect(w1.Range("A:AS"), w1.UsedRange)
    If InStr(r.Value, "Druckbeginn =") > 0 Then
        ' The important change is in the next line
        w2.Cells(r.Row, 3).Value = r.Value
    End If
Next r

結果:(在獲取樣本數據之前,看起來更加簡單)

表格1:

在此處輸入圖片說明

工作表2(運行宏后):

在此處輸入圖片說明

解決方案的解釋:在您的代碼中,當找到字符串時,只會將B遞增,導致所有復制的單元格都復制到結果表中列的頂部,而不是源數據中的相應行。 相反,我們可以簡單地引用源數據的.Row屬性。 r.RowFor Each循環中當前r元素的行號,並且由於您希望單元格在ws2中位於相同的行號中,因此可以使用相同的行號。

代碼改進的說明:

(1) For Each r In Intersect(w1.Range("A:AS"), w1.UsedRange) :為了避免混淆.Range指的是哪個工作表,我添加了w1. 說明符。

(2) If InStr(r.Value, "Druckbeginn =") > 0 Then :不用分配v = r.Value您可以直接在If子句中使用r.Value ,因為您以后不再使用它。

(3) w2.Cells(r.Row, 3).Value = r.Value :復制和粘貼操作需要在工作表之間跳轉,這在性能上比通過.Value屬性直接為單元格分配值更糟糕。當您瀏覽大文件時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM