dynamic公式或VBA一个垂直的列表偏移,并将列表的底部移动到顶部?
这是我正在尝试做的,我有一张名单没有重复长度不同的表单。 我想有一个公式或VBA子,让下一行复制原来的名称列表,并抵消它我的一个,所以原来的名字现在是第二个名单的姓氏。 我需要在最后10列表中没有相同的名称在同一行中。
这里是我想要的样子。
ColumnB ColumnC ColumnD ColumnE Name1 Name2 Name3 Name4 Name2 Name3 Name4 Name1 Name3 Name4 Name1 Name2 Name4 Name1 Name2 Name3
就像数独游戏一样,每行或每列的名称都不能有重复。
我不知道如何最好地实现这一点,因为如上所述,列表的长度是一个variables。 理想情况下,我想创build第一个列表,然后让另一个列表自动填充。 有什么build议么?
EDIT___________________ @Paul Drye,我用你的公式得到以下结果
ColumnB ColumnC ColumnD ColumnE Name1 Name2 Name3 Name4 Name2 Name3 Name4 Name1 Name3 Name4 Name1 Name1 Name4 Name1 Name1 Name1
正如你所看到的,最后两列开始显示一个问题。
如果你想要一个可以工作的公式,不pipe围绕你的数据是什么,你可以使用ROWS
, COLUMNS
和MOD
以及一些绝对/相对范围得到相同的结果。
单元格C2
公式不断拷贝。 可能看起来更好一个命名的范围。 如果你想看看它是如何产生的数字,删除INDEX
并获得计数器。
=INDEX($B$2:$B$11,MOD(ROWS($C$2:C2)+COLUMNS($C$2:C2)-1,COUNTA($B$2:$B$11))+1)
图片显示与其他答案相同的结果
如果一个公式有效,你可以简单的用这个结果来得到
=IF(ISBLANK(B3),B$2,B3)
在单元格C2
,假设您的数据在B2
开始。 然后可以在select要占据的整个单元格范围之后,使用CTRL + R,CTRL + D将其复制或填充。
如果副本正确,单元格K11
的公式为:
=IF(ISBLANK(J12),J$2,J12)
图中显示了B列的input,其余都是这个公式
这个公式或多或less的工作,因为绝对的行引用,确保如果我们在列表的末尾使用第2行的值。
假设你的列表从A1开始,在B1中试试这个:
=IF(A2="",IF(ISERR(OFFSET(A$1,-1,0)),A$1, A$1),A2)
然后,您可以将其复制到列上以获取剩余的数据。 如果你复制它,公式就有引用问题,或者如果你将更多的列复制到比你有更多数据的地方,但是否则它会有诀窍。
基本上它说:“看看左边的一个单元格,然后给我,除非这个单元格是空白的,那么请给我列中的第一项。”