| | Post: 6 | Registrato il: 15/02/2013
| Città: MASSANZAGO | Età: 40 | Utente Junior | 2013 | | OFFLINE | |
|
23/11/2018 13:07 | |
Ciao a tutti!
Vi scrivo per chiedervi un aiuto su una cosa che immagino possa essere molto semplice... scusatemi ma non sono molto pratico di vba. In un excel ho costruito una macro per estrarre dei numeri casuali e mescolarli. Questo è il codice:
Sub Mischia()
'
' Macro1 Macro
'
Randomize
Dim num As Integer
For num = 1 To 5000
Cells(num, 2) = Int(Range("D2") * Rnd) + 1
Next num
'
Columns("A:B").Select
ActiveWorkbook.Worksheets("Selezione Campione").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Selezione Campione").Sort.SortFields.Add Key:=Range("B1:B5000" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Selezione Campione").Sort
.SetRange Range("A1:B5000")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("a1").Select
End Sub
Ora quello che vorrei fare è imporre come limite maggiore per l'estrazione dei numeri casuali il valore dato da una cella presente nel foglio excel. Per farmi capire meglio sostituire il 5000 con il riferimento a una cella del foglio nella riga del codice "For num = 1 To 5000".
Grazie mille per l'aiuto |
|
| | Post: 2.030 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
23/11/2018 15:31 | |
ciao
es: in C1 il limite
Sub Mischia()
limite=range("C1")
...
...
For num = 1 To limite
....
ActiveWorkbook.Worksheets("Selezione Campione").Sort.SortFields.Add Key:=Range("B1:B" & limite _
.....
.....
.SetRange Range("A1:B" & limite)
...
saluti
[Modificato da dodo47 23/11/2018 15:33] Domenico
Win 10 - Excel 2016 |
| | Post: 6 | Registrato il: 15/02/2013
| Città: MASSANZAGO | Età: 40 | Utente Junior | 2013 | | OFFLINE | |
|
29/11/2018 11:03 | |
Grazie per il tuo suggerimento però ancora niente non funziona... impostando la macro comi dici tu quando la eseguo mi da il messaggio di errore "Variabile non definita" evidenziando in debug "limite = Range("D2")". Ho provato ad inserire prima della stringa un dim limite as integer ma ancora un nuovo messaggio di errore "Errore di runtime '6': overflow".
In cosa sbaglio? |
| | Post: 2.047 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
29/11/2018 18:55 | |
invia quello che hai fatto e che genera l'errore
[Modificato da dodo47 30/11/2018 13:17] Domenico
Win 10 - Excel 2016 |
| | Post: 7 | Registrato il: 15/02/2013
| Città: MASSANZAGO | Età: 40 | Utente Junior | 2013 | | OFFLINE | |
|
04/12/2018 12:03 | |
Sub Mischia()
'
' Limite
'
Dim limite As Integer
limite = Range("D2")
'
' Macro1 Macro
'
Randomize
Dim num As Integer
For num = 1 To limite
Cells(num, 2) = Int(Range("D2") * Rnd) + 1
Next num
'
Columns("A:B").Select
ActiveWorkbook.Worksheets("Selezione Campione").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Selezione Campione").Sort.SortFields.Add Key:=Range("B1:B" & limite _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Selezione Campione").Sort
.SetRange Range("A1:B" & limite)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("a1").Select
End Sub
Grazie mille per l'aiuto |
| | Post: 2.059 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
04/12/2018 18:33 | |
il codice è formalmente corretto (ed eseguendolo non mi da nessun errore)
Che ci scrivi in D2??? O meglio, sottoponi il tuo file senza dati sensibili
saluti
Domenico
Win 10 - Excel 2016 |
| | Post: 8 | Registrato il: 15/02/2013
| Città: MASSANZAGO | Età: 40 | Utente Junior | 2013 | | OFFLINE | |
|
06/12/2018 16:58 | |
Ho risolto! Era sbagliato un riferimento all'interno della macro!
Grazie per il supporto |
|
|