Try this in the 'ThisWorkbook' module. It checks for changes in column J (rows 3+) on any sheet and then does the check on column B and the length of the column J entry and displays a message with details if there are any inconsistencies. If the user enters multiple entries at once (eg with Ctrl+Enter or Paste) the code should check all the entered values and report on multiple items if incorrect.
Suggest a test on a copy of your workbook, or maybe even a simplified workbook as your real one sounds fairly big.
<font face=Courier New><SPAN style="color:#00007F">Private</SPAN> <SPAN style="color:#00007F">Sub</SPAN> Workbook_SheetChange(<SPAN style="color:#00007F">ByVal</SPAN> Sh <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Object</SPAN>, <SPAN style="color:#00007F">ByVal</SPAN> Target <SPAN style="color:#00007F">As</SPAN> Range)<br> <SPAN style="color:#00007F">Dim</SPAN> cr <SPAN style="color:#00007F">As</SPAN> Range, c <SPAN style="color:#00007F">As</SPAN> Range<br> <SPAN style="color:#00007F">Dim</SPAN> bl <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>, jl <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN><br> <SPAN style="color:#00007F">Dim</SPAN> msg <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN><br> <SPAN style="color:#00007F">Dim</SPAN> FoundError <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Boolean</SPAN><br> <br> <SPAN style="color:#00007F">Set</SPAN> cr = Intersect(Target, Sh.Columns("J"), Sh.Rows("2:" & Sh.Rows.Count))<br> <SPAN style="color:#00007F">If</SPAN> <SPAN style="color:#00007F">Not</SPAN> cr <SPAN style="color:#00007F">Is</SPAN> <SPAN style="color:#00007F">Nothing</SPAN> <SPAN style="color:#00007F">Then</SPAN><br> msg = "Please check the following:" & vbLf & vbLf & _<br> "Cell" & vbTab & "Value" & vbTab & "Length" & vbTab & "Expected Length"<br> <SPAN style="color:#00007F">For</SPAN> <SPAN style="color:#00007F">Each</SPAN> c <SPAN style="color:#00007F">In</SPAN> cr<br> bl = c.Offset(, -8).Value<br> jl = Len(c.Value)<br> <SPAN style="color:#00007F">If</SPAN> bl <> 0 And bl <> jl <SPAN style="color:#00007F">Then</SPAN><br> msg = msg & vbLf & c.Address(0, 0) & vbTab & c.Value & vbTab & _<br> jl & vbTab & bl<br> FoundError = <SPAN style="color:#00007F">True</SPAN><br> <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN><br> <SPAN style="color:#00007F">Next</SPAN> c<br> <SPAN style="color:#00007F">If</SPAN> FoundError <SPAN style="color:#00007F">Then</SPAN><br> MsgBox msg<br> <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN><br> <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN><br><SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN><br></FONT>