Domanda

Sto appena iniziando ad immergermi in VBA e ho raggiunto un po 'di un blocco stradale.

Ho un foglio con oltre 50 colonne, oltre 900 righe di dati. Devo riformattare circa 10 di quelle colonne e inserirle in una nuova cartella di lavoro.

Come posso selezionare a livello di programmazione ogni cella non vuota in una colonna di book1, eseguirla attraverso alcune funzioni e rilasciare i risultati in book2?

È stato utile?

Soluzione

Il seguente codice VBA dovrebbe iniziare. Copierà tutti i dati nella cartella di lavoro originale in una nuova cartella di lavoro, ma avrà aggiunto 1 a ciascun valore e tutte le celle vuote saranno ignorate.

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

Altri suggerimenti

So di essere in ritardo, ma qui alcuni esempi utili:

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

o

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

Per trovare l'ultima riga utilizzata nella colonna, non fare mai affidamento su LastCell, che non è affidabile (non viene ripristinato dopo l'eliminazione dei dati). Invece, uso qualcosa come

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

Se stai cercando l'ultima riga di una colonna, usa:

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

Altri comandi che ti serviranno per familiarizzare sono i comandi copia e incolla:

Sub CopyOneToTwo()
    SelectEntireColumn (1)
    Selection.Copy

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

Infine, puoi fare riferimento a fogli di lavoro in altre cartelle di lavoro usando la sintassi seguente:

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

Questo potrebbe essere completamente fuori base, ma non puoi semplicemente copiare l'intera colonna in un nuovo foglio di calcolo e quindi ordinare la colonna? Presumo che non sia necessario mantenere l'integrità dell'ordine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top