Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 16.11.2007, 17:25   #1
Alexander_Gr
Пользователь
 
Регистрация: 16.11.2007
Сообщений: 15
Восклицание Нужно разбить те числа которые в одной ячейке по разным ячейчам в столбец

Привет всем кто смотрит топик! Прошу помочь, пожалуйста кто знает решение моей проблемы.
Есть таблица в Excel огромная около 10000строк. Пример:
Ячейка с цифрами: 3, 4, 5, 6, 7,
В некоторых ячейках: 3-7
В общем числа всякие!

Требуется следующее:
Нужно разбить те числа которые в одной ячейке по разным ячейчам в столбец! Т.е. для примера
Имеем ячейку: 5, 6, 8, 10 (значения в одной ячейке)
Нужно:
5
6
8
10
В разных ячейках встолбец!
Пожалуйста подскажите как это программно сделать, там 10 тыс строк! Просто не реально это сделать вручную, тем более времени очень мало!

Заранее ОЧЕНЬ благодарен тем, кто отзавется!
Спасибо!
Alexander_Gr вне форума
Старый 16.11.2007, 18:39   #2
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

если у вас в ячейке А1 написано следующие
3, 4, 5, 6, 7, 3-7

То вынести каждую цифру в отдельную ячейку в один столбец, наверное, можно так

Код:
Sub Separate()
Dim iCell As Range
Dim i&, n&, iVal$
    Set iCell = Range("A1")
    For i = 1 To Len(iCell)
        iVal = Mid(iCell, i, 1)
        If IsNumeric(iVal) Then
            n = n + 1
            Cells(n, 3) = iVal
        End If
    Next
End Sub

Последний раз редактировалось Pavel55; 16.11.2007 в 18:45.
Pavel55 вне форума
Старый 16.11.2007, 19:55   #3
Alexander_Gr
Пользователь
 
Регистрация: 16.11.2007
Сообщений: 15
По умолчанию

Отлично! Спасибо Вам огромное! Еще, хочу сказать, что я только начал изучать VBA поэтому если не сложно предложите пожалуйста универсальный пример не только для одной ячейки а для целого ряда. Допустим с A1 по AN, и что бы можно было менять не только область с 3-7 а например с n-m.
Спасибо большое! Буду разбираться сейчас с этим примером, может до меня и дойдет, сам попробую сделать.
Вы мне очень помогли!
Alexander_Gr вне форума
Старый 16.11.2007, 19:59   #4
Alexander_Gr
Пользователь
 
Регистрация: 16.11.2007
Сообщений: 15
По умолчанию

Маленькая проблема... результат получается таким:
3
4
5
6
7
3
7

Желательно бы что бы range (3-7) выдавал 3,4,5,6,7, т.е все значения в промежутке.
Alexander_Gr вне форума
Старый 16.11.2007, 20:11   #5
Alexander_Gr
Пользователь
 
Регистрация: 16.11.2007
Сообщений: 15
Радость

И ещё если ввести отрезок (1-10) то результат получается:

1
1
0

Это немного ни то
Alexander_Gr вне форума
Старый 16.11.2007, 20:47   #6
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

чтобы макрос вместо 1-10 выдавал 1,2,3,4,5,6,7,8,9,10 мы с вами не договаривались )
Pavel55 вне форума
Старый 16.11.2007, 20:57   #7
Alexander_Gr
Пользователь
 
Регистрация: 16.11.2007
Сообщений: 15
По умолчанию

а иначе зачем тогда 1-10? Можно было и запятой обойтись 1,10.
Но к сожалению тут не последовательность, а диапазон)
Кто знает подскажите пожалуйста как быть в такой ситуации!
Alexander_Gr вне форума
Старый 19.11.2007, 16:36   #8
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

ну, что же, давайте попробуем продолжить нашу тему, итак, допустим у нас в ячейке А1 такая запись цифр
3, 1-4; 8, 5, 6, 7, 3-7, 1-10, 5, 6
Следующий макрос разобьёт данный код в столбик в столбце С, а также там где у вас есть сокращения типа 1-4, разобьёт на 1, 2, 3, 4 (так же в столбик)

К сожалению макрос обрабатывает только 2-хзначные числа, например, 1-45, но не обработает 1-845!!!

Код:
Sub Separate()
Dim iCell As Range
Dim i& 'счётчик каждого символа в строке
Dim n& 'номер строки на листе
Dim iVal As String 'каждое значение
Dim StartValue& 'начальное число перед тире
Dim FinishValue& 'конечное число после тире
Dim MidValue& 'промежуточное значение между двумя числами
Dim iValue2 'позиция второго числа после тире
Dim m& 'счётчик
    Application.ScreenUpdating = False 'отключаем обновление экрана для быстроты работы
    Application.Calculation = xlCalculationManual 'отключаем автопересчёт для быстроты работы

    Set iCell = Range("A1")
    For i = 1 To Len(iCell)
        iVal = Mid(iCell, i, 1)
        'если число
        If IsNumeric(iVal) Then
            n = n + 1
            Cells(n, 3) = iVal
        End If
        'если тире
        If iVal = "-" Then
            StartValue = Mid(iCell, i - 1, 1)
            m = i
            Do
                m = m + 1
                iValue2 = Mid(iCell, m, 1)
            Loop Until Not IsNumeric(iValue2) 'or
            'если второе число состоит из 2-х, например, 10
            If i + 1 <> m - 1 Then
                FinishValue = CLng(Mid(iCell, i + 1, 1) & Mid(iCell, m - 1, 1))
                'прибавляем к счётчику символов 2, чтобы след. раз начать с правильной позиции
                i = i + 2
            Else
                FinishValue = Mid(iCell, m - 1, 1)
                'прибавляем к счётчику символов 1, чтобы след. раз начать с правильной позиции
                i = i + 1
            End If
            MidValue = MidValue + StartValue + 1
            Do
                n = n + 1
                Cells(n, 3) = MidValue
                MidValue = MidValue + 1
            Loop While MidValue - 1 <> FinishValue
        End If
        MidValue = 0
    Next
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    MsgBox "Сделано!"
End Sub
Попробуйте.

Последний раз редактировалось Pavel55; 19.11.2007 в 16:42.
Pavel55 вне форума
Старый 20.11.2007, 08:02   #9
Alexander_Gr
Пользователь
 
Регистрация: 16.11.2007
Сообщений: 15
По умолчанию

Ну что ж что то работает. Буду разбираться, может сам дойду до чего-нибудь. В любом случае спасибо вам большое!
Alexander_Gr вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скопировать по одной ячейке из нескольких файлов в один Nimo Microsoft Office Excel 2 09.08.2008 09:25
В одной ячейке текст и число Shavminator Microsoft Office Excel 11 27.12.2007 14:32
два числа в одной ячейке zetrix Microsoft Office Excel 1 23.12.2007 23:24
в одной ячейке надписи были в 2-х или 3-х рядках и текст отображался целиком а не прятался за границами KSP Общие вопросы Delphi 7 20.09.2007 20:33
суммирование вводимых чисел в одной ячейке Albert Microsoft Office Excel 8 07.01.2007 23:47