我有一個輸入數據和運行計算的表格。這個表有很多列,所以我爲可打印的輸出創建了第二個表。兩個表中的第一列是兩個表共有的唯一值,因此輸出表基本上是一個表,它使用查找函數從每個行的輸入表中提取所需的數據或結果。兩個excel表有一個相同的列,可以從另一個自動更新嗎?
使最終用戶添加和刪除輸入表中的行時,使兩個表中的第一列始終保持相同的最佳方式是什麼?我一直在努力研究一個宏,以便每次將值添加到輸入的第一列時,該值將被複制到輸出表的第一列的最後一行,但是我不知道如何如果一行被刪除,或者添加了重複值,它就會起作用。或者我可以使用一個宏,每次更改輸入列時都會複製並粘貼整個列。我有沒有明顯的解決辦法,我也應該考慮?我對VBA相當陌生,但是一旦我找出哪個方向會讓最終用戶變得最簡單,我想我可以弄清楚。
更新:對於任何其他有類似問題的人來說,這是我最終編寫的代碼,迄今爲止效果很好。 在工作表中:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A:A")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
Call Module1.UpdateOutput
End If
End Sub
模塊1:
Sub UpdateOutput()
' UpdateOutput Macro
'Set active cell for return at end of macro
Dim ActCell As Range
Set ActCell = Selection
' Check Input table has data
If Sheet6.ListObjects("Input").DataBodyRange Is Nothing Then
Exit Sub
End If
'Count Selected Rows of Input and Output Table
Dim RowsIn As Long
RowsIn = Sheet6.ListObjects("Input").ListColumns("UWI").DataBodyRange.Rows.Count
Dim RowsOut As Long
RowsOut = Sheet3.ListObjects("Results").DataBodyRange.Rows.Count
Dim RowsCalc As Long
RowsCalc = Sheet1.ListObjects("IWCP").DataBodyRange.Rows.Count
Application.ScreenUpdating = False
'Delete extra rows from Output Table
Dim lRow As Long
lRow = RowsOut + 1
Do While lRow >= RowsIn + 2
Sheet3.Rows(lRow).Delete
Sheet1.Rows(lRow + 1).Delete
lRow = lRow - 1
Loop
'Select UWI column from input table
Application.Goto Sheet6.ListObjects("Input").ListColumns("UWI").DataBodyRange
Selection.Copy
'Paste UWI column from input table
Sheet3.ListObjects("Results").ListColumns("UWI").DataBodyRange(1).PasteSpecial xlPasteValues
Sheet1.ListObjects("IWCP").ListColumns("UWI").DataBodyRange(1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
'Return to previous cell
Application.Goto ActCell
Application.ScreenUpdating = True
End Sub
TL; DR最好的堆棧溢出問題有一個[** Minimal,Complete,and Verifiable example **](http://stackoverflow.com/help/mcve)。你也應該看看[Help Page](http://stackoverflow.com/help/on-topic)。因此,請縮短您的問題,詢問您需要幫助的特定項目,然後張貼您目前使用的代碼,並在代碼中顯示您卡住的地方。 – Chrismas007
聽起來好像「每次更改輸入列時複製並粘貼整個列」都不會佔用大量時間。 – pnuts
@Xipha您應該在您的原始文章中包含您期望的輸入/輸出的屏幕截圖。 – Chrismas007