Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Заменить "..." на «...» - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Заменить "..." на «...»
Mark1976 Дата: Воскресенье, 07.12.2025, 15:45 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 819
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
Здравствуйте. Можно сделать макросом замену это "..." на это «...». Заменить на листе везде где встречаются " "?
К сообщению приложен файл: kavychki.xlsx (8.0 Kb)


Сообщение отредактировал Mark1976 - Воскресенье, 07.12.2025, 16:19
 
Ответить
СообщениеЗдравствуйте. Можно сделать макросом замену это "..." на это «...». Заменить на листе везде где встречаются " "?

Автор - Mark1976
Дата добавления - 07.12.2025 в 15:45
i691198 Дата: Воскресенье, 07.12.2025, 16:09 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 460
Репутация: 141 ±
Замечаний: 0% ±

2016
Здравствуйте. Наверное можно, нужен пример где это нужно сделать.


Сообщение отредактировал i691198 - Воскресенье, 07.12.2025, 16:09
 
Ответить
СообщениеЗдравствуйте. Наверное можно, нужен пример где это нужно сделать.

Автор - i691198
Дата добавления - 07.12.2025 в 16:09
Mark1976 Дата: Воскресенье, 07.12.2025, 16:19 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 819
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
i691198, приложил.
 
Ответить
Сообщениеi691198, приложил.

Автор - Mark1976
Дата добавления - 07.12.2025 в 16:19
i691198 Дата: Воскресенье, 07.12.2025, 18:05 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 460
Репутация: 141 ±
Замечаний: 0% ±

2016
Для вашего примера можно так.
[vba]
Код
Sub Repl()
  Dim Lr%, Lc%, Rn As Range
  Lr = Cells(Rows.Count, 1).End(xlUp).Row
  Lc = Cells(1, Columns.Count).End(xlToLeft).Column
  For Each Rn In Range(Cells(1, 1), Cells(Lr, Lc))
    If Left(Rn, 1) = """" And Right(Rn, 1) = """" Then Rn = "«" & Mid(Rn, 2, Len(Rn) - 2) & "»"
  Next
End Sub
[/vba]
В макросе всего одна проверка - замена на угловые кавычки происходит, если в начале и в конце текста стоят обычные кавычки.
 
Ответить
СообщениеДля вашего примера можно так.
[vba]
Код
Sub Repl()
  Dim Lr%, Lc%, Rn As Range
  Lr = Cells(Rows.Count, 1).End(xlUp).Row
  Lc = Cells(1, Columns.Count).End(xlToLeft).Column
  For Each Rn In Range(Cells(1, 1), Cells(Lr, Lc))
    If Left(Rn, 1) = """" And Right(Rn, 1) = """" Then Rn = "«" & Mid(Rn, 2, Len(Rn) - 2) & "»"
  Next
End Sub
[/vba]
В макросе всего одна проверка - замена на угловые кавычки происходит, если в начале и в конце текста стоят обычные кавычки.

Автор - i691198
Дата добавления - 07.12.2025 в 18:05
MikeVol Дата: Воскресенье, 07.12.2025, 18:43 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 462
Репутация: 111 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
На больших объёмах будет по быстрее: [vba]
Код
Option Explicit

Sub ReplaceOnArray()
    Dim r As Long, c As Long
    Dim txt         As String
    Dim p           As Long

    Dim rng         As Range
    Set rng = ActiveSheet.UsedRange
    
    Dim arr         As Variant
    arr = rng.Value

    For r = 1 To UBound(arr, 1)
        
        For c = 1 To UBound(arr, 2)

            If Not IsError(arr(r, c)) Then
                txt = arr(r, c)

                If InStr(txt, """") > 0 Then
                    p = 1
                    
                    Do While InStr(p, txt, """") > 0
                        p = InStr(p, txt, """")
                        Mid$(txt, p, 1) = "«"

                        If InStr(p + 1, txt, """") > 0 Then
                            p = InStr(p + 1, txt, """")
                            Mid$(txt, p, 1) = "»"
                        Else
                            Exit Do
                        End If

                        p = p + 1
                    Loop

                    arr(r, c) = txt
                End If
            
            End If

        Next c
    
    Next r

    rng.Value = arr
End Sub
[/vba]


Ученик.
Одесса - Украина
 
Ответить
СообщениеНа больших объёмах будет по быстрее: [vba]
Код
Option Explicit

Sub ReplaceOnArray()
    Dim r As Long, c As Long
    Dim txt         As String
    Dim p           As Long

    Dim rng         As Range
    Set rng = ActiveSheet.UsedRange
    
    Dim arr         As Variant
    arr = rng.Value

    For r = 1 To UBound(arr, 1)
        
        For c = 1 To UBound(arr, 2)

            If Not IsError(arr(r, c)) Then
                txt = arr(r, c)

                If InStr(txt, """") > 0 Then
                    p = 1
                    
                    Do While InStr(p, txt, """") > 0
                        p = InStr(p, txt, """")
                        Mid$(txt, p, 1) = "«"

                        If InStr(p + 1, txt, """") > 0 Then
                            p = InStr(p + 1, txt, """")
                            Mid$(txt, p, 1) = "»"
                        Else
                            Exit Do
                        End If

                        p = p + 1
                    Loop

                    arr(r, c) = txt
                End If
            
            End If

        Next c
    
    Next r

    rng.Value = arr
End Sub
[/vba]

Автор - MikeVol
Дата добавления - 07.12.2025 в 18:43
Mark1976 Дата: Воскресенье, 07.12.2025, 18:46 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 819
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
i691198, спасибо. Макрос делает замену не во всех ячейках. Мне нужна замена везде, где есть кавычки.
 
Ответить
Сообщениеi691198, спасибо. Макрос делает замену не во всех ячейках. Мне нужна замена везде, где есть кавычки.

Автор - Mark1976
Дата добавления - 07.12.2025 в 18:46
Mark1976 Дата: Воскресенье, 07.12.2025, 18:48 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 819
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, 2013
MikeVol, спасибо. Удаляет везде.
 
Ответить
СообщениеMikeVol, спасибо. Удаляет везде.

Автор - Mark1976
Дата добавления - 07.12.2025 в 18:48
_Boroda_ Дата: Понедельник, 08.12.2025, 10:09 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16962
Репутация: 6636 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Удаляет везде.
И попутно формулы в значения переводит)))
Такой вариант:
[vba]
Код
Sub tt()
    On Error Resume Next
    Set d0_ = Range("A1").SpecialCells(xlCellTypeConstants, 2)
    If Err Then Exit Sub
    On Error GoTo 0
    Application.ScreenUpdating = 0
    d0_.Replace What:="""", Replacement:="«"
    For Each d_ In d0_.Areas
        ar_ = d_.Value
        For i = 1 To UBound(ar_)
            For j = 1 To UBound(ar_, 2)
                t_ = ar_(i, j)
                n_ = Len(t_) - Len(Replace(t_, "«", ""))
                If n_ Then
                    For k = n_ To 2 Step -2
                        t_ = WorksheetFunction.Substitute(t_, "«", "»", k)
                    Next k
                    ar_(i, j) = t_
                End If
            Next j
        Next i
        d_.Value = ar_
    Next d_
    Application.ScreenUpdating = 1
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Удаляет везде.
И попутно формулы в значения переводит)))
Такой вариант:
[vba]
Код
Sub tt()
    On Error Resume Next
    Set d0_ = Range("A1").SpecialCells(xlCellTypeConstants, 2)
    If Err Then Exit Sub
    On Error GoTo 0
    Application.ScreenUpdating = 0
    d0_.Replace What:="""", Replacement:="«"
    For Each d_ In d0_.Areas
        ar_ = d_.Value
        For i = 1 To UBound(ar_)
            For j = 1 To UBound(ar_, 2)
                t_ = ar_(i, j)
                n_ = Len(t_) - Len(Replace(t_, "«", ""))
                If n_ Then
                    For k = n_ To 2 Step -2
                        t_ = WorksheetFunction.Substitute(t_, "«", "»", k)
                    Next k
                    ar_(i, j) = t_
                End If
            Next j
        Next i
        d_.Value = ar_
    Next d_
    Application.ScreenUpdating = 1
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 08.12.2025 в 10:09
Kuzmich Дата: Понедельник, 08.12.2025, 12:14 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 717
Репутация: 158 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
Sub Repl_()
Dim cell As Range
  With CreateObject("VBScript.RegExp")
   .Pattern = "^""(.+)""$"
     For Each cell In Range("A1:D13")
      If .test(cell) Then
        cell = "«" & .Execute(cell)(0).SubMatches(0) & "»"
      End If
     Next
   End With
End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Sub Repl_()
Dim cell As Range
  With CreateObject("VBScript.RegExp")
   .Pattern = "^""(.+)""$"
     For Each cell In Range("A1:D13")
      If .test(cell) Then
        cell = "«" & .Execute(cell)(0).SubMatches(0) & "»"
      End If
     Next
   End With
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 08.12.2025 в 12:14
msi2102 Дата: Понедельник, 08.12.2025, 14:57 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 455
Репутация: 135 ±
Замечаний: 0% ±

Excel 2019
Ещё вариант с regex
[vba]
Код
Sub Repl_Kavychki()
    Dim cll As Range, rng_1 As Range, n As Long, m As Long
    Set rng_1 = ActiveSheet.UsedRange
    arr_1 = rng_1.Value
    Set objRegExp = CreateObject("VBScript.RegExp")
    With objRegExp
        .Pattern = """(.*?)""": .Global = True
        For n = 1 To UBound(arr_1)
            For m = 1 To UBound(arr_1, 2)
                Set objMatches = .Execute(arr_1(n, m))
                With objMatches
                    For i = 0 To .Count - 1
                        arr_1(n, m) = Left(arr_1(n, m), .Item(i).FirstIndex) & "«" & .Item(i).SubMatches(0) & "»" & _
                        Mid(arr_1(n, m), .Item(i).FirstIndex + .Item(i).Length + 1)
                    Next
                End With
            Next
        Next
    End With
    rng_1.Value = arr_1
End Sub
[/vba]
К сообщению приложен файл: kavychki.xlsm (18.3 Kb)


Сообщение отредактировал msi2102 - Понедельник, 08.12.2025, 15:12
 
Ответить
СообщениеЕщё вариант с regex
[vba]
Код
Sub Repl_Kavychki()
    Dim cll As Range, rng_1 As Range, n As Long, m As Long
    Set rng_1 = ActiveSheet.UsedRange
    arr_1 = rng_1.Value
    Set objRegExp = CreateObject("VBScript.RegExp")
    With objRegExp
        .Pattern = """(.*?)""": .Global = True
        For n = 1 To UBound(arr_1)
            For m = 1 To UBound(arr_1, 2)
                Set objMatches = .Execute(arr_1(n, m))
                With objMatches
                    For i = 0 To .Count - 1
                        arr_1(n, m) = Left(arr_1(n, m), .Item(i).FirstIndex) & "«" & .Item(i).SubMatches(0) & "»" & _
                        Mid(arr_1(n, m), .Item(i).FirstIndex + .Item(i).Length + 1)
                    Next
                End With
            Next
        Next
    End With
    rng_1.Value = arr_1
End Sub
[/vba]

Автор - msi2102
Дата добавления - 08.12.2025 в 14:57
MikeVol Дата: Понедельник, 08.12.2025, 21:30 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 462
Репутация: 111 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
И попутно формулы в значения переводит)))
Исправим косяк: [vba]
Код
Option Explicit

Sub ReplaceOnArrayAndKeepFormulas()
    Dim c           As Range
    Dim txt         As String
    Dim p           As Long

    Dim rng         As Range
    Set rng = ActiveSheet.UsedRange

    For Each c In rng

        If c.HasFormula Then
            txt = c.Formula
        Else

            If Not IsError(c.Value) Then
                txt = CStr(c.Value)
            Else
                GoTo NextCell
            End If

        End If

        If InStr(txt, """") > 0 Then
            p = 1

            Do While InStr(p, txt, """") > 0
                p = InStr(p, txt, """")
                Mid$(txt, p, 1) = "«"

                If InStr(p + 1, txt, """") > 0 Then
                    p = InStr(p + 1, txt, """")
                    Mid$(txt, p, 1) = "»"
                Else
                    Exit Do
                End If

                p = p + 1
            Loop

            If c.HasFormula Then
                c.Formula = txt
            Else
                c.Value = txt
            End If

        End If

NextCell:
    Next c

End Sub
[/vba] _Boroda_, Спасибо что заметили! ;)


Ученик.
Одесса - Украина
 
Ответить
Сообщение
И попутно формулы в значения переводит)))
Исправим косяк: [vba]
Код
Option Explicit

Sub ReplaceOnArrayAndKeepFormulas()
    Dim c           As Range
    Dim txt         As String
    Dim p           As Long

    Dim rng         As Range
    Set rng = ActiveSheet.UsedRange

    For Each c In rng

        If c.HasFormula Then
            txt = c.Formula
        Else

            If Not IsError(c.Value) Then
                txt = CStr(c.Value)
            Else
                GoTo NextCell
            End If

        End If

        If InStr(txt, """") > 0 Then
            p = 1

            Do While InStr(p, txt, """") > 0
                p = InStr(p, txt, """")
                Mid$(txt, p, 1) = "«"

                If InStr(p + 1, txt, """") > 0 Then
                    p = InStr(p + 1, txt, """")
                    Mid$(txt, p, 1) = "»"
                Else
                    Exit Do
                End If

                p = p + 1
            Loop

            If c.HasFormula Then
                c.Formula = txt
            Else
                c.Value = txt
            End If

        End If

NextCell:
    Next c

End Sub
[/vba] _Boroda_, Спасибо что заметили! ;)

Автор - MikeVol
Дата добавления - 08.12.2025 в 21:30
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!