1、前言
数据经常有“列表”、“表格”两种表现形式
列表形式:
Name Value
张三 31
张三 32
……
李四 41
李四 42
李四 43
……
王二 21
王二 22
……
数据库就使用这种形式,但其Key有冗余。
表格形式:
Name Value1 Value2 Value3 Value……
张三 31 32
李四 41 42 43
王二 21 22
这种形式Key没有冗余,但Value究竟有几个不好确定,会形成Sparse矩阵,不利于关系数学(矩阵)处理。
两种形式各有利弊,关键是能够随意转换。
2、“列表”→“表格”
2.1、VBA
VBA编程思路如下:
目标行指针Table_Row;
目标列指针Table_Column;
Table_Row=Table_Start-1
For(List_Row,List_Start,List_End)
比较List_Row.List_Key、Table_Row.Table_Key
如果相等:
Table_Column+=1
如果不等:
TableRow+=1
List_Key→[Table_Row].Table_Key
Table_Column=1
List_Data→[Table_Row,Table_Column].Table_Data。
Next List_Row
2.2、交互式操作
Key 个数n 起始行 结束行 地址 数据
其中:
Key:应该是唯一值,可以使用工具得到
个数:可以使用CountIf、DcountIf、Frequency、透视表得到
起始行:可以使用Match得到
结束行:可以使用Match得到,也可以使用起始行+个数得到
地址:Address(起始行,列,1)&":"&Address(结束行,列,1)
数据:Transpose(Indirect(地址))
注意:Transpose应该以最大n输入数组公式,然后删除NA
但这有一个后遗症,当n=1,数组形式的Transpose会形成n个重复,因此需要对n排序,对于n=1的,不用数组形式的Transpose
3、“表格”→“列表”
3.1、VBA
VBA编程思路如下:
List_Row=List_Start
For(Table_Column,Table_Start,Table_End)
Table_Key→List_Key
Table_Column.Table_Value→List_Value
List_Row+=n
Next Table_Column
3.2、交互式操作
纵向选定ValueI,然后重复n次,当然,不能忘记同时复制n次Key
邪恶的GFW,你就饶了我吧:(
Blog Archive
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment