Excel formula 转置多次出现
编辑:我已恢复源数据源,以消除上次屏幕截图的模糊性 我试图转换电子表格数据,其中有许多行,其中客户名称可能重复,但每行包含不同的产品 比如说 到 我想做它与公式,如果可能的话,因为我与VB斗争Excel formula 转置多次出现,excel-formula,transpose,Excel Formula,Transpose,编辑:我已恢复源数据源,以消除上次屏幕截图的模糊性 我试图转换电子表格数据,其中有许多行,其中客户名称可能重复,但每行包含不同的产品 比如说 到 我想做它与公式,如果可能的话,因为我与VB斗争 谢谢你的帮助我意识到这是一个巨大的回答,很抱歉,但我想说清楚。如果你需要我帮忙,给我留言,我会帮你的 以下是我公式的输出: 编辑后的答案-为便于理解而使用的命名范围: 这些只是我使用过的几个命名范围的一个示例,您可以直接引用这些范围或自己命名它们(最简单的方法是突出显示数据,然后将名称放在公式栏[
谢谢你的帮助我意识到这是一个巨大的回答,很抱歉,但我想说清楚。如果你需要我帮忙,给我留言,我会帮你的 以下是我公式的输出: 编辑后的答案-为便于理解而使用的命名范围: 这些只是我使用过的几个命名范围的一个示例,您可以直接引用这些范围或自己命名它们(最简单的方法是突出显示数据,然后将名称放在公式栏[左上]旁边的下拉列表中) 请注意,由于我们将为AccNum和AccType使用数组公式,因此您不希望选择整个列,而是选择确切的数据长度或将其超出100左右。大型数组公式往往会降低计算速度,并将单独计算每个单元格,而不管它是否为空 第一个公式
=IF(COUNTIF(D2:D11,“>”)>0,连接(“账号”,左((列(A:A)+1)/2,1)),”)
除调整标题外,该公式与原始答案中的公式相同
=IF(Condition,True,False)
-IF逻辑有很多用途,我认为它是Excel中最好的公式。我曾经使用IF和COUNTIF来检查是否有超过0个单元格多于空白(或“
”)。这只是一个使用ISBLANK()
或其他空白标识符的技巧,这些标识符在公式存在时会混淆
如果结果为真,我将使用连接(Text1、Text2等)
为列标题构建一个文本字符串行(1:1)
或列(A:A)
通常用于根据需要水平还是垂直增加计数来启动公式的自动递增整数。我给这个递增整数加1,然后除以2,使每列的增量为0.5(1>1.5>2>2.5),然后使用LEFT
公式只取这个十进制答案左边的第一位数字,这样数字每两列只增加一次
如果结果为FALSE,则将单元格留空,“”)
。这里是标准的东西,不需要解释
第二个公式
=连接(索引(名字,匹配(Sheet4!$A2,参考,0))
=串联(索引(姓氏,匹配(Sheet4!$A2,参考,0))
CONCATENATE
仅用于在通过索引
拖动时强制空白单元格保持空白<代码>索引
将读取空白单元格作为值,因此0
,而串联
将读取空白单元格作为文本,因此”
INDEX(Range,Row,Column)
:这是一个比VLOOKUP
或HLOOKUP
更高级的查找公式,并且不受其限制
我使用的范围是预期的输出范围-Forename
或姓氏
然后使用匹配(标准、范围、匹配类型)
计算行。Match将查看整个范围,并以整数形式返回发生匹配的位置。为此,我已将该行的条件设置为A列中的唯一引用号,指定范围reference
的范围,匹配类型为0(1小于0,0精确匹配,-1大于)
我没有为索引定义列号,因为它默认为第一列,而且我只给它一列数据,以便从中输出
第三个公式
记住这些需要作为数组输入(当在公式栏中按Ctrl+Shift+Enter时)
=IFERROR(索引(AccNum,SMALL)(IF(Reference=Sheet4!$A2,ROW(Reference)-ROW(索引(Reference,1,1))+1),舍入((列(A:A)+1)/2,0)),“”)
=IFERROR(索引(AccType,SMALL)(IF(Reference=Sheet4!$A2,ROW(Reference)–ROW(索引(Reference,1,1))+1),舍入((列(B:B)+1)/2,0)),“”)
如您所见,其中一个用于AccNum
,另一个用于AccType
IFERROR(Value)
:之所以使用这个公式,是因为我们不希望公式总是返回一些东西。当公式无法返回某个值或SMALL没有匹配项时,就会出现错误(通常为#VALUE或#NUM!),因此我使用,“”)
强制生成空白结果(同样是标准值)
我已经解释了上面的索引公式,所以让我们深入了解一下我是如何计算出与我们要查找的内容匹配的行的:
SMALL(如果(参考=Sheet4!$A2,行(参考)-行(索引(参考,1,1))+1),舍入((列(B:B)+1)/2,0))
这里的IF语句是相当自解释的,但由于我们将其用作数组公式,它将执行=Sheet4$A2
是指定范围内每个单元格上的唯一引用引用。在模拟数据中,这将返回第一个条目的结果:{FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}
(我将标题包含在范围中,因此初始值为FALSE)IF
将对每个true执行行计算*,但保留FALSE
s不变
这会留下一个{FALSE;2;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}的结果,将使用较小的(数组,k)
SMALL
仅对数值有效,并显示第k个结果。同样,专栏的技巧是u