Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сохранение измененных данных по уникальному ключу - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Сохранение измененных данных по уникальному ключу
user0 Дата: Суббота, 06.10.2018, 19:23 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Доброго времени,

Данные на листе dashboard формируются из нескольких источников, в частности добавляются комментарии с листа db, через уникальную связку order-item.

Подскажите, пожалуйста, как потом записать измененные данные обратно на лист db (либо удалить, если комментарий удаляется), не порождая дубликаты , без использования всяких надстроек.

Пока получилось только добавлять, соответственно с дубликатами. Насколько это вообще верное направление.. ради двух колонок не хотелось бы переходить на аксес.
К сообщению приложен файл: db_example.xlsm (33.0 Kb)


Сообщение отредактировал user0 - Суббота, 06.10.2018, 19:25
 
Ответить
СообщениеДоброго времени,

Данные на листе dashboard формируются из нескольких источников, в частности добавляются комментарии с листа db, через уникальную связку order-item.

Подскажите, пожалуйста, как потом записать измененные данные обратно на лист db (либо удалить, если комментарий удаляется), не порождая дубликаты , без использования всяких надстроек.

Пока получилось только добавлять, соответственно с дубликатами. Насколько это вообще верное направление.. ради двух колонок не хотелось бы переходить на аксес.

Автор - user0
Дата добавления - 06.10.2018 в 19:23
Michael_S Дата: Воскресенье, 07.10.2018, 13:46 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Насколько это вообще верное направление..
в общем - направление верное... но, я смотрю - более 20 просмотров темы, и ни одного ответа. Скорее всего у всех такая же проблема, как и у меня - не совсем понятно, что и как меняется, и что нужно получить в конце; по какому событию.
 
Ответить
Сообщение
Насколько это вообще верное направление..
в общем - направление верное... но, я смотрю - более 20 просмотров темы, и ни одного ответа. Скорее всего у всех такая же проблема, как и у меня - не совсем понятно, что и как меняется, и что нужно получить в конце; по какому событию.

Автор - Michael_S
Дата добавления - 07.10.2018 в 13:46
user0 Дата: Воскресенье, 07.10.2018, 16:57 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Ок, обновил пример, убрав все лишнее.

На листе db есть данные обо всех комментариях, которые подтягиваются при заполнении листа dashboard.
Затем пользователь меняет/добавляет/удаляет комментарий (оранжевые колонки). По этому событию необходимо соответствующим образом изменить данные листа db.

например
- на листе dashboard меняем commentD, на commentXXX -> на листе db строка "333 2 commentC commentD" меняется на "333 2 commentC commentXXX"
- на листе dashboard стираем commenA -> на листе db строка "111 1 commenA " меняется на "111 1 " или сразу удаляется, так как ни одного комментария нет. Или потом в самом конце отсортировать по убыванию и удалить пустые..

Особенность в том что можно сразу обновить несколько комментариев (вставив из буфера или протянув ячейки), хотя это вроде уже учтено.

Наверное задача сводится к сравнению двух массивов.
Возможно лучше использовать коллекции, чтобы добавлялись только уникальные записи?
К сообщению приложен файл: db_example_2.xlsm (27.8 Kb)
 
Ответить
СообщениеОк, обновил пример, убрав все лишнее.

На листе db есть данные обо всех комментариях, которые подтягиваются при заполнении листа dashboard.
Затем пользователь меняет/добавляет/удаляет комментарий (оранжевые колонки). По этому событию необходимо соответствующим образом изменить данные листа db.

например
- на листе dashboard меняем commentD, на commentXXX -> на листе db строка "333 2 commentC commentD" меняется на "333 2 commentC commentXXX"
- на листе dashboard стираем commenA -> на листе db строка "111 1 commenA " меняется на "111 1 " или сразу удаляется, так как ни одного комментария нет. Или потом в самом конце отсортировать по убыванию и удалить пустые..

Особенность в том что можно сразу обновить несколько комментариев (вставив из буфера или протянув ячейки), хотя это вроде уже учтено.

Наверное задача сводится к сравнению двух массивов.
Возможно лучше использовать коллекции, чтобы добавлялись только уникальные записи?

Автор - user0
Дата добавления - 07.10.2018 в 16:57
StoTisteg Дата: Воскресенье, 07.10.2018, 18:27 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Возможно лучше использовать коллекции, чтобы добавлялись только уникальные записи?
Для этого как раз предназначен словарь, а не коллекции.


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
Возможно лучше использовать коллекции, чтобы добавлялись только уникальные записи?
Для этого как раз предназначен словарь, а не коллекции.

Автор - StoTisteg
Дата добавления - 07.10.2018 в 18:27
boa Дата: Понедельник, 08.10.2018, 12:17 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 559
Репутация: 167 ±
Замечаний: 0% ±

365
Добрый день,
как вариант сделать через коннект
в строку запроса вписать
[vba]
Код
SELECT [Order#], [Item#], [Comments1], [Comments2]
FROM [dashboard$]
WHERE len(Comments1+Comments2)>0
;
[/vba]
при каждом обновлении созданной таблицы она будет вытягивать актуальные данные
К сообщению приложен файл: 1584712.jpg (66.3 Kb) · db_example_3.xlsm (23.6 Kb)




Сообщение отредактировал boa - Понедельник, 08.10.2018, 12:18
 
Ответить
СообщениеДобрый день,
как вариант сделать через коннект
в строку запроса вписать
[vba]
Код
SELECT [Order#], [Item#], [Comments1], [Comments2]
FROM [dashboard$]
WHERE len(Comments1+Comments2)>0
;
[/vba]
при каждом обновлении созданной таблицы она будет вытягивать актуальные данные

Автор - boa
Дата добавления - 08.10.2018 в 12:17
user0 Дата: Понедельник, 08.10.2018, 14:13 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
StoTisteg, ок, спасибо.
boa, спасибо, можно и так. Но тогда увеличится кол-во "измененных данных", которое необходимо будет сравнивать с базой. Сейчас в массив передаются только измененные данные с листа dashboard.

Насколько я понял, дальнейшие шаги такие:
1) загоняем данные "всей базы" и "измененные" в два массива
2) сравниваем их, чтобы удалить из базы измененные данные, одновременно добавляя оставшиеся данные базы в словарь
3) добавляем измененные данные в словарь
4) очищаем лист базы и записываем словарь
5) (опционально) данные на листе базы по составному ключу
 
Ответить
СообщениеStoTisteg, ок, спасибо.
boa, спасибо, можно и так. Но тогда увеличится кол-во "измененных данных", которое необходимо будет сравнивать с базой. Сейчас в массив передаются только измененные данные с листа dashboard.

Насколько я понял, дальнейшие шаги такие:
1) загоняем данные "всей базы" и "измененные" в два массива
2) сравниваем их, чтобы удалить из базы измененные данные, одновременно добавляя оставшиеся данные базы в словарь
3) добавляем измененные данные в словарь
4) очищаем лист базы и записываем словарь
5) (опционально) данные на листе базы по составному ключу

Автор - user0
Дата добавления - 08.10.2018 в 14:13
boa Дата: Понедельник, 08.10.2018, 16:44 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 559
Репутация: 167 ±
Замечаний: 0% ±

365
user0,
Но тогда увеличится кол-во "измененных данных", которое необходимо будет сравнивать с базой.

А зачем сравнивать?
вы же не используете результаты сравнения (типа: был коммент - стал коммент)
вас, как я понял, интересуют актуальные комментарии
вот я вам и предлагаю вариант с таблицей
во-первых она возьмет только записи в которых есть комменты,
а во вторых для нее(таблицы) не важно как вы эти комменты будете заполнять. или копипастом из другого источника, или блоками, или поштучно.
После рефреша таблицы перед вами актуальная информация.
Для автоматизации, можно на событие активации листа поставить обновление таблицы.


 
Ответить
Сообщениеuser0,
Но тогда увеличится кол-во "измененных данных", которое необходимо будет сравнивать с базой.

А зачем сравнивать?
вы же не используете результаты сравнения (типа: был коммент - стал коммент)
вас, как я понял, интересуют актуальные комментарии
вот я вам и предлагаю вариант с таблицей
во-первых она возьмет только записи в которых есть комменты,
а во вторых для нее(таблицы) не важно как вы эти комменты будете заполнять. или копипастом из другого источника, или блоками, или поштучно.
После рефреша таблицы перед вами актуальная информация.
Для автоматизации, можно на событие активации листа поставить обновление таблицы.

Автор - boa
Дата добавления - 08.10.2018 в 16:44
user0 Дата: Понедельник, 08.10.2018, 17:10 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
boa,
может пример немного неверный или я что-то упускаю.
у меня же данные на первом и втором листе не повторяют друг друга один в один.

допустим записей (ключ-комментарий) на втором листе 100 штук, на первом листе только 10*,
из 100 записей базы, к 10 относятся только 5 и они подставляются на лист 1.
меняем какую-то запись на листе 1 и она должна поменяться на листе 2, где все также остается 100 записей
если удаляем с листа 1, то на листе 2 уже 99 и тд.
* в следующий раз, при импорте из внешних источников, будет другое кол-во.
 
Ответить
Сообщениеboa,
может пример немного неверный или я что-то упускаю.
у меня же данные на первом и втором листе не повторяют друг друга один в один.

допустим записей (ключ-комментарий) на втором листе 100 штук, на первом листе только 10*,
из 100 записей базы, к 10 относятся только 5 и они подставляются на лист 1.
меняем какую-то запись на листе 1 и она должна поменяться на листе 2, где все также остается 100 записей
если удаляем с листа 1, то на листе 2 уже 99 и тд.
* в следующий раз, при импорте из внешних источников, будет другое кол-во.

Автор - user0
Дата добавления - 08.10.2018 в 17:10
boa Дата: Понедельник, 08.10.2018, 17:42 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 559
Репутация: 167 ±
Замечаний: 0% ±

365
т.е. на втором листе у вас данные накопительные?
которые сохраняются после многократных обработок данных на листе1?


 
Ответить
Сообщениет.е. на втором листе у вас данные накопительные?
которые сохраняются после многократных обработок данных на листе1?

Автор - boa
Дата добавления - 08.10.2018 в 17:42
user0 Дата: Понедельник, 08.10.2018, 17:51 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
так точно
 
Ответить
Сообщениетак точно

Автор - user0
Дата добавления - 08.10.2018 в 17:51
boa Дата: Понедельник, 08.10.2018, 19:31 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 559
Репутация: 167 ±
Замечаний: 0% ±

365
user0,
Ну тогда без словаря ни как <_<

Запустите макрос у себя в книге


 
Ответить
Сообщениеuser0,
Ну тогда без словаря ни как <_<

Запустите макрос у себя в книге

Автор - boa
Дата добавления - 08.10.2018 в 19:31
user0 Дата: Понедельник, 08.10.2018, 20:13 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
boa,
Прекрасно работает!
Большое спасибо!
 
Ответить
Сообщениеboa,
Прекрасно работает!
Большое спасибо!

Автор - user0
Дата добавления - 08.10.2018 в 20:13
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!