我正在撰寫一個 Excel (2013) 函式,該函式將采用 1x2n 范圍的單元格并回傳 1xn 個偶數/奇數索引單元格向量。所以如果我在單元格 A1:F1 中輸入一些數字,就像這樣
| 一種 | 乙 | C | D | 乙 | F | |
|---|---|---|---|---|---|---|
| 1 | 43 | 23 | 67 | 12 | 6 | 1 |
并將這個函式放在 A2:C2 中,它應該回傳
| 一種 | 乙 | C | D | 乙 | F | |
|---|---|---|---|---|---|---|
| 1 | 43 | 23 | 67 | 12 | 6 | 1 |
| 2 | 23 | 12 | 1 |
我寫了這樣的東西,但它不起作用(#Arg!錯誤)
Public Function Even(X As Variant) As Variant
Dim N As Integer
N = UBound(X)
ReDim Y(N / 2)
For i = 1 To N
If i Mod 2 = 0 Then
Y(i / 2) = X(i)
End If
Next i
Even = Y
End Function
在@BigBen 評論后,我將代碼更改為
Public Function Even(X As Variant) As Variant
Dim N As Integer
N = Application.CountA(X.Value)
ReDim Y(N / 2)
For i = 1 To N
If i Mod 2 = 0 Then
Y(i / 2) = X(i)
End If
Next i
Even = Y
End Function
它現在幾乎回傳了我想要的東西,它回傳:
| 一種 | 乙 | C | D | 乙 | F | |
|---|---|---|---|---|---|---|
| 1 | 43 | 23 | 67 | 12 | 6 | 1 |
| 2 | 0 | 23 | 12 | 1 |
0 從哪里來
uj5u.com熱心網友回復:
這是一種可能性。EVEN是電子表格函式,因此最好使用不同的名稱。EveryOther看起來很自然,但是有了這樣的名字,為什么不讓它足夠靈活以在需要時選擇賠率呢?一個很好的方法是創建一個可選的布爾引數來控制是否選擇偶數或奇數索引:
Function EveryOther(Rng As Range, Optional Evens As Boolean = True) As Variant
Dim i As Long, j As Long, n As Long
Dim cell As Range
Dim returnVals As Variant
n = Rng.Cells.count
ReDim returnVals(1 To n)
i = 0
j = 0
For Each cell In Rng.Cells
i = i 1
If i Mod 2 = IIf(Evens, 0, 1) Then
j = j 1
returnVals(j) = cell.Value
End If
Next cell
ReDim Preserve returnVals(1 To j)
EveryOther = returnVals
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/370741.html
下一篇:如何更快更小地回圈單元格范圍
