powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Приветик, помогите разобраца з цыклом For Step
16 сообщений из 16, страница 1 из 1
Приветик, помогите разобраца з цыклом For Step
    #34949983
Pita
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно чтобы в цыкле было переывание For i = 1 To 30
Workbooks("Прихид").Worksheets("01").Cells(5, i + 2).Value = Workbooks("01.xls").Worksheets("01").Cells(i + 3, 36).Value так чтобы когда доходило до i=10 перерывалось на 5 и тогада i=15, можна ли это зделоть с помощю Step (шага) .
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34950063
lena_###
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
  For i =  1  To  30 
    'что-то там делаем
    '
    '
    If i =  10  Then i =  14 
  Next i
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34951187
Pita
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо за помощь, но мне нужна еще маленькая подсказка, как все это зделать так чтобы переменая "i" которая в книге Workbooks("01.xls").Worksheets("01").Cells(i + 3, 36) не
перерывалась в отличии от переменой Workbooks("Прихид").Worksheets("01").Cells(5, i + 2).Value. Вообщем нужно чтобы с одной книги считывались дание попорядке а в другую записывались в промежутке в несколька ячеек. Извините за мой корявый русский язык. Большое спасибо за помощь.
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34951341
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Workbooks("Прихид").Worksheets("01").Cells( 5 , i +  2  + (i >  10 ) *  5 ).Value = Workbooks("01.xls").Worksheets("01").Cells(i +  3 ,  36 )
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34951347
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте мне некогда. не уверен - просто предположение, но вроде должно работать
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34951441
Pita
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спабсибо но все жэ не работает, может у ковота есть свабодная минутка чтобы помочь мне, а то уже сил нет с этими макросами. Буду очень признательна.
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34951649
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое впечатление, что нужно просто 30 ячеек скопировать с листа 1-го и на листе 2 выложить порциями по 10 со смещением вниз на 5 строк от предыдущего десятка. В общем, издевательство какое-то на форумчанами типа "цыкл" и "зделать".
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34951687
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поробовал, минус перед скобочкой нужно поставить.

Например
Код: plaintext
1.
2.
For i =  1  To  15 
 Worksheets( 1 ).Range("a" & i) = Worksheets( 2 ).Range("a" & i + -(i >  10 ) *  5 )
Next

И по этому поводу вопрос к участникам форума:
почему значение True в VBA эквивалентно -1 , а не 1 как в Экселе.
Т.е. (1=1)*(2=2) даст 1
а (1=1)*(2=2)*(3=3) даст -1

Зачем так сделано и правильно ли я всё понял.
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34951856
Pavel55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Угу, видно это так. Если мы нажмём F1 на слове True в VBE, то нам написано

The True keyword has a value equal to -1

а на False

The False keyword has a value equal to 0

P.S. никогда не обращал на это внимание )
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34951932
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavel55P.S. никогда не обращал на это внимание )я замечал это раньше, но не вьехал
почему разработчики языка сделали именно так
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34952470
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было бы интересно выслушать мнение кого-нибуть из старых програмистов. Я сам вообще ни основ програмирования, ни основ математики не знаю, так вершков нахватался. Просто мне логичным кажется 1 , почему -1 не понятно.
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34952828
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pita

это имелось ввиду?
Код: plaintext
1.
2.
3.
For i =  1  To  30 
Workbooks("Прихид").Worksheets("01").Cells( 5 ,  5  * (i \  10 ) + i +  2 ).Value =
 Workbooks("01.xls").Worksheets("01").Cells(i +  3 ,  36 ).Value так чтобы когда доходило до i= 10  
перерывалось на  5  и тогада i= 15 , можна ли это зделоть с помощю Step (шага) .


вот тестовая процедура
Код: plaintext
1.
2.
3.
4.
Public Sub test()
    For i =  1  To  30 
      Debug.Print i,  5  * (i \  10 ) + i
    Next i
End Sub
вот результат ее выполнения
i ; i с прерыванием 1 ; 1 2 ; 2 3 ; 3 4 ; 4 5 ; 5 6 ; 6 7 ; 7 8 ; 8 9 ; 9 10 ; 15 11 ; 16 12 ; 17 13 ; 18 14 ; 19 15 ; 20 16 ; 21 17 ; 22 18 ; 23 19 ; 24 20 ; 30 21 ; 31 22 ; 32 23 ; 33 24 ; 34 25 ; 35 26 ; 36 27 ; 37 28 ; 38 29 ; 39 30 ; 45

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34953073
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadБыло бы интересно выслушать мнение кого-нибуть из старых програмистов. Я сам вообще ни основ програмирования, ни основ математики не знаю, так вершков нахватался. Просто мне логичным кажется 1 , почему -1 не понятно.Элементарно Ватсон. Но для понимания почему так, тебе прийдется кроме Бейсика выучить еще хотя бы Си и Ассемблер.

А вообще, это все действительно элементарно. Логическое значение "ложь" обозначается нулем. Логическое значение "правда" это "не ложь". Чему равняется в бинарной математике "не ноль"? Открывай школьный учебник информатики, там обязательно есть табличка:
А не А0110Вспомнил?
А теперь думаем дальше. Куда мы можем записать значение логической переменной? Просто ноль и единичка это один бит. Но процессор не может адресовать один бит, минимально адресуется только байт. А в байте у нас 8 бит. Значит логическая ложь это байт со всеми восемью битами равняющимися нулю. Тогда правда - байт со всеми восемью битами равняющимися единичкам.
Вспоминаем еще одну аксиому - для компьютера не существует типа переменных. Типы переменных появляются только намного позже в языках высокого уровня. А для компьютера существуют только адресуемые ячейки памяти. Любое значение, любая переменная, любой текст для компьютера это всего-лишь набор байтов, которые можно представить в виде цифр....
Значит, если мы попытаемся бейсиковскую логическую переменную представить в виде цифры, мы будем читать двоичное 00000000 (ложь) как десятичную цифру. И 11111111 (правда) как десятичную цифру.
Ну а дальше совсем элементарно: двоичным 11111111 в восьмибитной машине обозначается -1. Потому что если от нуля отнять единичку, то получится 11111111 и флаг переноса. Флаг переноса игнорируем и получаем однобайтовый десятичный -1.
В VBA арифетика на самом деле не восьми- а 32-х байтовая, но принципов это не меняет. В VBA ложь обозначается тридцатью-двумя нулевыми битами, правда - тридцатью-двумя единичными битами. Которые по правилам двоично-десятичной 32-х битной знаковой конвертации и превращаются в -1.
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34953244
Pita
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо всем за помощь. Я очень всем благодарна. Спасибочки. !!!!
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34953957
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 White Owl
Так и знал, что вы поможете, только можно уточнить почему тогда в Экселе даёт единицу, например следующие 2 выражения возвращают различную величину, первое 1, второе -1

Код: plaintext
1.
Debug.Print ( 1  =  1 ) * ( 2  =  2 ) * ( 3  =  3 )
Debug.Print Evaluate("(1=1)*(2=2)*(3=3)")

Просто интересно знать где можно натолкнуться на ошибку, чтобы избежать этого.
...
Рейтинг: 0 / 0
Приветик, помогите разобраца з цыклом For Step
    #34956255
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad 2 White Owl
Так и знал, что вы поможете, только можно уточнить почему тогда в Экселе даёт единицу, например следующие 2 выражения возвращают различную величину, первое 1, второе -1

Код: plaintext
1.
Debug.Print ( 1  =  1 ) * ( 2  =  2 ) * ( 3  =  3 )
Debug.Print Evaluate("(1=1)*(2=2)*(3=3)")

Просто интересно знать где можно натолкнуться на ошибку, чтобы избежать этого.Наоборот вообще-то.
Первое считается в VBA по принципам Бейсика. И дает -1, потому что "правда" это -1, а -1 в кубе равняется -1.
А второе дает единицу, потому что считается Экселем, а он самый умный и считает "правду" за положительную единицу. Замени умножение на сложение и увидишь. Та же самая формула в ячейке на листе тоже будет считать "правду" положительной единицей.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Приветик, помогите разобраца з цыклом For Step
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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