Condividi:        

Cercare del testo all’interno di una stringa

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

Cercare del testo all’interno di una stringa

Postdi ikwae » 15/06/18 23:10

Ciao a tutti, sono ancora qui a chiedere il vostro prezioso aiuto...

Alcune volte indovino i numeri pronosticati ma si sa che senza la ruota i numeri da soli valgono poco o nulla quindi sto lavorando per avere almeno un’indicazione di una ruota su 11 così se c’è un po’ di fortuna e, si abbinano i numeri con la ruota, l’hobby diventa interessante.

Quindi lavorando in tal senso ho un I7, di media potenza, che elabora giorno e notte pronostici e li confronta con l’estrazione successiva e, nello specifico fa 12 gruppi di 18 cinquine e li confronta con l’estrazione successiva poi carica in archivio l’estrazione appena uscita e ricomincia a pronosticare altri 12 gruppi di 18 cinquine il tutto per tutti i concorsi (156/7) di ogni anno. Preciso che impiega almeno 20/25 giorni per fare un anno completo(ci sono alcune macro “siluro” e altre fatte da me che sono lente ma funzionanti) stanotte ha completato il primo giro del 2017.
Tutti i dati creati con questa ricerca(parlare di ricerca al gioco del Lotto mi viene da ridere tuttavia è solo un hobby) vengono convogliati in 18 fogli uno per cinquina e i risultati concatenati in una stringa in colonna A da A2 in giù quindi un stringa che all’interno della stringa ci sono tante informazioni tra cui le posizioni di ogni singolo gruppo e cinquina. Sulla stessa riga ci sono altre informazioni. Ho creato una semplice macro che non so come ho fatto ma ho trovato in giro per la rete parti di codice e ho fatto un copia e incolla e,dopo qualche ora di prove funziona. La macro deve trovare all’interno della stringa in ogni cella della colonna A la posizione(POS.xx) dato che le posizioni sono 12 da POS.0 a POS.11 e non sono in grado di far commutare la posizione con il relativo foglio ho fatto 12 macro tutte uguali cambia solo la ricerca della posizione e il relativo foglio(12 fogli con il relativo nome) che va a depositarla in caso di CUT o incollarla in caso di COPY in entrambi i casi accodandoli in A2 in giù. Se c’è qualcuno che ha del tempo e vuole fare un’unica macro che scorre i 18 fogli e legge solo la stringa in colonna A e la deposita o incolla sui 12 fogli delle posizioni che ben venga, mi fa piacere e ringrazio anticipatamente, altrimenti è funzionante e la uso così io in questo caso non chiedo aiuto se non si ha tempo... L’aiuto che cerco non è in colonna A ma in colonna H che ci sono le vincite(virtuali e dico virtuali e ripeto virtuali) c’è del testo e si deve trovare la ruota di appartenenza . Mi spiego meglio in ogni colonna H dei 12 fogli di nome POS0 fino a POS11 c’è del testo e si deve “leggere” la ruota e copiare o spostare(con criteri diversi) l’intera riga nel foglio della ruota corrispondente. Il primo criterio è se c’è solo una ruota come esempio in H2, del foglio in allegato, che c’è la stringa A-FI quindi tagliare tutta la riga e selezionare il foglio di nome FI e depositarla accodandola partendo da A2. lo stesso criterio vale anche per H3, che ha solo una ruota, legge la stringa A-CA quindi taglia tutta la riga e seleziona il foglio di nome CA e la deposita accodandola partendo da A2. Quindi una sola istanza(vincita) taglia la riga e la deposita nella relativa ruota. Mentre se ci sono due istanze(vincite) tipo in H4 si deve procedere con il secondo criterio ossia leggere la stringa in H4 che è A-PA e A-VE quindi procede copiando l’intera riga selezionare il foglio di nome PA e incollarla partendo da A2 ritorna indietro in H4 taglia l’intera riga e seleziona il foglio di nome VE e deposita accodandola partendo da A2 . Quindi due istanze la prima copia la riga e la seconda taglia la riga. Se nella stringa ci sono tre istanze(vincite) come esempio in H14 con la stringa A-CA A-GE A-TO si usa il terzo criterio ossia copia la riga e seleziona il foglio di nome CA e incolla accodandola da A2 poi ritorna in H14 e copia ancora la riga e la incolla sul foglio di nome GE partendo da A2 poi ritorna in H14 e taglia l’intera riga e seleziona il foglio TO e la deposita accodandola partendo da A2. Quindi penso che si è capito il criterio delle istanze. Quindi se ci sono 4 istanze tre volte copia e l’ultima taglia. Se si tagliano tutte le righe il foglio deve rimanere vuoto(rimane solo la formula in A1 e le intestazioni delle ruote che iniziano da J1 verso dx.

Mi scuso anticipatamente per il “tema” :oops: :oops: :oops: che ho scritto ma la prima indicazione riferita alla colonna A l’ho messa per un eventuale aiuto ad altri che come me hanno cercano per ore come leggere con una macro del testo dentro una stringa io in rete non ne ho trovate o almeno se ci sono dopo ore di ricerca non le ho viste. Quindi adesso se arriva l’aiuto richiesto troverà due macro per lo stesso oggetto come da titolo. Allego la macro “casareccia” ma funzionante ripeto, se qualcuno vuole modificarla che ben venga e il tempo e lavoro fatto è molto gradito, altrimenti è funzionante così. Allego anche un file che ha solo un foglio di POS.0 e 11 fogli delle ruote. Ringraziando anticipatamente tutti coloro che mi aiuteranno.
73 ikwae
http://www.filedropper.com/testoneltesto
Codice: Seleziona tutto
Sub AmacroA_Taglia_Pos11()
Dim CL As Object
num = Worksheets.Count
Dimmi = "POS.11"
'Dimmi = "POS.10"
'Dimmi = "POS.0"
'Dimmi = "POS.1"
'Dimmi = "POS.2"
'Dimmi = ... fino "POS.9"
               
For Each ws In Worksheets
If ws.Name = "Pos0" Or ws.Name = "Pos1" Or ws.Name = "Pos2" _
Or ws.Name = "Pos3" Or ws.Name = "Pos4" Or ws.Name = "Pos5" _
Or ws.Name = "Pos6" Or ws.Name = "Pos7" Or ws.Name = "Pos8" _
Or ws.Name = "Pos9" Or ws.Name = "Pos10" Or ws.Name = "Pos11" _
Or ws.Name = "Ruota" Or ws.Name = "RuotaOrg" Or ws.Name = "Ruota_Bis" Then GoTo 20
ws.Activate

Set Zona = ws.UsedRange
For Each CL In Zona
If CL.Value Like "*" & Dimmi & "*" Then
CL.EntireRow.Cut ’Copy

Sheets("Pos11").Select
'Sheets("Pos11").Select
'Sheets("Pos10").Select
'Sheets("Pos0").Select
'Sheets("Pos1").Select
 'fino a "POS.9"

Dim irow As Integer
irow = 2 'RIGA 2
While Cells(irow, 1).Value <> "" 'COLONNA1
irow = irow + 1
Wend
Cells(irow, 1).Select
  ActiveSheet.Paste
End If
Next
att = att + 1
20
Next ws
If att = num Then
Sheets("Pos11").Select
'Sheets("Pos10").Select
'Sheets("Pos0").Select
'Sheets("Pos1").Select
 'fino a "POS.9"
End If
End Sub             
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: Cercare del testo all’interno di una stringa

Postdi Anthony47 » 21/06/18 18:22

Questo e' il classico messaggio che invita a non essere letto, perche' gia' visivamente appare incomprensibile.

Ho quindi letto senza capire la prima parte, ma non mi sono preoccupato visto che "L’aiuto che cerco non è in colonna A" (quella di cui si parla all'inizio, immagino) "ma in colonna H che ci sono le vincite".
Qui disorienti subito dicendo "in ogni colonna H dei 12 fogli di nome POS0 fino a POS11", perche' il file ha solo un foglio: Pos0; ho pensato che sia un file dimostrativo e non mi sono preoccupato. Quel che viene dopo e' abbastanza comprensibile, salvo perche' si deve "tagliare" la riga: un'operazione "costosa" in termini di tempo, visto il bisogno di scalare le righe successive, i inutile tanto alla fine il foglio dovrebbe essere tutto vuoto e lo puoi cancellare in toto.

Cio' detto, quello che ho capito potrebbe essere fatto con questo codice:
Codice: Seleziona tutto
Sub VaiConLeVincite()
Dim I As Long, J As Long, K As Long, mySA, mySB
Dim muNext As Long
'
For I = 1 To Worksheets.Count
    If UCase(Left(Sheets(I).Name, 3)) = "POS" Then
        Sheets(I).Select: DoEvents
        Application.ScreenUpdating = False
        For J = 2 To Cells(Rows.Count, "H").End(xlUp).Row
            mySA = Split(Cells(J, "H").Value & " ", " ", , vbTextCompare)
            Cells(J, "A").Resize(1, 57).Copy
            For K = 0 To UBound(mySA)
                If Len(mySA(K)) > 3 Then
                    mySB = Split(mySA(K), "-", , vbTextCompare)
                    If UBound(mySB) > 0 Then
                        mynext = Sheets(mySB(1)).Cells(Rows.Count, 1).End(xlUp).Row + 1
                        Sheets(mySB(1)).Cells(mynext, 1).PasteSpecial xlPasteAll
                    End If
                End If
            Next K
            Application.CutCopyMode = False
        Next J
    End If
    Application.ScreenUpdating = True: DoEvents
Next I
End Sub
Mettilo in un modulo standard e all'occorrenza lancia la Sub VaiConLeVincite

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

Re: Cercare del testo all’interno di una stringa

Postdi ikwae » 21/06/18 21:57

Gentilissimo Anthony47, innanzitutto devo scusarmi con te e con tutto il Forum perché chiedo aiuto scrivendo “se c’è qualcuno che ha del tempo disponibile’ e quindi se ha del tempo disponibile lo perde solo a leggere il “tema” quindi l’aiuto che poteva darmi glielo fatto perdere ancora prima di aiutarmi ... Tuttavia quando scrivo, per chiedere aiuto, cerco di essere più dettagliato possibile, appunto per non far perdere tempo, ma poi mi sono accorto che come sopra e ho messo tre smile di vergogna... ancora scusa e, cerco di stare attento la prossima volta. Detto questo, obbligatoriamente dovuto, dico che in attesa di una eventuale risposta ho fatto delle macro “casarecce” e i conti tornano all’unisono con la tua gradita e preziosa macro. Preciso che, volutamente, ho inserito solo un foglio(“Pos.0”), nell’allegato dell’aiuto, pensando erroneamente, di aver chiesto una macro per la sola colona H(delle vincite virtuali) e leggendo con attenzione quello che ho scritto, per l’aiuto, mi sono accorto che mi sono espresso male. Io pensavo di chiede una macro per la sola colonna H per poi mettere, questa macro, nel giro fogli del “contenitore” delle posizioni e poi metterla nel “contenitore” del giro fogli delle cinquine così avevo la doppia informazione ossia la posizione della vincita e il relativo “nome” della cinquina che l’ha generata... Quindi due distinte informazioni per ulteriori elaborazioni separate. Detto questo chiarimento lascio la tua precisa macro, che hai appena fatto, per i fogli delle posizioni e ti devo chiedere se puoi modificare la tua macro esclusivamente per i riferimenti ai fogli lasciando tutto il resto invariato ossia anziché fare il giro dei fogli di nome “Pos.0” fino a “Pos.11” con i nomi dei fogli che si chiamano “1” “2” “3” fino al “18” ... I fogli posizione e i fogli della cinquine cambiano esclusivamente per i riferimenti scritti in colonna B (tutto il resto è uguale come struttura) che non prende parte ai “giochi” delle macro. Chiedendo ancora umilmente scusa per il “tema” e ringraziandoti mille e mille volte per il tuo gradito e prezioso aiuto. Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Re: Cercare del testo all’interno di una stringa

Postdi Anthony47 » 24/06/18 01:22

Se vuoi eseguire quelle operazioni sui fogli da "1" a "18" allora la macro diventa:
Codice: Seleziona tutto
Sub VaiConLeVincite2()
Dim I As Long, J As Long, K As Long, mySA, mySB
Dim myNext As Long
'
For I = 1 To 18    'Worksheets.Count
    '    If UCase(Left(Sheets(I).Name, 3)) = "POS" Then
        Sheets(CStr(I)).Select: DoEvents
        Application.ScreenUpdating = False
        For J = 2 To Cells(Rows.Count, "H").End(xlUp).Row
            mySA = Split(Cells(J, "H").Value & " ", " ", , vbTextCompare)
            Cells(J, "A").Resize(1, 57).Copy
            For K = 0 To UBound(mySA)
                If Len(mySA(K)) > 3 Then
                    mySB = Split(mySA(K), "-", , vbTextCompare)
                    If UBound(mySB) > 0 Then
                        myNext = Sheets(mySB(1)).Cells(Rows.Count, 1).End(xlUp).Row + 1
                        Sheets(mySB(1)).Cells(myNext, 1).PasteSpecial xlPasteAll
                    End If
                End If
            Next K
            Application.CutCopyMode = False
        Next J
'    End If
    Application.ScreenUpdating = True: DoEvents
Next I
End Sub

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

Re: Cercare del testo all’interno di una stringa

Postdi ikwae » 24/06/18 10:18

Gentilissimo Anthony47, ho provato la tua seconda macro e i conti tornano anche se era tacitamente confermato lo scrivo per il dovuto riscontro.
Ho confrontato i dati con le vincite delle posizioni(1à macro) che risultano 8626 con il totale delle cinquine(2à macro) che sono 8626 in entrambi i casi la somma totale, all’interno dei fogli delle ruote, è unanime... Questo aiuto che ho richiesto serve per avere preziose indicazioni ossia le cinquine che ho pronosticato e, confrontate di volta in volta con l’estrazioni reali, hanno totalizzato nel 2017 8.626 vincite(virtuali) che diviso 156 estrazioni danno come risultato 55,29 vincite a estrazione e dividendo per 18 cinquine fanno una media di 3,1 vincite a estrazione per ogni cinquina (magari fosse realtà) ... in testa la ruota di CA con 833 vincite e a seguire la ruota di FI con 824 vincite e poi tutte le altre con una media di 750 ... l’ultima la RN con soli (tanto per dire) 744 vincite ... le vincite sono dal semplice ambo alla cinquina. Ringraziandoti mille e mille volte per il tuo gradito e prezioso aiuto aggiungendo e, sicuramente non smentita, la tua generosa disponibilità . Cordialmente ikwae
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "Cercare del testo all’interno di una stringa":


Chi c’è in linea

Visitano il forum: Nessuno e 63 ospiti