2015-05-06 68 views
1

我的數據(編號1到編號24)在列A中。我想創建6個表來包含我的數據,如下所示。我爲第一個表創建了代碼。編寫其餘5個表格的最佳方式是什麼?我的實際產品是一個更大的表格,需要重複100次,所以硬編碼是不可能的。 (將抵消財產幫助?如何?)如何在vba中的新單元格中複製代碼塊?

這是第一個表的代碼。

Sub DataToTable() 

Range("C1:E3").Borders.LineStyle = xlContinuous 
Range("C:M").ColumnWidth = 4.67 
Range("C1:E1").Interior.ColorIndex = 27 
Range("C2:C3").Interior.ColorIndex = 27 

Range("D2").Value = Range("A1") 
Range("E2").Value = Range("A2") 
Range("D3").Value = Range("A3") 
Range("E3").Value = Range("A4") 

End Sub 

enter image description here

+0

沒有時間來寫一個樣本,但我會用兩個'For'循環和選擇範圍的'Cells'方法嘗試。 – FairlyLegit

+0

當您有空時,請您提供樣品嗎?我不熟悉和困惑如何使用循環。謝謝! –

+0

你的號碼是否總是適合右邊的方格(即4的冪數)? – Alex

回答

1

來完成這個任務,你必須使用循環。我將與您分享一個工作示例,其中包含允許您爲表格設置參數的變量,同時還顯示了命令For和While命令的一個示例。如果您對代碼的某些特定部分有任何疑問,請不要猶豫。

Sub DataToTable() 

Dim actualDataRow As Long 
Dim tablesPerRow As Integer 
Dim actualRowTable As Integer 
Dim actualRow As Integer 
Dim initialTableRow As Integer 
Dim initialTableColumn As Integer 

tablesPerRow = 3 
actualRow = 0 
actualRowTable = 0 

initialTableRow = 2 
initialTableColumn = 4 

actualDataRow = 1 

'Style columns (outside for) 
Range(Columns(initialTableColumn), Columns(initialTableColumn + (tablesPerRow * 4))).ColumnWidth = 4.67 

While Not IsEmpty(Cells(actualDataRow, 1)) 

    'Style table 
    Range(Cells(initialTableRow + (actualRow * 4) - 1, initialTableColumn + (actualRowTable * 4) - 1), Cells(initialTableRow + (actualRow * 4) + 1, initialTableColumn + (actualRowTable * 4) + 1)).Borders.LineStyle = xlContinuous 
    Range(Cells(initialTableRow + (actualRow * 4) - 1, initialTableColumn + (actualRowTable * 4) - 1), Cells(initialTableRow + (actualRow * 4) - 1, initialTableColumn + (actualRowTable * 4) + 1)).Interior.ColorIndex = 27 
    Range(Cells(initialTableRow + (actualRow * 4) - 1, initialTableColumn + (actualRowTable * 4) - 1), Cells(initialTableRow + (actualRow * 4) + 1, initialTableColumn + (actualRowTable * 4) - 1)).Interior.ColorIndex = 27 

    'Insert table data 
    For x = 0 To 1 
     For y = 0 To 1 
      Cells(initialTableRow + (actualRow * 4) + x, initialTableColumn + (actualRowTable * 4) + y) = Cells(actualDataRow, 1) 
      actualDataRow = actualDataRow + 1 
     Next y 
    Next x 
    If actualRowTable >= tablesPerRow - 1 Then 
     actualRowTable = 0 
     actualRow = actualRow + 1 
    Else 
     actualRowTable = actualRowTable + 1 
    End If 

Wend 

End Sub 

最好的問候,

安倍

相關問題