Condividi tramite

array - eliminare dati

Anonimo
2013-01-29T07:58:08+00:00

Ciao

sto creando una macro che selezioni alcuni fogli di un file stabilito a seconda di alcuni fattori che stabilisco io di volta in volta. Quindi ho inserito in un foglio 'Parametri' l'elenco dei fogli del file (in colonna A) e a fianco di ogni nome foglio ho insrito un flag 'si' o 'no' (in colonna B). Il mio problema è la gestione dell'array che vado a popolare con i nomi dei fogli, perchè se ad esempio mi trovo in una situazione del genere:

foglio1 si

foglio2 si

foglio3 No

foglio4 si

foglio5 si

l'array che creo mi si valorizza

arr(0)="foglio1"

arr(1)="foglio2"

arr(2)=vuoto

arr(3)="foglio4"

arr(4)="foglio5"

E qui penso di avere 2 strade (ma non so come fare ne se effettivamenete siano le uniche due).  Ho nel ciclo dove popolo l'array salto allo step successivo, o dopo aver popolato l'array cancello gli elementi 'vuoti'.

Sapete come posso risolvere?

se è d'aiuto posso postare anche il codice che ho scritto.

Grazie

Dario

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

Anonimo
2013-01-29T09:14:30+00:00

Ciao

sto creando una macro che selezioni alcuni fogli di un file stabilito a seconda di alcuni fattori che stabilisco io di volta in volta. Quindi ho inserito in un foglio 'Parametri' l'elenco dei fogli del file (in colonna A) e a fianco di ogni nome foglio ho insrito un flag 'si' o 'no' (in colonna B). Il mio problema è la gestione dell'array che vado a popolare con i nomi dei fogli, perchè se ad esempio mi trovo in una situazione del genere:

<cut>

Dario

Foglio1. Colonna A (A1:A10) i nomi dei fogli. Colonna B (B1:B10) S o N. Voglio nell'array myArray solo i nomi fogli con S in B:

Public Sub m()

    Dim lng As Long

    Dim myArray As Variant

    Dim sh As Worksheet

    Dim lCont As Long

    Set sh = ThisWorkbook.Worksheets("Foglio1")

    lCont = 0

    ReDim myArray(lCont)

    With sh

        For lng = 1 To 10

            If .Cells(lng, 2).Value = "S" Then

                ReDim Preserve myArray(lCont)

                myArray(lCont) = .Cells(lng, 1).Value

                lCont = lCont + 1

            End If

        Next

    End With

    MsgBox myArray(3)

    Set sh = Nothing

End Sub

La risposta è stata utile?

0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-01-29T14:23:29+00:00

    <cut>

    Ok, grazie. è esattamente quello che cercavo.

    Bene!

    Ciao e grazie per il cortese riscontro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-01-29T13:31:48+00:00

    oppure, terza strada, nell'uso che farai dell'array testerai se l'elemento è vuoto (perché potrebbe essere che ti interessi mantenere la corrispondenza fra elementi dell'array e elementi d'origine).

    Per esempio così:

     

    Sub Test()

    Dim a, i

       

        a = Array(1, 2, 3, Empty, 4)

        For Each i In a

          If IsEmpty(i) Then

            Debug.Print "Vuoto"

          Else

            Debug.Print i

          End If

        Next

    End Sub

    Grazie. In realtà l'array poi lo uso per selezionare i fogli e salvarli come pdf, quindi non devo tener conto della corrispondenza.

    Dario

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-01-29T13:29:36+00:00

    Foglio1. Colonna A (A1:A10) i nomi dei fogli. Colonna B (B1:B10) S o N. Voglio nell'array myArray solo i nomi fogli con S in B:

     

    Public Sub m()

        Dim lng As Long

        Dim myArray As Variant

        Dim sh As Worksheet

        Dim lCont As Long

       

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        lCont = 0

        ReDim myArray(lCont)

       

        With sh

            For lng = 1 To 10

                If .Cells(lng, 2).Value = "S" Then

                    ReDim Preserve myArray(lCont)

                    myArray(lCont) = .Cells(lng, 1).Value

                    lCont = lCont + 1

                End If

            Next

        End With

       

        MsgBox myArray(3)

       

        Set sh = Nothing

       

    End Sub

    Ok, grazie. è esattamente quello che cercavo.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-01-29T10:45:01+00:00

    [...]

    E qui penso di avere 2 strade (ma non so come fare ne se effettivamenete siano le uniche due).  Ho nel ciclo dove popolo l'array salto allo step successivo, o dopo aver popolato l'array cancello gli elementi 'vuoti'.

    oppure, terza strada, nell'uso che farai dell'array testerai se l'elemento è vuoto (perché potrebbe essere che ti interessi mantenere la corrispondenza fra elementi dell'array e elementi d'origine).

    Per esempio così:

    Sub Test()

    Dim a, i

        a = Array(1, 2, 3, Empty, 4)

        For Each i In a

          If IsEmpty(i) Then

            Debug.Print "Vuoto"

          Else

            Debug.Print i

          End If

        Next

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento