No problem Tony, here are two examples...
Code:
Option Explicit
Dim wb As Workbook, ws As Worksheet
Dim rTest As Range, rDest As Range
Dim i As Long, arrData() As Variant, rColTemp As Range
Const iValueLen As Long = 4
Sub Test_LEFT_Array()
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
Set rTest = ws.Range("A1:A15")
Set rDest = wb.Sheets("Sheet2").Range("A1")
arrData = rTest.Value
For i = LBound(arrData) To UBound(arrData)
If Len(arrData(i, 1)) >= iValueLen Then
arrData(i, 1) = Left(arrData(i, 1), iValueLen)
End If
Next i
rDest.Resize(rTest.Rows.Count, rTest.Columns.Count).Value = arrData()
End Sub
Sub Test_LEFT_Formula()
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
Set rTest = ws.Range("A1:A15")
Set rDest = wb.Sheets("Sheet2").Range("A1")
rTest.Offset(0, 1).EntireColumn.Insert
Set rColTemp = rTest(1, 1).Offset(0, 1).Resize(rTest.Rows.Count, rTest.Columns.Count)
rColTemp.Formula = "=LEFT(RC[-1]," & iValueLen & ")"
rDest.Resize(rTest.Rows.Count, rTest.Columns.Count).Value = rColTemp.Value
rColTemp.EntireColumn.Delete
End Sub
Only the one has a loop, but I much prefer looping via code values in an array as opposed to interrogating cells in a loop, which makes Excel have to load all of the data and properties along with it everytime, and I'd rather do it once or twice at most. Not to say either of these are better, just my preferred method(s).
HTH