Condividi:        

Spazio Range dichiarato se valore assoluto esegui

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

Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 21/02/13 21:55

Ciao a tutti
Sto creando un file excel :) con microsoft office 2010 sistema operativo windows 7, che tra le tante formule dovrebbe farmi anche questo, che vi descriverò per cui chiedo un vostro aiuto :cry: nella risoluzione Grazie !!

Praticamente in un range di celle che va da A19 a S19 trovato il valore più grande superiore a ("0") che può essere singolo o comune (esempio: 34, oppure 17-17-17),in base alla cella che contiene il valore/i, deve avviarsi;
Nel caso di valore unico maggiore un Application.Speech.Speak " The winner is " & Range("A19)
Nel caso sia invece comune con altre celle del tipo Application.Speech.Speak " The winner is " & Range("A19") & Range("C19") & Range("F19")
Che tipo di script posso utilizzare, e dove inserirlo ???
Grazie
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Sponsor
 

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi Flash30005 » 22/02/13 00:25

Prova questa macro anche se ho dei piccoli dubbi
Codice: Seleziona tutto
Sub Annuncio()
MyMax = Evaluate("=Max(Foglio1!A19:S19)")
MyCount = Evaluate("=SUM(COUNTIF(Foglio1!A19:S19," & MyMax & "))")
If MyMax <> 0 Then
Stringa = ""
For CC = 1 To 19
If Cells(19, CC).Value = MyMax Then
Stringa = Stringa & " " & Cells(19, CC).Value
End If
Next CC
Application.Speech.Speak " The winner is " & Stringa
End If
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 22/02/13 07:03

Ho provato ma non succede nulla.
Dimenticavo una cosa che non penso di aver chiarito prima, quando parte Application.Speech.Speak deve proseguire con il cells d'interesse ( cioè nello spazio voluto esempio: se esce 500 in cells A1 deve lanciare Application.Speech.Speak seguito da cells F1, se 600 su B1 deve aggiungere ad Application.Speech.Speak G1).
Praticamente quello che voglio dire è questo: se esce il numero più grande in data cella da A19 a S19 in base in quale cella si verifica deve partire sempre Application.Speech.Speak ma seguito da celle che voglio io fisse, se esce A19 mi colleghera all'Application.Speech.Speak & F19,se esce B19 mi & G19,se esce C19 mi & H19, ecc ecc
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi Flash30005 » 22/02/13 13:46

Continuo ad avere dei dubbi
se lo sfasamento di celle è di 5 (come sembrerebbe se A allora F, se B allora G... ma se il valore più alto è S19?)
puoi modificare la riga codice aggiungendo + 5 a CC
Codice: Seleziona tutto
Stringa = Stringa & " " & Cells(19, CC + 5).Value


ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 22/02/13 14:56

Grazie, come obiettivo è esattamente quello che volevo.
Unico problema è il seguente ;
Prima facevo un esempio generico dicendo se il valore maggiore ammettiamo sia in A1 mi applichera Application.Speech.Speak & F19,se esce B19 mi & G19,se esce C19 mi & H19, ecc ecc
Ho fatto un esempio generico perchè pensavo di poter modificare da solo le celle d'interesse da collegare al Application.Speech.Speak .
In effetti ho provato e riprovato ma non ci riesco quindi ti scrivo esattamente cosa dovrebbe fare.
La parte da cambiare è questa ;
Nel range che va da A19 fino a S19 cerchera il/i risultato/i più grandi, ma all'Application.Speech.Speak deve collegare cells("D4") se il risultato è in A19, deve collegare cells("E4") se il risultato è in B19, deve collegare cells("F4") se il risultato è in C19, e cosi via fino a S19 che dovrà collegare cells("W4").
Questo perche mentre da A19 fino a S19 avremo valori numerici, dentro cells("E4")fino a ("W4") avremo nomi di persone.
Questo controllo e associazione lo dovrebbe fare sia nel Foglio1 che Foglio2, le celle sono sempre le stesse per tutti e 2 i Fogli.
Scusami se poco comprensibile l'operazione da fare.
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 22/02/13 15:33

La prima parte provando e riprovando :) sono riuscito ad ottenerla e cioè;
Nel range che va da A19 fino a S19 cerchera il/i risultato/i più grandi, ma all'Application.Speech.Speak deve collegare cells("D4") se il risultato è in A19, deve collegare cells("E4") se il risultato è in B19, deve collegare cells("F4") se il risultato è in C19, e cosi via fino a S19 che dovrà collegare cells("W4").

Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MyMax = Evaluate("=Max(Foglio1!A19:S19)")
MyCount = Evaluate("=SUM(COUNTIF(Foglio1!A19:S19," & MyMax & "))")
If MyMax <> 0 Then
Stringa = ""
For CC = 1 To 19
If Cells(19, CC).Value = MyMax Then
Stringa = Stringa & " " & Cells(10, CC + 4).Value
End If
Next CC
Application.Speech.Speak " The winner is " & Stringa
End If
End Sub


Adesso mi manca solo la parte che deve controllare nel Foglio1 e nel Foglio2 sempre nel Range A19 - S19 ed in base al numero/i più grandi dovra associare sempre con lo stesso raggionamento A19 Application.Speech.Speak & ("E4") ecc ecc
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi Flash30005 » 22/02/13 16:02

A parte che non dovresti fare esempi semplificativi perché ciò ci complica la vita :D
inoltre parli di D4, E4, F4 e poi dici di aver risolto con questa riga-codice
Codice: Seleziona tutto
Stringa = Stringa & " " & Cells(10, CC + 4).Value

che fa riferimento alla riga 10 :?:
Però se hai risolto, va bene così

Per l'ultimo quesito non ho capito se devi far processare un secondo foglio con la stessa procedura del foglio1 oppure no.

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 22/02/13 19:06

Scusami, ma cerco solo di spiegarmi al meglio, in modo da farvi comprendere il fine.
Esatto ho risolto esattamente in quel modo.
Si dici bene devo processare 2 Fogli al momento, ma in futuro spero di aggiungerne degli altri.
Ovviamente i Fogli sono identici, ne aggiungo all'occorenza degli altri perchè la rountime mi indica un processo troppo grande e va in errore.
Quello che vorrei, visto che il processo di tutto avviene con Worksheet_BeforeDoubleClick, nel solo Foglio1, che controlli ogni Foglio inserito sempre analizzando la stessa cosa e dando il risultato allo stesso modo.
In alternativa ditemi voi cosa posso usare in modo da processre tutti i Fogli presenti e avere il fine ampiamente descritto.
Grazie e scusatemi se sono poco esplicativo.
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi Flash30005 » 22/02/13 19:38

Prova così
Codice: Seleziona tutto
Sub Annuncio()
For F = 1 To Worksheets.Count
MyMax = Evaluate("=Max(" & Sheets(F).Name & "!A19:S19)")
MyCount = Evaluate("=SUM(COUNTIF(" & Sheets(F).Name & "A19:S19," & MyMax & "))")
If MyMax <> 0 Then
Stringa = ""
For CC = 1 To 19
If Sheets(F).Cells(19, CC).Value = MyMax Then
Stringa = Stringa & " " & Cells(19, CC).Value
End If
Next CC
Application.Speech.Speak " The winner is " & Stringa
End If
Next F
End Sub

In questo modo verranno processati tutti i fogli che sono nella cartella di lavoro
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 22/02/13 20:55

In questo modo però non mi fornisce il/i numero/i maggiori di tutti i fogli in assoluto, ma bensì per ogni foglio mi fornisce una classifica, mentre io ne vorrei una sola.
Cioè se nel Foglio1 abbiamo Cells("B19") con valore 1000 e il restante a 208, e nel Foglio2 abbiamo Cells("H19")con valore 9000 e il restante a 123, deve darmi come risultato solo Application.Speech.Speak " The winner is " & Stringa riferito a Foglio2 Cells("H19").
Mentre in questo momento me ne fornisce due sia il 1000 del Foglio1 che il 9000 del Foglio2, il controllo del Range("A19") fino a Range("S19") deve essere di tutti i Fogli presenti.
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi Flash30005 » 23/02/13 03:56

zanatta77 ha scritto:In questo modo però non mi fornisce il/i numero/i maggiori di tutti i fogli in assoluto, ma bensì per ogni foglio mi fornisce una classifica, mentre io ne vorrei una sola.

Questo lo stai dicendo solo ora perché prima avevi detto che
zanatta77 ha scritto:Quello che vorrei, visto che il processo di tutto avviene con Worksheet_BeforeDoubleClick, nel solo Foglio1, che controlli ogni Foglio inserito sempre analizzando la stessa cosa e dando il risultato allo stesso modo.

Che faceva intendere di ripetere la stessa procedura per ogni foglio quindi è chiaro che avrai i massimi valori di ogni foglio (preso singolarmente)
ma se vuoi il/i valori massimi tra tutti i fogli non è la stessa procedura.
Alla luce di questa esigenza ho modificato la macro
Codice: Seleziona tutto
Sub Annuncio()
MMax = 0
For F = 1 To Worksheets.Count
MyMax = Evaluate("=Max(" & Sheets(F).Name & "!A19:S19)")
If MyMax > MMax Then
Foglio = Sheets(F).Name
MMax = MyMax
End If
Next F
MyCount = Evaluate("=SUM(COUNTIF(" & Sheets(Foglio) & "A19:S19," & MyMax & "))")
If MyMax <> 0 Then
Stringa = ""
For CC = 1 To 19
If Sheets(Foglio).Cells(19, CC).Value = MMax Then
Stringa = Stringa & " " & Cells(19, CC).Value
End If
Next CC
Application.Speech.Speak " The winner is " & Stringa
End If
End Sub

Da testare in quanto non l'ho provata.

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 23/02/13 07:56

Abbiate pazienza se sono poco chiaro, :(
Mi da un errore di run-time '438',
proprieta o metodo non supportati dall'oggetto.

esattamente in questo ;
Codice: Seleziona tutto
MyCount = Evaluate("=SUM(COUNTIF(" & Sheets(Foglio) & "A19:S19," & MyMax & "))")
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi Flash30005 » 23/02/13 11:13

In effetti c'era un errore
Ora ho migliorato la routine
Codice: Seleziona tutto
Sub Annuncio()
MMax = 0
For F = 1 To Worksheets.Count
MyMax = Evaluate("=Max(" & Sheets(F).Name & "!A19:S19)")
MyCount = Evaluate("=COUNTIF(" & Sheets(F).Name & "!A19:S19," & MyMax & ")")
If MyMax > MMax Then
Foglio = Sheets(F).Name
MMax = MyMax
Conta = MyCount
End If
Next F
Stringa = ""
For CC = 1 To Conta
Stringa = Stringa & " " & MMax
Next CC
If Conta > 0 Then Application.Speech.Speak " The winner is " & Stringa
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 23/02/13 15:23

Grazie
Adesso funziona per quanto concerne il processo da fare su tutti i Fogli e dare il/i valore/i più grande/i.
Unico discorso da sistemare adesso rimane che non deve applicare la sintesi vocale della cella che contiene il valore/i maggiore/i,ma dovrebbe leggere la cella che contiene i nomi che va da A4 fino a S4, oppure che dia entrambi iniziando dal nome seguito dal valore.
Praticamente i Fogli sono impostati così da A19 fino ad S19 ci sono dei valori numerici ricavati come risultato da varie funzioni, ma nello stesso tempo ad ogni cella che va da A4 fino ad S4 corrispondono dei nomi e sono fissi, cioè alla cella A19 corrisponderà sempre il nome contenuto in A4 e così via fino ad arrivare alla "S"

Concedimi ;) un esempio; se in "C19" del Foglio2 troviamo un valore unico assoluto,allora si dovrebbe avviare Application.Speech.Speak della "C4" o al massimo entrambi "C4"+"C19"
Santi subito coloro che hanno infinita pazienza :) :lol:
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi Flash30005 » 23/02/13 16:03

Ok
Allora dobbiamo tornare al codice precedente
Codice: Seleziona tutto
Sub Annuncio()
MMax = 0
For F = 1 To Worksheets.Count
MyMax = Evaluate("=Max(" & Sheets(F).Name & "!A19:S19)")
MyCount = Evaluate("=COUNTIF(" & Sheets(F).Name & "!A19:S19," & MyMax & ")")
If MyMax > MMax Then
Foglio = Sheets(F).Name
MMax = MyMax
Conta = MyCount
End If
Next F
If Conta > 0 Then
Stringa = ""
For CC = 1 To 19
If Sheets(Foglio).Cells(19, CC).Value = MMax Then
'Stringa = Stringa & " " & Sheets(Foglio).Cells(4, CC).Value  '<<<< togli commento
Stringa = Stringa & " " & Sheets(Foglio).Cells(4, CC).Value & " " & Sheets(Foglio).Cells(19, CC).Value '<<<<< inserisci commento
End If
Next CC
Application.Speech.Speak " The winner is " & Stringa
End If
End Sub

In questa maniera hai entrambi i valori
Commenta e togli il commento alle due righe codice evidenziate con <<<< se vuoi solo la la lettura sulla riga 4

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 23/02/13 17:18

Grazie. 8)
Adesso direi che va benissimo.
Ciao e grazie ancora per quanto fatto.
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 03/03/13 08:18

Usando il file è emerso un problema che in precedenza non avevo notato.
Il punto è questo; se il valore maggiore contenuto in Cells "111" è soltanto uno, allora funziona bene trovando il foglio che lo contiene e applica la 'Stringa, ma se i valori maggiori sono più di uno e non sono tutti nello stesso Foglio non applica la stringa come dovrebbe.
esempi; se trova 100 nel Foglio1 Ok va benissimo
se trova 100 nel Foglio2 Ok va benissimo
se trova 100 in entrambi i fogli (Foglio1 e Foglio2) mi applica la stringa solo del Foglio1

Codice: Seleziona tutto
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
MMax = 0
For F = 1 To Worksheets.Count
MyMax = Evaluate("=Max(" & Sheets(F).Name & "!A111:V111)")
MyCount = Evaluate("=COUNTIF(" & Sheets(F).Name & "!A111:V111," & MyMax & ")")
If MyMax > MMax Then
Foglio = Sheets(F).Name
MMax = MyMax
Conta = MyCount
End If
Next F
If Conta > 0 Then
Stringa = ""
For CC = 1 To 24
If Sheets(Foglio).Cells(111, CC).Value = MMax Then
'Stringa = Stringa & " " & Sheets(Foglio).Cells(4, CC).Value  '<<<< togli commento
Stringa = Stringa & " " & Sheets(Foglio).Cells(111, CC).Value & " " & Sheets(Foglio).Cells(16, CC + 2).Value '<<<<< inserisci commento
End If
Next CC
Application.Speech.Speak " Non è solo bravura,analisi,o fortuna, ma alla fine " & Stringa
End If
End Sub
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi Flash30005 » 03/03/13 13:52

Infatti è proprio come dici
ora dovrebbe fare quello che richiedi
Codice: Seleziona tutto
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
MMax = 0
For F = 1 To Worksheets.Count
    MyMax = Evaluate("=Max(" & Sheets(F).Name & "!A111:V111)")
    MyCount = Evaluate("=COUNTIF(" & Sheets(F).Name & "!A111:V111," & MyMax & ")")
    If MyMax > MMax Then
        MMax = MyMax
        Conta = MyCount
    End If
Next F
If Conta > 0 Then
    For F = 1 To Worksheets.Count
        Stringa = ""
        Tr = 0
        For CC = 1 To 24
            If Sheets(F).Cells(111, CC).Value = MMax Then
                Tr = 1
                Stringa = Stringa & " " & Sheets(Foglio).Cells(111, CC).Value & " " & Sheets(Foglio).Cells(16, CC + 2).Value
            End If
        Next CC
        If Tr = 1 Then Application.Speech.Speak " Non è solo bravura,analisi,o fortuna, ma alla fine " & Stringa
    Next F
End If
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi zanatta77 » 03/03/13 15:22

Ho provato varie volte, mi viene notificato un errore"" indice non inluso nell'intervallo""
in questo punto
Codice: Seleziona tutto
Stringa = Stringa & " " & Sheets(Foglio).Cells(111, CC).Value & " " & Sheets(Foglio).Cells(15, CC).Value
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Spazio Range dichiarato se valore assoluto esegui

Postdi Flash30005 » 03/03/13 15:50

Già, scusa non potendo provarla ho dimenticato di cambiare anche qui (Foglio, non esiste più)
Codice: Seleziona tutto
Stringa = Stringa & " " & Sheets(F).Cells(111, CC).Value & " " & Sheets(F).Cells(15, CC).Value


ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Spazio Range dichiarato se valore assoluto esegui":

BTp Valore
Autore: MarioLombardi
Forum: Forum off-topic
Risposte: 2

Chi c’è in linea

Visitano il forum: Gianca532011 e 87 ospiti