2016-11-10 31 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)