Страницы: 1
RSS
Макрос не выполняет условие в цикле while
 
Здравствуйте, уважаемые форумчане!

Помогите пожалуйста понять: почему цикл "не видит" условия Not (Cell = 0) и продолжает наращивать значения переменных c и re
Код
Sub Ìàêðîñ1()
'
' Ìàêðîñ1 Ìàêðîñ
'
' Ñî÷åòàíèå êëàâèø: Ctrl+e
'
Dim Cell, EndCell As Object
Dim r, c, re, ce As Double

r = 1
c = 2
re = 1
ce = 1
Set Cell = Worksheets("Ëèñò1").Cells(r, c)
Set EndCell = Worksheets("Ëèñò2").Cells(re, ce)

'Application.ScreenUpdating = False

Do While Not (r > 10)
    Do While Not (Cell = 0)
        EndCell = Cell
        c = c + 1
        re = re + 1
        'MsgBox = c
    Loop
r = r + 1
c = 2
Loop

'Application.ScreenUpdating = True


End Sub

Заранее спасибо!
Изменено: Павел - 13.07.2021 16:52:58
 
Павел, Здравствуйте
Переменные Cell и r не меняются в цикле, а именно их вы проверяете для выхода из него

А вообще вы где так код научились писать? Смотреть страшно
Одно из: перечисление переменных при объявлении не присваивает им всем одинаковый тип, если что

Советую изложить, что хотите, а я покажу, как это написать кодом  ;)
Изменено: Jack Famous - 07.07.2021 09:15:21
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Здравствуйте, Jack Famous

Другими словами - проблема в том, что на листе 5 ячейка с нулём встречается уже в 7 столбце, а цикл как ни в чём ни бывало тянет до момента, когда c переполняется (32767):

А вообще, хотел таким образом с пятого листа построчно (пока в строках не будет встречаться 0) транспирировать все матрицы разных по типу значений в один столбец первого листа.

По поводу моих знаний скажу Вам, что черпаю их как попало, и в этом нет мне прощения. В частности: меня тоже напрягает, что неявное определение переменных засунуто в явное определение. Но это разве принципиально в данной конкретной проблеме, что цикл While Not Cell = 0 не останавливается, когда в очередной ячейке обнаруживается 0? Сейчас даже изменю первое сообщение в теме, чтобы всё имело приемлемый вид. Теперь нет проблем с переменными?
Изменено: Павел - 13.07.2021 16:56:43
 
Павел, здравствуйте
Теперь прикрепите файл с листами "как есть" и "как надо"
Найти ноль проще всего в вашем случае методом Range.Find, а транспонировать или встроенным методом или простым циклом

Если не помогут, но напишите мне 26 июля (неближайший понедельник) - сейчас в отпуске и не у компа
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Здравствуйте, Jack Famous

Есть примерно следующее:
 
Пока  Jack Famous отдыхает,помогу вместо него.
Код
Sub Не_Навижу_Do_Loop()
    Dim Sh As Worksheet, count&
    Set Sh = Worksheets("Лист5")
    Set ShOut = Worksheets("Лист1")
    dx = Sh.UsedRange
    count = 0
    For i = 1 To UBound(dx)
        For c = 1 To UBound(dx, 2)
            If dx(i, c) <> "" Then
                If dx(i, c) <> 0 Then
                    count = count + 1
                    ShOut.Cells(count, 1) = dx(i, c)
                End If
            End If
        Next
    Next
End Sub
 
doober, Спасибо большое!

Правда макрос забрал лишнюю ячейку "есть так", но если удалить "есть так" с Листа5, то работает!
 
Страницы: 1
Наверх