IF条件を使用してスプレッドシート内の空白のセルを見つけ、不要な行の一部を削除して他のセルを上に移動しています。うまくいっていましたが、このデータベースを使用したときにコードはいくつかの行を削除しません。ファイルここでVBAは空白のセルを削除していません
Dim wb As Workbook
Dim Disciplinas As Worksheet
Set wb = ThisWorkbook
Set Disciplinas = wb.Sheets("Disciplinas")
Dim start_time As range
Dim i As Integer, nLines As Integer
nLines = Disciplinas.Cells(Rows.Count, 2).End(xlUp).Row
Set start_time = Disciplinas.Rows(1).Find(what:="HR_INICIO", LookIn:=xlValues, lookat:=xlWhole)
For i = 2 To nLines
If Disciplinas.Cells(i, start_time.Column) = "" Then
Disciplinas.Cells(i, 2).Resize(, 13).Delete Shift:=xlUp
End If
Next
されています:Spreadsheet(私はトラブルを抱えている細胞はE125にE105をしている他のものが既に持っている。ここで
はそれを見つけて、ラインの一部を削除し、次の部分であります初めてコードを実行したときに削除されました)。If Disciplinas.Cells(i, start_time.Column) = "" Then
の代わりに、私はvbNullString
とisEmpty() = TRUE
を試しましたが、すべてが削除されませんでした。私はスプレッドシートに式=ISBLANK()
を直接使用しました。その結果は真です。
私がコードを複数回実行すると、最終的にすべての行が削除されることに気付きました。なぜ私は最初の実行でそれをすべて削除しないのか自分に尋ねる?ありがとう。
提案:ループを逆方向に実行してください: 'For i = nLines to 2 Step -1'。 – paulsm4
説明は次のとおりです:10行(1から10までの番号が付けられています)と行2を削除し、3行目から10行目を1行上に移動して2行目から9行目(行3が行2になり、行4が行3になります) )。行の位置が変わります。 **しかし今は 'i'が増えて1行下がります**しかし、次の行はすでに*現在の行になっているので、この行を見逃してしまいます。あなたが終わりから始めるならば、私たちが上を歩くので、行が下に動くことは重要ではありません。 –
@Pehまあ、あなたが説明した後、それはかなりシンプルに思えました。ありがとうございました! – jf8769