答案1
您可以在单元格中编写一个简单的公式(在您的示例中),其中B9
使用和是您需要获取的数据的位置。在您的示例中,它将从 开始。INDIRECT(ADDRESS(x,y))
x
y
(1,1)
(正如 Scott Craner 在评论中指出的那样,您可能想要使用INDEX()
而不是INDIRECT()
)。
位置x
将从 1 增加到 n,然后重复。因此,您可以使用函数MOD()
来执行此操作。在我们的例子中,ROW()
是我们需要使用的数字。由于MOD()
是从零开始的,因此您必须进行一些数学运算,但没有什么大不了的:
MOD(ROW() - 9, 1000) + 1
- '-9' 是因为我们从第 9 行开始。在您的例子中,如果您有 2,000 行,当然会更接近 2,000。数字必须在第一个条目中变为 0。
- 1,000 是电子表格中的列数。
对于y
位置,可以使用整数除法(即 a FLOOR()
)。同样,ROW()
从 1 开始,因此我们需要考虑到这一点。
FLOOR((ROW() - 9) / 1000) + 1
- “-9”和 1,000 与上面的类似。
现在我们有了一个完整的公式:
=INDIRECT(ADDRESS(MOD(ROW() - 9, 1000) + 1, FLOOR((ROW() - 9) / 1000) + 1))
首先验证第一个单元格(即)是否按预期工作,然后通过复制行(即选择之后的 N 行,然后点击)B9
对接下来的几个单元格(B10
、 )重试。您应该测试足够多的单元格,这样您就会开始看到第二行出现在新列中。B11
B9
Ctrl-D
现在选择B9
所有行,垂直复制整个值集(因此,如果您有 1,000 列 × 2,000 行,则需要该列中有 2,000,000 行,但不太确定 Excel 是否可以做到这么多)
这将垂直复制数据。如有必要,您可以在单独的工作表中执行此操作,而不是在现有数据下方执行此操作。由您决定。引用行时,需要包含工作表的名称。我不太确定如何使用,ADDRESS
但您可能可以在文档中找到信息。不过,此时,这是公式,而不仅仅是纯数据。如果您想将该列转换为纯数据,请将其保存在不保存公式的 CSV 文件中。然后重新加载 CSV 并将该列复制到您想要的位置。
无需 VBA 即可完成。(尽管公式是一种 VBA 表达式……)