Inserisci riga se

Anonimo
2014-05-28T10:06:36+00:00

E' possibile creare una funzione che mi permetta di inserire delle righe in un foglio dove una cella soddisfa determinati requisiti?

Spiego meglio quello che mi serve:

ho una colonna con dei valori suddivisibili in 4 righe per esempio

Nome

Indirizzo

Telefono

Email

Nome

Indirizzo

ecc.....

ipotizziamo che uno di questi valori può non essere presente. 

Vorrei fare in modo che, anche in questo caso, i dati vengano disposti sulle 4 righe (lasciando un campo vuoto dove non c'è il dato corrispondente).

E' possibile farlo?

Grazie

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
2014-05-29T13:19:11+00:00

Premetto che non so assolutamente nulla di VBA, questa potrebbe essere la volta buona per imparare qualcosa.

Ringrazio molto Norman, chiedo scusa se forse non mi sono spiegato bene:

il campo Email era solo un esempio, non necessariamente contiene una email.

L'unico campo che c'è sempre, finisce sempre con il carattere ")" e dovrebbe essere sempre nella quarta riga è il campo indirizzo.

Mentre il campo che ho chiamato Email, quando presente si trova in seconda riga,  ma non è discriminabile dal carattere "@".

Ciao Filippo,

Devo chiedere scusa - ho letto la tua domanda troppo frettolosamente!

Prova a sostituire il codice precedente con la seguente versione:

Alt-F11 per aprire l'editor di VBA

Alt-IMper inserire un nuovo modulo di codice

Nel nuovo modulo vuoto, incolla il seguente codice:

'==========>>

Option Explicit

'---------->>

Public Sub Tester()

    Dim WB As Workbook

    Dim SH As Worksheet

    Dim srcRng As Range, destRng As Range

    Dim arrIn As Variant, arrOut() As Variant

    Dim i As Long, j As Long, k As Long

    Dim iCtr As Long

    Dim LRow As Long

    Dim aStr As String

    Const sAddressIdentifier As String = ")"

    Const sDestinazione As String = "D2"                            '<<===== Modifica

    Set WB = ThisWorkbook

    Set SH = WB.Sheets("Foglio1")                                      '<<===== Modifica

    With SH

        LRow = .Cells(.Rows.count, "A").End(xlUp).Row

        Set srcRng = .Range("A2:A" & LRow)

        Set destRng = .Range(sDestinazione)

    End With

    arrIn = srcRng.Value

    ReDim arrOut(1 To UBound(arrIn, 1) * 2)

    For i = 1 To UBound(arrIn, 1)

        If i + 3 > UBound(arrIn, 1) Then

            aStr = vbNullString

        Else

            aStr = Right(arrIn(i + 3, 1), 1)

        End If

            If aStr = sAddressIdentifier Then

                '\ Tutto va bene e il mondo e' bello!

                j = j + 1

                k = k + 4

                arrOut(j) = arrIn(k - 3, 1)

                arrOut(j + 1) = arrIn(k - 2, 1)

                arrOut(j + 2) = arrIn(k - 1, 1)

                arrOut(j + 3) = arrIn(k, 1)

                i = i + 3

            Else

            '\ Manca la email!

                j = j + 1

                k = k + 3

                arrOut(j) = arrIn(k - 2, 1)

                arrOut(j + 1) = vbNullString

                arrOut(j + 2) = arrIn(k - 1, 1)

                arrOut(j + 3) = arrIn(k, 1)

                i = i + 2

        End If

        j = j + 3

    Next i

    ReDim Preserve arrOut(1 To j)

    destRng.Resize(j).Value = Application.Transpose(arrOut)

End Sub

'<<==========

Alt-Q per chiudere l'editor di VBA e tornare a Excel.

Alt-F8 per aprire la finestrina macro

Seleziona Tester | Esegui

Se, oltre agli indirizzi email, fosse possibile che ci fossero altri campi mancanti, sarebbe necessario fornire alcuni mezzi per identificare almeno uno di questi campi. A questo proposito, noto che il carattere @ non può essere utilizzato per identificare i dati e-mail, ma forse la lunghezza del campo telefono potrebbe essere utilizzato o la presenza di solo caratteri numerici e (diciamo) il carattere -.

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

12 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-05-28T14:39:05+00:00

    Quella c'è sempre, può mancare solo quelladell'email

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-05-28T14:34:52+00:00

    ipotizziamo come prima una colonna che contiene dati di questo tipo

            A                  B               C

    1 Nome

    2 Email

    3 Telefono

    4 Indirizzo

    5 Nome

    6 Email

    ecc....

    ........................

    Una caratteristica che può aiutare a riconoscere quale deve essere la quarta riga è che tutti gli indirizzi finiscono con il carattere ")"

    ..........................

    e se la riga mancante fosse proprio quella dell'indirizzo? Può capitare? O la riga indirizzo c'è sempre?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-05-28T10:56:59+00:00

    ipotizziamo come prima una colonna che contiene dati di questo tipo

            A                  B               C

    1 Nome

    2 Email

    3 Telefono

    4 Indirizzo

    5 Nome

    6 Email

    ecc....

    Dove ogni nome, indirizzo, telefono, email sono diversi.

    ipotizziamo che il campo email può anche non esserci, in questo caso questa serie di dati sarà disposta su 3 righe invece delle 4 solite.

    c'è un modo per inserire una riga (o anche solo una cella) dove si verifica questa condizione? (in modo da avere una serie di dati disposti sempre su 4 righe)

    Una caratteristica che può aiutare a riconoscere quale deve essere la quarta riga è che tutti gli indirizzi finiscono con il carattere ")"

    infatti se digito una funzione del genere alla riga 2 e la copio ogni 4 righe

    =SE((DESTRA(A4;1))=")";"";INSERISCI RIGA")

    riesco a trovare il punto in cui devo inserire una riga.

    Il problema a questo punto è che inserendo una riga tutte le funzioni inerite si ricalcolano in funzioni dello spostamento delle celle.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-05-28T10:29:47+00:00

    E' possibile farlo?

    Sì. Se gentilmente spieghi *da dove* stai inserendo/prelevando/leggendo i dati, riusciamo a capire quello che vorresti fare.

    Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento