2017-06-26 38 views
0

これはかなり正直なものになると確信していますが、私はこのロジックに苦労しています。私は人口統計データに基づいて行数を作成しようとしています。考え方は、この値/注釈がSQLテーブルに書き込まれるということです。セルが空でない限りVBAループ

私がこれまで持っているコードは次のとおりです。

NoteCount = WorksheetFunction.CountA(Sheets("Missing").Range("B10:B7500")) 

Sheets("Missing").Range("L10").Select 

For i = 10 To NoteCount  
    If ActiveCell.Value = "" Then  
     Next i  
    Else:  
     'SQL Code entered here'  
    End If  
Next I 

私は私のForループが整列されていないとして、このコードが動作していない知っているが、私はちょうど私が達成しようとしているものを表示するようにしようとしています。

+0

2つの「次のi」は1つだけ存在する必要があります。 'If​​ Not ActiveCell.Value =" "Then 'SQLコードはここに入力されました' –

答えて

3

これは以下のコードを使用して、少し短いとsimplierで達成することができます:

Dim i As Long 

With Sheets("Missing") 
    For i = 10 To .Cells(.Rows.Count, "B").End(xlUp).Row ' loop until last row with data in column "B" (skip blank rows) 
     If Trim(.Range("L" & i).Value) <> "" Then ' check if value in cell in column "L" in current row is not empty 
      'SQL Code entered here' 
     End If 
    Next i 
End With 
+0

Thanks Shai、これは完璧に機能しました! – Carlos80

+0

@ Carlos80あなたの歓迎です、私の答えの左側にある灰色のチェックマークをクリックすることで "答え"とマークすることができます(緑に変わります)。 –

+0

完了 - もう一度ありがとうございます! – Carlos80

1

あなたが大量のデータを持っている場合、いくつかの方法が非常に遅いかもしれません。これは、列内のすべてのセルをループするよりも速くなります。

Sub test() 
    Dim rng As Range, found As Range 
    Dim firstAddress As String 

    With ThisWorkbook.Worksheets("Missing") 
     Set rng = .Range(.Range("B10"), .Cells(.Rows.Count, "B").End(xlUp)) 
     Set rng = rng.Offset(0, 10) 
    End With 

    Set found = rng.Find("", , , xlWhole) 
    If Not found Is Nothing Then 
     firstAddress = found.Address 
     Do 
      'SQL code entered here 
      Set found = rng.FindNext(found) 
     Loop While Not found.Address = firstAddress 
    End If 
End Sub 
関連する問題