Gabriel, imagino que a lógica e estrutura seria mais ou menos, conforme abaixo.
Caso alguns dos colegas consiga dar uma melhorada, rsrs.
Sub teste()
Dim rs_Origem As DAO.Recordset
Dim IRow As Integer
Dim valorAnterior As Integer
Dim valorAtual As Integer
Dim ProximoValor As Integer
CurrentDb.Execute "DELET * FROM [Tabela1]"
Set rs_Origem = CurrentDb.OpenRecordset("Tab_Vendas")
If rs_Origem.RecordCount > 0 Then
IRow = rs_Origem.RecordCount
While IRow <= rs_Origem.RecordCount
' Tratamento: 1ª - Linha
If IRow = rs_Origem.RecordCount Then
CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & rs_Origem(1) & ")"
' Tratamento: Última Linha
ElseIf IRow = 1 Then
CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & rs_Origem(1) & ")"
valorAtual = rs_Origem(1)
rs_Origem.MovePrevious
valorAnterior = rs_Origem(1)
rs_Origem.MoveNext
If (valorAtual = 0 And valorAnterior > 0) Then
valorAtual = valorAnterior
CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & valorAtual & ")"
Else
CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & rs_Origem(1) & ")"
End If
' Tratamento Demais Linhas
Else
If rs_Origem(1) = 0 Then
valorAtual = rs_Origem(1)
rs_Origem.MovePrevious
valorAnterior = rs_Origem(1)
rs_Origem.MoveNext
rs_Origem.MoveNext
ProximoValor = rs_Origem(1)
rs_Origem.MovePrevious
If (valorAtual = 0 And (valorAnterior > 0 And ProximoValor > 0)) Then
valorAtual = valorAnterior
CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & valorAtual & ")"
Else
CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & rs_Origem(1) & ")"
End If
End If
End If
IRow = IRow - 1
rs_Origem.MoveNext
Wend
Else
' Implementa o tratamento necessário caso a consulta não retorne valores
MsgBox "Consulta não retorna valores"
End If
End Sub