VBA найти и заменить - PullRequest
       7

VBA найти и заменить

0 голосов
/ 22 ноября 2018

Я использую приведенный ниже код, чтобы найти и заменить в Excel:

Sub abbrev()
Dim abvtab() As Variant
Dim ltsheet As Worksheet
Dim datasheet As Worksheet
Dim lt As Range
Dim i As Long
Set ltsheet = Sheets("sheet2")
' REFERENCE TO SINGLE WORKSHEET
'  Set datasheet = Sheets("ACTIVE_DIRECTORY_User")
Set lt = ltsheet.Range("A2", ltsheet.Range("B2").End(xlDown))
abvtab = lt
For Each datasheet In Worksheets
If datasheet.Name <> ltsheet.Name Then
For i = 1 To UBound(abvtab)
datasheet.Cells.Replace What:=abvtab(i, 1), Replacement:=abvtab(i, 2), 
LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Next i
End If
Next datasheet
End Sub

Однако, кажется, он не может найти части слов, например, если я хочу заменитьслово книга код игнорирует слово книжные полки

Есть ли способ, которым я могу установить приведенный выше код, чтобы он соответствовал точному слову, независимо от того, входит ли оно в предложение или, например, в него есть пробел?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

В конце концов мне пришлось отказаться от VBA, и вместо этого я использовал C # Regex. Заменить было много проблем с поиском и заменой через Excel, так что решение, показанное ниже, работало хорошо, хотя нижеприведенное сработало, мне также пришлось отказаться от него какCSV был неправильный формат файла для того, что мне нужно, я буду использовать MySQL вместо этого, я вставил код ниже в любом случае на случай, если кто-то может извлечь из него пользу и использовать его, чтобы найти и заменить в масштабе

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.RegularExpressions;


namespace ConsoleApp10
{
class Program
{
static void Main(string[] args)
{
string SAR_CONTACTS = @"C: \Users\Desktop\SAR_CONTACTS.csv";
string SAR_CONTENT = @"C: \Users\Desktop\SAR_CONTENT.csv";
string READ_SAR_CONTACTS;
using (StreamReader streamReader = new StreamReader(SAR_CONTENT, Encoding.UTF8))
READ_SAR_CONTACTS = streamReader.ReadToEnd();

string SAR_CONTACTS_FILE = File.ReadAllText(SAR_CONTACTS);
string SAR_CONTENT_FILE = SAR_CONTACTS_FILE.Replace("\r\n", "|");
SAR_CONTENT_FILE = SAR_CONTENT_FILE.Remove(SAR_CONTENT_FILE.Length - 1);
string SAR_CONTENT_CENSORED = Regex.Replace(READ_SAR_CONTACTS, SAR_CONTENT_FILE, 
 "######", RegexOptions.IgnoreCase);
File.WriteAllText(@"C: \Users\Desktop\SAR_CONTENT_FILTERED.csv", 
 SAR_CONTENT_CENSORED);
}
}
}
0 голосов
/ 24 ноября 2018

Как насчет этого?

Sub Multi_FindReplace()

Dim sht As Worksheet
Dim fndList As Variant
Dim rplcList As Variant
Dim x As Long

fndList = Array("*" & "Ca" & "*", "United States", "Mexico")
rplcList = Array("CAN", "USA", "MEX")

'Loop through each item in Array lists
  For x = LBound(fndList) To UBound(fndList)
    'Loop through each worksheet in ActiveWorkbook
      For Each sht In ActiveWorkbook.Worksheets
        sht.Cells.Replace What:=fndList(x), Replacement:=rplcList(x), _
          LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
          SearchFormat:=False, ReplaceFormat:=False
      Next sht

  Next x

End Sub

Обратите внимание на символы подстановки: "*" & "Ca" & "*"

До:

enter image description here

После:

enter image description here

...