3 回答
TA贡献1804条经验 获得超7个赞
Microsoft最近推出了Power Query,这是一个Excel加载项,它为Excel内的数据操作添加了许多有趣的功能,包括您要查找的内容。
内外接的实际功能被称为“逆透视列”,这是解释在这篇文章中。这是要点:
下载并安装加载项
打开您的Excel / CSV文件
选择要熔化/重塑的表/范围
在“高级查询”选项卡中,单击“从表”,这将打开“查询编辑器”
选择您要熔化/重塑的列(按Ctrl或Shift-Select,不要拖动)
在“转换”选项卡中,单击“取消透视列”(您还可以在此处应用其他转换,然后再返回Excel)
在“主页”选项卡中,单击“关闭并加载”。这将在Excel中创建具有所需结果的新表/查询对象。
TA贡献1846条经验 获得超7个赞
首先创建一个用户窗体,并将其命名为Unpivot_Form,其中包含两个RefEdit字段-rng_id和value_id以及一个提交/执行按钮。我也是R用户,rng_id是包含id的范围,而value_id包含值;两个范围都包括标题。
做两个宏:
Sub unpivot()
Unpivot_Form.Show
End Sub
另一个宏位于该字段的提交/执行按钮内:
Private Sub submit_Click()
'Code to unpivot (convert wide to long for excel)
Dim rng_id, rng_id_header, val_id As Range
Dim colvar, emptyrow, col As Integer
Dim new_sheet As Worksheet
'Put val_id range into a range object
Set val_id = Range(value_id.Value)
'Determine the parameter for the value id range
'This is used for the looping later on
numrows = val_id.Rows.Count
numcols = val_id.Columns.Count
'Resize changes the "block" to the size defined by the row and column
'Offset moves the "block"
Set rng_id_header = Range(range_id.Value).Resize(1)
Set rng_id = Range(range_id.Value).Offset(1, 0).Resize(numrows - 1)
Set new_sheet = Worksheets.Add
'Set up the first column and first batch of id vars
new_sheet.Activate
Range("A65535").End(xlUp).Activate
rng_id_header.Copy ActiveCell
colvar = Range("XFD1").End(xlToLeft).Column + 1
Range("XFD1").End(xlToLeft).Offset(, 1).Value = "Variable"
Range("XFD1").End(xlToLeft).Offset(, 1).Value = "Value"
'Start populating the value ids
For col = 1 To numcols
'populate var_id
'determine last row
emptyrow = Range("A65535").End(xlUp).Row + 1
'no need to activate to source to copy
rng_id.Copy new_sheet.Cells(emptyrow, 1)
'copy the variable
val_id.Offset(, col - 1).Resize(1, 1).Copy new_sheet.Range(Cells(emptyrow, colvar), Cells(emptyrow + numrows - 2, colvar))
'copy the value
val_id.Offset(1, col - 1).Resize(numrows - 1, 1).Copy new_sheet.Range(Cells(emptyrow, colvar + 1), Cells(emptyrow + numrows - 2, colvar + 1))
Next
Unload Me
End Sub
请享用!
- 3 回答
- 0 关注
- 680 浏览
添加回答
举报