Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Ячейка с накоплением (нарастающим итогом), содержащим дату и текст
 
Добрый день.

Прошу оказать помощь в решении следующей задачи. Есть таблица, в ней  два столбца «А» и «В». В столбец «В» вводится информация в формате: 01.01.2018 обратился за помощью на форум . Даная запись должна переносится в столбец «А» и сохраняться в столбце «В» до внесения следующей записи. При внесении записи в столбец «В»: 02.01.2018 получил квалифицированный ответ на форуме , данная запись должна добавится в столбец «А». В результате должно получиться в столбце «А»: 02.01.2018 получил квалифицированный ответ на форуме;  01.01.2018 обратился за помощью на форум; Последняя запись должна добавляться первой в ячейке столбца «А», разделитель между записями «;».

Информацию необходимо будет вводить на 10 000 строках. Столбец «А» будет защищен от редактирования, так чтобы в нем нельзя было работать пользователям.

Для того, что бы не нагромождать таблицу, привожу только два столбца.
Это конечно если возможно в Эксель, версия Эксель 2010 года. Добавить файл нет возможности, не пропускает. Если есть крайняя необходимость, попробую добавить из дому. Заранее благодарен, кто откликнулся.
Изменено: Новичок_ - 10 Сен 2018 16:47:56
 
Если я правильно понял задание, то добавление этого кода в модуль листа должно помочь:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then
        If Len(Cells(Target.Row, 1).Value) > 0 Then Cells(Target.Row, 1).Value = "; " & Cells(Target.Row, 1).Value
        Cells(Target.Row, 1).Value = Cells(Target.Row, 2).Value & Cells(Target.Row, 1).Value
    End If
End Sub
Изменено: Ts.Soft - 10 Сен 2018 17:01:30
Не стреляйте в тапера - он играет как может.
 
Если я правильно понимаю: Новичку нужно сцеплять текст ячейки из столбца А с текстом ячейки из столбца B (той же строки?) после изменения содержимого последней.
Формулами этого сделать не получится. Только при помощи VBA.
Более того, я настоятельно рекомендую настроить защиту от случайного изменения данных в столбце B (подтверждение копирования...).

Без примера исходных данных (несекретных!) и желаемого результата Вы рискуете довольно долго дожидаться более конкретных советов.
 
Ts.Soft, Target.Column = 2 вернёт ошибку, если столбцов в Target больше одного. Нужно через Intersect проверять.
 
Ts.Soft, Кажись работает. Я реально не думал, что такое возможно. Спасибо огромное. А можно вопрос: если столбцы не "А" и "В", а скажем "AI" и "AJ", где менять в коде номер колонки. Для меня макросы темный лес((
И еще если можно вопрос, если на столбец "А" поставить защиту от изменения, то выдает ошибку, это как то исправляется?
Изменено: Новичок_ - 10 Сен 2018 18:07:52
 
Cells(Target.Row, 1) — в столбце A
Cells(Target.Row, 2) — в столбце B...
Принцип понятен?
Изменено: StoTisteg - 10 Сен 2018 17:55:19
 
Ещё можно так: Cells(Target.Row, "B")
 
Юрий М, честно? вообще не понятно, но по таким пустякам не буду отвлекать Вас, буду искать в инете.
И так много сделали. Спасибо.
 
А что непонятно? Вместо номера столбца подставляем его букву (в кавычках). Иногда это удобнее ))
 
StoTisteg, Юрий М, так со столбцами вроде разобрался, что зачем. Теперь вопрос, а почему код не срабатывает, если защитить столбец "А" паролем от изменения. Просто это очень принцыпиально, что бы "А" нельзя было изменять.
 
Если стоит защита на изменение - конечно не будет работать. Нужно программно снимать защиту, затем присваивать значение, а после этого снова ставить защиту. Правда, есть вариант, когда можно макросу разрешить работать в защищённых ячейках, но, боюсь, этот вариант будет сложен для Вас ((
 
Новичок_, прочтите статью Как защитить лист от пользователя, но не от макроса? Если действительно покажется сложным, то на этом форуме уже обсуждались проблемы снятия и установки защиты, например здесь
Кстати, вы не описали что должно происходить если пользователь удалит текст из ячейки в столбце "B" или захочет его исправить.

Юрий М, видно что человек хочет не просто использовать готовое решение, а пробует разобраться что к чему. Пусть почитает, тем более The_Prist написал так, что даже я понял :)  
Изменено: Ts.Soft - 10 Сен 2018 22:47:20
Не стреляйте в тапера - он играет как может.
 
Я именно про этот вариант и говорил )
 
Ts.Soft,
Цитата
Ts.Soft написал:
Кстати, вы не описали что должно происходить если пользователь удалит текст из ячейки в столбце "B" или захочет его исправить.
Текст должен сохранятся в ячейке столбца "А" по накопительному принципу. Если запись в столбце "В" удалить или изменить, она сохраняется в столбце "А"
А вот с защитой "играюсь". Прочитал статьи, буду разбираться как применить их. Спасибо за помощь еще раз.
 
Короче перечитал статьи по ссылкам, ничего не получается. Ребята, кто сможет помочь, решить проблему, что бы этот код работал, если защитить столбец "А" от изменений на фале "Пример" Ts.Soft. Буду признателен.
 
Цитата
Новичок_ написал:
Если запись в столбце "В" удалить или изменить, она сохраняется в столбце "А"
Это понятно, что она сохраняется. вопрос был в том, что если в "A" что есть и при этом в "B" удалить старый текст (который уже есть в "A"), то в "A" появится разделитель с пробелом: "; " плюс то что было в "A". Чтобы этого не возникало добавил условие.
Так же настоятельно рекомендую подумать об исправлениях. Насколько я понял данные в "B" будет заносить человек, а людям свойственно ошибаться, ведь даже в слове "хлеб" можно допустить четыре ошибки и получить слово "пиво". Вот напишет человек "кАрова", заметит ошибку, исправит, а в "A" получится "кОрова; кАрова". Т.п. нужно решить проблему очепяток.

Ну а по поводу защиты смотрите примеры. В первом перед изменением защита снимается, а потом устанавливается. Во втором при открытии книги (в модуле Книги) устанавливается защита от пользователя, но не от макроса. Пароль - "111".
Не стреляйте в тапера - он играет как может.
 
Ts.Soft, Спасибо Вам огромное.
Цитата
Ts.Soft написал:
Это понятно, что она сохраняется. вопрос был в том, что если в "A" что есть и при этом в "B" удалить старый текст (который уже есть в "A"), то в "A" появится разделитель с пробелом: "; " плюс то что было в "A". Чтобы этого не возникало добавил условие.
Вы знаете, я и так рад был Вашей помощи, что на ";" уже не обращал внимания
А можно еще один вопрос: в каком месте кода нужно менять очередность заполнения ячейки. У нас инфо добавляется в начале, а если есть необходимость что бы внизу ячейки. То есть поменять очередность наполнения ячейки.  
 
В ТЗ было русским по белому сказано:
Цитата
Новичок_ написал:
Последняя запись должна добавляться первой в ячейке столбца «А», разделитель между записями «;».
Ну а для того чтобы поменять очерёдность заполнения нужно изменить две строки - добавление разделителя (при необходимости) и собственно дополнение ячейки:
Код
If Len(Cells(Target.Row, 1).Value) > 0 And Len(Cells(Target.Row, 2).Value) > 0 Then Cells(Target.Row, 1).Value = Cells(Target.Row, 1).Value & "; "
Cells(Target.Row, 1).Value = Cells(Target.Row, 1).Value & Cells(Target.Row, 2).Value 
Изменено: Ts.Soft - 11 Сен 2018 22:02:49
Не стреляйте в тапера - он играет как может.
 
Ts.Soft, Не, Вы все чётко сделали. Просто интересна структура кода. А так вообще всё на высоте.  
Страницы: 1
Читают тему (гостей: 1)
Наверх