¿Cómo generar directamente la salida de la fórmula mediante el código VB como visualización del valor del resultado?
1. El método para convertir una fórmula en un valor numérico es comprender la lógica de la fórmula y utilizar declaraciones VBA para implementar la operación de la fórmula, como la primera declaración:
Hoja2.Celdas(a, 4).FormulaR1C1 = "=IF(LEN(RC[-1])>=2,","válido"",""inválido"")"
El La modificación para usar VBA es:
p>Si Len(Sheet2.Cells(a, 3))>=2 Then Sheet2.Cells(a, 4) = "válido" De lo contrario Sheet2.Cells(a, 4)="invalid"
2. Después de las modificaciones anteriores, el código seguirá siendo muy lento y la velocidad no ha mejorado. Porque cada vez que modifica la fórmula de una celda + el cálculo de la fórmula, el tiempo es casi el mismo que cada vez que establece el valor de la celda. Todos se desperdician al acceder a las celdas. La solución es usar una matriz para recuperar todo el contenido de la tabla. a la vez en la matriz y escríbalo nuevamente en la hoja de trabajo inmediatamente después de que se complete la operación en la matriz. La lógica aproximada es:
Sub x()
Atenuar a. Como entero, arr2
arr2 = Sheet2.UsedRange 'Extrae contenido de una vez
Para a = 3 a UBound(arr)
Si arr(a, 1) <> "" Entonces
arr(a, 3) = IIf(Len(arr(a, 3)) >= 2, "válido", "inválido")
arr(a, 5) = IIf( InStr(arr(a, 3), "?") > 0 O InStr(arr(a, 3), "0") > 0, "No válido", "Válido")
arr(a , 6) = IIf(Len(arr(a, 4)) <> LenB(ar(ar, 4)), "chino", "inglés")
arr(a, 7) = IIf (InStr(arr(a, 3), " ") > 0, "no válido", "válido")
arr(a, 8) = arr( a, 6) & arr(a, 7 )
End If
Siguiente a
Sheet2.UsedRange = arr 'Hoja de trabajo de reescritura única
Fin del subtítulo