您不需要 VBA 来执行此操作。在第二张表中输入并复制下来的以下公式将满足您的需求。请注意,它假定工作表 1 列表中的名字位于单元格 A1 中。
=IFERROR(INDEX(Sheet1!A:A,IF(MOD(ROW(A1),9)=0,"",ROUNDUP(ROW(A1)/9,0)),1),"")
这种方法可以应用于任何数据列。因此,要按降序对八行的块进行编号,您可以在原始名称数据旁边添加一列(假设 Sheet1 的 B 列)连续数字。使用 Excel 的排序功能按降序对数字列进行排序,然后在第二张表中使用以下公式。
=IFERROR(INDEX(Sheet1!B:B,IF(MOD(ROW(A1),9)=0,"",ROUNDUP(ROW(A1)/9,0)),1),"")
请注意,与原始公式的唯一区别是列引用,它已从 `Sheet1!A:A 更改为 Sheet1!B:B。
为了进一步在 8 个块中的指定位置添加空白,可以进一步阐述这些公式,但这种方法很快就会变得笨拙。我会推荐以下更简单的公式,它在每个八个名字的块的第六行放置一个空白。
=IF(A1<>"",IF(MOD(ROW(A1)-6,9)=0,"",A1),"")
您可以将公式应用于已经被分成八个块的名称列(在第二张表中),而不是对原始范围进行操作。
如果您想在另一个位置添加一个空格,比如 8,请将简单表达式(修改为在MOD
子句中使用 8 而不是 6)应用于在第六个位置添加空格的名称列。
完成所有这些步骤后,您可以复制并特殊粘贴作为值的最终名称列表,其中包含多个位置的空格,然后删除中间列。