2009-05-04 25 views
11

Sadece VBA'ya dalmaya başlıyorum ve biraz engel var.Excel'de VBA ile olmayan boş hücrelerin seçilmesi

50+ sütunlu, 900+ satırlık veri içeren bir sayfam var. Bu sütunların yaklaşık 10'unu yeniden biçimlendirmem ve yeni bir çalışma kitabına yapıştırmam gerekiyor.

Kitap1 sütununda boş olmayan her hücreyi program aracılığıyla nasıl seçerim, bazı işlevler aracılığıyla çalıştırın ve sonuçları kitap2'ye bırakın. Eğer bir sütunun son satırın arıyorsanız

+0

gibi bir programı kullanıyorum. Hangi programı kullanıyorsunuz: Excel veya Access? Soru başlığınız Excel diyor, ancak etiketleriniz Erişim diyor. –

+0

Kesinlikle Excel, bunu işaretlediğiniz için teşekkürler. Bu yüzden aceleyle etiketlemiyorsun. –

cevap

5

Aşağıdaki VBA co de başlaman gerek. Orijinal çalışma kitabındaki tüm verileri yeni bir çalışma kitabına kopyalar, ancak her değere 1 eklemiş olacak ve tüm boş hücreler göz ardı edilecektir.

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

Bu kodu çalıştırmayı denediğimde, "Object required." Yazan bir ileti kutusu alıyorum. –

2

kullanın:

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 

Diğer komutlar sen kopyalama ve yapıştırma tanımak gerekir: Nihayet

Sub CopyOneToTwo() 
    SelectEntireColumn (1) 
    Selection.Copy 

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

, seni Aşağıdaki sözdizimini kullanarak çalışma kitaplarına başvuruda bulunabilirsiniz:

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

Bu tamamen kapalı tabanı olabilir, ama sadece yeni bir elektronik tabloya tüm sütun kopyalayıp sonra sütunu sıralamak değil mi? Sipariş bütünlüğünü korumanıza gerek olmadığını farz ediyorum.

+2

Bu tamamen temel dışıdır. –

14

ben değilim bu konuda çok geç kaldım biliyorum ama burada bazı faydalı örnekleri:

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

veya

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

sütununda son kullanılan satır bulmak için, LastCell itimat asla Hangi güvenilir değil (veri sildikten sonra sıfırlanmaz). Bunun yerine,

İlgili konular