Cerca valore nella colonna che corrisponde a un’altra colonna E una data?

Ho dati memorizzati in tre colonne di Excel

Colonna: Numero Di Serie
Colonna B: Data
Colonna C: Valore (ad esempio, Costo)

Ho bisogno di cercare il Valore (Colonna C) associato con un particolare Numero di Serie (Colonna A) E la Data (Colonna B).

Così, per esempio, nello screenshot qui sotto, se voglio guardare per il Valore associato con il numero di Serie (T455) e la Data (13 Dic, 2010), il valore dovrebbe essere di 8.

Cerca valore nella colonna che corrisponde a un'altra colonna E una data?

L’unico metodo che può venire su con sarebbe estremamente inefficiente, perché vorrei passare attraverso TUTTE le cellule di ogni volta che mi guardo per un valore di.

C’è un metodo, per esempio, che limita l’area di ricerca per un determinato numero di serie?

Per esempio, se io sono alla ricerca di un valore per il Numero di Serie T455, come posso limitare il codice per cercare la data in Righe (6-13) e trovare il corrispondente valore nella Colonna C, piuttosto che cercando in tutta la tabella?

Sub FindValue()

Dim S as String
Dim D as Date
Dim V as Integer

S = T455
D = Dec 13, 2010

for i = 1 to Range("A1").End(xldown).Row 

If Range("A" & i) = S And Range("B" & i) < Date - 7 And Range("B" & i) < Date + 7   Then
' This way i search a date range rather than a specific date

V = Range("C" & i).Value

End If

End Sub

Ho pensato di cicli While, o le funzioni di Ricerca, ma ha raggiunto un punto morto.

InformationsquelleAutor Alaa Elwany | 2012-06-27



2 Replies
  1. 2

    Non-Soluzione VBA che può essere molto più facile e meno di un mal di testa.

    Colonna è costituito da Una formula, per A1 = “=B1&C1”

    Cella G1 formula può essere visto nella barra della formula.

    Cerca valore nella colonna che corrisponde a un'altra colonna E una data?

    AGGIORNAMENTO
    Qui è una soluzione VBA che funzionerà più velocemente, ma ci sono alcune note sulla base di quello che hai scritto che io sono sicuro di. Anche, vedere alcuni commenti per aiutare il lavoro di codice più come si desidera.

    Sub FindValue()
    
    Dim S As String, D As Date, V As Integer, rngFound As Range, cel As Range
    
    S = "T455" 'needs quotes around the string
    D = "Dec 13, 2010" 'needs quotes around the date
    
    Dim wks As Worksheet
    Set wks = ActiveSheet
    
    With wks
    
         'always better to AutoFilter than Loop when you can!
        .UsedRange.AutoFilter 1, S
        .UsedRange.AutoFilter 2, ">" & D - 7, xlAnd, "<" & D + 7
    
        Set rngFound = Intersect(.UsedRange, .Columns(3)).SpecialCells(xlCellTypeVisible)
    
        'the only thing here is if you have a date range _
            'you may return more than one result _
            'in that case, I don't know what you want to do with all the V's
    
        If Not rngFound Is Nothing Then
            For Each cel In rngFound
                V = cel.Value
            Next
        End If
    
        .AutoFilterMode = False
    
    End With
    
    End Sub
    • Mi piace questa idea, ma ha alcuni problemi in base alla data di/serie di combo. Per esempio, se si ha “S111” & “1/1/2000”, vedrai che questo crea lo stesso valore “S110” & “1/1/2000”. Oltre a questo, è un’ottima e semplice soluzione.
    • A pensarci un po ‘ di più, probabilmente si potrebbe evitare questo con l’aggiunta di un carattere di sottolineatura o simili delimitatore non presente in serie/data di colonne. Inoltre, se si esegue i tipi come ho già detto, è possibile utilizzare alcuni molto veloce di metodi di ricerca senza VBA.
    • come la concatenazione di S111 & 1/1/2000 e S110 & 1/1/2000 creare lo stesso valore? Se si esegue questa operazione su un foglio di calcolo, i primi risultati S11136526 e il 2 ° nel ‘S11036526` (utilizza il numero seriale della data)
    • Errore mio, intendevo qualcosa di più simile ad S111 & 1/1/2000 e S11 & 10/16/2273 (entrambi finiscono come S11136526) o S1113 & 11/12/1917, ma per gli intervalli di date Alaa è probabile che l’utilizzo, questo non dovrebbe essere un problema.
    • oh, va bene. Che è una grande punto, ma come si dice, in cui l’utente non può mai trovare se stesso. È in questi casi il pensiero che ti insegnano a essere un programmatore migliore / formula scrittore.
    • Scott, questo codice mi dà un eccellente inizio. Penso di poter modificare e realizzare quello che sto cercando. Vi farò sapere se ho altre domande!
    • Scott, il codice (dopo alcune modifiche per adattare la mia applicazione) funziona perfettamente. Vi ringrazio molto!

  2. 1

    Se si è disposti a intrattenere una non-soluzione VBA, quindi è possibile utilizzare questa implementazione, che sostanzialmente si utilizza la seguente formula:

    =IFERROR(INDEX(List, MATCH(0, COUNTIF(H1:$H$1, List)+
      IF(Category2<>Criteria2, 1, 0)+IF(Category1<>Criteria1, 1, 0), 0)), "")

    Ci sono diversi VBA metodi, che in realtà dipendono da come comodo si sta con la lingua e come efficiente si desidera che la vostra soluzione. Fuori della parte superiore della mia testa:

    1) filtrare l’elenco con entrambi i criteri, per poi tornare a il valore corrispondente in qualunque riga è visibile (se del caso)

    2) ordinare i dati da queste due colonne (la prima da seriale, quindi la data), quindi eseguire ricerche (si sarebbe probabilmente desidera chiamare le funzioni built-in come MATCH)

    • Grazie mille Zaiirja. Ho messo tutto questo in considerazione. Grazie per i vostri preziosi commenti troppo.

Lascia un commento