2017-04-13 48 views
0

背景:使用Excel VBA基於用戶輸入的數據來更新主列表

我與下面片

  • 萬事達工作表一個工作簿:柱A安裝了帳戶號碼
  • 多個工作表(13)代表每個帳戶處理器

每天主工作表和處理器工作表均填入新帳戶。

每個工作表少爺,和13個人的處理器有一個欄目:F

隨着處理器工作,他們更新F列與地位。在所有工作表中的列A是帳戶號碼

我想要做的是有一個VBA,開始在主站的A1搜索每個單元格(a1,a2,a3 ...),直到沒有更多的帳號對列一個處理器單獨表格在基於處理器表格的列F中的文本找到主表的相應列A的更新列F中的匹配時發現匹配

其如此簡單。

由於某種原因,我無法將自己的頭圍繞在這個VBA的東西上,所有的例子都更加複雜,我似乎無法讓它們工作。

感到壓力與我的第一VBA郊遊和真的可以使用一些幫助

+2

發佈您已編寫的代碼(工作或不!)。 – Jeeped

+0

我可以在早上,但我現在在家裏的電腦 - 將不得不等待,直到我開始工作 – mbillion

+0

@Jeeped你是對的這個問題看起來離題爲VBA代碼,我的答案開始於一個公式,我認爲「簡單」,但隨後OP說他已經擁有了它,但想要VBA。那麼....:D –

回答

1

也許有點難看,但你可以用這樣一個公式來完成,在Master!F1

=IFERROR(VLOOKUP(A1,Processor1!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor2!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor3!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor4!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor5!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor6!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor7!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor8!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor9!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor10!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor11!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor12!A:F,6,FALSE), 
    IFERROR(VLOOKUP(A1,Processor13!A:F,6,FALSE), 
    ""))))))))))))) 

然後複製/粘貼在主表的F欄中。

VBA

好了,廚師想它VBA,可能是因爲他(她)doesnt't希望公式減緩與工作簿工作。那麼,我會在VBA中設置F列的公式,然後修改這些值。

Sub ColumnF() 
    Application.EnableEvents = False: Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual 
    On Error GoTo Cleanup 
    With Worksheets("Master") 
     With .Range("A1", .Cells(.Rows.count, 1).End(xlUp)).offset(, 5) 
      .Formula = "=IFERROR(VLOOKUP(A1,Processor1!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor2!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor3!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor4!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor5!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor6!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor7!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor8!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor9!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor10!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor11!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor12!A:F,6,FALSE)," & _ 
       "IFERROR(VLOOKUP(A1,Processor13!A:F,6,FALSE)," & _ 
       """"")))))))))))))" 

      .Value = .Value ' remove formula and freeze value 
     End With 
    End With 
Cleanup: 
    Application.Calculation = xlCalculationAutomatic: Application.ScreenUpdating = True: Application.EnableEvents = True 
End Sub 

這應該比在A列的所有單元上的VBA循環更好更快;首先是因爲它使用Excel的內置功能而不是VBA循環,其次是因爲它最大限度地減少了VBA和Excel之間的交換。

+0

所以這是我的修復,以及我目前的工作方式。這是醜陋的,但它的工作。我參加了一個關於我建立的數學模型的會議,其中一位經理非常反對這種方法,並告訴我用VBA編碼。 – mbillion

+0

@mbillion我用相同的公式添加了相應的VBA,但freezinf的值。請考慮理由,我認爲使用這個工作公式比使用VBA循環更好。 –