如何在Excel中按类别分发“类型:值”格式的数据?

时间:2015-12-02 18:38:23

标签: excel excel-vba excel-formula worksheet-function vba

我正准备对从网站解析的数据进行线性回归分析。 我只能以下面不方便的格式获取数据:

第1列中的数据包含以“:”符号分隔的数据类型。例如:

Year:Storey:Area:Condition:Type:Name

第二列中的数据包含与第一列中的数据类型相对应的信息,也以':'符号分隔:

2015:3:170:Renovated:TypeB:John

在我的Excel表格中,我有 13000 行,其中包含上述格式的数据。 我想按照为数据指定的类别对这些数据进行分类。

为了澄清,我提供了原始数据的图片。 enter image description here

我尝试将此数据转换为以下格式: enter image description here

我尝试使用分隔符将这些数据拆分成列,但问题是数据类型的数量会有所不同。 1行可能有5个类别。另一行可能只有两个类别(数据类型)。

是否可以在Excel中对这类数据进行分类?

1 个答案:

答案 0 :(得分:2)

这应该做你想要的:

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)您需要将数据类型作为标题放在要放置拆分数据的工作表的第一行中。

2)我使用了你的例子中的行和列。如果不同,则需要调整单元格引用。

编辑:我更改了上面的内容以添加" NULL"并使用粗体和斜体格式化单元格以更好地匹配您想要的内容。