2009-05-04 45 views
11

Tôi chỉ mới bắt đầu đi sâu vào VBA và tôi đã đánh một chút rào cản.Chọn các ô không trống trong Excel với VBA

Tôi có trang tính có hơn 50 cột, 900+ hàng dữ liệu. Tôi cần định dạng lại khoảng 10 cột và dán chúng vào một sổ làm việc mới.

Làm cách nào để chọn theo chương trình mọi ô không trống trong cột của book1, chạy nó qua một số hàm và thả kết quả trong book2?

+0

Bạn đang sử dụng chương trình nào: Excel hoặc Access? Tiêu đề câu hỏi của bạn cho biết Excel, nhưng thẻ của bạn có tên là Access. –

+0

Chắc chắn Excel, cảm ơn bạn đã chỉ ra điều đó. Đây là lý do tại sao bạn không tag vội vàng. –

Trả lời

5

VBA sau đây de sẽ giúp bạn bắt đầu. Nó sẽ sao chép tất cả dữ liệu trong sổ làm việc ban đầu sang một sổ làm việc mới, nhưng nó sẽ được thêm 1 vào mỗi giá trị và tất cả các ô trống sẽ bị bỏ qua.

Option Explicit 

Public Sub exportDataToNewBook() 
    Dim rowIndex As Integer 
    Dim colIndex As Integer 
    Dim dataRange As Range 
    Dim thisBook As Workbook 
    Dim newBook As Workbook 
    Dim newRow As Integer 
    Dim temp 

    '// set your data range here 
    Set dataRange = Sheet1.Range("A1:B100") 

    '// create a new workbook 
    Set newBook = Excel.Workbooks.Add 

    '// loop through the data in book1, one column at a time 
    For colIndex = 1 To dataRange.Columns.Count 
     newRow = 0 
     For rowIndex = 1 To dataRange.Rows.Count 
      With dataRange.Cells(rowIndex, colIndex) 

      '// ignore empty cells 
      If .value <> "" Then 
       newRow = newRow + 1 
       temp = doSomethingWith(.value) 
       newBook.ActiveSheet.Cells(newRow, colIndex).value = temp 
       End If 

      End With 
     Next rowIndex 
    Next colIndex 
End Sub 


Private Function doSomethingWith(aValue) 

    '// This is where you would compute a different value 
    '// for use in the new workbook 
    '// In this example, I simply add one to it. 
    aValue = aValue + 1 

    doSomethingWith = aValue 
End Function 
+0

Khi tôi thử chạy mã này, tôi nhận được một hộp thông báo cho biết "Đối tượng được yêu cầu". –

2

Nếu bạn đang tìm kiếm hàng cuối cùng của một cột, sử dụng:

Sub SelectFirstColumn() 
    SelectEntireColumn (1) 
End Sub 

Sub SelectSecondColumn() 
    SelectEntireColumn (2) 
End Sub 

Sub SelectEntireColumn(columnNumber) 
    Dim LastRow 
    Sheets("sheet1").Select 
    LastRow = ActiveSheet.Columns(columnNumber).SpecialCells(xlLastCell).Row 

    ActiveSheet.Range(Cells(1, columnNumber), Cells(LastRow, columnNumber)).Select 
End Sub 

lệnh khác bạn sẽ cần phải làm quen với những sao chép và dán lệnh:

Sub CopyOneToTwo() 
    SelectEntireColumn (1) 
    Selection.Copy 

    Sheets("sheet1").Select 
    ActiveSheet.Range("B1").PasteSpecial Paste:=xlPasteValues 
End Sub 

Cuối cùng, bạn có thể tham khảo bảng tính trong các sổ làm việc khác bằng cách sử dụng cú pháp sau:

Dim book2 
Set book2 = Workbooks.Open("C:\book2.xls") 
book2.Worksheets("sheet1") 
-1

Điều này có thể hoàn toàn căn cứ tắt, nhưng có thể không phải bạn chỉ cần sao chép toàn bộ cột vào một bảng tính mới và sau đó sắp xếp các cột? Tôi giả định rằng bạn không cần phải duy trì tính toàn vẹn của đơn đặt hàng.

+2

Đó là hoàn toàn tắt. –

14

Tôi biết mình là rất muộn về vấn đề này, nhưng ở đây một số mẫu hữu ích:

'select the used cells in column 3 of worksheet wks 
wks.columns(3).SpecialCells(xlCellTypeConstants).Select 

hoặc

'change all formulas in col 3 to values 
with sheet1.columns(3).SpecialCells(xlCellTypeFormulas) 
    .value = .value 
end with 

Để tìm hàng đã qua sử dụng cuối cùng trong cột, không bao giờ dựa vào LastCell, không đáng tin cậy (nó không được đặt lại sau khi xóa dữ liệu). Thay vào đó, tôi sử dụng một số thứ như

lngLast = cells(rows.count,3).end(xlUp).row 
Các vấn đề liên quan