/ / VBA: come trovare la cella successiva nella stessa riga (escluse le celle nascoste) - excel, vba, excel-vba, formula excel

VBA: Come trovare la cella successiva nella stessa riga (escluse le celle nascoste) - excel, vba, excel-vba, excel-formula

Ho usato un Vlookup per restituire i valori nella colonna I,tuttavia, solo metà delle celle in questa colonna ha restituito un valore (l'altra metà è vuota). Mi piacerebbe che la mia Macro inserisse uno spazio "" in tutte le celle vuote di Vlookup invece di mantenere l'equazione di Vlookup nella cella. Voglio archiviare tutti i valori nella colonna e quindi cambiare le celle vuote in = ""

Il mio obiettivo finale è pubblicare una nota su ogni rigain base al fatto che la cella I abbia un valore o uno spazio. Se la cella I per qualsiasi linea è vuota, la cella nella colonna K per quella linea si riempirà automaticamente "Elaborato non ancora pagato", se c'è un valore nella cella I, la cella K si riempirà automaticamente "A pagamento"

Il mio problema è che non so come scrivere unequazione che evita le celle nascoste (nascoste dal filtro) e modifica solo i valori delle celle visualizzate dopo il filtro. Le intestazioni delle mie colonne sono nella riga 4 e il mio codice è presentato di seguito:

Dim Lastrow As Long
Lastrow = Cells(Rows.Count, "C").End(xlUp).Row

Range("A4:K" & Lastrow).Select
Selection.AutoFilter
ActiveSheet.Range("$A$4:$K" & Lastrow).AutoFilter Field:=9, Criteria1:="="
Range("I4").Offset(1, 0) = " "
Selection.AutoFill Destination:=Range("Range("I4").Offset(1, 0):I" &
Lastrow)

risposte:

2 per risposta № 1

Esistono diversi modi per risolvere il tuo problema. In primo luogo, puoi semplicemente inserire una formula nella colonna K per verificare se le celle nella colonna I sono vuote:

=IF(I4<>"","Paid","Processed Not Yet Paid")

Elaborato non ancora pagato

O se lo sei veramente alla ricerca di una soluzione macro, vai giù in cella per cella e controlla i valori:

Sub WhoDidntPay()
Dim lastrow As Long, i As Long
lastrow = Cells(Rows.Count, "C").End(xlUp).Row

For i = 4 To lastrow
If ActiveSheet.Range("I" & i).Value <> "" And _
ActiveSheet.Range("G" & i).Value = <> 0 Then
ActiveSheet.Range("K" & i).Value = "Processed Not Yet Paid"
Else
ActiveSheet.Range("K" & i).Value = "Paid"
End If
Next i
End Sub

Ancora una volta, suggerisco di aggiungere un IFERROR alla tua VLOOKUPs in modo che tu possa restituire un valore consistente se stai ricevendo degli errori, o se loro stanno davvero restituendo degli spazi vuoti, possono solo usare "" come nell'esempio sopra.