预期结果:

预期结果:

在我的 Excel 表中,我有三列 A、B、C,它们非常细,但行数很多(>500)。现在,如果我打印出来,我会得到几乎空白的 10 页。只有在每页的左边框我才能看到这三列。

我想要做的是将整个工作表以多列布局打印出来。每页 2 或 3 列就足够了。目前,我通过从 Excel 中复制值,将其插入 Word 文档,然后使用 Word 的多列布局功能来实现。有没有办法直接在 Excel 中实现这一点?

为了澄清我的问题:目前我的页面看起来像这样

A B C
A B C
A B C
A B C
. . .

但我想要的是这个:

A B C     A B C     A B C
A B C     A B C     A B C
A B C     A B C     A B C
. . .     . . .     . . .

答案1

我认为 Excel 无法做到这一点。一种可能的解决方法是使用 Microsoft Word 并将列蜿蜒排列:如何蛇行列以使用更少的页面

使用 MS Word 蛇形列 (#msword)

这可能是最容易使用的一次性使用,因为我没有在后面描述的 Excel 宏中加入对话框。

  1. 从 Excel 电子表格中选择并复制列。
  2. 粘贴到 Word 中,这需要一点时间
  3. 选择要在表格顶部重复的行,然后在 Word 中使用表格 --> 要重复的行来指示
  4. 使用锚点选择整个表格,或选择表格中的单元格,然后选择表格 --> 选择 --> 表格
  5. 使用列按钮指示行数,或者如果您想要更好地控制位置,请使用格式 --> 列

这个例子很好。这篇文章还提供了其他可能性。

答案2

如果您有一个名为“datatable”的源表,请将此公式放在额外的工作表的每个单元格中(打印的数据应该出现的位置):

=OFFSET(datatable!$A$2;(ROW()-2)+((COLUMN()-1-MOD(COLUMN()-1;3))/3*4);MOD(COLUMN()-1;3))

以上内容由德语翻译成英语。经测试的德语公式为: =BEREICH.VERSCHIEBEN(datatable!$A$2;(ZEILE()-2)+((SPALTE()-1-REST(SPALTE()-1;3))/3*4);REST(SPALTE()-1;3))

预期结果:

这将转换工作表“数据表”的内容:

A1 B1 C1
A2 B2 C2
A3 B3 C3
A4 B4 C4
A5 B5 C5
A6 B6 C6
...

进入:

A1 B1 C1    A5 B5 C5    ...
A2 B2 C2    A6 B6 C6    ...
A3 B3 C3    ...
A4 B4 C4    ...

解释:

基本:

例如OFFSET( datatable!$A$2; 3; 4 )引用相对于的单元格$A$2,向下 3 行,向右 4 列。

ROW()COLUMN()是数字,代表当前工作表中当前单元格的位置(例如$A$1= 1 列/1 行,$C$2= 3 列/2 行)。

到处(-1)都是必要的,因为我们使用了偏移量,并且第一行和第一列是 1,但我们希望第一个引用的单元格是$A$2,而不是$A$2加上偏移量 1。

(ROW()-2)输出/打印表中的标题(如果没有标题,则应为 -1)。
$A$2是源“数据表”中的标题。如果没有标题,则应使用$A$1(而不是$A$2)来引用。

细节:

第三个参数OFFSET(...;...;MOD(COLUMN()-1;3))列偏移,它将始终引用源“数据表”的前 3 列之一。
$A$2加上列偏移量 0、1、2、0、1、2、0、1、2、...

在第二个参数中OFFSET(...; (ROW()-2) + ((COLUMN()-1-MOD(COLUMN()-1;3))/3*4) ;...)选择行偏移
基本上这里的数学是 y + x * 4。

4 是您想要显示的行数。3
是源“数据表”中的列数。

x 由列和模 3 组成。
COLUMN()-1是 0、1、2、3、... 等等。
MOD(COLUMN()-1;3)将是 0、1、2、0、1、2、0、1、2、...

COLUMN()-1-MOD(COLUMN()-1;3)将是 0、3、6、9,... 等等,其中值每 3 列仅更改一次。
除以 3 将得到 0、1、2、3,...
乘以 4 将得到 0、4、8、12,...

(关于模数,另请参阅MOD()Excel 帮助,或维基百科中的模运算

(感谢 Jake Kacher 提出的基本想法)

答案3

您可以使用一个简单的公式:

=OFFSET(Sheet1!$A$1,(ROW()-2)*5+COLUMN(),0)

让数据水平流动在 5 列中。
然后您可以选择页面大小、打印每页的第一行等。
简单、整洁,无需 VBA。

答案4

我发现最简单的方法是创建一个新的工作表,然后简单地重新创建表格,手动将其分成不同的列。

例如 A1=Sheet1!A1

B1=Sheet1!B1

C1=Sheet1!C1

D1 空白(用于分隔栏)

然后 E1=Sheet1!E51

F1=Sheet1!B51

G1=Sheet1!C51

并将其向下复制到 50 行。这样,单列 100 行的表格就变成了 2 列 50 行的表格。根据您的需要进行调整。

当然,这是手动的,并且取决于行数保持不变。根据原始表中的行数和所需的列数动态计算所需的行数并不困难。唯一的问题是,如果原始表在新工作表上分成列时超出了单个页面的容纳范围。

相关内容