iT邦幫忙

0

EXCEL VBA 如何不用迴圈編寫項次

以下是我目前的寫法,項次編寫在A欄位,不能重複值,且中間數值有刪減過不能用cells()=row-1的方式來編寫項次

我的經驗不是很多,猜測是因為迴圈降低了我的執行速度,所以想了解有沒有不用迴圈就能達到一樣目的的方式,如果有其他方式能提升速度也可以,感激不盡!

還是range能否用於加法運算,我本來想法: range(A1:A10)+某特定數值
但是range好像不能這樣使用...
還請這方面的達人指導一下,謝謝!


FinalRow = .Range("A1").End(xlDown).Row
    'N代表我有N個要編寫的項次
    For N = 1 To r2.Rows.Count
                        
        .Cells(FinalRow + N, 1) = .Cells(FinalRow + N - 1, 1) + 1
                        
    Next N
看更多先前的討論...收起先前的討論...
slime iT邦大師 1 級 ‧ 2020-01-20 17:57:41 檢舉
直接對選好的範圍改用 max 或 application.max 試試看?

下一個序號就是 max(範圍) + 1 .
但是這樣不是一樣要透過迴圈嗎? 不是很懂您的意思
可能我沒表達清楚,我有N個要編寫的項次,剛剛才修改我的發問
slime iT邦大師 1 級 ‧ 2020-01-20 18:14:21 檢舉
可以直接畫一張樣本來看看嗎?
slime iT邦大師 1 級 ‧ 2020-01-20 18:17:39 檢舉
如果
A2 = 3 (曾經有 1 跟 2 但刪掉了)
A3 = 4
A4 = 6 (曾經有 5 但刪掉了)
A5 = 7

則 A1 = MAX(A2:A5) 就會得到 7 , 就是目前使用過最大的序號.
再把 A2:A5 改寫成 VBA 的 "從A2到A2往最右邊有資料的那欄"
問題解決了...感謝啦 還得再去忙一下,謝謝願意幫忙!

1 個回答

0
paicheng0111
iT邦高手 1 級 ‧ 2020-01-20 18:30:25
最佳解答

直接設定整塊Range的formula屬性,然後再把公式轉換為值。

With .Range(.Cells(FinalRow + 1, 1), .Cells(FinalRow + N, 1))
    .FormulaR1C1 = "=R[-1]C+1"
    .Value = .Value
End With

感謝大大,我上次的疑問也是你解答的 太強了!
是說 .FormulaR1C1 = "=R[-1]C+1"
R跟C 是甚麼意思 我不是很懂,但是按照你的邏輯去打確實解決了我德問題。
可以稍微解釋一下嗎~感謝啦!

R = Row
C = Column
Excel有兩種座標體系,A1座標系與R1C1座標系。
據說,R1C1座標系是繼承自Lotus 1-2-3。
R1C1 = A1
RC = 目前儲存格
R[1]C = 目前儲存格往下一格
RC[1] = 目前儲存格往右一格
R[-1]C = 目前儲存格往上一格
RC[-1] = 目前儲存格往左一格

瞭解了,非常感謝哦!

我要發表回答

立即登入回答