如何在Excel中按类别分发"type:value"格式的数据?
How to distribute data of "type:value" format by categories in Excel?
我正在对从站点解析的数据进行线性回归分析。
我只能以以下不方便的格式获取数据:
第 1 列中的数据包含以“:”符号分隔的数据类型。例如:
Year:Storey:Area:Condition:Type:Name
第 2 列中的数据包含与第 1 列中的数据类型相对应的信息,也用“:”符号分隔:
2015:3:170:Renovated:TypeB:John
在我的 Excel table 中,我有 13000 行包含上述格式的此类数据。
我想按为数据指定的类别对这些数据进行分类。
为了澄清,我提供了原始数据的图片:
我尝试将此数据转换为以下格式:
我尝试使用定界符将这些数据拆分成列,但问题是数据类型的数量各不相同。 1 行可能有 5 个类别。另一行可能只有 2 个类别(数据类型)。
是否可以在 Excel 中对此类数据进行分类?
这应该可以满足您的要求:
Sub Andrey()
Dim catArr() As String
Dim resArr() As String
Dim lastrow As Long
Dim ows As Worksheet
Dim tws As Worksheet
Dim i As Long
Dim j As Long
Dim startrow As Long
Set ows = Sheets("Sheet9") ' change to where your data is
Set tws = Sheets("Sheet10") ' change to where you want your data
startrow = 3 ' Change to the first row with data
With ows
lastrow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = startrow To lastrow
tws.Cells(i, 1) = .Cells(i, 1)
tws.Range(tws.Cells(i, "B"), tws.Cells(i, "G")).Value = "NULL"
tws.Range(tws.Cells(i, "B"), tws.Cells(i, "G")).Font.Italic = True
tws.Range(tws.Cells(i, "B"), tws.Cells(i, "G")).Font.Bold = False
tws.Range(tws.Cells(i, "A"), tws.Cells(i, "G")).HorizontalAlignment = xlCenter
catArr = Split(.Cells(i, 2), ":")
resArr = Split(.Cells(i, 3), ":")
For j = LBound(catArr) To UBound(catArr)
tws.Cells(i, WorksheetFunction.Match(catArr(j), tws.Range("A1:G1"), 0)) = resArr(j)
tws.Cells(i, WorksheetFunction.Match(catArr(j), tws.Range("A1:G1"), 0)).Font.Bold = True
tws.Cells(i, WorksheetFunction.Match(catArr(j), tws.Range("A1:G1"), 0)).Font.Italic = False
Next j
Next i
End With
End Sub
一些注意事项。
1) 您需要将数据类型作为标题放在要放置拆分数据的 sheet 的第一行。
2) 我使用了您示例中的行和列。如果不同,那么您将需要调整单元格引用。
编辑:我更改了上面的内容以添加 "NULL" 并使用粗体和斜体格式化单元格以更好地匹配您想要的内容。
我正在对从站点解析的数据进行线性回归分析。 我只能以以下不方便的格式获取数据:
第 1 列中的数据包含以“:”符号分隔的数据类型。例如:
Year:Storey:Area:Condition:Type:Name
第 2 列中的数据包含与第 1 列中的数据类型相对应的信息,也用“:”符号分隔:
2015:3:170:Renovated:TypeB:John
在我的 Excel table 中,我有 13000 行包含上述格式的此类数据。
我想按为数据指定的类别对这些数据进行分类。
为了澄清,我提供了原始数据的图片:
我尝试将此数据转换为以下格式:
我尝试使用定界符将这些数据拆分成列,但问题是数据类型的数量各不相同。 1 行可能有 5 个类别。另一行可能只有 2 个类别(数据类型)。
是否可以在 Excel 中对此类数据进行分类?
这应该可以满足您的要求:
Sub Andrey()
Dim catArr() As String
Dim resArr() As String
Dim lastrow As Long
Dim ows As Worksheet
Dim tws As Worksheet
Dim i As Long
Dim j As Long
Dim startrow As Long
Set ows = Sheets("Sheet9") ' change to where your data is
Set tws = Sheets("Sheet10") ' change to where you want your data
startrow = 3 ' Change to the first row with data
With ows
lastrow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = startrow To lastrow
tws.Cells(i, 1) = .Cells(i, 1)
tws.Range(tws.Cells(i, "B"), tws.Cells(i, "G")).Value = "NULL"
tws.Range(tws.Cells(i, "B"), tws.Cells(i, "G")).Font.Italic = True
tws.Range(tws.Cells(i, "B"), tws.Cells(i, "G")).Font.Bold = False
tws.Range(tws.Cells(i, "A"), tws.Cells(i, "G")).HorizontalAlignment = xlCenter
catArr = Split(.Cells(i, 2), ":")
resArr = Split(.Cells(i, 3), ":")
For j = LBound(catArr) To UBound(catArr)
tws.Cells(i, WorksheetFunction.Match(catArr(j), tws.Range("A1:G1"), 0)) = resArr(j)
tws.Cells(i, WorksheetFunction.Match(catArr(j), tws.Range("A1:G1"), 0)).Font.Bold = True
tws.Cells(i, WorksheetFunction.Match(catArr(j), tws.Range("A1:G1"), 0)).Font.Italic = False
Next j
Next i
End With
End Sub
一些注意事项。
1) 您需要将数据类型作为标题放在要放置拆分数据的 sheet 的第一行。
2) 我使用了您示例中的行和列。如果不同,那么您将需要调整单元格引用。
编辑:我更改了上面的内容以添加 "NULL" 并使用粗体和斜体格式化单元格以更好地匹配您想要的内容。