Tentativo di utilizzare una formula IF per copiare dinamicamente il contenuto della cella data la presenza di un valore specifico

0

Ho bisogno di duplicare le celle da un foglio di lavoro a un altro se il record associato [riga] contiene una determinata parola.

Dire che la riga 2 ha "pippo" nella cella A, vorrei duplicare tutte le celle di quella riga in un'altra cartella di lavoro. Se A3 ha "floop" al suo interno, nessuna cella dovrebbe essere duplicata: sarebbe saltata essenzialmente (senza una riga vuota).

I dati sono così:

    A   |   B   |  C

2  foo  | blah  | blah

3 floop | blah  | blah

4  foo  | blah  | blah

La tabella risultante sarebbe così:

    A   |   B   |  C

2  foo  | blah  | blah

3  foo  | blah  | blah

-

Questo è quanto ho ottenuto:

Ho creato una tabella helper che inizia con A52 per ordinare i dati per cui "foo" è presente nella colonna A utilizzando la formula = IF (ISNUMBER (SEARCH ("foo", a2)), a2, "") [Che ho una sensazione è ridondante, ma è l'unico bit che sembra funzionare.]

Nel tavolo finale sto usando = IF (ISNUMBER (ISBLANK (A52)), A2, [!!!!!]) [Wherein [!!!!!] è il codice di visualizzazione che non conosco.] Risolve come "FALSE"

So che probabilmente è una domanda elementare, ma non ho avuto fortuna nel trovare una risposta altrove.

Grazie in anticipo! - p

PS Mentre scrivo questo mi rendo conto che avrò bisogno di elaborare l'intera riga anziché le singole celle, quindi probabilmente avrò bisogno di un altro approccio. Oh bene! Sono arrivato così lontano!

    
posta Alexis Rachel 20.04.2018 - 01:15
fonte

1 risposta

1

L'utilizzo di una formula IF per ottenere questo risultato sarà problematico per una serie di motivi. Ma supponendo che tu abbia funzionato, avrai sempre il problema che una formula deve essere collocata all'interno di una cella e quindi la tua cartella di lavoro non è scalabile (cioè cosa succede nel tempo se / quando aggiungi / cancella le righe)? Certo, puoi aggirare anche questo (ad esempio formattando i tuoi dati come una tabella / lista appropriata), ma dalla mia esperienza sarebbe meglio usare una macro per farlo.

Passaggio 1: aggiungi la scheda Sviluppo per Excel

Prima di tutto è necessario assicurarsi di avere la scheda Sviluppatore visibile nella barra multifunzione di Excel. Se è già lì (in genere è l'ultimo dopo la scheda Visualizza, quindi vai al Passaggio 2: creazione della tua macro. Altrimenti, procedi nel seguente modo:

  1. Avvia MS Excel
  2. Vai a Excel > Preferenze (o semplicemente premi il comando , chiavi)
  3. Seleziona la barra multifunzione e amp; Icona della barra degli strumenti
  4. Verifica che la scheda della barra multifunzione sia selezionata in alto
  5. Sul lato destro vedrai un elenco di schede - seleziona la casella di controllo accanto alla scheda Sviluppatore (probabilmente è elencata in fondo)
  6. Fai clic sul pulsante Salva
  7. Esci dalle preferenze
  8. Ora vedrai la scheda Sviluppatore (vedi immagine sotto):

Passaggio2:creazionedellatuamacro

Oradobbiamocrearelatuamacro.Seguiquestipassaggi:

  1. InExcel,assicuratidiaverelacartelladilavoroaperta
  2. SelezionalaschedaSviluppatore
  3. Faiclicsull'opzionediVisualBasic(all'estremitàsinistradellabarramultifunzione)
  4. SiapriràlafinestradiMicrosoftVisualBasic
  5. Laparteinaltoasinistradellafinestradovrebbeavereunaspettosimilea:

  6. Ora fai clic con il tasto destro su ThisWorkbook e seleziona Insert > Modulo (vedi sotto)

  1. In pochi istanti dovresti vedere una finestra bianca aperta sul lato destro dell'editor di Visual Basic
  2. Ora copia il codice qui sotto e incollalo nello spazio bianco:

    Sub CopyRowsBasedOnCellValue()
    'This macro copies rows from one worksheet to another within the same workbook if that row contains a specific value in Column A
        Dim xRg As Range
        Dim xCell As Range
        Dim X As Long
        Dim Y As Long
        Dim Z As Long
        X = Worksheets("Sheet1").UsedRange.Rows.Count
        Y = Worksheets("Sheet2").UsedRange.Rows.Count
        If Y = 1 Then
            If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then Y = 0
        End If
        Set xRg = Worksheets("Sheet1").Range("A1:A" & X)
        On Error Resume Next
        Application.ScreenUpdating = False
        For Z = 1 To xRg.Count
            If CStr(xRg(Z).Value) = "foo" Then
                xRg(Z).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & Y + 1)
                Y = Y + 1
            End If
        Next
        Application.ScreenUpdating = True
    End Sub
    
  3. Ora dovresti vedere qualcosa di simile al seguente:

  • Ora dovrai personalizzare questo codice leggermente poiché è scritto in modo specifico per l'esempio nella tua domanda. Devi personalizzare i seguenti aspetti:

    • Sostituisci le due istanze di Sheet1 con il nome del tuo primo foglio di lavoro (cioè quello da cui stai copiando)
    • Sostituisci le tre istanze di Sheet2 con il nome del tuo secondo foglio di lavoro (cioè quello su cui stai copiando)
    • L'istanza di A1:A indica che la colonna è stata cercata per il valore che stai cercando di abbinare (cioè il valore "pippo" nell'esempio.) Se non è la colonna A nel tuo foglio di lavoro, quindi modifica l'A in qualsiasi colonna deve essere. Ad esempio, se il tuo foglio di lavoro contiene il valore "pippo" nella colonna D, allora questo deve essere D1:D
    • Infine, vedrai una singola istanza di "foo" nel codice. Sostituisci il foo con qualunque valore tu stia cercando di abbinare.
  • Infine, dovrai salvare la tua cartella di lavoro come una macro abilitata. Per fare ciò, fare clic sull'icona di Excel in alto a sinistra per tornare a Excel e quindi selezionare l'opzione Salva con nome dal menu File. Per il formato del file, devi selezionare l'opzione Cartella di lavoro con attivazione macro di Excel (.xlsm) dall'elenco a discesa.

  • Passaggio 3: utilizzo della macro

    Ora sei pronto per partire. Per utilizzare la macro, attenersi alla seguente procedura:

    1. Avvia Excel e apri la cartella di lavoro
    2. Seleziona la scheda Sviluppatore
    3. Fai clic sull'icona Macro (dovrebbe essere la seconda)
    4. Questo farà apparire la finestra Macro:
    5. Seleziona la macro CopyRowsBAsedOnCellValue (vedi sotto)

  • Fai clic sul pulsante Esegui
  • La tua macro verrà eseguita e tutte le righe che corrispondono ai criteri verranno copiate sul foglio di destinazione. Di seguito un'immagine che mostra gli scatti precedenti e successivi, in base al tuo esempio:
  • Nota:ilcodiceprecedenteèstatoadattatodalcodiceoriginariamentetrattoda link . Non ho alcuna affiliazione con quel sito web.     
    risposta data 21.04.2018 - 03:30
    fonte

    Leggi altre domande sui tag