Occorrenze in un array con Visual Basic

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

Avatar utente
Foto UtenteKeen
0 2
Messaggi: 6
Iscritto il: 22 nov 2014, 14:47
0
voti

[1] Occorrenze in un array con Visual Basic

Messaggioda Foto UtenteKeen » 24 nov 2014, 19:01

Salve a tutti,
premetto che è la prima volta che uso Visual Basic. Devo contare quante volte alcuni valori si ripetono in una colonna. Data la colonna con valori 1 1 5 1 5, devo avere in uscita il numero di volte in cui si ripetono i valori. Di seguito posto il codice

Codice: Seleziona tutto

Sub leggivalori()
Dim i As Integer, j As Integer, c As Integer
For i = 1 To 5
c = 0
For j = 1 To 5
If Cells(i, 1) = Cells(j, 1) Then
c = c + 1
End If
Next
Cells(i, 3) = c
Cells(i, 2) = Cells(i, 1)
Next
End Sub

Il codice da come risultato:
    1 3
    1 3
    5 2
    1 3
    5 2

che è esatto, ma vorrei che fosse solo
    1 3
    5 2
Come posso fare? Qualcuno può aiutarmi?
Grazie a tutti
O_/

Avatar utente
Foto UtenteRussell
3.373 3 5 9
Master
Master
Messaggi: 2193
Iscritto il: 4 ott 2009, 10:25
0
voti

[2] Re: Occorrenze in un array con Visual Basic

Messaggioda Foto UtenteRussell » 24 nov 2014, 22:10

E' solo un fatto di logica, non hai commesso nessun errore particolare, ti manca solo un dettaglio:
prima di partire con il conteggio (for J...) devi controllare che tu non abbia gia' controllato Cells(i, 1) in precedenza.
Quindi, una volta fissato i, devi fare subito un altro loop che scorre gli elementi passati... se l'attuale Cells(i, 1) ti è gia' passato tra le mani allora ti fermi e vai oltre.
Probabilmente ti fa' comodo la parola chiave "continue" se gia' non la conosci
http://msdn.microsoft.com/en-us/library/801hyx6f.aspx

Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
Messaggi: 5512
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia
0
voti

[3] Re: Occorrenze in un array con Visual Basic

Messaggioda Foto Utentelelerelele » 25 nov 2014, 15:47

devi controllare se esiste gia il valore della cella conteggiata; il metodo potrebbe essere questo.

-oltre la cella conteggiata salvo anche il valore interno alla cella, in un nuovo array.
-alla successiva cella verifico che il valore che sto leggendo sia gia conteggiato, se no lo aggiungo c=c+1 e ne salvo il valore per il conteggio successivo.

saluti.

Avatar utente
Foto UtenteKeen
0 2
Messaggi: 6
Iscritto il: 22 nov 2014, 14:47
0
voti

[4] Re: Occorrenze in un array con Visual Basic

Messaggioda Foto UtenteKeen » 25 nov 2014, 21:07

Ciao Russell, grazie per la tua risposta. Dicevi
una volta fissato i, devi fare subito un altro loop che scorre gli elementi passati... se l'attuale Cells(i, 1) ti è gia' passato tra le mani allora ti fermi e vai oltre.
Probabilmente ti fa' comodo la parola chiave "continue" se gia' non la conosci

ho provato ma non riesco ad ottenere nulla con la continue o forse la uso male io. Hai un suggerimento in più? Grazie mille a tutti per le risposte.
O_/

Avatar utente
Foto UtenteRussell
3.373 3 5 9
Master
Master
Messaggi: 2193
Iscritto il: 4 ott 2009, 10:25
0
voti

[5] Re: Occorrenze in un array con Visual Basic

Messaggioda Foto UtenteRussell » 25 nov 2014, 22:18

intendevo qualcosa del genere..

Codice: Seleziona tutto


For i = 1 To 5

  Ripetizione=false;
  For j = 1 To i-1
    If Cells(i, 1) = Cells(j, 1) Then
      Ripetizione=true;
    End If
  Next
  if Ripetizione Then
    continue
  end if

  c = 0
  For j = 1 To 5
    If Cells(i, 1) = Cells(j, 1) Then
      c = c + 1
    End If
  Next

  Cells(i, 3) = c
  Cells(i, 2) = Cells(i, 1)
Next
End Sub


Torna a “Programmi applicativi: simulatori, CAD ed altro”