Are there actually dates in the column, or is it just text that looks like dates? If it is text, your macro would have to convert it to dates before changing the numberformat:
Option Explicit
Public Sub UpdateFormat()
Dim arrDates As Variant
Dim lngLastRow As Long
Dim lngRow As Long
On Error Resume Next
lngLastRow = Worksheets("MySheet").Columns(2).Find(What:="*", After:=[B1], _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
LookAt:=xlPart, LookIn:=xlValues).Row
If Err <> 0 Then
lngLastRow = 0
End If
On Error GoTo 0
If lngLastRow > 0 Then
arrDates = Worksheets("MySheet").Cells(2, 1).Resize(lngLastRow - 1, 1).Value
For lngRow = LBound(arrDates) To UBound(arrDates)
If Not IsDate(arrDates(lngRow, 1)) Then
arrDates(lngRow, 1) = CDate(Right(arrDates, 2) & "/1/" & Left(arrDates(lngRow, 1), 4))
End If
Next lngRow
Worksheets("MySheet").Cells(2, 1).Resize(lngLastRow - 1, 1).Value = arrDates
Worksheets("MySheet").Cells(2, 1).Resize(lngLastRow - 1, 1).NumberFormat = "MM/YYYY"
End If
End Sub
This first finds out how many rows are in column B, then copies the entire column into arrDates. It then loops through arrDates, checking if each value is a date. If not, it converts it to a date. Finally, it writes the array back out to the worksheet, and changes the numberformat to your "MM/YYYY".