在我的 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 宏中加入对话框。
- 从 Excel 电子表格中选择并复制列。
- 粘贴到 Word 中,这需要一点时间
- 选择要在表格顶部重复的行,然后在 Word 中使用表格 --> 要重复的行来指示
- 使用锚点选择整个表格,或选择表格中的单元格,然后选择表格 --> 选择 --> 表格
- 使用列按钮指示行数,或者如果您想要更好地控制位置,请使用格式 --> 列
这个例子很好。这篇文章还提供了其他可能性。
答案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 行的表格。根据您的需要进行调整。
当然,这是手动的,并且取决于行数保持不变。根据原始表中的行数和所需的列数动态计算所需的行数并不困难。唯一的问题是,如果原始表在新工作表上分成列时超出了单个页面的容纳范围。