Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

Войти
Регистрация
Восстановить пароль
 
ZV
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 116
#1

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

11.12.2011, 21:27. Просмотров 523. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Непонятки с циклом: не заполняются ячейки (VBA):

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

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

Откорректировать макрос так, чтобы поиск осуществлялся не с ячейки А1, а с ячейки C21 - VBA
Как в этом макросе прописать, чтобы поиск осуществлялся в столбике &quot;С&quot;, но с 21-ой строки? Sub asd() Dim c As Range Set c =...

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

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

Изменения формата ячейки Excel средствами VBA в зависимости от значения другой ячейки - VBA
Здравствуйте. Столкнулся с проблемой. Необходимо на листе Excel Залить, предположим, ячейку &quot;C4&quot; Зелёным цветом, при условии, что...

9
19vitek
725 / 401 / 56
Регистрация: 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
Сообщений: 116
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 / 56
Регистрация: 19.12.2010
Сообщений: 756
11.12.2011, 22:19 #4
точно, функции надо вычислять не от градусов.
1
ZV
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 116
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 / 56
Регистрация: 19.12.2010
Сообщений: 756
11.12.2011, 22:26 #6
x это Cells(i, 2)
1
ZV
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 116
11.12.2011, 22:36  [ТС] #7
оу, сорри. x = (Cells(i, 2)). Третий столбец есть. Однако значения не правильные.. От 30 грдусов в первом столбе должно быть 2, а во втором 1,154 (так по таблице значений). Оно же пишет 6,027 и 1,014..

Добавлено через 9 минут
в чем же дело, люди??
0
19vitek
725 / 401 / 56
Регистрация: 19.12.2010
Сообщений: 756
11.12.2011, 22:40 #8
Cells(i, 2) = (Cells(i, 1) * pi / 180) / pi
точно надо делить на pi ?
1
Казанский
13824 / 5587 / 1414
Регистрация: 24.09.2011
Сообщений: 8,767
11.12.2011, 22:44 #9
Хде-то я уже видел этот "Sub Sec": Макрокоманда рисует рядом столбец из sin от значений ячеек первого столбца
0
ZV
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 116
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
Привет! Вот еще темы с ответами:

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

Редактирование ячейки и перенос значения ячейки через форму - VBA
Доброго времени суток люди) Помогите чем сможете, всю голову уже изломали. Сначала хотели кнопку с формой поиск на втором листе сделать по...

Копировать ячейки столбца В, начиная с ячейки В7, с Листа2 на Лист1 до тех пор, пока сумма копируемых значений - VBA
Помогите пожалуйста! Копировать ячейки столбца В, начиная с ячейки В7, с Листа2 на Лист1 до тех пор, пока сумма копируемых значений не...

Добавить текст ячейки в зависимости от цвета ячейки - VBA
Здравствуйте. Я не могу разобраться в написании формулы или макроса. В определенном диапазоне ячеек требуется: в зависимости от цвета...


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

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

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