Здравствуйте. У меня есть таблица. В ней данные по ШК и ценам. В колонке К штрих коды, в колонке F цены. На один ШК может быть несколько цен. Мне необходимо на отдельный лист (ЛИСТ 2) в файле, вытащить данные, построчно. А потом если строке встречаются дубли, то одну цифру удалить. Потом буду сводить данные с 1С, т.к. в нашем справочнике к одному ШК не все цены привязаны. Буду признателен за помощь.
Здравствуйте. У меня есть таблица. В ней данные по ШК и ценам. В колонке К штрих коды, в колонке F цены. На один ШК может быть несколько цен. Мне необходимо на отдельный лист (ЛИСТ 2) в файле, вытащить данные, построчно. А потом если строке встречаются дубли, то одну цифру удалить. Потом буду сводить данные с 1С, т.к. в нашем справочнике к одному ШК не все цены привязаны. Буду признателен за помощь.Mark1976
Правильно ли я понял, что у Вас в файле 27377 заполненных строк? Вариант формулами (у Вас же вопрос размещен в "Вопросах по Excel") с использованием именованных диапазонов, автоопределяющих для каждого штрих-кода свой маленький диапазончик, из которого уже вынимаем уникальные цены и сортируем их.
Правильно ли я понял, что у Вас в файле 27377 заполненных строк? Вариант формулами (у Вас же вопрос размещен в "Вопросах по Excel") с использованием именованных диапазонов, автоопределяющих для каждого штрих-кода свой маленький диапазончик, из которого уже вынимаем уникальные цены и сортируем их._Boroda_
Я догадался. в большом файле-то работает? Нужно вставить в мой файл свои данные, перейти на лист с формулами, обновить сводную в столбце А и протянуть серые ячейки вниз на сколько нужно
Я догадался. в большом файле-то работает? Нужно вставить в мой файл свои данные, перейти на лист с формулами, обновить сводную в столбце А и протянуть серые ячейки вниз на сколько нужно_Boroda_
_Boroda_. Нет, не получилось. Скопировал данные в Ваш файл, вышла ошибка(видимо макрос) ругнулся. И на листе 2 стало как изначально в моей файле.
_Boroda_. Нет, не получилось. Скопировал данные в Ваш файл, вышла ошибка(видимо макрос) ругнулся. И на листе 2 стало как изначально в моей файле.Mark1976
1. В моем решении макросов нет. А вот у Вас на листе Реестр цен есть макрос. Перед тем, как вставить данные, этот макрос нужно отключить. Например, при открытии файла не разрешать макросы. 2. Про ЛИСТ2 забудьте. Я же написал
1. В моем решении макросов нет. А вот у Вас на листе Реестр цен есть макрос. Перед тем, как вставить данные, этот макрос нужно отключить. Например, при открытии файла не разрешать макросы. 2. Про ЛИСТ2 забудьте. Я же написал
_Boroda_, я туплю. Делаю как Вы говорите не получается. Пробую перенести формулу в новый файл, но тоже не получается. Не пойму принцип. Знаний очень мало. Можно в этот файл формулу прописать? Еще выходит ошибка (скрин приложил)
_Boroda_, я туплю. Делаю как Вы говорите не получается. Пробую перенести формулу в новый файл, но тоже не получается. Не пойму принцип. Знаний очень мало. Можно в этот файл формулу прописать? Еще выходит ошибка (скрин приложил)Mark1976
_Boroda_, работает. Я правильно понял. Теперь чтобы мне поднять весь реестр в 20000 строк мне надо: 1. Сделать сводную по полю ШК? 2. Вставить вашу формулу и протянуть все вниз?
Спасибо за помощь, очень признателен.
_Boroda_, работает. Я правильно понял. Теперь чтобы мне поднять весь реестр в 20000 строк мне надо: 1. Сделать сводную по полю ШК? 2. Вставить вашу формулу и протянуть все вниз?
У меня в файле есть имена (посмотреть можно через Контрл F3). У Вас в файле их нет. Поэтому или делайте имена у себя по образцу из моего файла, или используйте мой файл.
У меня в файле есть имена (посмотреть можно через Контрл F3). У Вас в файле их нет. Поэтому или делайте имена у себя по образцу из моего файла, или используйте мой файл.
_Boroda_, в этом файле не обновляется сводная. опять ругается на не существующий у меня путь. В колонке А как было 290 строк так и осталось. Файл приложить не могу он весит 400кб
_Boroda_, в этом файле не обновляется сводная. опять ругается на не существующий у меня путь. В колонке А как было 290 строк так и осталось. Файл приложить не могу он весит 400кбMark1976
Сообщение отредактировал Mark1976 - Пятница, 07.10.2016, 17:11
Mark1976, встаньте на сводную - вкладка Работа со сводными таблицами- Параметры - Источник данных - в поле "Таблица или диапазон" оставьте только "ДляСвод" (путь уберите) - Ок.
Mark1976, встаньте на сводную - вкладка Работа со сводными таблицами- Параметры - Источник данных - в поле "Таблица или диапазон" оставьте только "ДляСвод" (путь уберите) - Ок.Manyasha
Всем спасибо за помощь. Сводная обновилась. Протянул формулу. Пересчет будет наверное очень очень долго (каждая строка по несколько секунд). _Boroda_, Вы правы процесс этот не быстрый. А макрос быстро отработает если его использовать?
Всем спасибо за помощь. Сводная обновилась. Протянул формулу. Пересчет будет наверное очень очень долго (каждая строка по несколько секунд). _Boroda_, Вы правы процесс этот не быстрый. А макрос быстро отработает если его использовать?Mark1976
Уже 1,5 часа файл обрабатывается. А мне надо такую процедуру делать минимум 2 раза в неделю. Может можно как то ускорить данный процесс? Может есть еще какой либо способ. Уж простите за надоедание.
Уже 1,5 часа файл обрабатывается. А мне надо такую процедуру делать минимум 2 раза в неделю. Может можно как то ускорить данный процесс? Может есть еще какой либо способ. Уж простите за надоедание.Mark1976
Mark1976, вариант с макросом (за основу взяла последний файл Александра): [vba]
Код
Sub svod() Dim sh1 As Worksheet, sh2 As Worksheet, barcode, price, lr&, i&, res Dim arrKeys, arrItems, temp, col# Set sh1 = ThisWorkbook.Sheets("Данные") Set sh2 = ThisWorkbook.Sheets("Свод") With sh1 lr = .Cells(Rows.Count, 1).End(xlUp).Row price = .Range("f2:f" & lr).Value barcode = .Range("i2:i" & lr).Value End With With CreateObject("scripting.dictionary") For i = 1 To UBound(barcode) If .exists(Trim(barcode(i, 1))) Then .Item(Trim(barcode(i, 1))) = .Item(Trim(barcode(i, 1))) & "|" & price(i, 1) Else .Item(Trim(barcode(i, 1))) = price(i, 1) End If Next i arrKeys = .keys arrItems = .items End With With sh2 .[a1].CurrentRegion.Offset(1).ClearContents For i = 0 To UBound(arrKeys) .Cells(i + 2, 1) = arrKeys(i) temp = Split(arrItems(i), "|") col = IIf(UBound(temp), UBound(temp) + 1, 1) .Cells(i + 2, 2).Resize(, col) = temp Next i End With End Sub
[/vba]
Результат смотрите на листе Свод. Если имена листов у Вас другие (НЕ Данные и Свод), не забудьте в коде поменять.
Mark1976, вариант с макросом (за основу взяла последний файл Александра): [vba]
Код
Sub svod() Dim sh1 As Worksheet, sh2 As Worksheet, barcode, price, lr&, i&, res Dim arrKeys, arrItems, temp, col# Set sh1 = ThisWorkbook.Sheets("Данные") Set sh2 = ThisWorkbook.Sheets("Свод") With sh1 lr = .Cells(Rows.Count, 1).End(xlUp).Row price = .Range("f2:f" & lr).Value barcode = .Range("i2:i" & lr).Value End With With CreateObject("scripting.dictionary") For i = 1 To UBound(barcode) If .exists(Trim(barcode(i, 1))) Then .Item(Trim(barcode(i, 1))) = .Item(Trim(barcode(i, 1))) & "|" & price(i, 1) Else .Item(Trim(barcode(i, 1))) = price(i, 1) End If Next i arrKeys = .keys arrItems = .items End With With sh2 .[a1].CurrentRegion.Offset(1).ClearContents For i = 0 To UBound(arrKeys) .Cells(i + 2, 1) = arrKeys(i) temp = Split(arrItems(i), "|") col = IIf(UBound(temp), UBound(temp) + 1, 1) .Cells(i + 2, 2).Resize(, col) = temp Next i End With End Sub
[/vba]
Результат смотрите на листе Свод. Если имена листов у Вас другие (НЕ Данные и Свод), не забудьте в коде поменять.Manyasha