使用VBA在Excel中select非空白单元格

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

我有一个50 +列,900 +行的数据表。 我需要重新格式化这些列中的10个,并将其粘贴到新的工作簿中。

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

下面的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 

 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 

我知道我对此很迟,但在这里有一些有用的样本:

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

要么

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

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

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

如果您正在查找列的最后一行,请使用:

 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") 

这可能是完全脱离基地,但不能只是将整个列复制到一个新的电子表格,然后sorting列? 我假设你不需要维护订单的完整性。