Прошу оказать помощь в решении следующей задачи. Есть таблица, в ней два столбца «А» и «В». В столбец «В» вводится информация в формате: 01.01.2018 обратился за помощью на форум . Даная запись должна переносится в столбец «А» и сохраняться в столбце «В» до внесения следующей записи. При внесении записи в столбец «В»: 02.01.2018 получил квалифицированный ответ на форуме , данная запись должна добавится в столбец «А». В результате должно получиться в столбце «А»: 02.01.2018 получил квалифицированный ответ на форуме; 01.01.2018 обратился за помощью на форум; Последняя запись должна добавляться первой в ячейке столбца «А», разделитель между записями «;».
Информацию необходимо будет вводить на 10 000 строках. Столбец «А» будет защищен от редактирования, так чтобы в нем нельзя было работать пользователям.
Для того, что бы не нагромождать таблицу, привожу только два столбца. Это конечно если возможно в Эксель, версия Эксель 2010 года. Добавить файл нет возможности, не пропускает. Если есть крайняя необходимость, попробую добавить из дому. Заранее благодарен, кто откликнулся.
Если я правильно понял задание, то добавление этого кода в модуль листа должно помочь:
Код
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
Если я правильно понимаю: Новичку нужно сцеплять текст ячейки из столбца А с текстом ячейки из столбца B (той же строки?) после изменения содержимого последней. Формулами этого сделать не получится. Только при помощи VBA. Более того, я настоятельно рекомендую настроить защиту от случайного изменения данных в столбце B (подтверждение копирования...).
Без примера исходных данных (несекретных!) и желаемого результата Вы рискуете довольно долго дожидаться более конкретных советов.
Ts.Soft, Кажись работает. Я реально не думал, что такое возможно. Спасибо огромное. А можно вопрос: если столбцы не "А" и "В", а скажем "AI" и "AJ", где менять в коде номер колонки. Для меня макросы темный лес(( И еще если можно вопрос, если на столбец "А" поставить защиту от изменения, то выдает ошибку, это как то исправляется?
StoTisteg, Юрий М, так со столбцами вроде разобрался, что зачем. Теперь вопрос, а почему код не срабатывает, если защитить столбец "А" паролем от изменения. Просто это очень принцыпиально, что бы "А" нельзя было изменять.
Если стоит защита на изменение - конечно не будет работать. Нужно программно снимать защиту, затем присваивать значение, а после этого снова ставить защиту. Правда, есть вариант, когда можно макросу разрешить работать в защищённых ячейках, но, боюсь, этот вариант будет сложен для Вас ((
Новичок_, прочтите статью Как защитить лист от пользователя, но не от макроса? Если действительно покажется сложным, то на этом форуме уже обсуждались проблемы снятия и установки защиты, например здесь Кстати, вы не описали что должно происходить если пользователь удалит текст из ячейки в столбце "B" или захочет его исправить.
Юрий М, видно что человек хочет не просто использовать готовое решение, а пробует разобраться что к чему. Пусть почитает, тем более The_Prist написал так, что даже я понял
Ts.Soft написал: Кстати, вы не описали что должно происходить если пользователь удалит текст из ячейки в столбце "B" или захочет его исправить.
Текст должен сохранятся в ячейке столбца "А" по накопительному принципу. Если запись в столбце "В" удалить или изменить, она сохраняется в столбце "А" А вот с защитой "играюсь". Прочитал статьи, буду разбираться как применить их. Спасибо за помощь еще раз.
Короче перечитал статьи по ссылкам, ничего не получается. Ребята, кто сможет помочь, решить проблему, что бы этот код работал, если защитить столбец "А" от изменений на фале "Пример" Ts.Soft. Буду признателен.
Новичок_ написал: Если запись в столбце "В" удалить или изменить, она сохраняется в столбце "А"
Это понятно, что она сохраняется. вопрос был в том, что если в "A" что есть и при этом в "B" удалить старый текст (который уже есть в "A"), то в "A" появится разделитель с пробелом: "; " плюс то что было в "A". Чтобы этого не возникало добавил условие. Так же настоятельно рекомендую подумать об исправлениях. Насколько я понял данные в "B" будет заносить человек, а людям свойственно ошибаться, ведь даже в слове "хлеб" можно допустить четыре ошибки и получить слово "пиво". Вот напишет человек "кАрова", заметит ошибку, исправит, а в "A" получится "кОрова; кАрова". Т.п. нужно решить проблему очепяток.
Ну а по поводу защиты смотрите примеры. В первом перед изменением защита снимается, а потом устанавливается. Во втором при открытии книги (в модуле Книги) устанавливается защита от пользователя, но не от макроса. Пароль - "111".
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
Добрый день. Извиняюсь, что реанимировал тему. Уважаемые эксперты, подскажите пожалуйста, возможно ли внести в даний код изменения таким образом, что бы код работал еще с одной ячейкой. В данном коде задействованы ячейки столбца 1 и 2, а что нужно изменить, что бы можно было вносить изменения в ячейку столбца 3 и накопление было в столбце 4. Спасибо заранее.
Код
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
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sTxt As String
Dim j As Byte
If Not Application.Intersect(Range("B:C"), Target) Is Nothing Then
With Target
Select Case .Column
Case 2: j = 1
Case 3: j = 4
End Select
sTxt = Cells(.Row, j).Value
sCells(.Row, j).Value = Cells(.Row, .Column).Value
If Len(sTxt) > 0 Then Cells(.Row, j).Value = sCells(.Row, j).Value & "; " & sTxt
End With
End If
End Sub
Как говориться аппетит приходит во время еды, спрашиваешь о малом, а потом хочется все больше и больше))) Подскажите, как в этом коде Private Sub Worksheet_Change(ByVal Target As Range)Dim sTxt As String Dim j As Byte If Not Application.Intersect(Range("B:C"), Target) Is Nothing Then With Target Select Case .Column Case 2: j = 1 Case 3: j = 4 End Select
sTxt = Cells(.Row, j).Value Cells(.Row, j).Value = Cells(.Row, .Column).Value If Len(sTxt) > 0 Then Cells(.Row, j).Value = Cells(.Row, j).Value & "; " & sTxt End With End If End Sub
Добавлять еще возможность вносить данные в ячейки, а накапливались они в других. Например добавить еще колонки F,K,M, и соответственно накопление было в АА, АВ, АС. Менял "B:C,F,K,M", добавляя Case 6: j = 27 Case 11: j = 28 Case 13: j = 29