我正在尝试在Excel工作表中格式化数组。 goel有点与SUMIF
相反,对于我的表的每个元素,它的编号为x
,我想在另一个表中创建此元素的x
行。
由于屏幕截图比长对话框更明确,因此我想要实现:
如果果实出现0
,则不应在GOAL
表格中显示。
我的Excel工作表中写有Base
和Goal
表,并以此公式为例,Current Result
表格使用以下公式编写:
法语版(我正在使用法语Excel):
{=SIERREUR(
INDEX(
B$5:B$100;
PETITE.VALEUR(
SI(
SI(
($C$5:$C$100>0);
VRAI;
FAUX
);
LIGNE(B$5:B$100)-LIGNE(B$5)+1
);
LIGNES(B$5:B5)
)
);
""
)}
英文版(尚未测试过):
{=IFERROR(
INDEX(
B$5:B$100;
SMALL(
IF(
IF(
($C$5:$C$100>0);
TRUE;
FALSE
);
ROW(B$5:B$100)-ROW(B$5)+1
);
ROWS(B$5:B5)
)
);
""
)}
你能给我一些关于如何实现这一目标的提示吗?我有没有办法不使用VBA而只使用公式?
注意: 我被要求在工作中这样做,我一生中从未使用过Excel,对VBA一无所知。这就是为什么我有点迷失这个任务。我通常用Python或C ++编写代码。我正在使用Excel 2010。
答案 0 :(得分:0)
我设法使用VBA实现我的目标,这是我使用的代码:
Public Sub GenerateTable()
' This routing will copy rows based on the quantity to a new sheet.
Dim rngSinglecell As Range
Dim rngQuantityCells As Range
Dim intCount As Integer
Dim countCell As Integer
' Set this for the range where the Quantity column exists. This works only if there are no empty cells
Set rngQuantityCells = Sheets("Feuil3").Range("C5", Sheets("Feuil3").Range("C5").End(xlDown))
countCell = 4
For Each rngSinglecell In rngQuantityCells
' Check if this cell actually contains a number
If IsNumeric(rngSinglecell.Value) Then
' Check if the number is greater than 0
If rngSinglecell.Value > 0 Then
' Copy this row as many times as .value
For intCount = 1 To rngSinglecell.Value
' Copy the row into the next emtpy row in sheet2
countCell = countCell + 1
Intersect(Range(rngSinglecell.Address).EntireRow, Columns("B:D")).Copy Destination:=Sheets("Feuil3").Range("G" & CStr(countCell))
Next
End If
End If
Next
End Sub
这是输出:
基于Matt在duplicate中的回答的解决方案。