可以在A列中說:第2行,我有45分,B列中有我得到那個分數的人數。然後我想要做的是在D列上輸出X分數的時間。 X = repitition。MS Excel:宏查詢陣列
在這個例子中5個人得了45分,所以在D列我想插入5分45.然後我在A列中看到:Row2 3人得到了46分,然後在最後45分DI要追加46 3次..等等。
有人能告訴我如何做到這一點嗎?
可以在A列中說:第2行,我有45分,B列中有我得到那個分數的人數。然後我想要做的是在D列上輸出X分數的時間。 X = repitition。MS Excel:宏查詢陣列
在這個例子中5個人得了45分,所以在D列我想插入5分45.然後我在A列中看到:Row2 3人得到了46分,然後在最後45分DI要追加46 3次..等等。
有人能告訴我如何做到這一點嗎?
在這裏你去:
Sub test_scores_repitition()
'run with test scores sheet active
r = 1
dest_r = 1
Do While Not IsEmpty(Range("a" & r))
If IsEmpty(Range("b" & r)) Then Range("b" & r).Value = 0 'if there's no quantity listed for a score, it assumes zero
For i = 1 To Range("b" & r).Value
Range("d" & dest_r).Value = Range("a" & r).Value
dest_r = dest_r + 1
Next i
r = r + 1
Loop
End Sub
非常感謝! –
沒問題〜:) – chrono
宏答案:
Sub WriteIt()
Dim lrow As Long
Dim WriteRow As Long
Dim EachCount As Long
Dim ReadRow As Long
' find last in list of numbers
lrow = Range("A1").End(xlDown).Row
'start at 2 because of headers
WriteRow = 2
ReadRow = 2
While ReadRow <= lrow
For EachCount = 1 To Cells(ReadRow, 2)
'repeat the number of times in column B
Cells(WriteRow, 4) = Cells(ReadRow, 1)
'the number in column A
WriteRow = WriteRow + 1
Next
ReadRow = ReadRow + 1
'and move to the next row
Wend
'finish when we've written them all
End Sub
有可能用一個公式,只是並不推薦使用,因爲它看起來auful,並且將是困難解釋。它使用Microsoft公式來計算上述數據中唯一項目的數量,一旦它計算出它應該寫入上述數字的數字,它就會移至下一個數字。該公式不知道停止的位置,並且在數據用完時將放入0
。
在D2,把=A2
在D3,並複製下來,把
=IF(COUNTIF($D$2:D2,OFFSET($A$1,SUM(IF(FREQUENCY($D$2:D2,$D$2:D2)>0,1)),0))<OFFSET($B$1,SUM(IF(FREQUENCY($D$2:D2,$D$2:D2)>0,1)),0),OFFSET($A$1,SUM(IF(FREQUENCY($D$2:D2,$D$2:D2)>0,1)),0),OFFSET($A$1,SUM(IF(FREQUENCY($D$2:D2,$D$2:D2)>0,1))+1,0))
哇!這個公式真的很難理解,但它的工作原理! +1 –
@Sean Cheshire,謝謝。 –
原諒在Excel工作表中的拼寫。 :[ –
不確定使用Excel公式很容易嗎?你看過'REPT()'函數嗎? –