Войти

Показать полную графическую версию : сопоставление слов с транслитом и заменой используя vba


r-studio
18-10-2018, 14:05
Хочу уже закрыть тему с чисткой данных используя vba на продуктах)
последний этап следующий
есть тхт файлы
вот структура (C:/partdata.txt)



и есть файл с транслитом, будет поплняться(вручную)
C:/23.txt

его содержимое
old new
MAKFA МАКФА
makar макароны
макар. макароны
MAKFA МАКФА
Макар макароны
макар. макароны
мак макароны
Мак макароны
макф макфа
маkфа макфа
kрупа крупа


колонка old - это слово, которое необходимо заменить, а в колонке new указано, какое слово из old столбца должно быть заменено в partdata.txt в столбце good_names

ID ITEM_SUM BARCODE QUANTITY PRICE NDS10 NDS18 GOODS_NAME ID_C_REGCODES_CASH_VOUCHER DISCOUNTNAME DISCOUNTSUM
3972 43.99 1 43.99 4 0 2049750 MAKFA Макар.УЛИТКИ 450г 3971 0

GOODS_NAME колонка
MAKFA Макар.УЛИТКИ
так слово Макар. есть в old column файла 23.txt и оно должно быть заменено на макароны в partdata.txt из new column.


как создать скрипт vba в отдельном файле 1.xlsx (скрипт должен быть запущен из xlsx, поскольку txt может содержать 10M строк), который может сопоставлять слова из столбца good_names файла partdata.txt со словами в транслит-файле 23.тхт,
и если он нашел слово в столбце good_names файла partdata.txt, и оно есть в старом столбце файла транслита 23.txt, затем заменить это слово на новое из new column файла 23 txt в столбце good_names файла partdata.txt, как в моем пример


.
и на выходе
ID ITEM_SUM BARCODE QUANTITY PRICE NDS10 NDS18 GOODS_NAME ID_C_REGCODES_CASH_VOUCHER DISCOUNTNAME DISCOUNTSUM
3972 43.99 1 43.99 4 0 2049750 МАКФА макароны УЛИТКИ 450г 3971 0

r-studio
19-10-2018, 12:59
я попытался для начала решить проблему таким путем
в первом листе строки partdata
во втором 23.txt
https://dropmefiles.com/Fg2Cz
Sub test3()
Dim rowCount As Integer
rowCount = Sheet1.Range("A" & rows.Count).End(xlUp).Row
rowCount2 = Sheet2.Range("A" & rows.Count).End(xlUp).Row
MsgBox rowCount
MsgBox rowCount2
For i = 2 To rowCount
For j = 2 To rowCount2
If Sheet1.Range("H" & i).Value = Sheet2.Range("A" & j).Value Then
Sheet1.Range("H" & i).Value = Sheet2.Range("B" & j)
End If
Next j
Next i
End Sub

но желтым подчеркнул
rowCount = Sheet1.Range("A" & Rows.Count).End(xlUp).Row

что это значит? почему не сработало

a_axe
20-10-2018, 20:12
но желтым подчеркнул
rowCount = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
что это значит? »
Насколько я могу судить - значение Sheet1 в процедуре вы не определили, код не понимает, к чему он должен обратиться.
Обратиться к конкретному листу активной рабочей книги можно через ActiveWorkbook.Sheets ("Название_листа"), или присвоить значение Sheet1:
Set Sheet1=ActiveWorkbook.Sheets ("Название_листа")
В конце не забудьте указать Set Sheet1=Nothing
Кроме того, rowCount может принимать значения чуть больше 32000, в вашем случае лучше использовать тип long.

r-studio
21-10-2018, 11:11
a_axe, пожалуйста, можете показать как код должен выглядеть

a_axe
21-10-2018, 15:54
r-studio, приложите файл excel с небольшим количеством данных. Если вас устроит результат в копии столбца А (например - в С), то vba тут вероятно не нужен, достаточно стандартных функций поискпоз + индекс.

r-studio
21-10-2018, 16:12
a_axe, прилржил файлик скорее всего VBA нужен, если в txt файле( (C:/partdata.txt)), из которого я в er.xlsx скопировал данные будет 10M с экселем будут проблемы




© OSzone.net 2001-2012