编辑 - 见下面的第一段代码我认为这将适用于你。原始列表应该在“Sheet1”中,有序数据被写入“Sheet2”。我正在使用数组(sData和sData2)来存储时态数据。
Dim lLastRow As Long
Dim i As Integer
Dim k As Integer
Dim sData() As String
Dim sData2(0 To 2) As String
Private Sub ListToTable()
'get number of rows with data
lLastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
k = 2 'destination table will start in line 2 (line 1 for titles).
'Set titles in destination sheet
Worksheets("Sheet2").Cells(1, 1).Value = "Depertment"
Worksheets("Sheet2").Cells(1, 1).Font.Bold = True
Worksheets("Sheet2").Cells(1, 2).Value = "Worker"
Worksheets("Sheet2").Cells(1, 2).Font.Bold = True
Worksheets("Sheet2").Cells(1, 3).Value = "Case"
Worksheets("Sheet2").Cells(1, 3).Font.Bold = True
For i = 1 To lLastRow
'split the data using ":" as delimiter
sData = Split(Worksheets("Sheet1").Cells(i, 1), ":")
If sData(0) = "Department" Then
sData2(0) = Trim(sData(1)) 'Trim just for eliminating spaces
ElseIf sData(0) = "Worker" Then
sData2(1) = Trim(sData(1))
Else
sData2(2) = Trim(sData(0))
Worksheets("Sheet2").Cells(k, 1).Value = sData2(0)
Worksheets("Sheet2").Cells(k, 2).Value = sData2(1)
Worksheets("Sheet2").Cells(k, 3).Value = sData2(2)
k = k + 1
End If
Next i
End Sub
根据评论 在你的意见,你问的第二列表到餐桌的改造更新。基本上你首先需要区分列表中的“两件事”。这取决于你的数据。我选择检查的是前两个(Left
)单元格中的字符是否为数字(IsNumeric
)。然后代码与上面的代码非常相似。在顶部定义变量时,请添加Dim sFirstColumn as String
和Dim iSecondColumn as Integer
(或根据您的数据进行的任何操作)。
For i = 1 To lLastRow
If Not IsNumeric(Left(Worksheets("Sheet1").Cells(i, 1), 2)) Then
sFirstColumn = Worksheets("Sheet1").Cells(i, 1).Value
Else
iSecondColumn = Worksheets("Sheet1").Cells(i, 1).Value
Worksheets("Sheet2").Cells(k, 1).Value = sFirstColumn
Worksheets("Sheet2").Cells(k, 2).Value = iSecondColumn
k = k + 1
End If
Next i
什么是您的列表的数据源?你是否已经有一些可以共享的VBA来生成列表数据? –
它来自我们在工作场所使用的这个旧程序。这只是纯文本 –