powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Числа из колонки - в текстовую строчку
8 сообщений из 8, страница 1 из 1
Числа из колонки - в текстовую строчку
    #35744017
TatYankova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из таблицы с колонкой чисел нужно получить обработанную строку, которая будет вставляться в итоговый документ.
Если числа увеличиваются на единичку и их не меньше трех, то нужно указать только крайние (а в скобках их количество), иначе – все подряд, через запятую, а в конце – итог.
Например, из колонки:
10124
10125
10126
10128
10129
10131
10132
10133
10134
должна получиться такая строчка:

10124 – 10126 (3 шт.), 10128, 10129, 10131 – 10134 (4 шт.); итого – 9 шт.

Помогите, пожалуйста, это дело автоматизировать, а то колонки длиннющие и часты ошибки!;(
Кстати, а можно получившуюся строку передавать в Блокнот или даже в Word?
...
Рейтинг: 0 / 0
Числа из колонки - в текстовую строчку
    #35744425
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
комбинация из двух дополнительных столбцов с формулами и пользовательской функции:
Код: plaintext
1.
2.
Function concut(rng As Range) As String
    concut = Replace(WorksheetFunction.Trim(Join(Application.Transpose(rng), " ")), " ", ",")
End Function

или просто пользовательская функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Function concut2(rng As Range) As String
    Dim arr, s$, i&, nxt&, n&
    arr = rng
    n =  1 
    If InStr( 1 , TypeName(arr), "()") >  0  Then
        s = arr( 1 ,  1 )
        n = UBound(arr)
        For i =  2  To n
            If arr(i,  1 ) - arr(i -  1 ,  1 ) =  1  Then
                nxt = nxt +  1 
            Else
               If nxt =  1  Then
                    s = s & "," & arr(i -  1 ,  1 )
                Else
                    s = s & "-" & arr(i -  1 ,  1 ) & "(" & nxt +  1  & "шт)"
               End If
               s = s & "," & arr(i,  1 )
               nxt =  0 
            End If
        Next
        If nxt =  1  Then
             s = s & "," & arr(i -  1 ,  1 )
         Else
             If nxt >  1  Then s = s & "-" & arr(i -  1 ,  1 ) & "(" & nxt +  1  & "шт)"
        End If
    End If
    concut2 = s & ";итого-" & n & "шт"
End Function

в первом случае пользовательская функция может играть и отдельную роль
...
Рейтинг: 0 / 0
Числа из колонки - в текстовую строчку
    #35745131
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)) забыл приложить файл, ну лучше поздно..

да вроде еще и не поздно..
...
Рейтинг: 0 / 0
Числа из колонки - в текстовую строчку
    #35745132
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
последствия праздника, однако
- а чего обе кнопки на о начинаются? обе, о как..
...
Рейтинг: 0 / 0
Числа из колонки - в текстовую строчку
    #35745136
TatYankova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо!
Используем concut2 - все получается!

С праздниками! ;))
...
Рейтинг: 0 / 0
Числа из колонки - в текстовую строчку
    #35745140
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да и функцию немного поправить:
Код: plaintext
1.
2.
3.
    n =  1 
    s = rng.Cells( 1 )
    If InStr( 1 , TypeName(arr), "()") >  0  Then
        n = UBound(arr)

вместо

Код: plaintext
1.
2.
3.
    n =  1 
    If InStr( 1 , TypeName(arr), "()") >  0  Then
        s = arr( 1 ,  1 )
        n = UBound(arr)
...
Рейтинг: 0 / 0
Числа из колонки - в текстовую строчку
    #35745158
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще раз, наверное окончательно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Function concut2(rng As Range) As String
    Dim arr, s$, i&, nxt&, n&
    Set rng = Intersect(rng.Columns( 1 ), ActiveSheet.UsedRange)
    arr = rng
    n =  1 
    s = rng.Cells( 1 )
    If InStr( 1 , TypeName(arr), "()") >  0  Then
        n = UBound(arr)
        For i =  2  To n
            If arr(i,  1 ) - arr(i -  1 ,  1 ) =  1  Then
                nxt = nxt +  1 
            Else
               If nxt =  1  Then
                    s = s & "," & arr(i -  1 ,  1 )
                Else
                    s = s & "-" & arr(i -  1 ,  1 ) & "(" & nxt +  1  & "шт)"
               End If
               s = s & "," & arr(i,  1 )
               nxt =  0 
            End If
        Next
        If nxt =  1  Then
             s = s & "," & arr(i -  1 ,  1 )
         Else
             If nxt >  1  Then s = s & "-" & arr(i -  1 ,  1 ) & "(" & nxt +  1  & "шт)"
        End If
    End If
    concut2 = s & ";итого-" & n & "шт"
End Function

это позволит задавать диапазон целым столбцом, не проматывая его для выделения диапазона, если он(диапазон) велик, да что там целым столбцом, хоть всем листом - будет браться только первый столбец указанного диапазона
...
Рейтинг: 0 / 0
Числа из колонки - в текстовую строчку
    #35745167
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кроме того, задание диапазона целым столбцом, - A:A, например - обеспечит автоматический пересчет при добавлении строк, не увеличивая(намного) времени расчета
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Числа из колонки - в текстовую строчку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]