我正在尝试找到一种使用VBA的方式来显示可变范围的行中缺少的1-3(仅整数)范围内的数字。
D列可以为空白,或具有一个数字(1、2或3)。 E列的数字递减。最低值为1。
范围取决于E列中的值。
示例/说明:
我认为,如果我在每组行之间添加一个空白行(在下图中的交替颜色之间),可能会更容易。但是为此,我可能仍需要大量帮助。
我真的希望这里的人能够帮助/了解我正在尝试做的事情。这是我的代码的最后一步,我对如何使这项工作感到震惊。
答案 0 :(得分:0)
蛮力方法:(为单元格F1
编写的公式)
=IF(E1<IFERROR(OFFSET(E1,-1,0),-1),"",MID(IF(COUNTIF(OFFSET(D1,0,0,E1,1),1)>0,"",", 1") & IF(COUNTIF(OFFSET(D1,0,0,E1,1),2)>0,"",", 2") & IF(COUNTIF(OFFSET(D1,0,0,E1,1),3)>0,"",", 3"),3,99))
打破现状:
=IF(E1<IFERROR(OFFSET(E1,-1,0),-1),"", <OUTPUT>)
如果E列中的值小于其上方的值,则不显示任何内容。否则,请显示我们的<OUTPUT>
接下来的内容将以相反的顺序显示,因为这样更有意义:
OFFSET(D1, 0, 0, E1, 1)
这是一个<RANGE>
个单元,宽1个单元,高E1
个单元,从D1
开始(0行0列)
找出我们的<RANGE>
中缺少的数字,以及要显示的<TEXT>
:
IF(COUNTIF(<RANGE>,1)>0,"",", 1") &
如果数字1
没有出现在范围内,请在", 1"
中包含<TEXT>
IF(COUNTIF(<RANGE>,2)>0,"",", 2") &
如果数字2
没有出现在范围内,请在", 2"
中包含<TEXT>
IF(COUNTIF(<RANGE>,3)>0,"",", 3")
如果数字3
没有出现在范围内,请在", 3"
中包含<TEXT>
这为我们提供了<TEXT>
,""
,", 1"
,", 1, 2"
,", 1, 2, 3"
,", 1, 3"
,{{1} }或", 2"
最后,整理我们的", 2, 3"
:
前面的前2个字符
", 3"
修剪<OUTPUT>
答案 1 :(得分:0)
简单的UDF
假设您的第一个数据块包含第2至5行,则可以在单元格F2
中输入以下公式,例如=ABSENT(D2:D5)
或什至=ABSENT(D2:E5)
来在F列中显示所需的结果字符串(由于OP在第一种情况下为空)。
示例代码
Function absent$(rng As Range)
Dim i&, s$, tmp, found ' declare data types (Long, String, Variant, Variant)
For i = 1 To 3
tmp = Application.Transpose(Application.Index(rng, 0, 1)) ' change 1st column to flat array
found = Application.Match(i, tmp, 0) ' match numbers 1 to 3
If IsError(found) Then ' remember, if no match in array
s = s & i & IIf(i < 3, ",", "") ' add absent number to string
End If
Next i
absent = s ' return string
End Function