Sub Test()
Dim cell As Range, arrData, arrCons, arrOk, i As Long, j As Long, m As Long, n As Long, strReport As String
With Sheets("Sheet1")
arrData = .Range("A1").CurrentRegion.Value
End With
With Sheets("Sheet2")
arrCons = .Range("A1").CurrentRegion.Value
End With
ReDim arrOk(1 To UBound(arrData, 1), 1 To 1)
For i = 2 To UBound(arrCons, 1)
For j = 1 To UBound(arrData, 2)
If arrCons(i, 1) = arrData(1, j) Then
arrCons(i, 1) = j
Exit For
End If
Next j
Next i
For i = 2 To UBound(arrCons, 1)
If Not IsNumeric(arrCons(i, 1)) Then strReport = strReport & "," & arrCons(i, 1)
Next i
If Len(strReport) Then
MsgBox "Unrecognized fields : " & Mid$(strReport, 2)
Exit Sub
End If
For j = 2 To UBound(arrCons, 1)
m = arrCons(j, 1)
n = arrCons(j, 3)
For i = 2 To UBound(arrData, 1)
If Len(arrData(i, m)) > n Then
arrData(i, m) = Chr$(2)
arrOk(i, 1) = "NG"
End If
Next i
Next j
With CreateObject("VBScript.RegExp")
.Global = True
For j = 2 To UBound(arrCons, 1)
m = arrCons(j, 1)
.Pattern = arrCons(j, 2)
For i = 2 To UBound(arrData, 1)
If arrData(i, m) <> Chr$(2) Then
If Not .Test(arrData(i, m)) Then
arrData(i, m) = Chr$(2)
arrOk(i, 1) = "NG"
End If
End If
Next i
Next j
End With
arrOk(1, 1) = "OK/NG"
For i = 2 To UBound(arrOk, 1)
If arrOk(i, 1) <> "NG" Then arrOk(i, 1) = "OK"
Next i
With Sheets("Sheet3")
.Cells.Clear
Sheets("Sheet1").Range("A1").CurrentRegion.Copy .Range("A1")
For j = 1 To UBound(arrData, 2)
For i = 2 To UBound(arrData, 1)
If arrData(i, j) = Chr$(2) Then
.Cells(i, j).Interior.ColorIndex = 3
Else
.Cells(i, j).Interior.ColorIndex = 4
End If
Next i
Next j
With .Range("A1").CurrentRegion
With .Offset(, .Columns.Count + 1).Resize(, 1)
.Value = arrOk
For Each cell In .Cells
If cell.Value = "NG" Then
cell.Interior.ColorIndex = 3
Else
cell.Interior.ColorIndex = 4
End If
Next cell
End With
End With
End With
End Sub
Bookmarks