2013-06-05 16 views
8

Tôi muốn chèn các cột riêng biệt vào một báo cáo Excel để làm cho các cột hiện có dễ xem hơn.Làm cách nào để chèn cột động trong Excel?

Báo cáo được tạo động và tôi không bao giờ biết có bao nhiêu cột sẽ có; có thể là 5, 10, 17 vv

Phần khởi điểm F và đi vào ival=Application.WorksheetFunction.CountIf(range("D2:D" & LastRow), "Other")

Vì vậy, nếu ival=10 sau đó các cột là FGHIJKLMNO, và tôi cần phải chèn cột giữa F & G, G & H, H & tôi, tôi & J, ... và N & O.

Đây có thể là một khả năng cho cột chèn: Workbooks("yourworkbook").Worksheets("theworksheet").Columns(i).Insert

Nhưng tôi không chắc chắn như thế nào để lặp qua ival.

Sub InsertColumns() 
    Dim iVal As Integer 
    Dim Rng As range 
    Dim LastRow As Long 
    Dim i As Integer 

    With Sheets("sheet1") 
     LastRow = .range("D" & .Rows.Count).End(xlUp).Row 
    End With 

    iVal = Application.WorksheetFunction.CountIf(range("D2:D" & LastRow), "Other") 

    For i = 7 To iVal - 1 
    Workbooks("yourworkbook").Worksheets("theworksheet").Columns(i+1).Insert 
    Next i 

End Sub 

Trả lời

9

Mã dưới đây sẽ làm việc mà không cần phải lo lắng về ival:

Sub InsertSeparatorColumns() 

    Dim lastCol As Long 

    With Sheets("sheet1") 
     lastCol = Cells(2, .Columns.Count).End(xlToLeft).Column 

     For i = lastCol To 7 Step -1 
      .Columns(i).Insert 
      .Columns(i).ColumnWidth = 0.5 
     Next 

    End With 

End Sub 
3

Hãy thử điều này:

Sub InsertSeparatorColumns() 
    Dim ws as Worksheet 
    Dim firstCol As String 
    Dim lastRow As Long 
    Dim i As Long 
    Dim howManySeparators As Long 

    Set ws = ThisWorkbook.Sheets("Sheet1") 
    firstCol = "F" 
    lastRow = ws.Range("D" & ws.Rows.Count).End(xlUp).Row 
    howManySeparators = Application.WorksheetFunction.CountIf _ 
          (ws.range("D2:D" & LastRow), "Other") 

    For i = 1 To howManySeparators * 2 Step 2 
     ws.Range(firstCol & 1).Offset(, i).EntireColumn.Insert 
    Next i 
End Sub