2014-01-06 93 views
0

可以在A列中說:第2行,我有45分,B列中有我得到那個分數的人數。然後我想要做的是在D列上輸出X分數的時間。 X = repitition。MS Excel:宏查詢陣列

在這個例子中5個人得了45分,所以在D列我想插入5分45.然後我在A列中看到:Row2 3人得到了46分,然後在最後45分DI要追加46 3次..等等。

有人能告訴我如何做到這一點嗎?

enter image description here

+0

原諒在Excel工作表中的拼寫。 :[ –

+0

不確定使用Excel公式很容易嗎?你看過'REPT()'函數嗎? –

回答

1

在這裏你去:

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 
+0

非常感謝! –

+0

沒問題〜:) – chrono

1

宏答案:

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)) 
+0

哇!這個公式真的很難理解,但它的工作原理! +1 –

+0

@Sean Cheshire,謝謝。 –