Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / как расфасовать формулами / 21 сообщений из 21, страница 1 из 1
12.05.2009, 20:39:57
    #35981649
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Есть длинный ряд ячеек :
835 (2) 838 (4) 12546 8635(2)

в скобочках указывается количество

как их превратить в ряд ячеек
835 835 838 838 838 838 12546 8635 8635

Ручками замучаешься
...
Рейтинг: 0 / 0
13.05.2009, 11:01:00
    #35982415
qwrqwr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Dan-K,
а пробелы перед скобочкой как у Вас нарисовано - то есть, то нет? или все-таки как-то единообразно?
...
Рейтинг: 0 / 0
13.05.2009, 11:51:33
    #35982577
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Функции РАНГ, СЧЁТЕСЛИ и ИНДЕКС должны здесь помочь.
Если текст нужно сортировать - то только СЧЁТЕСЛИ и ИНДЕКС.
...
Рейтинг: 0 / 0
13.05.2009, 11:54:58
    #35982596
qwrqwr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Dan-K,
только сейчас вчитался в вопрос - но все равно не все понятно
835 (2) - это написано в ОДНОЙ или в ДВУХ подряд ячейках ?
а то я сначала подумал, что это вообще одна строка
...
Рейтинг: 0 / 0
13.05.2009, 11:58:45
    #35982608
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Тьфу ты... задачу неверно понял.
Предыдущий мой пост - в топку! )

Для начала - нужно разобрать строку на составляющие.
Например этим набором функций:
Код: 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.
29.
30.
31.
32.
33.
Function CNT_Simb(Simb As String, TXT As String)
c =  1 
For i =  1  To Len(TXT)
    If Mid(TXT, i, Len(Simb)) = Simb Then c = c +  1 
Next i

CNT_Simb = c

End Function


Function NumSimb(Simb As String, TXT As String, numVH)
CS =  0 
NS =  1 
    While CS <> numVH
        If Mid(TXT, NS,  1 ) = Simb Then CS = CS +  1 
        If NS >= Len(TXT) Then
            NS = Len(TXT) +  1 
            CS = numVH
        End If
        NS = NS +  1 
    Wend
NumSimb = NS
End Function

Function SeparateMarshr(Simb As String, TXT As String, NumMarsh)
    If CNT_Simb(Simb, TXT) =  1  Then
        SeparateMarshr = TXT
    Else
        BS = NumSimb(Simb, TXT, NumMarsh -  1 )
        LS = NumSimb(Simb, TXT, NumMarsh) - BS
        SeparateMarshr = Mid(TXT, BS, LS -  1 )
    End If
End Function
Здесь функция SeperateMarshr позволяет брать значения, находящиеся между указанными символами (Simb - разделитель "|" в вашем случае, TXT - текст для разбора, NumMarsh - номер значения)
Может поможет чем...
При этом в первом столбце должно идти число, а во втором - количество повторов.
А потом, немного поизвращавшись, уже легче получить желаемое.
...
Рейтинг: 0 / 0
13.05.2009, 12:03:57
    #35982628
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Опять чтото не то))
Файл в студию!
...
Рейтинг: 0 / 0
13.05.2009, 12:20:07
    #35982680
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Dan-KЕсть длинный ряд ячеек :
835 (2) 838 (4) 12546 8635(2)

в скобочках указывается количество

как их превратить в ряд ячеек
835 835 838 838 838 838 12546 8635 8635

Ручками замучаешьсяНу, если только формулами, то можно поиздеваться, но долго и сложно:
1.Для начала - транспонировать исходный ряд.
2.данные-текст по столбцам (разделитель "(")
3.убираем ")" заменой
теперь у нас, по идее, ряд:
знач.кол835283841254686352
4.чё-нить типа примера из приложения
5.всё-равно ручками.
Макросами намного проще
...
Рейтинг: 0 / 0
13.05.2009, 12:32:51
    #35982707
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
или так
...
Рейтинг: 0 / 0
13.05.2009, 13:15:43
    #35982926
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Taranaga,
ну вот,так действительно проще
решили мы проблему
впору контору по помощи открывать
...
Рейтинг: 0 / 0
13.05.2009, 13:20:20
    #35982949
qwrqwr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
PlanB
решили мы проблему
а я все жду, когда топикстартер ответит на уточняющие вопросы
пойду, запишусь на курсы телепатов иначе тут делать нечего
...
Рейтинг: 0 / 0
13.05.2009, 13:33:48
    #35983005
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Будет еще забавнее, если мы опять не угадали реальную постанову задачи :D
...
Рейтинг: 0 / 0
13.05.2009, 13:59:46
    #35983105
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
ага, может вообще всё в одной ячейке
...
Рейтинг: 0 / 0
13.05.2009, 18:46:43
    #35983938
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
...
Рейтинг: 0 / 0
13.05.2009, 18:47:38
    #35983939
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
...
Рейтинг: 0 / 0
14.05.2009, 00:28:49
    #35984386
qwrqwr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Dan-K, так попробуйте:
Код: 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.
Sub rasfas()
Const TARGET As String = "A2:G2"    ' A2:G2 = Исходный диапазон
Dim ar, a, i As Integer, counter As Integer
    ar = ActiveSheet.Range(TARGET)
    For Each a In ar    ' подсчет числа элементов
        If Right(a,  1 ) = ")" Then
            counter = counter + Val(Mid(a, InStr(a, "(") +  1 ))
        Else
            counter = counter +  1 
        End If
    Next a
ReDim numbers(counter -  1 ) As Long: counter =  0 
    For Each a In ar    ' формирование массива
        If Right(a,  1 ) = ")" Then
            For i =  1  To Val(Mid(a, InStr(a, "(") +  1 ))
                numbers(counter) = Val(a)
                counter = counter +  1 
            Next i
        Else
            numbers(counter) = a
            counter = counter +  1 
        End If
    Next a
'выводим числа в строку 5 - c проверкой на число столбцов
If counter <=  256  Then ActiveSheet.Range(Cells( 5 ,  1 ), Cells( 5 , counter)) = numbers
End Sub
исходный диапазон здесь прошит в код - но можно переделать на ввод его через inputbox, например
...
Рейтинг: 0 / 0
14.05.2009, 08:52:17
    #35984582
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Исходя из названия топика предлагаю формулы. Если непринципиально их количество, то можно использовать предложенный вариант с 3-мя дополнительными строками. Формулы могут быть и другими, но принцип такой (пока другого в голову не пришло).
...
Рейтинг: 0 / 0
14.05.2009, 08:52:46
    #35984583
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
а вот и файл
...
Рейтинг: 0 / 0
14.05.2009, 19:14:42
    #35986603
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Deggasad,
Огромное спасибо. Сейчас буду фасовать всю тысячу ячеек
...
Рейтинг: 0 / 0
14.05.2009, 19:24:49
    #35986626
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
qwrqwrDan-K, так попробуйте:
Код: 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.
Sub rasfas()
Const TARGET As String = "A2:G2"    ' A2:G2 = Исходный диапазон
Dim ar, a, i As Integer, counter As Integer
    ar = ActiveSheet.Range(TARGET)
    For Each a In ar    ' подсчет числа элементов
        If Right(a,  1 ) = ")" Then
            counter = counter + Val(Mid(a, InStr(a, "(") +  1 ))
        Else
            counter = counter +  1 
        End If
    Next a
ReDim numbers(counter -  1 ) As Long: counter =  0 
    For Each a In ar    ' формирование массива
        If Right(a,  1 ) = ")" Then
            For i =  1  To Val(Mid(a, InStr(a, "(") +  1 ))
                numbers(counter) = Val(a)
                counter = counter +  1 
            Next i
        Else
            numbers(counter) = a
            counter = counter +  1 
        End If
    Next a
'выводим числа в строку 5 - c проверкой на число столбцов
If counter <=  256  Then ActiveSheet.Range(Cells( 5 ,  1 ), Cells( 5 , counter)) = numbers
End Sub
исходный диапазон здесь прошит в код - но можно переделать на ввод его через inputbox, например


А здесь непонятный глюк в макросе. Вставляю его в файл. Прогоняю. А он в конце выдает несколько нулей в строке?
...
Рейтинг: 0 / 0
14.05.2009, 21:00:56
    #35986794
qwrqwr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Dan-K,
какой же это глюк
у Вас там
Код: plaintext
Const TARGET As String = "A2:T2"
а данные заканчиваются на G2
от G2 до T2 - 13 пустых ячеек - вот Вам и выдает ровно 13 нулей в конце
я проверил - число нулей посчитано правильно
...
Рейтинг: 0 / 0
14.05.2009, 22:42:26
    #35986910
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как расфасовать формулами
Dan-K,
напишите типа
for each a in selection
только надо диапазон пере запуском выделять...
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / как расфасовать формулами / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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