
Sub salto()
Dim rg(), remdupl()
Dim conta As Integer
conta = Application.WorksheetFunction.CountA(Worksheets(1).Range("A2:A1000"))
ReDim rg(1 To conta, 1 To 3)
For i = 1 To conta
rg(i, 1) = Worksheets(1).Range("A" & i + 2).Value
rg(i, 2) = Worksheets(1).Range("B" & i + 2)
rg(i, 3) = "FALSE"
Next i
remdupl = Worksheets(1).Range("B3:B" & conta + 1).Value
Worksheets(1).Range("Q2:Q" & conta) = remdupl
Worksheets(1).Range("Q2:Q" & conta).RemoveDuplicates Columns:=1, Header:=xlNo
For jj = 1 To Application.WorksheetFunction.CountA(Worksheets(1).Range("Q2:Q1000"))
Worksheets(1).Range("R" & jj + 1) = Application.WorksheetFunction.CountIf(Worksheets(1).Range("B3:B" & conta), Worksheets(1).Range("Q" & jj + 1))
Next jj
Dim rgs
ReDim rgs(1 To Application.WorksheetFunction.CountA("Q2:Q1000"), 1 To 2)
contaremdupl = Application.WorksheetFunction.CountA(Worksheets(1).Range("Q2:Q1000")) + 1
rgs = Worksheets(1).Range("Q2:R" & contaremdupl + 1)
For mm = 1 To conta
For jj = 1 To contaremdupl
If rgs(jj, 1) = rg(mm, 2) And rgs(jj, 1) > 0 And rg(mm, 3) = "FALSE" Then
Worksheets(1).Range("C" & mm + 2) = "1.01"
'Application.Run "Start"
rg(mm, 3) = "TRUE"
rgs(jj, 2) = rgs(jj, 2) - 1
End If
Next jj
Next mm
Worksheets(1).Cells(3, 3) = "1.00"
Worksheets(1).Cells(3, 3).AutoFill Destination:=Range("C3:C26")
End Sub |
Sub salto()
Dim rg(), remdupl()
Dim conta As Integer
conta = Application.WorksheetFunction.CountA(Worksheets(1).Range("A2:A1000"))
ReDim rg(1 To conta, 1 To 3)
For i = 1 To conta
rg(i, 1) = Worksheets(1).Range("A" & i + 1).Value
rg(i, 2) = Worksheets(1).Range("B" & i + 1)
rg(i, 3) = "FALSE"
Next i
remdupl = Worksheets(1).Range("B3:B" & conta + 1).Value
Worksheets(1).Range("Q2:Q" & conta) = remdupl
Worksheets(1).Range("Q2:Q" & conta).RemoveDuplicates Columns:=1, Header:=xlNo
For jj = 1 To Application.WorksheetFunction.CountA(Worksheets(1).Range("Q2:Q1000"))
Worksheets(1).Range("R" & jj + 1) = Application.WorksheetFunction.CountIf(Worksheets(1).Range("B3:B" & conta), Worksheets(1).Range("Q" & jj + 1))
Next jj
Dim rgs
ReDim rgs(1 To Application.WorksheetFunction.CountA("Q2:Q1000"), 1 To 2)
contaremdupl = Application.WorksheetFunction.CountA(Worksheets(1).Range("Q2:Q1000"))
rgs = Worksheets(1).Range("Q2:R" & contaremdupl + 1)
Dim trovato As Boolean
Dim maxiter, maxm
maxm = 0
maxiter = Application.WorksheetFunction.Max(Worksheets(1).Range("R2:R10"))
Do While maxm < maxiter
For mm = 1 To contaremdupl
trovato = False
For jj = 1 To conta
If rgs(mm, 1) = rg(jj, 2) And rgs(mm, 2) > 0 And rg(jj, 3) = "FALSE" And trovato = False Then
Worksheets(1).Range("C" & jj + 1) = "1.01"
'Application.Run "Start"
rg(jj, 3) = "TRUE"
rgs(mm, 2) = rgs(mm, 2) - 1
trovato = True
End If
Next jj
Next mm
Worksheets(1).Cells(2, 3) = "1.00"
Worksheets(1).Cells(2, 3).AutoFill Destination:=Range("C2:C26")
maxm = maxm + 1
Loop
End Sub
|
Option Explicit
Sub salto_vfrac()
Dim ac As Range, macchina_precedente As String, macchina_attuale As Range
Dim last_row As Integer, start_row As Integer, output_column As Integer
Dim nome_macchina_column As Integer
Dim i As Integer
Dim c As Range, first_found As String
[tabella].Sort key1:=Range([tabella].Cells(1, 2).Address), order1:=xlAscending, header:=xlYes
start_row = [tabella].Cells(2, 1).Row 'riga Excel in cui inizia la tabella
last_row = start_row + [tabella].Rows.Count - 2 'riga Excel in cui finisce la tabella: bisogna tener conto dell'intestazione
nome_macchina_column = [tabella].Columns(2).Column 'numero della colonna Excel con i nomi macchina
output_column = [tabella].Columns(4).Column 'numero della prima colonna Excel libera a destra della tabella, esterna, dove depositare i valori
With Cells(start_row, output_column).Resize(last_row - start_row + 1)
'.Formula = "=IF(R[-1]C[-2]=RC[-2],R[-1]C,R[-1]C+1)" 'raggruppa blocchi di valori uguali assegnando numero uguale
.Formula = "=IF(R[-1]C[-2]=RC[-2],R[-1]C+1,1)" 'raggruppa blocchi uguali assegnando un progressivo da 1"
.Value = .Value
End With
For i = 1 To Application.Max(Columns(output_column))
With Range([tabella].Cells(start_row - 1, 4), [tabella].Cells(last_row, 4)) 'cerca nella colonna di appoggio dei numeri progressivi
Set c = .Find(i, LookIn:=xlValues, LookAt:=xlWhole) 'rintraccia tutti i numeri progressivi da 1 in poi
first_found = c.Address
Do
c.Offset(, -1).Value = 1.01 'imposta il peso a 1,01
Set c = .FindNext(c) 'cerca il prossimo progressivo uguale
Loop While Not c Is Nothing And c.Address <> first_found
'call Start 'richiama la macro "start"
MsgBox "Giro completato, azzeramento"
End With
Range(Cells(start_row, [tabella].Columns(3).Column), Cells(last_row, [tabella].Columns(3).Column)) = 1 'azzera i pesi portandoli a 1,00
Next
MsgBox "Fine della procedura."
End Sub |
Sub Ciclo()
Dim sh As Worksheet
Dim LR As Long, Ciclo As Long, rigaMacchina As Long, rigaAttuale As Long
Dim Finito As Boolean
Set sh = ThisWorkbook.Sheets("Foglio1")
With sh
LR = .Range("B" & .Rows.Count).End(xlUp).Row
With .Sort ' ordino il range interessato in base alla colonna "B"
.SortFields.Clear
.SortFields.Add sh.Range("B3")
.SetRange sh.Range("A3:C" & LR)
.Apply
End With
Ciclo = 1
Range("Q:Q").ClearContents
Do
rigaMacchina = 3
Finito = True
While rigaMacchina < LR
rigaAttuale = rigaMacchina
If .Cells(rigaMacchina, 3).Value = .Cells(rigaMacchina + Ciclo - 1, 3).Value Then
.Cells(rigaMacchina + Ciclo - 1, 3).Value = 1.1
Finito = False
End If
While .Cells(rigaMacchina, 2).Value = .Cells(rigaAttuale, 2).Value 'passa alla prossima macchina
rigaMacchina = rigaMacchina + 1
Wend
Wend
'Esegui le operazioni per questo ciclo
.Range("Q" & Ciclo).Value = "Ciclo " & Ciclo & " completato."
.Range("C3:C" & LR).Value = 1 'reimposta a 1 tutti i pesi
Ciclo = Ciclo + 1 'passa al ciclo successivo
Loop Until Finito
End With
Set sh = Nothing
End Sub
|
Dim ws as worksheet .... Set ws = [tabella].parent .... With ws.Cells(start_row, output_column).Resize(last_row - start_row + 1) .... ws.Range(ws.Cells(start_row, [tabella].Columns(3).Column), ws.Cells(last_row, [tabella].Columns(3).Column)) = 1 |
Sub salto_vfrac()
Dim i As Long
Dim c As Range, first_found As String
Dim rngPesi As Range
Dim rngOut As Range
[tabella].Sort key1:=Range([tabella].Cells(1, 2).Address), order1:=xlAscending, Header:=xlYes
Set rngPesi = Intersect([tabella], [tabella].Columns(3).Offset(1))
Set rngOut = rngPesi.Offset(0, 1)
With rngOut
.Formula = "=IF(R[-1]C[-2]=RC[-2],R[-1]C+1,1)" 'raggruppa blocchi uguali assegnando un progressivo da 1"
.Value = .Value
End With
For i = 1 To Application.Max(rngOut)
With rngOut 'cerca nella colonna di appoggio dei numeri progressivi
Set c = .Find(i, LookIn:=xlValues, LookAt:=xlWhole) 'rintraccia tutti i numeri progressivi da 1 in poi
first_found = c.Address
Do
c.Offset(, -1).Value = 1.01 'imposta il peso a 1,01
Set c = .FindNext(c) 'cerca il prossimo progressivo uguale
Loop While Not c Is Nothing And c.Address <> first_found
'call Start 'richiama la macro "start"
MsgBox "Giro " & i & " completato, azzeramento"
End With
rngPesi = 1 'azzera i pesi portandoli a 1,00
Next
rngOut.Clear
Set rngPesi = Nothing
Set rngOut = Nothing
MsgBox "Fine della procedura."
End Sub
|
