En VBA, cómo ordenar y verificar rápidamente los siguientes datos
'lt; /*---- Establecer parámetros - Inicio -
Atenuar sh como hoja de trabajo: Establecer sh = ActiveSheet 'La hoja de trabajo a operar (ActiveSheet: Hoja de trabajo activa actual)
Atenuar iCol como cadena: iCol = "G" 'Definir etiquetas de columna para ordenar
Atenuar iRow As Long: iRow = 2 'Definir para comenzar a ordenar la fila (la primera fila debajo de la fila del título)
Dim iFml: iFml = Array("20, 3", "15, 4", "6, 2", "1, 4") ' Obtiene el campo de clasificación , tome el valor de atrás hacia adelante
' (ejemplo "20, 3", significa comenzar desde el carácter 20 en "0402-60-PH1-4-0445-001-001" 3 caracteres, es decir "0402-60-PH1-4-0445-001".
e."001")
Dim strEx: strEx = Split("^\d{4}$, ^\d{2}$, PH1, ^[24-7]$, ^\d {4}$,^\d{3}$,^\d{3}$",",""
'Expresión regular que detecta los 7 campos en '0402-60-PH1-4 -0445-001-001', colocados en secuencia, con comas en inglés "," Segmentación
'---- Fin --*/gt;
'---- Ordenación por segmentación ----
Dim rng As Range, i
Establecer rng = sh.Range(sh.Cells(2))Range(sh.Cells(2, iCol) , sh.Cells(65536, iCol).End (xlUp))
Con rng
.EntireColumn.Offset(, 3).Insert Shift:=xlToRight
Para i = LBound(iFml) a UBound(iFml)
.Offset(, 3).FormulaR1C1 = "=MID(RC[-1], " amp; iFml(i) amp; " )"
.Resize(, 2).Sort .Cells(1, 1), xlAscending, Header:=xlNo
Siguiente
.Offset(, 3).EntireColumn.Delete
Finalizar con
'---- Iniciar detección----
Dim iArr, ramp;, strS, tmp, RegEx como objeto, FileNum como objeto
Con rng
iArr = .Resize(.Rows.Count 1, 1)
Set RegEx = CreateObject("vbscript .regexp")
RegEx.Global = True
Para r = LBound(iArr) a UBound(iArr) - 1
strS = Split(Left( iArr(r, 1), 26), "-")
Si UBound(strS) lt;gt; 6 Entonces
.Cells(r, 1)..ColorIndex = 43
Else
For i = LBound(strEx) To UBound(strEx)
......
Hola, Te enviaré el archivo que contiene las respuestas detalladas
.