excel 如果函数基于拆分

62lalag4  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(103)

我有20列数据,其中有一个摊销公式。
我需要检查摊销是否符合两个标准。
基于第15行的split,我需要检查两个项(项引用第1行)是否都声明它们是include(第3行),以及两个项是否具有相同的值(第13行)。
现在,分裂可以是项目1、2、4或1、2或1、5等,基于用户输入的任何组合。
如果不包括,则在第18行注明“”,并注明“检查”。
我知道如何使用if函数,但不是基于split。
我知道如何通过这里收到的指导将拆分作为函数的一部分,但我不能解决如何将IF添加到函数中。
我的函数在第13行和第16行函数问题中使用

我的尝试:

Function checkIf(sItemIDX As String, cCostToAmortize As Currency, Optional lItemRow As Long = 1) As String
Dim v
Dim P As Currency
Application.Volatile
For Each v In Split(sItemIDX, ",")
    'Assuming Item List starts in column B
    ' But could use other methods to locate table
    P = P + Cells(lItemRow + 1, v + 1)
Next v

checkIf = IF(cCostToAmortize = Cells(lItemRow + 1, Application.Caller.Column) then IF(cCostToAmortize = Cells(lItemRow + 1, Application.Caller.Column) Then "" Else "Check"
End If

End Function

我希望结果看起来如何(颜色是为了更容易解释)。

在第18行,我想做一个检查,在我的脑海中,这将在以下步骤中完成。
1.拆分第15行,第15行中的每个数字代表项目(第1行)。在最终工作表中,第15行的任何单元格中可能有20个数字。
1.根据这些数字,将完成If语句以检查包含的选项(第3行),如果输入到第15行,则所有选项都应为yes,示例B15表示第1项和第2项,因此第3行的第1项(b)和第2项(c)都应为yes。由于情况并非如此,它应在第18行的B列和C列返回“Check”。
1.下一阶段,如果这两个值都为“是”,如第4(e)项和第5(f)项所示,则检查以确保要摊销的工具成本与第13行的值相同。在本例中,这两个值不相同(以红色突出显示),因此再次将“检查”置于第18行的E列和F列。
如果在第15行没有任何内容,那么它就可以是“",如果在第3行B列和C列都说是,那么再次使用B列和C列将返回一个“”。
注:在最终版本中,第15行的每个单元格中可以包含1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20,这意味着它们都需要进行比较。
要检查的图像。

公式图像

wxclj1h5

wxclj1h51#

如果我正确理解了你想要的,而且你有Excel for Windows 2013+,你可以用工作表函数做到这一点。
例如,要将逗号分隔的数据拆分为单独的数组元素,可以用途:

=FILTERXML("<t><s>" & SUBSTITUTE(B15,",","</s><s>") & "</s></t>","//s")
  • (酌情以B12取代B15)*

因此,您的公式可能如下所示:

B13:  =IFERROR(SUM(INDEX(B$1:B$11,FILTERXML("<t><s>" & SUBSTITUTE(B12,",","</s><s>") & "</s></t>","//s"))),0)

B14:  =SUM(B5:B11,-B13)

B16: =IFERROR(B13/SUM(INDEX($B$2:$U$2,FILTERXML("<t><s>" & SUBSTITUTE(B15,",","</s><s>") & "</s></t>","//s")))*B2,0)

B17:  =B14+B16

B18:
=IFERROR(
        IF(AND(
                     AND(INDEX($B$3:$U$3,FILTERXML("<t><s>" & SUBSTITUTE(B15,",","</s><s>") & "</s></t>","//s"))="Yes"),
                     AND(INDEX($B$13:$U$13,FILTERXML("<t><s>" & SUBSTITUTE(B15,",","</s><s>") & "</s></t>","//s"))=B13)),
             "","Check"),
"")

在下面的屏幕截图中,由于Item 2 Included行上的No而显示“检查”。
如果将C3更改为Yes,则第18行中的check将消失。
公式将处理20列数据。如果数据更多(或更少),请相应地更改各个公式中对Bn:Un的引用。

相关问题