Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Simulare aree di influenza

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Simulare aree di influenza

Postdi recalcatiiti » 03/11/16 13:05

Ciao a tutti,

vi espongo una semplice questione che voglio approfondire.

Allego il file. https://www.dropbox.com/s/4zz90lhhcsofuqh/Area_di_influenza.xlsm?dl=0

La macro "conquista", sostituisce tutti gli 1 contenuti nel range A1:M13 con una "X" e tutte le celle adiacenti a quella cella con delle "x" (Vedi prossime due immagini).

ImmagineImmagine

Vorrei implementare la possibilità di inserire casualmente all'interno del' suddetto range, un numero a piacere di 1
poi una volta lanciata la macro conquista, contare quante celle sono occupate da x o X (sempre nello stesso range).

L'idea poi è quella di creare un report di questo numero ed iterare il processo indefinitamente

ImmagineImmagine

Sono pronto a dare tutte le spiegazioni possibili, ora ho davvero poco tempo.

Grazie a tutti.
Excel 2010
recalcatiiti
Utente Junior
 
Post: 82
Iscritto il: 12/10/15 15:03

Sponsor
 

Re: Simulare aree di influenza

Postdi Anthony47 » 03/11/16 19:28

Il file non sembra essere disponibile, ma nel frattempo mi porto avanti con la richiesta di un paio di chiarimenti:
-c'e' un motivo per usare X e x (e non due caratteri diversi)?
-quando dici "L'idea poi è quella di creare un report di questo numero ed iterare il processo indefinitamente" intendi dire aggiungere altri 1 a caso e ripetere l'espansione o cosa?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17646
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Simulare aree di influenza

Postdi recalcatiiti » 04/11/16 11:36

Ciao Anthony,
Strano, lo riallego.
https://www.dropbox.com/s/b92i44xqrvfbrnw/Area_di_influenza.xlsm?dl=0
Avviso però che all'interno di quest'ultimo file, ci sono anche delle prove che ho effettuato io (piuttosto fallimentari perché non riesco ad automatizzarlo completamente), se credi che ci sia linea migliore, puoi rivoluzionare il tutto.

-c'e' un motivo per usare X e x (e non due caratteri diversi)?

-Assolutamente no, possiamo usare i caratteri che vogliamo, è necessaria però una distinzione.

quando dici "L'idea poi è quella di creare un report di questo numero ed iterare il processo indefinitamente" intendi dire aggiungere altri 1 a caso e ripetere l'espansione o cosa?


Spiego per punti ciò che vorrei accadesse automaticamente in continuo.

- inserimento casuale di n volte 1 all'interno di un range A prestabilito.
- lancio della macro "conquista"
- conteggio delle celle occupate.
-report del numero di celle occupate di cui sopra
- pulizia del range A di lavoro
- inserimento casuale di n volte 1 all'interno di un range A prestabilito.
...
etc etc continuando a salvare il valore di celle occupate.

questi valori, verranno divisi per n (numero di 1 inseriti casualmente) così da avere un valore percentuale di quanto l'area di influenza si è espansa.
poi l'idea è quella di fare una media di questi valori, calcolarne la deviazione standard ed infine la densità di probabilità di ogni valore per poi creare un grafico (come quello che vedi nel foglio due calcolato su circa 950 valori estrapolati con metodo semi-automatico) che avrà sulle ascisse i valori calcolati dalla macro ordinati in modo decrescente e sulle ordinate la relativa densità di probabilità.

Nel file vedrai che è abbastanza chiaro

speculazione:

sarebbe interessante che iil range di lavoro A fosse variabile :lol:

Ciao e grazie A TUTTI
Excel 2010
recalcatiiti
Utente Junior
 
Post: 82
Iscritto il: 12/10/15 15:03

Re: Simulare aree di influenza

Postdi recalcatiiti » 04/11/16 12:59

Vorrei anche aggiungere che il mio metodo di randomizzazione della posizione degli "1", non è molto valido (come ben vedrai :lol: ).
Excel 2010
recalcatiiti
Utente Junior
 
Post: 82
Iscritto il: 12/10/15 15:03

Re: Simulare aree di influenza

Postdi Anthony47 » 05/11/16 03:10

La descrizione contiene ancora molte code indefinite, ma non vorrei menarla per le lunghe, quindi procedo con la mia interpretazione del quesito, che trovi in Foglio3 e Modulo2 del file allegato.
-l'area di prova puo' essere variata tramite il contenuto delle celle W1 e X1; per come e' impostato il foglio l'area non dovrebbe estendersi oltre colonna V /riga 20
-l'area cosi' definita si colora per effetto di una formattazione condizionale applicata all'area A1:V20
-il numero Min e Max di 1 da inserire e' impostato in W2 e X2
-il numero di cicli da eseguire e' impostato in X3
-nel calcolo dell'espansione gli 1 rimangono 1 e le celle confinanti diventano X
-i risultati saranno accodati nelle colonne AB:AF, e includono: N° di 1 inseriti, n° di X sviluppati, calcolo X/"n° 1", dimensione della tabella di prova

Il file e' scaricabile qui:
https://www.dropbox.com/s/hbstu9l95kyzh ... .xlsm?dl=0

Il codice della macro associata al pulsante Go:
Codice: Seleziona tutto
Sub trip()
Dim myTab As Range, minU As Long, maxU As Long, I As Long, cEll As Range
Dim myU As Long, minC As Long, maxC As Long, minR As Long, maxR As Long, myNext As Long

Set myTab = Range(Range(Range("myarea")), Range(Range("myAreb")))
minU = Range("nMin")
maxU = Range("nMax")
minC = Range(Range("myarea")).Column
maxC = Range(Range("myareb")).Column
minR = Range(Range("myarea")).Row
maxR = Range(Range("myareb")).Row
'
Randomize
Range("A:V").ClearContents
For I = 1 To Range("cycle")
DoEvents
    myU = minU + Int(maxU - minU + 0) * Rnd()
    myTab.ClearContents
    Do
    DoEvents
        Cells(minR + (maxR - minR) * Rnd(), minC + (maxC - minC) * Rnd()) = 1
        If Application.WorksheetFunction.CountA(myTab) >= myU Then Exit Do
    Loop
    Application.ScreenUpdating = False
    For Each cEll In myTab
        If cEll.Value = 1 Then
            If cEll.Column > minC Then If cEll.Offset(0, -1) <> 1 Then cEll.Offset(0, -1) = "X"
            If cEll.Column < maxC Then If cEll.Offset(0, 1) <> 1 Then cEll.Offset(0, 1) = "X"
            If cEll.Row > minR Then If cEll.Offset(-1, 0) <> 1 Then cEll.Offset(-1, 0) = "X"
            If cEll.Row < maxR Then If cEll.Offset(1, 0) <> 1 Then cEll.Offset(1, 0) = "X"
           
        End If
    Next cEll
    Application.ScreenUpdating = True
    myNext = Cells(Rows.Count, Range("Report").Column).End(xlUp).Row + 1
    Cells(myNext, Range("report").Column) = myU
    Cells(myNext, Range("report").Column + 1) = Application.WorksheetFunction.CountIf(myTab, "X")
    Cells(myNext, Range("report").Column + 2) = Application.WorksheetFunction.CountIf(myTab, "X") / myU
    Cells(myNext, Range("report").Column + 3) = maxR - minR + 1
    Cells(myNext, Range("report").Column + 4) = maxC - minC + 1
Next I
End Sub

Ho modificato il nome delle tue macro (che non ho riciclato) perche' la Sub randomize interferiva con la funzione vba "Randomize"

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17646
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Simulare aree di influenza

Postdi recalcatiiti » 07/11/16 11:04

Caro Anthony, evidentemente quanto descritto è stato abbastanza, in quanto hai azzeccato in pieno la richiesta, grazie come al solito. Però una questione mi rende perplesso. Pur inserendo
Codice: Seleziona tutto
 Application.ScreenUpdating = False
l'inserimentro degli uno e l'espansione sono mostrati integralmente, come mai?

Ciao e grazie
Excel 2010
recalcatiiti
Utente Junior
 
Post: 82
Iscritto il: 12/10/15 15:03

Re: Simulare aree di influenza

Postdi Anthony47 » 08/11/16 00:41

Dipende da dove e' messa l'istruzione Application.ScreenUpdating; io l'ho messa solo per nascondere il passo dopo passo delle conquiste, mentre e' visualizzata la fase di inserimento degli 1 iniziali e la vista della conquista risultante.

Se sposti Application.ScreenUpdating = False tra le righe Do /DoEvents allora vedrai solo il risultato finale di ogni ciclo.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17646
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Simulare aree di influenza

Postdi recalcatiiti » 09/11/16 11:07

Ciao,
in effetti avevo provato mettendolo dopo sub e prima di end sub ma non succedeva nulla, per questo ho chiesto. Provando come dici funziona chiaramente, grazie.
Excel 2010
recalcatiiti
Utente Junior
 
Post: 82
Iscritto il: 12/10/15 15:03


Torna a Applicazioni Office Windows


Topic correlati a "Simulare aree di influenza":


Chi c’è in linea

Visitano il forum: Nessuno e 55 ospiti