Страницы: 1
RSS
Поиск и замена значений с помощью макроса
 
Приветствую всех!

Подскажите пожалуйста:

В макросе создан код для поиска ФИО в заголовке, а затем необходимо заменить символы со второй строки на листе. Нормально получилось, но есть одна проблема. При автоматизации не изменяет символы со второй строки, например, хочу заменить буквы "А" и "В" в строках с 2 по 8 на букву "Б".
Что не так с этим кодом?
Код
Sub test()
        Dim ws As Worksheet
        Dim z As String 'Найти заголовок
        Dim rng As Range 'Ячейка
        Dim c As String 'Заменить на Б
        Dim i As Long 'Для счета
        
    z = "Васильев Василий Васильевич"
    c = "Б"
    
        Set ws = Worksheets("Матрица дистрибуции")
      Set rng = ws.Rows(1).Find(What:=z, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
    If rng Is Nothing Then
        MsgBox "Заголовок не найден", vbExclamation, "Ошибка"
        Exit Sub
    End If
    Dim x
     For i = rng.Row + 1 To ws.UsedRange.Rows.Count
     For Each x In Array("А", "В")
     If Cells(i, 2).Value <> "" Then
            ws.Cells(i, 1).Value = Replace(ws.Cells(i, 1).Value, x, c)
        End If
    Next x
Next i
End sub
 
Цитата
romlel написал: например, хочу...
Файл-пример в студию. Как есть - Как хочу
Согласие есть продукт при полном непротивлении сторон
 
Направил файл. Буду признателен.
 
Код
Sub test()
        Dim ws As Worksheet
        Dim z As String 'Найти заголовок
        Dim rng As Range 'Ячейка
        Dim c As String 'Заменить на Б
        Dim i As Long 'Для счета
         
    z = "Васильев Василий Васильевич"
    c = "Б"
     
    Set ws = Worksheets("Матрица дистрибуции")
    Set rng = ws.Rows(1).Find(What:=z, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
    If rng Is Nothing Then
        MsgBox "Заголовок не найден", vbExclamation, "Ошибка"
        Exit Sub
    End If
    Dim x As Long, v As Variant
    x = rng.Column
    For i = rng.Row + 1 To ws.UsedRange.Rows.Count
         For Each v In Array("А", "В")
            If ws.Cells(i, rng.Column).Value <> "" Then
                ws.Cells(i, x).Value = Replace(ws.Cells(i, x).Value, v, c)
            End If
        Next v
    Next i
End Sub
 
Для этого примера можно так
Код
Sub test()
Dim ws As Worksheet
Dim z As String 'Найти заголовок
Dim rng As Range 'Ячейка
Dim c As String 'Заменить на Б
Dim i As Long 'Для счета
         
z = "Васильев Василий Васильевич"
c = "Б"
     
Set ws = Worksheets("Матрица дистрибуции")
Set rng = ws.Rows(2).Find(What:=z, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If rng Is Nothing Then
  MsgBox "Заголовок не найден", vbExclamation, "Ошибка"
  Exit Sub
End If
Dim x
For i = rng.Row + 1 To ws.UsedRange.Rows.Count
  For Each x In Array("А", "В")
    If Cells(i, rng.Column).Value <> "" Then
      ws.Cells(i, rng.Column).Value = Replace(ws.Cells(i, rng.Column).Value, x, c)
    End If
  Next
Next i
End Sub

Согласие есть продукт при полном непротивлении сторон
 
еще макрос
Код
Option Explicit

Sub chgVal()
  Dim sh As Worksheet
'Массив ячеек в которых будем менять символы
  Dim src As Range
'Первая строка в которой будем менять символы
  Dim firstRow As Integer
'Последняя строка в которой будем менять символы
  Dim lastRow As Integer
'Колонка в которой будем менять символы
  Dim colNum As Integer
'Массив символов которые меняем
  Dim aVals As Variant
'Массив значений в которых будем производить замену
  Dim aData As Variant

'Символ на который меняем
  Dim sChar As String
  Dim i As Integer, j As Integer
  Dim s As String
  
  Set sh = ThisWorkbook.Sheets("Лист1") 'Поменяйте на свой лист "Матрица дистрибуции"
'Указываем какие значения менять
  aVals = Array("А", "В")
'Задаем значение на что менять
  sChar = "Б"
  
  firstRow = 3
  lastRow = 11
  colNum = 4
  
  aData = sh.Range(sh.Cells(firstRow, colNum), sh.Cells(lastRow, colNum))
  For i = LBound(aData) To UBound(aData)
    For j = LBound(aVals) To UBound(aVals)
      aData(i, 1) = Replace(aData(i, 1), aVals(j), sChar)
    Next j
  Next i
  
  sh.Cells(firstRow, 13).Resize(UBound(aData), 1).Value = aData
  
End Sub


 
Благодарю! Заработало. Тема закрыта.
Страницы: 1
Читают тему
Наверх