|
Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Записать столбец в одну ячейку строкой |
|
|
2010 - [решено] Записать столбец в одну ячейку строкой
|
Старожил Сообщения: 329 |
Профиль | Отправить PM | Цитировать
Помогите решить проблему.
Этот код 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 |
Ветеран Сообщения: 4523
|
Профиль | Отправить PM | Цитировать blackeangel, здесь подсмотрите.
|
Отправлено: 06:28, 06-05-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Цитата NickM:
|
|
Отправлено: 09:13, 06-05-2016 | #3 |
Динохромный Сообщения: 701
|
Профиль | Отправить 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 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать a_axe, вкладка должно быть оказалась неправильная
Вот правильный |
|
Последний раз редактировалось blackeangel, 03-04-2017 в 22:53. Отправлено: 15:29, 06-05-2016 | #5 |
Динохромный Сообщения: 701
|
Профиль | Отправить 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 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать a_axe, почему j начинается с 3? А не с 2 ?
|
Отправлено: 18:13, 06-05-2016 | #7 |
Динохромный Сообщения: 701
|
Профиль | Отправить PM | Цитировать вероятно имеется ввиду i, она начинается с 3. Изначально двум равно i0, т.к. в строке номер 2 заведомо находится начало обрабатываемого диапазона, и равна ячейка 5 (смотрю ваш пример).т.е. i0 - текущая найденная строчка с ячейкой =5, и первая такая строка заведомо вторая, поэтому изначально i0=2, i=3. Нет смысла проверять то, что и так известно, да и не ясно, что должна сделать программа, если во 2 строке будет не 5.
|
------- Отправлено: 18:31, 06-05-2016 | #8 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать a_axe, если вы все таки внимательно посмотрели что должно получиться, в исправленом примере, то наверняка дагодались бы что это так сказать промежуток от 5 до 5ки следующей в которой должен собирать в одну ячейку. Так сказать отрезок у которого последняя 5ка не входит.
Если будет не 5 то она отработает криво и будет права, тк данные до этого подготавливаются. Ну можно сделать проверку на это и выход из саба, но для меня это бессмысленно. Первая строка всегда заголовок столбца, поэтому со второй. На счет 3, то есть данные во 2ю строку не попадут, тк цикл идет с 3 до последней. |
Отправлено: 18:50, 06-05-2016 | #9 |
Динохромный Сообщения: 701
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Цитата a_axe:
Цитата blackeangel:
Цитата blackeangel:
Цитата blackeangel:
Из конструктивных предложений - чтобы понять, как код работает могу предложить ознакомится с очень полезными ссылками (без всякой иронии, речь о пошаговом выполнении кода). |
|||||
Отправлено: 19:12, 06-05-2016 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Можно ли поставить одну плату 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 |
|