Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Записать столбец в одну ячейку строкой

Ответить
Настройки темы
2010 - [решено] Записать столбец в одну ячейку строкой

Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Изменения
Автор: blackeangel
Дата: 03-04-2017
Помогите решить проблему.
Этот код
Код: Выделить весь код
Sub vstroky()
Ncolumn = Cells.Find(What:="№ операции", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns).Column
Ncolumn3 = Cells.Find(What:="Код операции стал", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns).Column
J = 2
For K = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(J, Ncolumn).Value = "5" Then
st = ""
End If
st = st & "-" & ActiveSheet.Cells(J, Ncolumn3).Value
J = J + 1
ActiveSheet.Cells(K, 9).NumberFormat = "@"
ActiveSheet.Cells(K, 9) = Mid$(st, 2)
Next
End Sub
Работает не правильно. Что то я с циклом там напутал.
В прикрепленном файле 3 листа: с исходными данными,
с тем как получается у меня и как должно быть.

Отправлено: 17:55, 05-05-2016

 

Аватара для NickM

Ветеран


Contributor


Сообщения: 4242
Благодарности: 995

Профиль | Отправить PM | Цитировать


blackeangel, здесь подсмотрите.

Отправлено: 06:28, 06-05-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата NickM:
blackeangel, здесь подсмотрите.
Что то ничего не нашёл. У меня ошибка в цикле. Не пойму никак. Либо надо разбить на 2 цикла, но как - не знаю.

Отправлено: 09:13, 06-05-2016 | #3


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
Помогите решить проблему. »
используйте код ниже - в приложенном вами файле желаемый результат совпадает с результатом работы кода.
код
Код: Выделить весь код
Sub vvvky3()
    Dim n As Long, i As Long, i0 As Long, j As Long
    Dim strTxt As String, k As Integer
    i0 = 2
    ncolumn = Cells.Find(What:="№ операции", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns).Column
    ncolumn3 = Cells.Find(What:="Код операции стал", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns).Column
    n = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    For i = 3 To n
        If ActiveSheet.Cells(i, ncolumn).Value = 5 Or i = n Then
            If i = n Then i = i + 1
            strTxt = ActiveSheet.Cells(i0, ncolumn3).Value
            For j = i0 + 1 To i - 2
                strTxt = strTxt & "-" & ActiveSheet.Cells(j, ncolumn3).Value
            Next j
            k = 0
            Do
                k = k + 1
            Loop While IsNumeric(Right(ActiveSheet.Cells(i - 1, ncolumn3).Value, k)) And Len(ActiveSheet.Cells(i - 1, ncolumn3).Value) < k
            strTxt = strTxt & "-" & Left(ActiveSheet.Cells(i - 1, ncolumn3).Value, k)
            k = Val(Right(ActiveSheet.Cells(i - 1, ncolumn3).Value, k))
            For j = i - 1 To i0 Step -1
                If k >= 0 Then ActiveSheet.Cells(j, ncolumn3 + 2).Value = strTxt & k Else ActiveSheet.Cells(j, ncolumn3 + 2).Value = strTxt & (-k)
                k = k - 1
            Next
            
            i0 = i
        End If
    Next i
End Sub

Отправлено: 14:34, 06-05-2016 | #4


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


a_axe, вкладка должно быть оказалась неправильная
Вот правильный

Последний раз редактировалось blackeangel, 03-04-2017 в 22:53.


Отправлено: 15:29, 06-05-2016 | #5


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
вкладка должно быть оказалась неправильная »
код
Код: Выделить весь код
Sub vvvky2()
    Dim n As Long, i As Long, i0 As Long, j As Long
    Dim strTxt As String, k As Integer
    i0 = 2
    ncolumn = Cells.Find(What:="№ операции", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns).Column
    ncolumn3 = Cells.Find(What:="Код операции стал", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns).Column
    n = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    For i = 3 To n
        If ActiveSheet.Cells(i, ncolumn).Value = 5 Or i = n Then
            If i = n Then i = i + 1
            strTxt = ActiveSheet.Cells(i0, ncolumn3).Value
            For j = i0 + 1 To i - 1
                strTxt = strTxt & "-" & ActiveSheet.Cells(j, ncolumn3).Value
            Next j
            
            ActiveSheet.Range(Cells(i0, ncolumn3 + 2), Cells(i - 1, ncolumn3 + 2)).Value = strTxt
            
            i0 = i
        End If
    Next i
End Sub

blackeangel, если постановка задачи снова поменяется - добровольно откажусь от участия в данной теме - просто принимая во внимание Правила раздела (3. Темы в форуме создаются по принципу «одна проблема - одна тема».).
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:51, 06-05-2016 | #6


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


a_axe, почему j начинается с 3? А не с 2 ?

Отправлено: 18:13, 06-05-2016 | #7


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


вероятно имеется ввиду i, она начинается с 3. Изначально двум равно i0, т.к. в строке номер 2 заведомо находится начало обрабатываемого диапазона, и равна ячейка 5 (смотрю ваш пример).т.е. i0 - текущая найденная строчка с ячейкой =5, и первая такая строка заведомо вторая, поэтому изначально i0=2, i=3. Нет смысла проверять то, что и так известно, да и не ясно, что должна сделать программа, если во 2 строке будет не 5.

-------
[Форум Word и Excel] - [Как запустить Word, Excel и Outlook в безопасном режиме?] - [Как удалить шаблон Word Normal.dotm?]


Отправлено: 18:31, 06-05-2016 | #8


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


a_axe, если вы все таки внимательно посмотрели что должно получиться, в исправленом примере, то наверняка дагодались бы что это так сказать промежуток от 5 до 5ки следующей в которой должен собирать в одну ячейку. Так сказать отрезок у которого последняя 5ка не входит.
Если будет не 5 то она отработает криво и будет права, тк данные до этого подготавливаются. Ну можно сделать проверку на это и выход из саба, но для меня это бессмысленно.
Первая строка всегда заголовок столбца, поэтому со второй.
На счет 3, то есть данные во 2ю строку не попадут, тк цикл идет с 3 до последней.

Отправлено: 18:50, 06-05-2016 | #9


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
a_axe, если вы все таки внимательно посмотрели что должно получиться, в исправленом примере, то наверняка дагодались »
blackeangel, вот я беру ваш исправленный пример, запускаю код, в соседний столбец забиваю формулу "=ЕСЛИ(C2=D2;1;0)", везде получаю единички, т.е.
Цитата a_axe:
в приложенном вами файле желаемый результат совпадает с результатом работы кода »
Если вы считаете по-другому - укажите ячейки, где код получил что-то отличное от вашего примера. Все ровно так, как вы хотите получить.
Цитата blackeangel:
Если будет не 5 то она отработает криво и будет права »
разумеется, ведь в вашем примере стоит именно 5, и нигде не указано, что может быть иначе и что в этом случае делать.
Цитата blackeangel:
для меня это бессмысленно. »
для меня этот факт не очевиден.
Цитата blackeangel:
то есть данные во 2ю строку не попадут, тк цикл идет с 3 до последней. »
Это не так. Вы вообще код запускали? Что получается посмотрели? У вас строка 2 пустая, вы это хотите сказать?

Из конструктивных предложений - чтобы понять, как код работает могу предложить ознакомится с очень полезными ссылками (без всякой иронии, речь о пошаговом выполнении кода).
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:12, 06-05-2016 | #10



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Записать столбец в одну ячейку строкой

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Можно ли поставить одну плату DDR2 и одну DDR3 Рамэн Материнские платы и память 5 01-02-2014 15:47
2003/XP/2000 - [решено] Excel 2003. Запись текстовой информации из трех ячеек в одну ячейку. Stejar Microsoft Office (Word, Excel, Outlook и т.д.) 2 15-02-2012 16:12
[решено] Записать данные из ИНИ файла в одну строчку Centrinar AutoIt 1 18-03-2011 00:34
Интерфейс - Столбец даты последнего открытия Analog Microsoft Windows 7 2 05-02-2011 14:12
C/C++ - Как сделать недоступной одну ячейку в DbGrid/DbGridEh? FunTime Программирование и базы данных 0 21-05-2010 18:20




 
Переход