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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2011, 11:17   #1
0creator0
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 94
По умолчанию Функция Split

Здравствуйте, подскажите пожалуйста, где зарылась ошибка? При запуске макроса хочу что бы если есть строчка со знаком «=» то она разбивалась бы на две строчке:
- в первой все, что до знака «=»;
- во второй все, что после «=»;
а в строчках где знак «=» отсутствует записывалась, только в одну строчку столбца без разбиения
Вложения
Тип файла: rar Split.rar (11.1 Кб, 14 просмотров)
0creator0 вне форума Ответить с цитированием
Старый 13.09.2011, 11:24   #2
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

1) Не правильно написан InStr(temp(i), t) надо InStr(1, temp(i), t)
2) Что такое t оно имеет пустое значение...
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 13.09.2011, 11:25   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Чего так сложно?

Код:
Sub test2()
    Dim x
    Dim i As Long
    Application.ScreenUpdating = False
    Range([H2], Cells(Rows.Count, "h").End(xlUp).Offset(0, 1)).ClearContents
    x = Range([A2], Cells(Rows.Count, 1).End(xlUp).Offset(0, 1))
    ReDim y(1 To UBound(x), 1 To 2)
    On Error Resume Next
    For i = 1 To UBound(x)
    y(i, 1) = Split(x(i, 1), "l=")(0)
    y(i, 2) = Split(x(i, 1), "l=")(1)
    Next
    [H2].Resize(i - 1, 2) = y
    [a:j].EntireColumn.AutoFit
    On Error GoTo 0
    Application.ScreenUpdating = True
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 13.09.2011, 11:27   #4
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Надо так
Код:
For i = 1 To UBound(x)
    On Error Resume Next
        temp = Split(x(i, 1), "l=")
RAN. вне форума Ответить с цитированием
Старый 13.09.2011, 11:30   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

RAN, зачем в цикле-то?
И притом в строке со split ошибки не будет, ошибка может быть позже, когда 1 элемент брать будем...

Trim забыл - исправьте:
Код:
    y(i, 1) = Trim(Split(x(i, 1), "l=")(0))
    y(i, 2) = Trim(Split(x(i, 1), "l=")(1))
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 13.09.2011 в 11:36.
Hugo121 вне форума Ответить с цитированием
Старый 13.09.2011, 11:40   #6
0creator0
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 94
По умолчанию

Премного благодарен за оперативность и предложенный новый вариант решения данного примера)))
0creator0 вне форума Ответить с цитированием
Старый 13.09.2011, 15:25   #7
0creator0
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 94
По умолчанию

Здравствуйте еще раз. Использовав ваш код расцепления ,у меня все получилось, но не могу его доработать до ума, приспособить что б он заменял, уже имеющееся строчки , когда я ставлю J2
Range([j2], Cells(Rows.Count, "P").End(xlUp).Offset(0, 1)).ClearContents
……..
[j2].Resize(i - 1, 7) = y
Макрос выводит все правильно, но в соседних строчках
Когда я ставлю C2 ,
Range([С2], Cells(Rows.Count, "P").End(xlUp).Offset(0, 1)).ClearContents
………..
[С2].Resize(i - 1, 7) = y
макрос не хочет заменять на новое, и выдает ерунду.
Вложения
Тип файла: rar Split.rar (12.4 Кб, 10 просмотров)
0creator0 вне форума Ответить с цитированием
Старый 13.09.2011, 16:11   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

[C2] - это должно быть це2, а не эс2
А потом уже дальше смотрите...

P.S.
И ещё - Вы очищаете 15 столбцов, а заполняете только 7 - почему?
Надеюсь, что массив на 7 столбцов создан (и наполнен).
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 13.09.2011 в 16:27.
Hugo121 вне форума Ответить с цитированием
Старый 13.09.2011, 22:10   #9
0creator0
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 94
По умолчанию

Да это я учел, теперь все строчки правильно заполняются кроме первой , он апосле запуска макроса просто исчезает.
Вложения
Тип файла: rar Split1.rar (11.5 Кб, 7 просмотров)
0creator0 вне форума Ответить с цитированием
Старый 13.09.2011, 22:27   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Пропадает потому, что Вы её стираете:
Range([c2], Cells(Rows.Count, "k").End(xlUp).Offset(0, 1)).ClearContents
Расскажите, что Вы хотели вообще сделать?

Хотя вроде понял.
Попробуйте так:
Код:
Sub test()
    Dim x
    Dim i As Long
    Application.ScreenUpdating = False
    x = Range([A2], Cells(Rows.Count, 8).End(xlUp).Offset(0, 1))
    Range([c2], Cells(Rows.Count, "i").End(xlUp)).ClearContents
    ReDim y(1 To UBound(x), 1 To 7)
    On Error Resume Next
    For i = 1 To UBound(x)
        y(i, 1) = Trim(Split(x(i, 3), "l=")(0))
        y(i, 2) = Trim(Split(x(i, 3), "l=")(1)) * x(i, 4) / 1000
        y(i, 3) = x(i, 5)
        y(i, 4) = x(i, 6) / (Trim(Split(x(i, 3), "l=")(1)) / 1000)
        y(i, 5) = x(i, 7)
        y(i, 6) = x(i, 8)
        y(i, 7) = x(i, 9)
    Next
    [c2].Resize(i - 1, 7) = y
    '    [a:P].EntireColumn.AutoFit
    On Error GoTo 0
    Application.ScreenUpdating = True
End Sub
Вообще-то ClearContents тут лишнее - в любом случае этот диапазон затрётся массивом. В этом случае.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 13.09.2011 в 22:34.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аналог Split в Delphi? apromix Помощь студентам 6 21.09.2010 22:17
Split Text ZuBy Общие вопросы Delphi 6 27.06.2010 01:47
Split(); Alex_sim Общие вопросы .NET 2 08.05.2010 20:03
Расширенная версия функции Split Aent Microsoft Office Excel 0 07.05.2010 01:40