2011-08-25 175 views
0

我有一個表格,它具有的行數是未知的。每次用戶將一個項目輸入到此表格的列A中時,我都希望表格中的其他列動態獲取填入剛剛在列A中輸入的項目的公式。EXCEL/VBA - 將公式動態插入單元格

我不想簡單地將公式複製到列B,C,D等公式中,因爲工作表中的行數未知。

有沒有任何有效的方法來做到這一點?

我在VBA的onCalculate和onChange事件中編寫代碼的嘗試看起來非常低效或者導致了永久循環。

+0

得到它.... 私人小組Worksheet_Change(BYVAL目標作爲範圍) 如果Target.Column = 3然後 Application.ScreenUpdating =假 應用。計算= xlCalculationManual Sheet2.Cells(Target.Row,5).Formula = 「= XXX(」 「XXX」 「」 &Target.Address& 「E5)」 Application.ScreenUpdating =真 Application.Calculation = xlCalculationAutomat ic End If End Sub – stan

+0

如果您願意,您可以自己回答。 –

回答

1

下面是一個示例,將在空白公式填B,C和d時,您的選擇更改:

在的ThisWorkbook:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    Dim oSh As Worksheet, oUsed As Range, oRng As Range 

    Set oSh = Sh 
    Set oUsed = oSh.UsedRange.Columns("B") 

    'only add to blank formulas 
    Set oRng = oUsed.Find("", LookIn:=xlFormulas) 

    Do While Not oRng Is Nothing 
     'B formula 
     oRng.Offset(, 0).FormulaR1C1 = "=RC[-1] + 100" 
     'C formula 
     oRng.Offset(, 1).FormulaR1C1 = "=RC[-1] + 100" 
     'D formula 
     oRng.Offset(, 2).FormulaR1C1 = "=RC[-1] + 100" 
     Set oRng = oUsed.Find("", oRng, xlFormulas) 
    Loop 
End Sub 

這部作品工作表在工作簿中,因此您可能需要測試您所在的工作表。

+0

我會盡全力檢查在正確的列中發生的變化,以加速Excel。將你的代碼封裝在If Not Intersect(Target,oUsed)是Nothing Then .... End If – RonnieDickson

+0

@RonnieDickson - 我想要做類似的事情,但Target只指定當你從一個單元格移動到另一個單元格時目標單元格是什麼。所以如果我從單元格A1移動到單元格B25,Target的地址是B25,因此它不會出現在相交處......不知道如何只檢查A列中的更改。加速它的另一種方法是禁用屏幕更新,但這可能是矯枉過正。 – transistor1

2

如果您使用的是Excel 2007或Excel 2010,請將列表範圍定義爲列表會自動做到這一點!
的最佳宏是沒有宏

+0

+1這是處理此問題的最佳方法 – JMax