2014-12-02 126 views
0

對於這個問題的大範圍和我可能創建的任何模糊情況,我都會提前道歉。我想要創建一個宏,它可以在表格中生成一個宏,並且如果在該行的不同列中滿足特定條件而將另一個單元格值複製到另一個表中的表中。Excel VBA:將表格中的單元格值複製到另一張表上的表格,條件爲

基本上,如果條件等於表A中列C中的X,則將表A中列B的數字複製到表B中的列B.存在2k +行。表A中的列C始終爲空或等於X,並且表A中的列B從不爲空,直到列表結束。表B中的列B是空白的,並且行數將由從表A複製到它的行的數量確定。

我確定這將需要一個循環,但是對於VBA來說是新的,我是不確定我需要哪種循環類型以及循環邏輯應該如何查看。我懷疑Do Until是最容易的,因爲表A中沒有空白,直到列表結尾。目前爲止我的最佳猜測:

Dim wsPAPS As Range 
Dim wsPAVA As Range 
Dim wsVNPN As Range 
Dim wkATTR As Workbook 

Set wkATTR = Workbooks("PARCEL_ATTR_MACRO-TEST.xlsm") 
Set wsPAPS = Sheets("PARCEL_ATTR_BASE").Range("PARCELSTAT") 
Set wsPAVA = Sheets("PARCEL_ATTR_BASE").Range("APO_VA_Properties_Vacant_Abandoned") 
Set wsVNPN = Sheets("VA_NAME").Range("L1_PARCEL_NBR") 

Do 
    If wsPAVA = "Vacant/Abandoned" Then 
     wsVNPN = wsPAPS 
    End IF 
Loop Until wsPAPS = "" 

請注意,此代碼實際上並不工作;我被告知我有一個沒有做的循環,不知道爲什麼。

我會非常感謝任何幫助。謝謝,所有!

UPDATE帶有Range變量的意圖是試圖使引用特定列變得容易,但我得到了一個應用程序定義或對象定義的錯誤。

+0

您需要使用DO WHILE(條件),然後在最後說,「循環」 http://www.excelfunctions.net/VBA-Loops.html – peege 2014-12-02 23:41:16

回答

1

請遵循以下步驟,

  • 通過其範圍(cSheetName)定義輸出地址表/工作簿
  • 通過其範圍定義源工作表/工作簿(cFileLocWS)

  • 取要執行的操作的行數可以高達100萬行。

  • 添加循環不一定會做一個簡單的「For」會做。

'開放日爲 - 山口:S

' 現有邏輯== $ T $ 1-I(n)的1
「$ T $ -1 - 月 - 日的端

lRowCount = Sheets(cSheetName).Cells(Rows.Count, "I").End(xlUp).Row 
For rowIndex = 2 To lRowCount 
    mDate = Sheets(cFileLocWS).Range(cMonthEndDate).Value 
    strtDate = Sheets(cSheetName).Cells(rowIndex, "I").Value 
    lResult = (mDate - strtDate) + 1 
    Sheets(cSheetName).Cells(rowIndex, "S").Value = lResult 
Next rowIndex 

希望這有助於。

1

嘗試這種情況:

假設片材的名稱是:「表A」和「表B」和B列總是有一些數據。

Sub Copy() 
    Dim lr As Long, r As Long 
    Set Sh1 = ThisWorkbook.Worksheets("TableA") 
    Set Sh2 = ThisWorkbook.Worksheets("TableB")   

    lr = Sh1.Cells(Rows.Count, "B").End(xlUp).row 
    x = 2 
    For r = 2 To lr 
     If Range("C" & r).Value = "X" Then 'Evaluate the condition. 
      Sh2.Range("B" & x).Value = Sh1.Range("B" & r).Value 'ColumnB 
      x = x + 1 
     End If 
    Next r 
    Sh2.Select 
End Sub 
+0

爲什麼你選擇的表? – peege 2014-12-03 00:44:24

+0

第一次選擇不是必需的,但第二次只是爲了顯示結果。 – SkyMaster 2014-12-03 01:20:01

+0

感謝您的建議,SkyMaster。如果您願意,我有幾個問題:我在lr = Sh1.Cells(Rows.Count,「B」)上得到運行時(類型不匹配)錯誤。對此有何想法?另外,是否同時命名錶和表同名(即表名PARCEL_ATTR_BASE,表名PARCEL_ATTR_base)是否存在問題? – MattCoats 2014-12-03 14:52:58

相關問題