2016-11-10 70 views
1

右 - 這是一個棘手的詞組,因此我將使用幾個圖像來幫助我。Excel公式根據其他變量空出範圍

在A欄和B欄中列出了球隊名稱和每個球隊的球員人數。

D列包含所需的輸出。

我需要一個公式,將其插入到單元格D2中,並將其拖至列B的總數中,以返回團隊名稱 - 但至關重要的是,以允許其下的多個行返回空白。下面的空行數量實際上等於1 - 該團隊中的玩家數量。

Excel formula to space out range depending on other variable

我已經給它一些思考,但不能拿出一個合適的公式。有任何想法嗎?

也歡迎提出更好的標題建議。

+0

你可以使用VBA呢? – NavkarJ

+0

我不會反對它,我想,只是認爲一個公式可能會更好。 –

+1

我認爲一個公式,如果可能的話,會太​​複雜。相反,去一個VBA功能。 – NavkarJ

回答

1

以下VBA函數將完全按照您的要求進行操作。讓我知道它的任何部分是不是很清楚。

Sub teamRows() 

Dim colDRowNumber As Integer 
Dim i As Integer 
Dim teamName As String 
Dim numberOfRows As Integer 
Dim HowFar As Integer 

' Loop through the teams in column A 
HowFar = Application.WorksheetFunction.CountA(Range("A:A")) 

' Variable to keep count of rows in column D 
colDRowNumber = 2 

For i = 2 To HowFar 

    ' Get the team's name and number of rows 
    teamName = Range("A" & i).Value 
    numberOfRows = Range("B" & i).Value 

    ' Fill in the team's name in column D 
    Range("D" & colDRowNumber).Value = teamName 

    ' Increase the row number by the number of empty rows required 
    colDRowNumber = colDRowNumber + numberOfRows 

Next i 

End Sub 
+0

看起來不錯,爲什麼colDRowNumber變量設置爲'2'? –

+0

從第二行開始,團隊名稱及其相應的編號從第二行開始。 – NavkarJ

+0

colDRowNumber也從第二行開始,因爲您從第二行開始輸入團隊名稱。 – NavkarJ

0

一個複雜但短暫的嘗試 - 我想避免循環。下面

例適用於A2到A20

y = Split(Join(Application.Transpose(Application.Evaluate("=index(substitute(substitute(substitute(REPT(A2:A20 &"","",B2:B20),A2:A20&"","",""X"",1),A2:A20,""""),""X"",A2:a20),0,1)")), ","), ",") 
[d2].Resize(UBound(y)) = Application.Transpose(y)