我无法将数据集处理成我需要的形式。我有 50 个电子表格,其中的数据必须按照某种模式重新组织才能被软件程序正确解释。对于其中一个电子表格,我有初始数据集,以及重新组织后应该是什么样子。我想,如果我能从初始表格开始重新创建最终表格,那么我就可以在其他电子表格上使用相同的方法。
我提供了两个截图,希望它们能够说明这种模式以及数据的组织方式:
两个电子表格中的数据是相同的,只是布局方式发生了变化。
我用颜色标记了几行来帮助说明这种模式,它本质上是水平翻转行的突出显示部分,然后向下和向右旋转,就像在铰链上一样。我希望这可以通过内置的 excel 函数递归完成,因为我对 VBA 没有什么经验。
我和我的同事尝试使用内置函数偏移,但进展不大,所以我希望有人知道更有效的方法来解决这个问题。
非常感谢您的帮助,谢谢。
答案1
核心问题之一是,你尝试使用 Excel 作为编程语言,处理从 A 到 B 的数据;这是可能的,但这不是电子表格的自然行为。电子表格应该包含一些输入数据,以及静态地在此基础上计算其他数据。
对于您的处理,有两种常规方法:
- 您忽略了 Excel 并不是真正为流程而设计的,而是编写了 VB 代码,然后运行一次即可执行流程。
- 您将流程重新解释为静态布局;然后就可以使用公式。
我不会深入研究 VB 宏编码;关于它的文章已经足够多了,如果你没有经验,你需要花几个小时(如果你很聪明的话)才能掌握足够的知识来做你想做的事情(或者永远,如果你的思维不够逻辑——编程适合很多人,但不适合每个人)。
使用公式,方法是在某处定义一个目标区域(另一张表、所有 50 个电子表格中的一张表,或同一张表的更下方,任何你喜欢的地方),然后用适当的公式填充该区域,这些公式使用现有数据来生成你想要的布局。
假设你将结果放得更下面,从第 51 行开始。
让我们从转置开始 - 您可以通过输入类似 的公式来创建它=INDEX($C$4:$AC$47,COLUMN()-3,ROW()-50)
。请注意,我切换了列和行参数 - 我输入了ROW()
列参数和COLUMN()
行参数;这会产生转置。偏移量将当前单元格的行和列映射到源单元格的列和行,您可能需要再增加或减去一点,只需尝试即可。将此公式复制到整个目标区域(与源区域大小相同),然后调整偏移量以使其正确。
下一步是“旋转”。要向右旋转,您需要将单元格参数向下移动 1、2、3,这样调整将产生类似效果=INDEX($C$4:$AC$47,COLUMN()-3+(ROW()-51),ROW()-50)
- 我将其添加ROW()-51
到行参数(由于转置而包含 COLUMN());ROW()-51
对于第一个目标行,将为 0,对于第二行,将为 1,对于第三行,将为 2,等等。如果您将此公式复制到目标数组中,它将执行“旋转”。使用 + 和 - 向左或向右旋转,依此类推。您还需要在其周围添加 `MOD(...,26),使其“换行”。
一旦你理解了这些概念,你就可以快速创建生成目标布局的公式数组,并将目标布局用于程序输入(或者 - 一旦你确定你已完成,将目标的值复制到源区域,然后删除目标)。请注意,我没有给你确切的解决方案,而是给你输入来学习如何自己处理它。你需要付出更多的努力。
从我的经验来看,这是学习和应用不断变化的需求的最简单方法。同样,您可以随意使用 VB Macro 方法;虽然学习起来更费劲,但您拥有的工具却更加强大。
答案2
I'm not sure how long the $A column of numbers is.
It looks pretty easy to put into a macro,
following your manual steps to convert it.
As I see it...
Select A$
Insert Column
Select $A$4
Fill down 0 to x ?
Select $C$4
[shift]+[ctrl]+[arrow right]
[shift]+[ctrl]+[arrow down]
[Ctrl]+[X] ( cut )
Paste special with Transpose option into $a$4
(近似的英文说明,不是 VBA)然后选择工具宏记录并分配一个热键并记录,然后停止并保存。