用VBA在Excel中选择非空白单元格

用VBA在Excel中选择非空白单元格,vba,excel,spreadsheet,Vba,Excel,Spreadsheet,我刚刚开始深入VBA,遇到了一些障碍 我有一个包含50多列、900多行数据的工作表。我需要重新格式化其中的10列,并将它们粘贴到新的工作簿中 如何以编程方式选择book1列中的每个非空单元格,通过一些函数运行它,并将结果放入book2?如果要查找列的最后一行,请使用: Sub SelectFirstColumn() SelectEntireColumn (1) End Sub Sub SelectSecondColumn() SelectEntireColumn (2) End

我刚刚开始深入VBA,遇到了一些障碍

我有一个包含50多列、900多行数据的工作表。我需要重新格式化其中的10列,并将它们粘贴到新的工作簿中


如何以编程方式选择book1列中的每个非空单元格,通过一些函数运行它,并将结果放入book2?

如果要查找列的最后一行,请使用:

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
您需要熟悉的其他命令包括复制和粘贴命令:

Sub CopyOneToTwo()
    SelectEntireColumn (1)
    Selection.Copy

    Sheets("sheet1").Select
    ActiveSheet.Range("B1").PasteSpecial Paste:=xlPasteValues
End Sub
最后,您可以使用以下语法参考其他工作簿中的工作表:

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

下面的VBA代码应该可以帮助您开始。它会将原始工作簿中的所有数据复制到新工作簿中,但每个值都会增加1,所有空白单元格都会被忽略

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

这可能是完全不正确的,但您不能将整个列复制到新的电子表格中,然后对列进行排序吗?我假设您不需要维护订单的完整性。

我知道我已经很晚了,但这里有一些有用的示例:

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

要查找列中最后使用的行,请不要依赖LastCell,这是不可靠的(删除数据后不会重置)。相反,我用的是

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

您使用的是哪个程序:Excel还是Access?你的问题标题是Excel,但你的标签是Access。绝对是Excel,谢谢你指出这一点。这就是为什么您不急于标记。当我尝试运行此代码时,会收到一个消息框,上面写着“需要对象”
'change all formulas in col 3 to values
with sheet1.columns(3).SpecialCells(xlCellTypeFormulas)
    .value = .value
end with
 lngLast = cells(rows.count,3).end(xlUp).row