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围绕你的数据是什么,你可以使用ROWSCOLUMNSMOD以及一些绝对/相对范围得到相同的结果。

单元格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) 

然后,您可以将其复制到列上以获取剩余的数据。 如果你复制它,公式就有引用问题,或者如果你将更多的列复制到比你有更多数据的地方,但是否则它会有诀窍。

基本上它说:“看看左边的一个单元格,然后给我,除非这个单元格是空白的,那么请给我列中的第一项。”