2009-05-04 13 views
11

Właśnie zaczynam nurkować w VBA i trafiłem na blokadę drogi.Wybieranie niepustych komórek w Excelu za pomocą VBA

Mam arkusz z ponad 50 kolumnami, ponad 900 rzędów danych. Muszę sformatować około 10 takich kolumn i wkleić je w nowym skoroszycie.

Jak programowo wybrać każdą niepustą komórkę w kolumnie book1, uruchomić ją przez niektóre funkcje i upuścić wyniki w book2?

+0

Który program używasz: Excel lub Access? Twój tytuł pytania mówi Excel, ale twoje tagi mówią Access. –

+0

Zdecydowanie Excel, dzięki za wskazanie tego. Dlatego nie taguj w pośpiechu. –

Odpowiedz

5

Następująca wersja VBA de powinien zacząć. Spowoduje to skopiowanie wszystkich danych z oryginalnego skoroszytu do nowego skoroszytu, ale doda 1 do każdej wartości, a wszystkie puste komórki zostaną zignorowane.

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

Kiedy próbuję uruchomić ten kod, otrzymuję komunikat "Wymagany obiekt". –

2

Jeśli szukasz ostatnim wierszu kolumny, użyj:

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 

innych poleceń trzeba będzie zapoznać się z są polecenia kopiowania i wklejania:

Sub CopyOneToTwo() 
    SelectEntireColumn (1) 
    Selection.Copy 

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

Wreszcie, może odnosić się do arkuszy roboczych w innych skoroszytach, używając następującej składni:

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

To może być całkowicie wyłączony podstawa, ale nie można po prostu skopiować całą kolumnę do nowego arkusza, a następnie posortować kolumnę? Zakładam, że nie musisz utrzymywać integralności zamówienia.

+2

To jest całkowicie poza bazą. –

14

Wiem, że jestem bardzo późno na to, ale tutaj kilka próbek Przydatne:

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

lub

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

Aby znaleźć ostatnio używany wiersz w kolumnie, nigdy polegać na LastCell, co jest niewiarygodne (nie jest resetowane po usunięciu danych). Zamiast tego używam czegoś takiego, jak:

Powiązane problemy