Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   сопоставление слов с транслитом и заменой используя vba (http://forum.oszone.net/showthread.php?t=337253)

r-studio 18-10-2018 14:05 2836448

сопоставление слов с транслитом и заменой используя vba
 
Хочу уже закрыть тему с чисткой данных используя 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 2836574

я попытался для начала решить проблему таким путем
в первом листе строки 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 2836755

Цитата:

Цитата r-studio
но желтым подчеркнул
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 2836811

a_axe, пожалуйста, можете показать как код должен выглядеть

a_axe 21-10-2018 15:54 2836845

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

r-studio 21-10-2018 16:12 2836848

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


Время: 23:12.

Время: 23:12.
© OSzone.net 2001-