Frage

Ich bin erst am Anfang in VBA zu tauchen und ich habe ein bisschen ein Hindernis treffen.

Ich habe ein Blatt mit 50 + Spalten, 900+ Datenzeilen. Ich brauche etwa 10 diese Spalten zu formatieren und sie in einer neuen Arbeitsmappe bleiben.

Wie programmatisch ich jede nicht leere Zelle in einer Spalte von book1 wählen, es durch einige Funktionen ausführen und die Ergebnisse in book2 fallen?

War es hilfreich?

Lösung

Der folgende VBA-Code sollten Sie loslegen. Es wird alle Daten in der ursprünglichen Arbeitsmappe in eine neue Arbeitsmappe kopieren, aber es wird 1 zu jedem Wert hinzugefügt haben, und alle leeren Zellen ignoriert haben werden.

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

Andere Tipps

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 zu finden, verläßt nie auf LastCell, die unzuverlässig ist (es wird nicht zurückgesetzt, nachdem die Daten zu löschen). Stattdessen verwende ich someting wie

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

Wenn Sie für die letzte Zeile einer Spalte suchen, verwenden Sie:

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

Weitere Befehle müssen Sie mit sind Kopieren und Einfügen-Befehle vertraut machen:

Sub CopyOneToTwo()
    SelectEntireColumn (1)
    Selection.Copy

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

Schließlich können Sie Arbeitsblätter in anderen Arbeitsmappen verweisen, indem Sie die folgende Syntax:

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

Dies könnte völlig außerhalb der Basis sein, aber können Sie nicht nur kopieren Sie die gesamte Spalte in eine neue Tabelle und dann auf die Spalte sortieren? Ich gehe davon aus, dass Sie nicht die Reihenfolge Integrität beibehalten müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top