2017-01-19 114 views
0

我有一个Excel工作簿中的格式如下数据数百张:重新组织列数据

December: 
Item D1 
January: 
Item J1 
Item J2 
Item J3 
February: 
Item F1 
March: 
Item M1 
Item M2 

我试图写一个VBA代码要经过各片,并打印每个月之后的第一个项目放在一个表格中。我已经能够使用'.Find'命令找到感兴趣的月份,但是如何在下一行打印单元格的内容?为了澄清,我希望下面的代码识别“December”并在活动单元格中打印“项目D1”,但我不知道引用下一个单元格的VBA语法。有什么建议么?

Set month = Worksheets("Sales").Range("A:A").Find("December:", lookat:=xlPart) 
ActiveCell.Value = month+1 

回答

0

只是一个提示,而不是完整的解决方案(不要使用month作为变量,因为它是一个VBA函数):

Set rMonth = Columns("A:A").Find(What:="December:", LookAt:=xlPart) 
Set rNextCell = rMonth.Offset(1, 0) 

Worksheets("Sales").Cells(2, 3) = rMonth.Value 
Worksheets("Sales").Cells(3, 3) = rNextCell.Value 
0

假设你想要做的所有月份相同,以下应该工作:

Dim data As Variant, upper As Long 
Dim x As Variant, i As Long 
Dim results As New Collection 
data = Worksheets("Sheet1").Range("A:A").Value 
upper = UBound(data) 
For i = 1 To upper 
    x = data(i, 1) 
    If IsEmpty(x) Then Exit For 'otherwise we'll go until the last cell in the sheet 
    Select Case x 
     Case "December:", "January:", "February:", "March:" 'fill in the rest of the months here 
      results.Add x 
      results.Add data(i + 1, 1) 
    End Select 
Next 

'Transposing the array 
Dim finalArray() As Variant 
ReDim finalArray(results.Count, 0) 
For i = 1 To results.Count 
    finalArray(i - 1, 0) = results(i) 
Next 
Worksheets("Sheet2").Range("A1:A" & results.Count).Value = finalArray