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

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

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

Ручками замучаешься
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35982415
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan-K,
а пробелы перед скобочкой как у Вас нарисовано - то есть, то нет? или все-таки как-то единообразно?
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35982577
Taranaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функции РАНГ, СЧЁТЕСЛИ и ИНДЕКС должны здесь помочь.
Если текст нужно сортировать - то только СЧЁТЕСЛИ и ИНДЕКС.
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35982596
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan-K,
только сейчас вчитался в вопрос - но все равно не все понятно
835 (2) - это написано в ОДНОЙ или в ДВУХ подряд ячейках ?
а то я сначала подумал, что это вообще одна строка
...
Рейтинг: 0 / 0
как расфасовать формулами
    #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
как расфасовать формулами
    #35982628
Taranaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять чтото не то))
Файл в студию!
...
Рейтинг: 0 / 0
как расфасовать формулами
    #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
как расфасовать формулами
    #35982707
Taranaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или так
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35982926
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Taranaga,
ну вот,так действительно проще
решили мы проблему
впору контору по помощи открывать
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35982949
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PlanB
решили мы проблему
а я все жду, когда топикстартер ответит на уточняющие вопросы
пойду, запишусь на курсы телепатов иначе тут делать нечего
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35983005
Taranaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будет еще забавнее, если мы опять не угадали реальную постанову задачи :D
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35983105
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, может вообще всё в одной ячейке
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35983938
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35983939
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
как расфасовать формулами
    #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
как расфасовать формулами
    #35984582
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходя из названия топика предлагаю формулы. Если непринципиально их количество, то можно использовать предложенный вариант с 3-мя дополнительными строками. Формулы могут быть и другими, но принцип такой (пока другого в голову не пришло).
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35984583
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот и файл
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35986603
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad,
Огромное спасибо. Сейчас буду фасовать всю тысячу ячеек
...
Рейтинг: 0 / 0
как расфасовать формулами
    #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
как расфасовать формулами
    #35986794
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan-K,
какой же это глюк
у Вас там
Код: plaintext
Const TARGET As String = "A2:T2"
а данные заканчиваются на G2
от G2 до T2 - 13 пустых ячеек - вот Вам и выдает ровно 13 нулей в конце
я проверил - число нулей посчитано правильно
...
Рейтинг: 0 / 0
как расфасовать формулами
    #35986910
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan-K,
напишите типа
for each a in selection
только надо диапазон пере запуском выделять...
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / как расфасовать формулами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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