Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel formula 在Excel中创建标题、副标题和副标题列表_Excel Formula - Fatal编程技术网

Excel formula 在Excel中创建标题、副标题和副标题列表

Excel formula 在Excel中创建标题、副标题和副标题列表,excel-formula,Excel Formula,我希望在excel中列出标题类型1、子标题类型2和子标题类型3,以及每个标题的后续实例。e、 g Outcome 1 Output 1.1 Activity 1.1.1 Activity 1.1.2 Output 1.2 Activity 1.2.1 Activity 1.2.2 Activity 1.2.3 Outcome 2 Output 2.1 Activity 2.1.1 etc 下面是我的公式-成为一个复杂的嵌套IF语句: IF([@Column1]="","", IF([@Colu

我希望在excel中列出标题类型1、子标题类型2和子标题类型3,以及每个标题的后续实例。e、 g

Outcome 1
Output 1.1
Activity 1.1.1
Activity 1.1.2
Output 1.2
Activity 1.2.1
Activity 1.2.2
Activity 1.2.3
Outcome 2
Output 2.1
Activity 2.1.1
etc
下面是我的公式-成为一个复杂的嵌套IF语句:

IF([@Column1]="","",
IF([@Column1]="Outcome", "Outcome " & COUNTIF(tbOOA[[#Headers],[Column1]]:[@Column1], [@Column1]), 
IF([@Column1]="Output","Output "& COUNTIF(tbOOA[[#Headers],[Column1]]:[@Column1],"Outcome") ***&"."&*** COUNTIF(tbOOA[[#Headers],[Column1]]:[@Column1],[@Column1]), 
"Activity " & "serious help")))
在第1列中,从“结果”、“输出”或“活动”列表中进行选择

在第2列中,计算适当的数字,例如输出1.2

如果行为空,则无任何内容。-好的

If it is "Outcome", count from the header until current row for the number of instances of "Outcome". - Fine    
Else if it is "Output", count the number of "Outcome"s there are. - Fine    
This is where it falls apart. Trying to calculate the number after the "." (bold and italic)
我需要计算“Output”的#个实例,但每次出现新的“Output”时,必须将其重置为1

我试图遵循的逻辑是:

(# of "Outputs" from the table header until the current row) minus 
(# of "Outputs" from the table header until the last instance of "Outcome")
我尝试了几次计算行数,但都有问题

活动的逻辑是一样的,尽管这会使公式更加复杂,在我能够得到第二级排序之前,我没有费心去开始


有人知道类似的问题/解决方案吗?

如果您愿意使用隐藏的辅助列,那么公式将变得更易于管理。使用A列保存“结果”、“输出”和“活动”数据

然后使用B列处理
结果
数字,C列处理
输出
数字,D列处理
活动
数字。将最终结果合并到E列中

B1
C1
D1
中,手动写入第一个值(
1
0
0

然后,从B2开始填写以下内容:

=IF(A2="Outcome",B1+1,B1)
=IF(A2="Outcome",0,IF(A2="Output",C1+1,C1)) 
只有在找到下一个结果时,才可以通过递增来实现

C2
填写以下内容:

=IF(A2="Outcome",B1+1,B1)
=IF(A2="Outcome",0,IF(A2="Output",C1+1,C1)) 
只有在找到下一个输出时,才能通过递增来实现。如果有新的结果,它将重置为0

然后从
D2
填写

=IF(OR(A3="Outcome",A3="Output"),0,IF(A3="Activity",D2+1,D2))
它与前面的公式非常相似,但会根据结果或输出进行重置

最后,在
D4
中,将其与

=B1&IF(C1>0,"."&C1&IF(D1>0,"."&D1,""),"")

&
是一种字符串连接操作。通过检查内部值是否为0,如果下一个数字不为零,我们只将
和下一个数字连接起来。

我遇到了一个类似的问题,我想根据文本列表的缩进创建多级标题编号。因此,必须使用如下用户定义公式(UDF)自动生成数字:

要使其工作,必须在单元格A2中键入=“1”。A3(以下)中的相同公式必须复制到A4:A14

=NextLevelNum(A2;缩进级别(B3))

我从中获取的功能级别

函数NextLevelNum我自己做的。下面是所有代码

Option Explicit

Public Function IndentLevel(Ref As Range) As Long
  Application.Volatile
  IndentLevel = Ref.IndentLevel
End Function

Public Function NextLevelNum(prevNumRef As Range, level As Integer) As String
  Dim prevNum As String
  Dim nums() As String
  Dim prevLevel As Integer

  prevNum = prevNumRef.Value
  nums = Split(prevNum, ".")
  prevLevel = UBound(nums) + 1

  ' Ensure  1 <= level <= prevLevel +1
  level = WorksheetFunction.Max(level, 1)
  level = WorksheetFunction.Min(level, prevLevel + 1)

  ReDim Preserve nums(0 To level - 1)

  If level = prevLevel + 1 Then
    nums(level - 1) = "1"
  Else
    nums(level - 1) = CStr(CInt(nums(level - 1)) + 1)
  End If

  NextLevelNum = Join(nums, ".")
End Function
选项显式
公共功能级别(参考范围)尽可能长
应用程序。挥发性
IndentLevel=参考IndentLevel
端函数
公共函数NextLevelNum(prevNumRef作为范围,级别作为整数)作为字符串
Dim prevNum作为字符串
Dim nums()作为字符串
将级别设置为整数
prevNum=prevNumRef.Value
nums=拆分(prevNum,“.”)
prevLevel=UBound(nums)+1

“谢谢你,唱诗班。”。我刚刚找到了一个解决办法,忘了我发布了这个问题。我的解决方案,在一个大的丑陋的公式是在这里-我也尝试了你的建议,它也工作得很好,稍微修改,还包括'结果','输出',或'活动'。请注意,我需要在表格中使用它,因此表格标题必须不同,并且必须是数字,使用0、-1和-2可以实现这一点,因为它在选择第一个结果后会重置。>=如果([@[Choose Level]==”,“,[@[Choose Level]]&”&[@0]&如果([@[-1]]>0,”,“&[-1]]>如果([@[-2]]>0,”,“),”,“&[-2]],”))哦,哇-单级公式确实是又大又丑!我倾向于使用helper列使事情简单化,因为有一次可怕的经历,我不得不调试一个我认为是正确的公式,这个公式有4个屏幕宽。这是如此不必要的痛苦!从那以后,我对助手专栏变得相当虔诚。当我需要我的列彼此相邻时,我会将helper列推到一边。现在我遇到了一个业务逻辑错误。如果存在第1级,即标题或结果,则必须下降到至少1个输出(第2级)和1个相关活动(第3级)。-结果必须是第一位的输出必须在结果之后。-输出之后必须至少有1个活动。-可以根据需要进行任意多的活动。-可以根据需要有任意多的结果,但后面必须有输出。-可以根据需要有任意多的输出,但是如上所述,它下面必须至少有一个活动。因为这是首先输入的数据,所以听起来不像是一个公式适合的东西。如果用户不遵守该规范,您希望得到什么样的输出?