簡體   English   中英

如何在 VBA function 中使用 activecell 行和列進行填充?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM