2009-05-04 21 views
11

Ich fange gerade an, in VBA einzutauchen, und ich habe ein bisschen eine Straßensperre getroffen.Auswählen von nicht leeren Zellen in Excel mit VBA

Ich habe ein Blatt mit 50 + Spalten, 900 + Zeilen von Daten. Ich muss ungefähr 10 dieser Spalten neu formatieren und sie in ein neues Arbeitsbuch stecken.

Wie programmiere ich programmatisch jede nicht leere Zelle in einer Spalte von Buch1, führen Sie es durch einige Funktionen und lassen Sie die Ergebnisse in Buch2?

+0

Welches Programm verwenden Sie: Excel oder Access? Ihr Fragentitel sagt Excel, aber Ihre Tags sagen Access. –

+0

Definitiv Excel, vielen Dank, dass Sie darauf hingewiesen haben. Deshalb markieren Sie nicht in Eile. –

Antwort

5

Die folgende VBA co de sollte dich beginnen. Alle Daten in der ursprünglichen Arbeitsmappe werden in eine neue Arbeitsmappe kopiert, aber jedem Wert wird 1 hinzugefügt, und alle leeren Zellen wurden ignoriert.

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

Wenn ich versuche, diesen Code auszuführen, erhalte ich die Meldung "Objekt erforderlich". –

2

Wenn Sie nach der letzten Zeile einer Spalte suchen, benutzen

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 

Andere Befehle, die Sie benötigen, um mit sind Kopieren und Einfügen-Befehle vertraut zu machen:

Sub CopyOneToTwo() 
    SelectEntireColumn (1) 
    Selection.Copy 

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

, Sie schließlich kann auf Arbeitsblätter in anderen Arbeitsmappen verweisen, indem die folgende Syntax verwendet:

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

Dies könnte völlig außerhalb der Basis, aber Sie kopieren nicht nur die gesamte Spalte in eine neue Tabelle und dann auf die Spalte sortieren? Ich nehme an, dass Sie die Bestellungsintegrität nicht aufrechterhalten müssen.

+2

Das ist komplett von der Basis. –

14

Ich weiß, ich bin bin sehr spät auf diese, aber hier einige nützliche Beispiele:

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

oder

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

Um die zuletzt benutzte Zeile in Spalte verlassen nie auf LastCell zu finden, was unzuverlässig ist (es wird nicht zurückgesetzt, nachdem Daten gelöscht wurden). Stattdessen benutze ich etwas wie

lngLast = cells(rows.count,3).end(xlUp).row 
Verwandte Themen