Inserire automaticamente in una nuova colonna un codice sequenziale

Anonimo
2020-12-17T21:44:26+00:00

Buonasera ho un file di excel relativo a varie operazioni in campo agricolo ,  diviso in campi data , lotto , operazione e altre variabili.

Ho bisogno di inserire automaticamente in una nuova colonna un codice sequenziale ( lo chiamo numero di ciclo lavorazione) uguale per  tutte le stringhe dati dello stesso lotto comprese temporaneamente tra la semina e la raccolta .

In modo di poter poi raggruppare i vari cicli per lotto

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

31 risposte

Ordina per: Più utili
  1. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni

  2. Anonimo
    2020-12-18T17:29:17+00:00

    Ciao Francesco,

    Buonasera norman  non funziona  nonostante hai capito il significato dei campi.

    Vorrei raggruppare sotto un unico ciclo (numero sequenziale) le righe inerenti ad un lotto che sono compresa tra la data di semina e quella di raccolta.

    Quindi il risultato che vorrei ottenere ad esempio che il lotto n°1   ha il ciclo 1 (semina ,  righe lavorazioni e sua raccolta o piu date raccolte)  ,  dopo la raccolta parte una nuova semina (con data uguale osuccessiva) e quindi  il ciclo si chiamerà 2 , verrano inserite le varie operazioni con date uguali o superiori alla nuova semina che con la macro avranno per logica sequenza ciclo 2 fino alle nuove raccolte . Poi ripartirà una nuova semina alla quale la macro  assocerà ciclo 3.    Questo esempio ovviamnte vale per tutti i lotti.

    Può essere che il lotto 1 è al ciclo 3   mennte il lotto 45 è ancora in sequenza 1 .

    Per poter comprendere appieno le tue esigenze, penso che sia necessario che tu carichi un semplice file di esempio e che mostri i risultati richiesti

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-12-18T17:19:33+00:00

    Buonasera norman  non funziona  nonostante hai capito il significato dei campi.

    Vorrei raggruppare sotto un unico ciclo (numero sequenziale) le righe inerenti ad un lotto che sono compresa tra la data di semina e quella di raccolta.

    Quindi il risultato che vorrei ottenere ad esempio che il lotto n°1   ha il ciclo 1 (semina ,  righe lavorazioni e sua raccolta o piu date raccolte)  ,  dopo la raccolta parte una nuova semina (con data uguale osuccessiva) e quindi  il ciclo si chiamerà 2 , verrano inserite le varie operazioni con date uguali o superiori alla nuova semina che con la macro avranno per logica sequenza ciclo 2 fino alle nuove raccolte . Poi ripartirà una nuova semina alla quale la macro  assocerà ciclo 3.    Questo esempio ovviamnte vale per tutti i lotti.

    Può essere che il lotto 1 è al ciclo 3   mennte il lotto 45 è ancora in sequenza 1 .

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-12-18T15:42:52+00:00

    Ciao Francesco,

    In attesa del file di esempio e, ponendo che la colonna de lotto sia la colonna B e che la colonna per i codici sequenziali sia la colonna D, prova qualcosa del genere:

    • 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 rngIn As Range, rngOut As Range, rCell As Range

        Dim vArrIn As Variant, vArrUnique As Variant, vArrOut() As Variant

        Dim Res As Variant

        Dim i As Long

        Dim LRow As Long

        Const sFoglio As String = "Foglio1" '<<=== Modifica

        Const sColonna_Lotto As String = "B:B"                                      '<<=== Modifica

        Const sColonna_CodiceSequenziale As String = "D:D"                '<<=== Modifica

        Set WB = ThisWorkbook

        Set SH = WB.Sheets(sFoglio) 

        With SH

            LRow = LastRow(SH, .Range(sColonna_Lotto))

            Set rngIn = .Range(sColonna_Lotto).Resize(LRow)

        End With

        vArrIn = rngIn.Value

        vArrUnique = SortedUniqueList(rngIn.Value)

        ReDim vArrOut(1 To UBound(vArrIn), 1 To 1)

        vArrOut(1, 1) = "Codice Sequenziale"

        For i = 2 To UBound(vArrIn)

            Res = Application.Match(CStr(vArrIn(i, 1)), vArrUnique, 0)

            vArrOut(i, 1) = Res

        Next i

        Intersect(rngIn.EntireRow, SH.Columns(sColonna_CodiceSequenziale)).Value = vArrOut

    End Sub

    '-------->>

    Public Function SortedUniqueList(V As Variant)

        Dim oSortedUniqueList As Object

        Dim arrOut() As Variant

        Dim sStr As String

        Dim i As Long

        Set oSortedUniqueList = CreateObject("System.Collections.Sortedlist")

        With oSortedUniqueList

            For i = LBound(V) To UBound(V)

                sStr = V(i, 1)

                If Not sStr = vbNullString Then

                    If Not .ContainsKey(sStr) Then

                        .Add Key:=sStr, Value:=i

                    End If

                End If

            Next i

            ReDim arrOut(1 To .Count)

            For i = 0 To .Count - 1

                arrOut(i + 1) = .GetKey(i)

            Next i

        End With

        SortedUniqueList = arrOut

    End Function

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

    Public Function LastRow(SH As Worksheet, _

        Optional Rng As Range, _

        Optional minRow As Long = 1)

        If Rng Is Nothing Then

            Set Rng = SH.Cells

        End If

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

            After:=Rng.Cells(1), _

            Lookat:=xlPart, _

            LookIn:=xlFormulas, _

            SearchOrder:=xlByRows, _

            SearchDirection:=xlPrevious, _

            MatchCase:=False).Row

        On Error GoTo 0

        If LastRow < minRow Then

            LastRow = minRow

        End If

    End Function

    '<<======== 

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensione xlsm
    • Alt+F8 per aprire  la finestra di gestione delle macro
    • Seleziona Tester
    • Esegui

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2020-12-18T10:10:19+00:00

    Ciao Francesco,

    Buonasera ho un file di excel relativo a varie operazioni in campo agricolo ,  diviso in campi data , lotto , operazione e altre variabili.

    Ho bisogno di inserire automaticamente in una nuova colonna un codice sequenziale ( lo chiamo numero di ciclo lavorazione) uguale per  tutte le stringhe dati dello stesso lotto comprese temporaneamente tra la semina e la raccolta .

    In modo di poter poi raggruppare i vari cicli per lotto

    Ti chiederei gentilmente di caricare un semplice file di esempio, privo di dati sensibili.

    Per caricare il file su Microsoft OneDrive, vedi:

       Condividere file e cartelle di OneDrive

    Per caricare il file su DropBox, vedi:

    Come faccio a condividere file e cartelle in Dropbox?

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento