[英]How to use activecell row and column in VBA function with filldown?
我寫了一個 function 它將使用分隔符連接 function 所在單元格左側的所有單元格。 我的代碼是:
Public Function Concat_To_Left(delim As String)
Dim C, R As Long
Dim S As String
Dim Cell As Range
Set Cell = ActiveCell
C = Cell.Column
R = Cell.Row
S = Cells(R, 1).Value
For i = 2 To (C - 1)
S = S & delim & Cells(R, i).Value
Next i
Concat_To_Left = S
End Function
如果計算單行,則此代碼有效。 我遇到的問題是,當我將 function 填充到列的底部時(通過雙擊 excel 表中的單元格的右下角,cell.row 和 cell.column 似乎是從第一個單元格中保存的)。 這導致具有此 function 的所有單元格具有與被填充的單元格相同的值。
屏幕更新、事件和警報都是開啟/真實的。 Application.Calculation 設置為 xlCalculationAutomatic
誰能告訴我如何使這個 function 在公式填寫的每個單元格上工作,為每個單元格使用正確的行和列(在填寫時該列並不重要)?
Scott 關於使用 TEXT join 的評論作為我試圖完成的工作的一種解決方法。
=TEXTJOIN(", ",TRUE,B2:INDEX(2:2,COLUMN()-1))
他為 TEXTJOIN 提供的自定義代碼的鏈接也非常好: MS Excel - Concat with a delimiter
添加Application.Volatile
並沒有使我的 function 工作。 我沒有找到一種方法讓我的 function 在不需要范圍參數的情況下使用填充,所以 TEXTJOIN 是下一個最佳選擇,現在回答我的問題。
編輯:
我寫了這個宏來代替 function:
Private Sub Concat_To_Left()
Dim C, R, LR As Long
Dim Cell As Range
LR = ActiveWorkbook.ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
C = ActiveCell.Column
R = ActiveCell.Row
For Each Cell In ActiveWorkbook.ActiveSheet.Range(Cells(R, C), Cells(LR, C))
Cell.Value = Cells(Cell.Row, 1).Value
For i = 2 To (C - 1)
Cell.Value = Cell.Value & "|" & Cells(Cell.Row, i).Value
Next i
Next Cell
End Sub
這個使用“|” 作為分隔符,從活動單元格向下填充到 lastrow 與左側的每個單元格接觸,包括空白。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.