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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2019, 14:21   #1
Questru
Почемучка-новичок
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 67
По умолчанию Do While по двум условиям

Всем привет
Не могу осилить...

Есть наполнение ячейки:
Фамилия1 Имя1;#122;#Фамилия2 Имя2;#53;#Фамилия3 Имя3;#437;#Фамилия4 Имя4;#110

Нужно выбросить из ячейки то, что стоит после # и до следующей фамилии ну и в самом конце просто убрать точку с запятой, хэштег и цифры

То есть должно получиться вот такое:
Фамилия1 Имя1;Фамилия2 Имя2;Фамилия3 Имя3;Фамилия4 Имя4

Есть вот такой код:
Код:
    n = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 3 To n
        Length = Len(Cells(i, 3))
        ReDim String_Array(1 To Length)
        For k = 1 To Length
            If Mid(Cells(i, 3), k, 1) <> "#" Then
                String_Array(k) = Mid(Cells(i, 3), k, 1)
            Else
                Do While z <> "#" Or k > Length
                    k = k + 1
                    z = Mid(Cells(i, 3), k, 1)
                Loop
            End If
        Next k
        Cells(i, 3) = ""
        For t = 1 To Length
            Cells(i, 3) = Cells(i, 3) + String_Array(t)
        Next t
    Next i
Код при исполнении убегает в бесконечность. Понимаю, что где-то косячу в условиях для While, но где понять не могу...
Помогите, пожалуйста.

Спасибо!
Questru вне форума Ответить с цитированием
Старый 26.12.2019, 14:29   #2
Questru
Почемучка-новичок
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 67
По умолчанию

Изменил код вот так
Код:
    n = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 3 To n
        Length = Len(Cells(i, 3))
        ReDim String_Array(1 To Length)
        For k = 1 To Length
            If Mid(Cells(i, 3), k, 1) <> "#" Then
                String_Array(k) = Mid(Cells(i, 3), k, 1)
            Else
                Do While z <> "#"
                    k = k + 1
                    z = Mid(Cells(i, 3), k, 1)
                    If z = "" Then Exit Do
                Loop
            End If
        Next k
        Cells(i, 3) = ""
        For t = 1 To Length
            Cells(i, 3) = Cells(i, 3) + String_Array(t)
        Next t
    Next i
В бесконечно не убегает, но цифры не удаляет...
Questru вне форума Ответить с цитированием
Старый 26.12.2019, 14:36   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Вариант без While
Код:
Function ClearCell(sValue As String)
    Dim s() As String
    Dim i As Integer
    Dim sResult As String, sCell As String
    sResult = vbNullString
    
    s = Split(sValue, "#")
    For i = LBound(s) To UBound(s)
        sCell = Trim(s(i))
        If Len(sCell) > Len(Replace(sCell, " ", "")) Then
            sResult = sResult & " " & sCell
        End If
    Next i
    ClearCell = Left(sResult, Len(sResult) - 1)
End Function
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 26.12.2019, 14:53   #4
Questru
Почемучка-новичок
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 67
По умолчанию

Шик блеск красота!
Спасибо большое!

Только стал добавляться пробел в начало строки.
Я чутка изменил вот так:
Код:
Function ClearCell(sValue As String)
    Dim s() As String
    Dim i As Integer
    Dim sResult As String, sCell As String
    sResult = vbNullString

    s = Split(sValue, "#")
    For i = LBound(s) To UBound(s)
        sCell = Trim(s(i))
        If Len(sCell) > Len(Replace(sCell, " ", "")) Then
            sResult = sResult & sCell
        End If
    Next i
    ClearCell = Left(sResult, Len(sResult) - 1)
End Function
Теперь то что надо!
Questru вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка по двум условиям enot7 Microsoft Office Excel 4 04.07.2018 09:14
среднее значение по двум условиям alenohka Помощь студентам 1 09.02.2017 10:25
Запрос по двум условиям flyinsky Общие вопросы Delphi 1 10.06.2011 00:25
Копирование данных по двум условиям nuwanda Microsoft Office Excel 1 17.12.2010 15:08
Счёт ячеек по двум условиям Feniks18 Microsoft Office Excel 3 27.11.2009 13:51