【发布时间】:2023-03-29 12:51:01
【问题描述】:
我正在尝试解决以下问题(相信我,多次尝试)但没有成功...请,非常欢迎任何建议或代码!
问题:我有一堆 Excel 工作表,其中的数据以某种方式组织(这些电子表格中的数据结构不能因其他原因而更改),我需要将这些信息导出到列表中以便能够将其导入另一个应用程序。
电子表格的结构类似于以下示例:
第一列包含级别 0 的元素,在其他列中是附加级别。级别与第一行(第 1 行)中的参考相匹配。例如,单元格 A2 中的“A”位于第 0 级,而“A10”、“A20”和“A30”为第 1 级,嵌套在“A”中。 “A1010”和“A1020”是嵌套在“A10”中的第2级,依此类推。
级别数、包含信息的行数和列数可以变化很大。
| A | B | C | D | E | F | G |
----+---+-----+-------+-------+-------+-------+-------|
1 | | A | A10 | A1010 | A1020 | A30 | A3010 |
2 | A | A10 | A1010 | A1011 | A1021 | A3010 | A3011 |
3 | B | A20 | A1020 | A1012 | A1022 | A3030 | A3012 |
4 | C | A30 | | A1013 | A1023 | A3070 | A3013 |
5 | D | | | A1014 | A1025 | A3090 | A3019 |
6 | | | | A1019 | A1027 | | |
7 | | | | | A1029 | | |
8 | | | | | | | |
最终列表需要以这种方式构建,以供其他应用程序读取。 所有对应的嵌套级别都需要是顺序的,如下所示。
A <--- Level 0
A10 <--- Level 1 (nested in "A")
A1010 <--- Level 2 (nested in "A10")
A1011 <--- Level 3 (nested in "A1010")
A1012 <--- Level 3 (nested in "A1010")
A1013 ...
A1014
A1019
A1020 <--- Level 2 (nested in "A10")
A1021 <--- Level 3 (nested in "A1020")
A1022 ...
A1023
A1025
A1027
A1029
A20
A30
A3010
A3011
A3012
A3013
A3019
A3030
A3070
A3090
B
C
D
感谢您的帮助。
更新:
- 代码将嵌入到这些 excel 文件中,但文件是只读的,不应在文件中写入任何数据。
- 最终,输出将是一个 TXT 文件。因此,包含最终排序数据的数组将非常受欢迎,因为我们可以使用该数组来执行其他需要的任务。
- 我需要知道每个实例的级别。
【问题讨论】:
-
IF 我理解正确,算法很简单。 (从最右边的列作为“当前”列开始 (1) 在“当前”列左侧的列中的任意位置找到其第一行中的值 (2) 将“当前”列的所有其他行插入到下方找到的位置(将找到的列中的其他单元格向下推)(3)使“当前”列左侧的下一列成为新的“当前”列(4)重复,除非“当前”列是A。)但是你的问题没有任何迹象表明您的代码中有什么不工作。
-
你说得对,我没有显示我的代码。但这只是因为我无法得到任何合理的结果。您的方法很有趣,但我无法弄清楚如何获得每个实例的级别...
-
我的方法是使用两个 Do-Loop,一个在另一个内部,就像一个循环系统通过一个 2D 数组。但是,我试图使用两个数组变量来控制正在读取的行和列的索引,并将这些数组的大小连接到相应的级别。这意味着,如果找到一个新级别,则数组大小将增加一,直到获得该级别的所有数据。一旦发生这种情况,数组就会重新调整为更短的大小(一个单位)。在该层级的索引中,数组的值是已经读取的excel行和列的索引。
-
我不知道我是否说清楚了,但我承认这种方法远非简单......
-
对不起。我认为您问题中的
<--- Level 3 (nested in "A1010")位只是 cmets。我以为您只需要按照级别隐含的顺序对数据进行排序,而没有意识到您实际上也需要显示“级别”。
标签: algorithm excel loops sorting vba