Moderatori: Anthony47, Flash30005
In attesa di ricevere suggerimenti sul confronto tra Access /Excel /VB (che io non sono in grdo di dare), se illustri qualche operazione particolarmente lenta sono sicuro che riusciremo a farla girare piu' velocemente.Alcune operazioni su fogli con oltre 60.000 parole sono molto dispendiose in termini di tempo ....
For x = 1 To Sheets(foglio_dizionario).Range("A" & ultrigo).End(xlUp).row
If UCase(Sheets(foglio_dizionario).Cells(x, 1).Value) Like UCase(pre) = True Then
pre_controllo = True
Exit Function
End If
Next
Function FFiltraBL(ByVal myLen As Long, ByRef myWdList As Range) As Variant
Dim WArr, OArr(), I As Long, myOInd As Long, listCol As String
'Equivalente a FiltraBL, ma Function
'Va richiamata passandogli la lunghezza delle parole e Foglio/indirizzi del dizionario
'RESTITUISCE un array bidmensionale:
' il primo valore e' la riga del dizionario dove si trova la parola
' il secondo valore e' la parola
'
'Esempio:
' myVAR = FFiltraBL(4, Sheets("Foglio3").Range("D1:D5000"))
'
WArr = myWdList.Value
ReDim OArr(1 To 2, LBound(WArr, 1) To UBound(WArr, 1))
myOInd = LBound(OArr)
For I = LBound(WArr, 1) To UBound(WArr, 1)
If Len(WArr(I, 1)) = myLen Then '<<< La lunghezza cercata
OArr(1, myOInd) = WArr(I, 1)
OArr(2, myOInd) = I
myOInd = myOInd + 1
End If
Next I
ReDim Preserve OArr(1 To 2, LBound(WArr, 1) To myOInd)
FFiltraBL = OArr
End Function
Dim peppArr 'In testa, tra le dichiarazioni
'
peppArr = FFiltraBL(4, Sheets("Foglio3").Range("D1:D5000")) '<<< Vedi testo
For x = LBound(peppArr) to UBound(peppArr)
If peppArr(2, i) Like pre Then
pre_controllo = True
Exit Function
End If
Next
peppArr = FFiltraBL(Len(pre), Sheets(foglio_dizionario).Range("A1:A" & ultrigo))
For x = LBound(peppArr) To UBound(peppArr)
For x = LBound(peppArr) To UBound(peppArr)
If UCase(peppArr(1, x)) Like pre Then
For x = LBound(peppArr, 2) To UBound(peppArr, 2)
Sub SfondoColoreAnth() 'Codice iniziale by Marius44
'ARRAY, Modificata by Anthony
Dim i As Long, myRan As Range
Dim j As Long
Dim uriga As Long
Dim uriga1 As Long
Dim wks As Worksheet
Dim wks1 As Worksheet
Dim Rng As Range
Dim DP '() As String 'per le colonne P-T di Foglio Riepilogo
Dim RP '() As String 'per la colonna A di Foglio Riepilogo
Dim SH '() As String 'per la colonna A di Foglio Sheet
Dim CK '() As String 'per la colonna CK di Foglio Sheet
itime = Timer
Sheets("Riepilogo").Select
Set Rng = Range("P2:T" & Range("A" & Rows.Count).End(xlUp).Row)
Rng.Interior.ColorIndex = xlNone
Application.ScreenUpdating = False
Set wks = ThisWorkbook.Worksheets("Riepilogo")
Set wks1 = ThisWorkbook.Worksheets("Sheet")
uriga = wks.Range("A" & Rows.Count).End(xlUp).Row
uriga1 = wks1.Range("A" & Rows.Count).End(xlUp).Row
RP = wks.Range(Cells(2, 1), Cells(uriga, 1)).Value ''''
DP = wks.Range(Cells(2, 16), Cells(uriga, 20)).Value '''
'SH = wks1.Range(wks1.Cells(2, 1), wks1.Cells(uriga1, 1)).Value
CK = wks1.Range(wks1.Cells(2, 89), wks1.Cells(uriga1, 89)).Value
Set rsh = wks1.Range(wks1.Cells(1, 1), wks1.Cells(uriga1, 1))
For a = 16 - 15 To 20 - 15
For i = 2 - 1 To uriga - 1
If DP(i, a) <> "" Then
mymatch = Application.Match(DP(i, a), rsh, 0)
If Not IsError(mymatch) Then
If CK(mymatch - 1, 1) = "Consegnato" Then
wks.Cells(i + 1, a + 15).Interior.ColorIndex = 43
End If
End If
End If
1 Next i
Next a
Set wks = Nothing
Set wks1 = Nothing
ftime = Timer
Cells(13, 30) = ftime - itime
Application.ScreenUpdating = True
MsgBox "Fatto!", vbExclamation, "Manutenzione"
End Sub
Public Sub new_carica_dizionario(ByRef myWdList As Range)
Dim WArr, i As Long, myOInd As Long
nome_modulo = "New_SubFunc_usate"
nome_routine = "New_carica_dizionario"
On Error GoTo errore:
WArr = myWdList.Value
ReDim OArr(1 To 3, LBound(WArr, 1) To UBound(WArr, 1))
myOInd = LBound(OArr)
For i = LBound(WArr, 1) To UBound(WArr, 1)
OArr(1, myOInd) = i
OArr(2, myOInd) = WArr(i, 1)
OArr(3, myOInd) = Len(Trim(WArr(i, 1)))
myOInd = myOInd + 1
Next i
ReDim Preserve OArr(1 To 3, LBound(WArr, 1) To myOInd)
Exit Sub
errore:
MsgBox "Rilevato errore." & Chr(13) & "Modulo: " & nome_modulo & Chr(13) & "Routine: " & nome_routine & Chr(13) & Chr(13) & Err.Description, vbCritical + vbOKOnly, "Errore"
Exit Sub
End Sub
Anthony47 ha scritto:Il mio suggerimento e' di ordinare l'elenco sul foglio Excel, che lo fai una volta e vale per sempre (fintanto che non aggiungi nuove Parole all'elenco). Altrimenti ricorreremo a una "bubble sort"
Ciao
Anthony47 ha scritto:In Inglese: We shall cross the bridge when we get there
Oppure: Domani e' un'altro giorno, si vedra'
Torna a Applicazioni Office Windows
Consiglio portatile 13' uso lavorativo/web Autore: nonsonoio |
Forum: Consigli per gli acquisti Risposte: 8 |
Inserire add.in nella barra di avvio veloce in excel 2003 Autore: Ricky0185 |
Forum: Applicazioni Office Windows Risposte: 4 |
Excel: problema con date se devo unirle a testi Autore: valle1975 |
Forum: Applicazioni Office Windows Risposte: 5 |
confrontare e evidenziare 2 fogli excel Autore: niccia |
Forum: Applicazioni Office Windows Risposte: 7 |
Visitano il forum: Nessuno e 45 ospiti