Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
ZV
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 117
#1

Непонятки с циклом: не заполняются ячейки

11.12.2011, 21:27. Просмотров 534. Ответов 9
Метки нет (Все метки)

Имеется код


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Sec()
Dim i As Long, pi As Double, x As Double
pi = WorksheetFunction.pi
i = 1
Do While Application.Columns(1).Cells(i).Text <> ""
    
    x = (Cells(i, 1) * pi / 180) / pi
    If Int(x) <> x Then Cells(i, 2) = 1 / Sin((Cells(i, 1) * pi / 180))
    i = i + 1
 
    x = (Cells(i, 1) * pi / 180) / pi
    If Int(x) <> (x+1) Then Cells(i, 4) = 1 / Сos((Cells(i, 1) * pi / 180))
    i = i + 1
 
Loop
End Sub

В первом столбце числа 30, 45, 60, 90, 180.. Это градусы.
После запуска макроса во 2ом и 4ом столбцах должны быть значения. Проблема в том, что что но пишет значения в 1ой ячейке 2ого столбца, а в 1ой 4ого не пишет. Далее во 2ой 2ого не пишет, но пишет во 2ой 4ого.
Если же выводить с помощью макроса только 1 столбец, то значения в каждой строке.
Никаких ошибок компилятор на находит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2011, 21:27
Ответы с готовыми решениями:

почему некоторые ячейки листа с 20 заполняются пустыми значениями?
При выводе данных из массива (массив 3х мерный: 4х60х150х200), примерно с листа...

Перенести абзацы внутри ячейки в соседний столбец с циклом
Добрый день! Имеется excel файл (во вложении). Напишите пожалуйста макрос...

Не заполняются поля карточки сотрудника
Здравствуйте! Помогите, пожалуйста, выяснить причину, почему не срабатывает...

Откорректировать макрос так, чтобы поиск осуществлялся не с ячейки А1, а с ячейки C21
Как в этом макросе прописать, чтобы поиск осуществлялся в столбике &quot;С&quot;, но с...

Как задать значение для ячейки в зависимости от значения другой ячейки
Здравствуйте! Подскажите, как задать значение для ячейки в зависимости от...

9
19vitek
725 / 401 / 95
Регистрация: 19.12.2010
Сообщений: 756
11.12.2011, 22:05 #2
может так?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub Sec()
Dim i As Long, pi As Double, x As Double
pi = WorksheetFunction.pi
i = 1
Do While Application.Columns(1).Cells(i).Text <> ""
Cells(i, 2) = (Cells(i, 1) * pi / 180) / pi
Cells(i, 3) = 1 / Sin((Cells(i, 1) * pi / 180))
Cells(i, 4) = 1 / Cos((Cells(i, 1) * pi / 180))
i = i + 1
Loop
End Sub
желательно знать условие задачи. Зачем Int(x) <> (x+1) ?
1
ZV
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 117
11.12.2011, 22:16  [ТС] #3
Int(x) <> x затем, что значение аргумента косеканса должно быть не равно Пк, а вот Int(x) <> (x+1) наверное надо заменить на Int(x) <> (x+пи/2) так как значение аргумента секанса не должно быть равно пи/2 + Пк (Пк = пи*к)

Добавлено через 2 минуты
19vitek, невероятно, работает,!! Но в чем же существенное отличе?? Не понимаю.

Добавлено через 29 секунд
но условия все равно нужны

Добавлено через 2 минуты
и наверное так :

Visual Basic
1
2
3
4
5
Do While Application.Columns(1).Cells(i).Text <> ""
Cells(i, 2) = (Cells(i, 1) * pi / 180) / pi
Cells(i, 3) = 1 / Sin(Cells(i, 2)
Cells(i, 4) = 1 / Cos(Cells(i, 2))
i = i + 1
а тож смысл в этом Cells(i, 2)..
0
19vitek
725 / 401 / 95
Регистрация: 19.12.2010
Сообщений: 756
11.12.2011, 22:19 #4
точно, функции надо вычислять не от градусов.
1
ZV
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 117
11.12.2011, 22:24  [ТС] #5
однако в таком виде
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Sec()
Dim i As Long, pi As Double, x As Double
pi = WorksheetFunction.pi
i = 1
Do While Application.Columns(1).Cells(i).Text <> ""
Cells(i, 2) = (Cells(i, 1) * pi / 180) / pi
 
If Int(x) <> x Then Cells(i, 3) = 1 / Sin(Cells(i, 2))
If Int(x) <> ((pi / 2) + x) Then Cells(i, 4) = 1 / Cos(Cells(i, 2))
i = i + 1
Loop
End Sub
оно 3ий столбик не рисует вовсе!! В чем дело??
0
19vitek
725 / 401 / 95
Регистрация: 19.12.2010
Сообщений: 756
11.12.2011, 22:26 #6
x это Cells(i, 2)
1
ZV
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 117
11.12.2011, 22:36  [ТС] #7
оу, сорри. x = (Cells(i, 2)). Третий столбец есть. Однако значения не правильные.. От 30 грдусов в первом столбе должно быть 2, а во втором 1,154 (так по таблице значений). Оно же пишет 6,027 и 1,014..

Добавлено через 9 минут
в чем же дело, люди??
0
19vitek
725 / 401 / 95
Регистрация: 19.12.2010
Сообщений: 756
11.12.2011, 22:40 #8
Cells(i, 2) = (Cells(i, 1) * pi / 180) / pi
точно надо делить на pi ?
1
Казанский
14067 / 5790 / 1510
Регистрация: 24.09.2011
Сообщений: 9,080
11.12.2011, 22:44 #9
Хде-то я уже видел этот "Sub Sec": Макрокоманда рисует рядом столбец из sin от значений ячеек первого столбца
0
ZV
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 117
12.12.2011, 01:38  [ТС] #10
19vitek, угол (в радианах) = угол (в градусах) * pi/180. Деиствительно.

Казанский, но вопрос то в другом)) В любом случае тема закрыта.

Добавлено через 2 часа 46 минут
Если кому то будет нужно: Int(x) <> ((pi / 2) + x) писать не надо. Надо писать еще одну переменную и к ней писать условие))
0
12.12.2011, 01:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2011, 01:38

Проверка ячейки на наличие фрагмента замена всего значения ячейки
Добрый день. Подскажите пожалуйста, как можно программно проверить наличие...

Изменения формата ячейки Excel средствами VBA в зависимости от значения другой ячейки
Здравствуйте. Столкнулся с проблемой. Необходимо на листе Excel Залить,...

Как макросом провести фигуру-линию - из центра одной ячейки в центр другой ячейки
Добрый день, господа программисты. Помогите разобраться.  На листе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru