2009-05-04 12 views
11

VBAを始めたばかりで、私は少しのロードブロッキングを打ちました。VBAでExcelで空白以外のセルを選択

私は50以上の列、900以上のデータ行を持つシートを持っています。私はそれらの列の約10を再フォーマットし、それらを新しいワークブックに貼り付ける必要があります。

book1の列の空白でないセルをすべてプログラムで選択し、いくつかの関数を実行して結果をbook2にドロップするにはどうすればよいですか?あなたは、列の最後の行を探しているなら

+0

どのプログラムを使用していますか?ExcelまたはAccess?あなたの質問のタイトルはExcelと言いますが、あなたのタグはアクセスと言います。 –

+0

間違いなくExcelを指摘してくれてありがとう。これは、あなたが急いでタグ付けしない理由です。 –

答えて

5

次の構文を使用して、他のブックのワークシートを参照できます。 deはあなたを始めなければなりません。元のブックのすべてのデータを新しいブックにコピーしますが、各値に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 
+0

このコードを実行しようとすると、「オブジェクトが必要です」というメッセージボックスが表示されます。 –

2

使用:

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

これは完全にオフベースかもしれませんが、あなただけの新しいスプレッドシートに列全体をコピーして列を並べ替えることはできませんか?私はあなたが注文の完全性を維持する必要はないと仮定しています。

+2

これは完全にオフベースです。 –

14

私はこの上で非常に遅れていますが、ここではいくつかの便利なサンプルを私は知っている:

'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 
関連する問題