我有一個大的Excel文件,我需要完全替換12列中的所有值。VBA列循環
現在,每個單元格中都有一個公式,我需要用我自己的公式替換該公式。
我該如何遍歷所有這些列,知道它在哪一行開始,但不知道最後一行(文件不斷更新)。 「A600000」的破解看起來過度。
我是新來的VBA和一些指導將非常感激。
我有一個大的Excel文件,我需要完全替換12列中的所有值。VBA列循環
現在,每個單元格中都有一個公式,我需要用我自己的公式替換該公式。
我該如何遍歷所有這些列,知道它在哪一行開始,但不知道最後一行(文件不斷更新)。 「A600000」的破解看起來過度。
我是新來的VBA和一些指導將非常感激。
是當前工作表中所有使用的單元格的範圍。
您可以使用ActiveSheet.UsedRange.Rows.Count
和.Columns.Count
來獲取此範圍的高度和寬度。
這裏的命中每一個細胞都在範圍內的非常粗糙的功能:
Sub test()
Dim thisRange As Range
Set thisRange = ActiveSheet.UsedRange
With thisRange
For y = 1 To .Rows.Count
For x = 1 To .Columns.Count
thisRange.Cells(y, x).Value = "Formula here"
Next x
Next
End With
End Sub
但是你想可能是不同的東西,你可以更具體一點嗎?
它是一個= APF($ Jxx,「string1」,「string2」),我想要替換12列(不是一個接一個地)= RDT(「prog.id」,「string1」,$ Jxx)。 – Alexey
你能指望你的列長度相等,還是未知? – wesmantooth
我不完全確定,但我不會指望這一點。 – Alexey
以下將完成您需要做的事情。您只需提供startRow
,.Sheets("Name")
和i
參數。如果列的長度都是相同的,那麼UsedRange
將工作正常,如果沒有隨機單元格的值在您感興趣的列之外或之下,則請在您的代碼中嘗試此操作(在工作簿的丟棄副本上)
Sub GetLastRowInColumn()
Dim ws as Excel.Worksheet
Set ws = Activeworkbook.Sheets("YOURSHEETNAMEHERE")
Dim startRow as long
startRow = 1
Dim lastRow as long
Dim i as long
For i = 1 to 12 'Column 1 to Column 12 (Adjust Accordingly)
lRow = ws.Cells(ws.Rows.Count, i).End(xlUp).Row
ws.Range(ws.Cells(startRow, i), ws.Cells(lRow, i)).Formula = "=Max(1)" 'Sample Formula
Next
End Sub
編輯:固定錯字
的下面功能將建立與變長列的範圍內。使用該功能返回所需的範圍並一次性填充所有相關的單元格。
Function GetVariantColumnRange(MySheet As Excel.Worksheet, _
TopRow As Long, StartColumn As Long, LastColumn As Long) As Excel.Range
Dim topAddress As String
Dim bottomAddress As String
Dim addressString As String
Dim i As Long
For i = StartColumn To LastColumn
topAddress = MySheet.Cells(TopRow, i).Address
bottomAddress = MySheet.Cells(MySheet.Rows.Count, i).End(xlUp).Address
addressString = addressString & ", " & topAddress & ":" & bottomAddress
Next
addressString = Right(addressString, Len(addressString) - _
InStr(1, addressString, ", ", vbBinaryCompare))
Set GetVariantColumnRange = MySheet.Range(addressString)
End Function
用法如下...
Sub Test()
Dim myrange As Range
Set myrange = GetVariantColumnRange(ThisWorkbook.Sheets(1), 1, 1, 12)
myrange.Select 'Just a visual aid. Remove from final code.
myrange.Formula = "=APF($Jxx, "string1", "string2") "
End Sub
你一般不想循環,如果你能避免它(通過使用例如範圍,或specialcells,或濾波器等)。首先要做的事情是:你想用什麼替換公式? – nutsch
請參閱http://stackoverflow.com/q/17896655/11683 – GSerg
什麼是原始公式以及您想用什麼替換它們。根據公式的格式,這可以在VBA之外的幾個步驟中完成,只需使用查找和替換 – Jaycal