转置列

时间:2015-09-14 18:41:34

标签: excel vba

我有一个如下所示的CSV文件:

name, a
v1, 1
name, b
v1, 1
v2, 5
name, c
v1, 4
v2, 6
name, d
v2, 8
v3, asdf

使用Excel或LibreOffice,我该如何将其转换为:

name, v1, v2, v3
a, 1,  ,
b, 1, 5,
c, 4, 6,
d,  , 8, asdf

我一直在寻找关键字transpose,但它似乎不是正确的搜索关键字 - 所有指南都只显示如何进行完整的转置,这不是我想要的。

我也发现了这个问题,但它假设数据非常干净,必须手动调整列数:Specific Transpose in Excel

我不知道提前列的数量,有些单元格可能会丢失。

3 个答案:

答案 0 :(得分:0)

我的基于公式的方法,具有以下数据布局:

enter image description here

AB是从CSV文件导入的。

帮助器C列中的公式:

=IF(A2="name",B2,C1)

F1F2中的公式计算AC列中的唯一条目,它们不是创建输出表所必需的(两个数组公式都用{{1}确认}} + Ctrl + Shift):

Enter

行标题 - 来自=SUM(1/COUNTIF(C2:C12,C2:C12)) =SUM(1/COUNTIF(A2:A12,A2:A12)) 列(C的唯一值,已通过E6 + Ctrl + Shift确认,并向下拖动)

Enter

Colummn标头 - 来自=IFERROR(INDEX($C$2:$C$12, MATCH(0, COUNTIF($E$5:E5, $C$2:$C$12), 0)),"") 列(A的唯一值,已通过F5 + Ctrl + Shift确认,并向右拖动

Enter

两列=IFERROR(INDEX($A$2:$A$12, MATCH(0, COUNTIF($E$5:E5, $A$2:$A$12), 0)),"") / INDEX组合填充输出表格MATCH,已通过F6 + Ctrl + Shift确认,并已拖动正确和向下):

Enter

答案 1 :(得分:0)

您需要执行两项操作才能实现目标:

1。整合您的数据

将不同的数据类型移动到单独的列。您将有三个包含公式的新列:

  • 姓名:=IF(A2="name",B2,C1)
  • V:=IF(A2="name","",A2)
  • 价值:=IF(A2="name","",B2)

enter image description here

2。创建数据透视表

在这里,您无法使用标准数据透视表,因为值也可以是文本,有几个教程可以创建它:

  • 来自Rober Ilbrink的answer在Stackoverflow上使用VBA
  • 来自clearandsimply.com的另一个solution再次使用VBA

答案 2 :(得分:0)

我完全接受了你的要求。由于您希望使用Excel将CSV文件“转换”为从第一个示例看起来像第二个示例,我使用Excel VBA:

  • 打开原始CSV文件
  • 逐行阅读,并建立一个由每个Fields Management for window 1:Def, whose current sort field is forest view Navigate with Up/Dn, Right selects for move then <Enter> or Left commits, 'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end! * PID = Process Id * USER = Effective User Name * PR = Priority * NI = Nice Value * VIRT = Virtual Image (KiB) * RES = Resident Size (KiB) * SHR = Shared Memory (KiB) * S = Process Status * %CPU = CPU Usage * %MEM = Memory Usage (RES) * TIME+ = CPU Time, hundredths * COMMAND = Command Name/Line PPID = Parent Process pid UID = Effective User Id RUID = Real User Id RUSER = Real User Name SUID = Saved User Id SUSER = Saved User Name GID = Group Id GROUP = Group Name PGRP = Process Group Id TTY = Controlling Tty TPGID = Tty Process Grp Id SID = Session Id nTH = Number of Threads * P = Last Used Cpu (SMP) TIME = CPU Time SWAP = Swapped Size (KiB) CODE = Code Size (KiB) DATA = Data+Stack (KiB) nMaj = Major Page Faults nMin = Minor Page Faults nDRT = Dirty Pages Count WCHAN = Sleeping in Function Flags = Task Flags <sched.h> CGROUPS = Control Groups SUPGIDS = Supp Groups IDs SUPGRPS = Supp Groups Names TGID = Thread Group Id ENVIRON = Environment vars vMj = Major Faults delta vMn = Minor Faults delta USED = Res+Swap Size (KiB) nsIPC = IPC namespace Inode nsMNT = MNT namespace Inode nsNET = NET namespace Inode nsPID = PID namespace Inode nsUSER = USER namespace Inode nsUTS = UTS namespace Inode
  • 的项目组成的对象
  • 在结果数组中插入标签行
  • 重建由nameName
  • 组成的各个行
  • 使用您请求的格式将行写入新的CSV文件。

如果您在记事本中打开CSV文件,则可以看到结果。

确保设置对Windows Scripting Runtime的引用以访问FileSystemObject。

V's