Condividi tramite

Conta valori unici

Anonimo
2014-03-17T08:57:04+00:00

Buongiorno,

oggi ho un piccolo problema che vorrei risolvere;

ho una colonna con dei testi non univoci e non continua ad esempio

ACQUA
LATTE
ACQUA

Avrei bisogno di contare quante sono le celle non vuote (e qui pensavo a conta.valori) ma univocamente, ovvero ACQUA  deve venire contata solo una volta in modo tale che il risultato della soprastante sia 2 e non 3.

Devo crearmi una specifica macro oppure esiste qualche formula?

Ringrazio

A

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2014-03-18T10:53:09+00:00

    Buongiorno!

    chiedo venia, preso dalla foga di risolvere mi sono completamente dimenticato di dirvi che deve essere inserito in una macro, quindi la domanda la riformulo così:

    Come posso contare univocamente dei valori non contigui presenti in una colonna con una macro?

    Grazie

    A

    Leggi qui, per favore:

    Grazie.

    Per la tua NUOVA domanda, sempre basandomi sui dati che ho postato in precedenza (da A2 a A10 del Foglio1):

    Public Sub m()

        Dim sh As Worksheet

        Dim lng As Long

        Dim rng As Range

        Dim c As Range

        Dim col As Collection

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        Set col = New Collection

        With sh

            Set rng = .Range("A2:A10")

            On Error Resume Next

            For Each c In rng

                If Len(c.Value) > 0 Then

                    col.Add CStr(c.Value), CStr(c.Value)

                End If

            Next

            lng = col.Count

        End With

        MsgBox lng

        Set col = Nothing

        Set c = Nothing

        Set rng = Nothing

        Set sh = Nothing

    End Sub

    Modifica nome del foglio e Range con i tuoi.

    Volendo, all'interno della macro potresti anche ciclare/recuperare/utilizzare gli items della Collection(in grassetto le parti aggiunte):

    Public Sub m()

        Dim sh As Worksheet

        Dim lng As Long

        Dim rng As Range

        Dim c As Range

        Dim col As Collection

    Dim v As Variant

    Dim s As String

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        Set col = New Collection

        With sh

            Set rng = .Range("A2:A10")

            On Error Resume Next

            For Each c In rng

                If Len(c.Value) > 0 Then

                    col.Add CStr(c.Value), CStr(c.Value)

                End If

            Next

            lng = col.Count

        End With

        MsgBox lng

    For Each v In col

    s = s & v & vbNewLine

    Next

    MsgBox s

        Set col = Nothing

        Set c = Nothing

        Set rng = Nothing

        Set sh = Nothing

    End Sub

    In entrambi i casi NON ho implementato la correzione delle eccezioni(errori) lasciando a te il compito. Vedi comunque qui:

    La risposta è stata utile?

    0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2014-03-17T09:57:49+00:00

    Ciao!

    Senza offesa, questo articolo lo avevo già sperimentato prima di fare la domanda.

    Non ho avuto i risultati desiderati quindi nel frattempo ho pensato una cosa del genere:

    Sicuro?

    A2: a

    A3: b

    A4:

    A5: b

    A6:

    A7: a

    A8: d

    A9:

    A10: c

    B1: =SOMMA(SE(FREQUENZA(SE(LUNGHEZZA(A2:A10)>0;CONFRONTA(A2:A10;A2:A10;0);""); SE(LUNGHEZZA(A2:A10)>0;CONFRONTA(A2:A10;A2:A10;0);""))>0;1))

    Da confermare con CTRL+SHIFT+Invio - Risultato 4

    La risposta è stata utile?

    0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2014-03-17T09:41:00+00:00

    Ciao!

    Senza offesa, questo articolo lo avevo già sperimentato prima di fare la domanda.

    Non ho avuto i risultati desiderati quindi nel frattempo ho pensato una cosa del genere:

    Copio la colonna ed eseguo questa macro

    For i = 1 To l - 1

        For n = i + 1 To l

            If cell(n, 1) Like cell(i, 1) Then

                cell(n, 1).Clear

            End If

        Next

    Next

    Foglio.Range("E2").Formula = "Conta.valori"

    quindi elimino la copia.

    Ok,non è scritto a regola d'arte ma è solo per rendere l'idea.

    Grazie

    A

    mmmm... troppo lavoro per nulla.

    Copia questa:

    1. in ipotesi che in prima riga vi sia il titolo:

    =SOMMA(SE(FREQUENZA(SE(LUNGHEZZA(A2:A100)>0;CONFRONTA(A2:A100;A2:A100;0);""); SE(LUNGHEZZA(A2:A100)>0;CONFRONTA(A2:A100;A2:A100;0);""))>0;1)) matriciale, cioè da confermare con Ctrl+Maiusc+Invio

    1. in ipotesi che in prima riga non vi sia il titolo ma subito i dati:

    =SOMMA(SE(FREQUENZA(SE(LUNGHEZZA(A1:A100)>0;CONFRONTA(A1:A100;A1:A100;0);""); SE(LUNGHEZZA(A1:A100)>0;CONFRONTA(A1:A100;A1:A100;0);""))>0;1)) sempre matriciale.

    La risposta è stata utile?

    0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-03-17T09:32:08+00:00

    Ciao!

    Senza offesa, questo articolo lo avevo già sperimentato prima di fare la domanda.

    Non ho avuto i risultati desiderati quindi nel frattempo ho pensato una cosa del genere:

    Copio la colonna ed eseguo questa macro

    For i = 1 To l - 1

        For n = i + 1 To l

            If cell(n, 1) Like cell(i, 1) Then

                cell(n, 1).Clear

            End If

        Next

    Next

    Foglio.Range("E2").Formula = "Conta.valori"

    quindi elimino la copia.

    Ok,non è scritto a regola d'arte ma è solo per rendere l'idea.

    Grazie

    A

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-03-17T09:06:51+00:00

    <cut>

    Devo crearmi una specifica macro oppure esiste qualche formula?

    Ringrazio

    Guida di Excel, qui:

    Prova, sperimenta, poi se non riesci, chiedi sempre in questo post.

    La risposta è stata utile?

    0 commenti Nessun commento