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

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

Помогите, пожалуйста, это дело автоматизировать, а то колонки длиннющие и часты ошибки!;(
Кстати, а можно получившуюся строку передавать в Блокнот или даже в Word?
...
Рейтинг: 0 / 0
04.01.2009, 22:57:34
    #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
05.01.2009, 20:54:17
    #35745131
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа из колонки - в текстовую строчку
:)) забыл приложить файл, ну лучше поздно..

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

С праздниками! ;))
...
Рейтинг: 0 / 0
05.01.2009, 21:10:41
    #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
05.01.2009, 21:30:07
    #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
05.01.2009, 21:38:16
    #35745167
_slan_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа из колонки - в текстовую строчку
кроме того, задание диапазона целым столбцом, - A:A, например - обеспечит автоматический пересчет при добавлении строк, не увеличивая(намного) времени расчета
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Числа из колонки - в текстовую строчку / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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