powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Цикл с перебором столбцов
30 сообщений из 30, показаны все 2 страниц
Цикл с перебором столбцов
    #35091728
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, подскажите, пожалуйста, как можно сделать цикл с перебором столбцов.
Пытаюсь сделать что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
i= 3 
do
  Range(ActiveSheet.Column (i) + CStr( 1 )) = Range("A1")
  i=i+ 1 
while (Range(ActiveSheet.Column(i))<>Null)
Код писала прям в форуме, так что может и не работать. Но смысл нужен такой. Подскажите, как сделать!
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35092057
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может что-то такое?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub test()
Dim i As Long
    i =  3 
    Do
        Cells( 1 , i) = Range("A1")
        i = i +  1 
    Loop While Not Cells( 1 , i).Value = ""
End Sub
а лучше напиши по-русски, что нужно..
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35092226
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vbaproлучше напиши по-русски, что нужно..
Надо сделать цикл с перебором столбцов и выход из цикла в том случае, если столбец будет пуст
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35092595
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub test()
Dim i As Long
    i =  3 
    Do
'        Cells(1, i) = Range("A1")
        i = i +  1 
    Loop Until Columns(i).Find(What:="*") Is Nothing Or i = Columns.Count
    MsgBox i
End Sub
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35092615
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vbapro
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub test()
Dim i As Long
    i =  3 
    Do
'        Cells(1, i) = Range("A1")
        i = i +  1 
    Loop Until Columns(i).Find(What:="*") Is Nothing Or i = Columns.Count
    MsgBox i
End Sub

Как я поняла - перебор столбцов: Columns(i).Find, а зачем What:="*" ?
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35092798
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Columns(i).Find(What:="*") Is Nothing - соблюдение этого условия, означает что во всей колонке i нет никаких данных.
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35094003
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, конечно, но как-то можно проще сделать мне кажется. Сейчас пробую с помощью

Код: plaintext
Worksheets("Лист1").Cells(k, I).Value

И вот такой вопрос. Поставила условие проверки пустоты ячейки:
Код: plaintext
If IsNull(Worksheets("Лист1").Cells(k, I).Value) Then
А почему-то если ячейка пустая, то это условие становится в False, хотя должно в True. Можете подсказать почему?
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35094019
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще почему-то не срабатывает условие
Код: plaintext
If IsDate(Worksheets("Лист1").Cells(k, I).Value) Then
Не пойму в чем проблема. Подскажите, пожалуйста!!!
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35094080
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoniaИ вот такой вопрос. Поставила условие проверки пустоты ячейки:
Код: plaintext
If IsNull(Worksheets("Лист1").Cells(k, I).Value) Then

Вместо IsNull используйте для проверки IsEmpty.

+ An Empty variable is represented as 0 in a numeric context or a zero-length string ("") in a string context.
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35094154
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LETME
используйте для проверки IsEmpty.

+ An Empty variable is represented as 0 in a numeric context or a zero-length string ("") in a string context.
Но я все равно не поняла, почему IsNull не работает...вроде тоже самое....
А вместо IsDate что можно использовать?
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35094167
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И самое интересное, что работает:
Код: plaintext
 Loop Until Not IsNull(Worksheets("Лист1").Cells(k, I).Value)
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35095240
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sonia
А вместо IsDate что можно использовать?
Кстати, а может ли это быть из-за того, что формат у ячейки стоит общий???? Ну по идеи же IsDate должна проверить и если можно перевести в дату, значит True. Я правильно поняла?
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35096048
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sonia,
на счет IsNull - трудно сказать. Возможно придут знающие люди и скажут.
Я думаю именно потому, что пустая ячейка не равна Null изначально.
Более того, я для любопытства принудительно присваивал ей Null. Ничего не получается.
Кто скажет на счёт - в чем разница между Empty и Null?

**Думаю, если порытся в справке ответ можно найти. Но мне, как и Вам лень это делать)

На счет всего остального - лучше выложить пример: что получается, а что нет.
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35096076
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Элементарно же!
IsEmpty() - значение переменной пустое.
IsNull() - значение переменной не определено.
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35096107
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЭлементарно же!
IsEmpty() - значение переменной пустое.
IsNull() - значение переменной не определено.
..а... White Owl, а что такое "не определено"? :)
Т.е. оно может быть не пустым? А каким еще?)
Я мельком справку пробежал и примерно это и выжал для себя...
Но ведь разницы не почувствовал :(
Пустое и неопределенно: мне надо залезать в бочку, чтоб подумать над этим)
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35096111
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LETMEПустое и неопределенно: мне надо залезать в бочку, чтоб подумать над этим)
Если строковая переменная не содержит никаких букв - она "пустая".
Если числовая переменная не содержит никаких цифр - она "не определена".
Логическая переменная может содержать Правда и Ложь, а если мы не знаем значение этой переменной? Тогда она "не определена".
Ячейка Экселя всегда содержит какие-то буковки которые могут быть или текстом или числом или датой, но это всегда какие-то буковки. Общий знаменатель у этих буковок - строка. Значит и ячейка Экселя может быть пуста или не пуста. Но она всегда определена.
Такая бочка годится? :)
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35096265
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, спасибо большое! Такая бочка точно годится :) разобрался.
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35096341
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, с IsEmpty более менее разобралась, а вот что с IsDate делать, прям не знаю
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35096396
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoniaЛадно, с IsEmpty более менее разобралась, а вот что с IsDate делать, прям не знаю
...для проверки можно было бы использовать CDate(), преобразовывая каждое проверяемое значение к дате. Однако, это будет неправильно, т.к. например и единица в данном случае тоже станет датой.
А разве не является критерием тот факт, что ячейка имеет именно формат даты, а не что-либо другое?
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35096564
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LETMEА разве не является критерием тот факт, что ячейка имеет именно формат даты, а не что-либо другое?

Дело в том, что я не знаю в каком столбце у меня будет дата изначально. Данные выгружаются в Excel из программы и может получиться разное количество столбцов (так вот криво работают вместе эта программа и Excel). А я пишу макрос, который переписывает нужные данные в соответствующие поля, а остальные затирает. Так вот, мне надо узнать, если в столбце сожержится дата, то переписать ее в столбец с датой. Впринципе можно как-то маску использовать, можете подсказать функцию проверки на сооветствие данных ячейки конкретной маске???
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35098438
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoniaДело в том, что я не знаю в каком столбце у меня будет дата изначально. Данные выгружаются в Excel из программы и может получиться разное количество столбцов (так вот криво работают вместе эта программа и Excel).Чудес на свете не бывает. Если получается разное количество столбцов, значит это от чего-то зависит. Достаточно понять от чего это зависит и сможешь предсказывать сколько будет столбцов....
Но если лениво разбираться, то можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
dim somecell as range, someothercell as range
set somecell = .... ' здесь может быть цикл, или поиск, или как ты там решишь брать ячейки на проверку
set someothercell = ....
' и собственно проверка. Можно ли "нечто" записаное в ячейку и прочитаное как текст понять как дату?
if IsDate(somecell.Text) then
    someothercell.value = CDate(somecell)
end if
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35098872
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНо если лениво разбираться, то можно сделать так:...
А ведь это идея! - про текст...
А почему бы не сделать проще в таком случае:
Код: plaintext
IsDate(CStr(Cells(i,y).Value))... и тд
?
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35098946
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LETMEА почему бы не сделать проще в таком случае:
Код: plaintext
IsDate(CStr(Cells(i,y).Value))... и тд
?Можно и так. Хотя Cells(i, y).Text писать меньше, а функционально почти без разницы.
Код: plaintext
IsDate(Cells(i,y).Text)... и тд
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35098967
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl...писать меньше, а функционально почти без разницы.
Верно. Не знал про Text.
Просто смутило - зачем там Вы понаписали set-ы в примере...
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35098994
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LETME White Owl...писать меньше, а функционально почти без разницы.
Верно. Не знал про Text.
Просто смутило - зачем там Вы понаписали set-ы в примере...Чтобы напомнить что somecell и someothercell надо бы перед использованием направить на реальные ячейки.
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35099010
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЧтобы напомнить...
Благодарен, все понял.

White Owl,
и немного о предыдущем вопросе - почему, если я в коде в двух строках .. в одной присваиваю ячейке значение Null, а следующей проверяю её на IsNull - она выдаёт Фальш? О_О
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35099018
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LETME White OwlЧтобы напомнить...
Благодарен, все понял.

White Owl,
и немного о предыдущем вопросе - почему, если я в коде в двух строках .. в одной присваиваю ячейке значение Null, а следующей проверяю её на IsNull - она выдаёт Фальш? О_ОПотому что ячейка не может содержать неопределенное значение. Если ты записываешь в ячейку null он автоматически превращается в пустую строку.
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35099022
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl...он автоматически превращается в пустую строку.
Вот сцуко, а!?)
Спасибо, хотя мог понять и раньше.
Но теперь можно точку поставить над всеми вопросами... да, Sonia?
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35102580
Sonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LETME White Owl...он автоматически превращается в пустую строку.
Вот сцуко, а!?)
Спасибо, хотя мог понять и раньше.
Но теперь можно точку поставить над всеми вопросами... да, Sonia?
Да, думаю, что можно :). Спасибо за помощь. Правда я сделала немножко по другому, вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Do
' Сделано для корректного переноса Примечаний, включающих символ ";"
If Worksheets("Лист1").Cells(I, k).Value Like "??.??.*" Then
Range("I" + CStr(I)) = Worksheets("Лист1").Cells(I, k).Value
Else
If Not (Worksheets("Лист1").Cells(I, k).Value = "") Then
Range("H" + CStr(I)) = Range("H" + CStr(I)) + ";" + Worksheets("Лист1").Cells(I, k).Value
End If
'Range("I" + CStr(I)) = Worksheets("Лист1").Cells(k + 1, I).Value
End If


Worksheets("Лист1").Cells(I, k).Value = Empty

k = k +  1 

Loop Until Worksheets("Лист1").Cells(I, k).Value = ""
...
Рейтинг: 0 / 0
Цикл с перебором столбцов
    #35105581
LETME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Охх...
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Цикл с перебором столбцов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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