2017-09-15 26 views
1

我會在前言中說我對VBA非常陌生,今天在uni以後沒有使用它之後有效地重新啓動。如何重新格式化VBA中的二維數組以使每個項目之間具有兩個「0」值?

我創建了一個二維數組Answers(),其中包含多個回答者(Resp)到若干問題(Ques)的答案。

這裏的陣列中的第一行的一個示例:

[3,3,3,2,1,2,2,3,1,3,1,2] 

我需要這個與每個值之間的兩個0值原始數組中格式化爲一個新的數組,並在最後,使第一行結束這樣的:

[3,0,0,3,0,0,3,0,0,2,0,0,1,0,0,2,0,0,2,0,0,3,0,0,1,0,0,3,0,0,1,0,0,2,0,0] 

找遍了周圍類似的例子,發現一些接近,但我無法弄清楚如何使它在每一個步驟讀取原始數組正確的值for循環:

Dim Resp As Integer 
Dim Ques As Integer 
Resp = 200 
Ques = 12 

Dim Answers() As Integer 
ReDim Answers(1 to Resp, 1 to Ques) As Integer 

Dim lastIndex As Integer 
lastIndex = Ques * 3 

Dim Answers_Long() As Integer 
ReDim Answers_Long(1 To Resp, 1 To lastIndex) As Integer 

For r = 1 To Resp 
    For i = 1 To lastIndex Step 3 
     Answers_Long(r, i) = Answers(r, CInt(i/3)) 
     Answers_Long(r, i + 1) = 0 
     Answers_Long(r, i + 2) = 0 
    Next i 
Next r 

如果你對我如何可以改變行任何提示:

Answers_Long(r, i) = Answers(r, CInt(i/3)) 

正確讀取從Answers()這將是非常讚賞的數據。

+0

我認爲這個問題通過使用已經解決Application.WorksheetFunction.RoundUp()函數。 – Braitaq

回答

0

For i = 1 To lastIndex Step 3內部,變量i從1開始,並在循環的每次迭代時遞增3。也就是說,它取值爲1,4,7,10,13,16等。

這些值是而不是可以被3整除(因爲序列從1開始而不是從0開始),所以當你除以i 3,則結束與分數值等0.3333,1.3333,2.3333,3.3333等

幸運的是,CInt()確實圓形這樣的分數爲最接近的整數,以便CInt(i/3)將採取值0,1,1,2 ,3等等。但是,您仍然遇到問題:由於您聲明Answers()數組使用基於1的索引(使用1 to Ques),因此每行的第一個元素的索引不是0,但是是1.

因此,您需要將CInt()的輸出添加1以實際獲得正確的索引。 (這是基於0的數組索引會實際導致更簡單的代碼的情況之一。)


你可以爲你的現有代碼的變化最小,以得到它的工作將是:

Answers_Long(r, i) = Answers(r, 1 + CInt(i/3)) 

或者,你也可以避免需要用圓分工的結果:

Answers_Long(r, i) = Answers(r, 1 + CInt((i - 1)/3)) 

在這種情況下,你應該能夠擺脫CInt()完全的:

Answers_Long(r, i) = Answers(r, 1 + (i - 1)/3) 

當然,另一種選擇是重寫代碼完全使用基於0的數組索引,在這種情況下,它會是這個樣子:

Dim Answers() As Integer 
ReDim Answers(0 to Resp-1, 0 to Ques-1) As Integer 

Dim TripleQues As Integer 
TripleQues = Ques * 3 

Dim Answers_Long() As Integer 
ReDim Answers_Long(0 to Resp-1, 0 to TripleQues-1) As Integer 

For r = 0 To Resp - 1 
    For i = 0 To TripleQues - 3 Step 3 
     Answers_Long(r, i) = Answers(r, i/3) 
     Answers_Long(r, i + 1) = 0 
     Answers_Long(r, i + 2) = 0 
    Next i 
Next r 
相關問題