C’è un limite alla dimensione di una gamma in vba?

Ho creato una funzione definita dall’utente per mostrare il grado a cui le società sono abbinabili. Questa funzione funziona davvero bene, come lungo come il range di utilizzo come thisRange è inferiore o vicino alla riga 2800. Ho un elenco di 4000 aziende e quando tento di quelle righe oltre 2800, la funzione non funziona. Può l’intervallo solo essere così grande? C’è qualche modo per risolvere questo problema?

Ecco il codice:

Function bestMatch(company As String, thisRange As Range) As String

Dim min As Double, nextMin As Double
Dim cell As Range
Dim score As Double
Dim best As String, str As String, nextBest As String
min = 99999
nextMin = 99999

For Each cell In thisRange.Cells
    str = cell.Value
    substr1 = Left(str, 1)
    substr2 = Left(company, 1)
    score = Leven(company, str)
    If score < min And substr1 = substr2 Then
        min = score
        best = str
    ElseIf score = min And substr1 = substr2 Then
        min = score
        best = str + " && " + best
    ElseIf score > min And score <= nextMin And substr1 = substr2 Then
        nextMin = score
        nextBest = str
        min = min
        best = best
    End If
    Next

If min > 15 Then
    bestMatch = "No Match Found"
ElseIf min <= 15 Then
    bestMatch = "1. " + best + "    2. " + nextBest
End If

End Function
  • I limiti sono gli stessi come il Foglio di Excel limiti di dimensione. Se si può mettere in un foglio di lavoro, quindi è possibile associare a un Intervallo. Quando si dice che “non funziona”, che cosa significa?
  • Disegna un errore #Valore
  • Non particolarmente rilevante, ma utilizzando str come il nome di una variabile può essere problematico, in quanto vi è un built-in funzione VBA chiamato Str (per la conversione di numeri in stringhe) Improbabile che sia un problema a meno che il tuo str variabile è un array – dopo di che str(1) sarebbe un array di accesso e non una chiamata a una funzione
InformationsquelleAutor user2543319 | 2013-07-02



3 Replies
  1. 2

    Fare riferimento alla pagina web Excel specifiche e limiti

    Le sezioni di questa pagina sono:
    Foglio di lavoro e la cartella di lavoro specifiche e limiti
    Specifiche di calcolo e limiti
    La creazione di grafici specifiche e limiti
    Tabella pivot e grafico Pivot report specifiche e limiti
    Cartella di lavoro condivisa specifiche e limiti

    Credo che una serie può essere grande come un intero foglio di lavoro. Un foglio di lavoro limite di dimensione è elencato come 1.048.576 righe per 16.384 colonne.

    Nelle “specifiche di Calcolo e limiti” di questo articolo, il limite di una Selezionato Gamma è elencato come 2048.

  2. 1

    Che cosa succede se si tenta di eseguire il dump di tutti i valori in un array primo

    Function bestMatch(company As String, start_cell As Range, int count) As String
        Dim vals() as Variant
        vals = start_cell.Resize(count,1).Value2
    
        For i=1 to count
            substr1 = Left(vals(i,1), 1)
            ...
        Next i
        ...
    End Function

    Ho provato con >4000 cellule e non c’è nessun problema.

    • Questo sembra aver funzionato molto bene. Grazie!!!!
  3. 0

    C’è una limitazione della sottostringa per oggetto Range, ed è variabile a seconda della versione di Excel in uso. Ma da quello che mi ricordo, io sono abbastanza sicuro che è meno di 4000, qualunque sia la versione che hai.

    Al fine di trasformare questa cosa in giro, si dovrebbe dividere in alcune parti e utilizzare Union.

    • Solo un suggerimento: È possibile spostare questa linea str = cell.Value e tre dopo che è al di fuori del ciclo (prima il For..Each linea) come hanno solo bisogno di essere valutato una sola volta.
    • Grazie Philippe e Andy

Lascia un commento