Есть данные : 1) Столбец из 100-400 ячеек в каждой ячейке находится 16значный алфавитно-цифровой номер. Например : DAX2009855855555 AUC2009849066666
2) Каждому номер нужно едино разово присвоить значение Например : DAX2009855855555 это = « ручные весы v23 » AUC2009849066666 это = « самовар v3 »
Каждый день я получаю номера из 100- 400 ячеек и нужно что бы их проверило на то значение что я им присвоил п.2. И вывело список товара, а если значение не присвоено в п.2, то что бы выводилась надпись например NEW, и по возможности что бы список товара выводился в те же ячейке в которых находился 16ти значный код.
Думаю что это возможно сделать на VBA в Excel, но к сожалению мои познания не позволяют это сделать.
Помогите пожалуйста!
Не могу реализовать VBA сравнение
Есть данные : 1) Столбец из 100-400 ячеек в каждой ячейке находится 16значный алфавитно-цифровой номер. Например : DAX2009855855555 AUC2009849066666
2) Каждому номер нужно едино разово присвоить значение Например : DAX2009855855555 это = « ручные весы v23 » AUC2009849066666 это = « самовар v3 »
Каждый день я получаю номера из 100- 400 ячеек и нужно что бы их проверило на то значение что я им присвоил п.2. И вывело список товара, а если значение не присвоено в п.2, то что бы выводилась надпись например NEW, и по возможности что бы список товара выводился в те же ячейке в которых находился 16ти значный код.
Думаю что это возможно сделать на VBA в Excel, но к сожалению мои познания не позволяют это сделать.
Sub compareData() With Application .ScreenUpdating = False .EnableEvents = False .DisplayAlerts = False End With Dim i&, newWB As Workbook, dic As Object Set dic = CreateObject("scripting.dictionary") With ThisWorkbook.Sheets(1) For i = 5 To .Cells(Rows.Count, "d").End(xlUp).Row dic(Trim(.Cells(i, "d"))) = .Cells(i, "f") Next i End With Set newWB = Workbooks.Open(ThisWorkbook.Path & "\TMP_V1.xlsx") With newWB.Sheets(1) For i = 7 To .Cells(Rows.Count, "k").End(xlUp).Row If dic.exists(Trim(.Cells(i, "k"))) Then .Cells(i, "k") = dic(Trim(.Cells(i, "k"))) Else .Cells(i, "k") = "New" End If Next i End With newWB.Save With Application .ScreenUpdating = True .EnableEvents = True .DisplayAlerts = True End With End Sub
[/vba]
AxelTT, так подойдет? [vba]
Код
Sub compareData() With Application .ScreenUpdating = False .EnableEvents = False .DisplayAlerts = False End With Dim i&, newWB As Workbook, dic As Object Set dic = CreateObject("scripting.dictionary") With ThisWorkbook.Sheets(1) For i = 5 To .Cells(Rows.Count, "d").End(xlUp).Row dic(Trim(.Cells(i, "d"))) = .Cells(i, "f") Next i End With Set newWB = Workbooks.Open(ThisWorkbook.Path & "\TMP_V1.xlsx") With newWB.Sheets(1) For i = 7 To .Cells(Rows.Count, "k").End(xlUp).Row If dic.exists(Trim(.Cells(i, "k"))) Then .Cells(i, "k") = dic(Trim(.Cells(i, "k"))) Else .Cells(i, "k") = "New" End If Next i End With newWB.Save With Application .ScreenUpdating = True .EnableEvents = True .DisplayAlerts = True End With End Sub
Странно, при первом нажатии на кнопку Сравнение вроде все ОК, но если нажать повторно на Сравнение то все ячейки К принимают значение NEW. Это только у меня так?
Странно, при первом нажатии на кнопку Сравнение вроде все ОК, но если нажать повторно на Сравнение то все ячейки К принимают значение NEW. Это только у меня так? AxelTT
Задача что бы сравнило код в ячейках столбца К с БД и вставило в ячейки столбца К данные с БД
после запуска макроса, данные в столбце К уже не являются кодом. Можно проставлять код в соседний столбец: [vba]
Код
With newWB.Sheets(1) For i = 7 To .Cells(Rows.Count, "k").End(xlUp).Row If dic.exists(Trim(.Cells(i, "k"))) Then .Cells(i, "l") = dic(Trim(.Cells(i, "k")))'код пишем в столбец L Else .Cells(i, "l") = "New" End If Next i End With
[/vba]
Hugo, Вы правы, я 2003-м не пользуюсь (да и на работе таких нет), поэтому допускаю такую запись)
Задача что бы сравнило код в ячейках столбца К с БД и вставило в ячейки столбца К данные с БД
после запуска макроса, данные в столбце К уже не являются кодом. Можно проставлять код в соседний столбец: [vba]
Код
With newWB.Sheets(1) For i = 7 To .Cells(Rows.Count, "k").End(xlUp).Row If dic.exists(Trim(.Cells(i, "k"))) Then .Cells(i, "l") = dic(Trim(.Cells(i, "k")))'код пишем в столбец L Else .Cells(i, "l") = "New" End If Next i End With
Sub compareData() With Application .ScreenUpdating = False .EnableEvents = False .DisplayAlerts = False End With Dim i&, newWB As Workbook, dic As Object, j Set dic = CreateObject("scripting.dictionary") With ThisWorkbook.Sheets(1) For i = 5 To .Cells(Rows.Count, "d").End(xlUp).Row For Each j In Array(4, 6) 'столбцы D и F dic(Trim(.Cells(i, j))) = .Cells(i, "f") Next j Next i End With Set newWB = Workbooks.Open(ThisWorkbook.Path & "\TMP_V1.xlsx") With newWB.Sheets(1) For i = 7 To .Cells(Rows.Count, "k").End(xlUp).Row If dic.exists(Trim(.Cells(i, "k"))) Then .Cells(i, "k") = dic(Trim(.Cells(i, "k"))) Else .Cells(i, "k") = "New" End If Next i End With newWB.Save With Application .ScreenUpdating = True .EnableEvents = True .DisplayAlerts = True End With End Sub
[/vba]
AxelTT, [vba]
Код
Sub compareData() With Application .ScreenUpdating = False .EnableEvents = False .DisplayAlerts = False End With Dim i&, newWB As Workbook, dic As Object, j Set dic = CreateObject("scripting.dictionary") With ThisWorkbook.Sheets(1) For i = 5 To .Cells(Rows.Count, "d").End(xlUp).Row For Each j In Array(4, 6) 'столбцы D и F dic(Trim(.Cells(i, j))) = .Cells(i, "f") Next j Next i End With Set newWB = Workbooks.Open(ThisWorkbook.Path & "\TMP_V1.xlsx") With newWB.Sheets(1) For i = 7 To .Cells(Rows.Count, "k").End(xlUp).Row If dic.exists(Trim(.Cells(i, "k"))) Then .Cells(i, "k") = dic(Trim(.Cells(i, "k"))) Else .Cells(i, "k") = "New" End If Next i End With newWB.Save With Application .ScreenUpdating = True .EnableEvents = True .DisplayAlerts = True End With End Sub