Как найти и заменить формат даты в комментариях Excel, используя VBA - PullRequest
0 голосов
/ 07 мая 2018

У меня есть ячейки с комментариями, такие как:

26 мая 2017 г .: снижено с 1000 до 900

Я хочу использовать VBA для поиска и замены только формата даты в комментариях от:

МММ ДД, ГГГГ

до

YYYY / MM / DD

Лучший код, который я смог найти после поиска в течение нескольких часов, - это следующее, но, к сожалению, он только находит и заменяет текст текстом. Я пытался заставить его работать с форматами, но не смог.

Sub ReplaceComments()
Dim cmt As Comment
Dim wks As Worksheet
Dim sFind As String
Dim sReplace As String
Dim sCmt As String
sFind = "2011"
sReplace = "2012"
For Each wks In ActiveWorkbook.Worksheets
For Each cmt In wks.Comments
sCmt = cmt.Text
If InStr(sCmt, sFind) <> 0 Then
sCmt = Application.WorksheetFunction. _
Substitute(sCmt, sFind, sReplace)
cmt.Text Text:=sCmt
End If
Next
Next
Set wks = Nothing
Set cmt = Nothing
End Sub

1 Ответ

0 голосов
/ 07 мая 2018

Вы можете попробовать этот код ниже.

Убедитесь, что вы сделали копию своей работы, прежде чем использовать ее. Как говорит @Kevin, успех будет зависеть от формата, используемого при вводе данных. Код, который вы указали, просматривает все листы в вашей рабочей тетради. Это то, что вы хотите?

Тем не менее, попробуйте и вернитесь, если не подходит.

Sub test_comment()

Dim Wsh As Worksheet
Dim Cmt As Comment

For Each Wsh In ActiveWorkbook.Sheets
    For Each Cmt In Wsh.Comments
        If InStr(1, Cmt.Text, ":") > 0 Then
            St1 = Cmt.Text
            St2 = Format(Left(St1, InStr(1, St1, ":") - 1), "YYYY/MM/DD")
            Cmt.Text St2 & Mid(St1, InStr(1, St1, ":"))
        End If
    Next Cmt
Next Wsh

End Sub

Новая попытка для нескольких строк:

Sub test_comment()

Dim Wsh As Worksheet
Dim Cmt As Comment

For Each Wsh In ActiveWorkbook.Sheets
    For Each Cmt In Wsh.Comments
        Arr1 = Split(Cmt.Text, Chr(10))
        For i = 0 To UBound(Arr1)
            If InStr(1, Arr1(i), ":") > 0 Then
                St1 = Arr1(i)
                St2 = Format(Left(St1, InStr(1, St1, ":") - 1), "YYYY/MM/DD")
                Arr1(i) = St2 & Mid(St1, InStr(1, St1, ":"))
                Cmt.Text Join(Arr1, Chr(10))
            End If
        Next i
    Next Cmt
Next Wsh

End Sub
...