Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2011, 14:06   #11
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Вы просто недопонимаете логику работы формул.
Обычно формула пересчитывается всякий раз, когда изменяется ее аргумент. Если аргументом является та же ячейка, где содержится формула, получается бесконечный цикл, или циклическая ссылка: формула помещает результат вычисления в ячейку - ячейка изменяется - формула снова вычисляет результат и помещает в ячейку - ячейка изменяется и т.д.
Попробуйте ввести в А1 формулу =A1/2 - что получается?

IgorGO упомянул итеративные вычисления. Это специфический метод вычислений с использованием циклических ссылок, иногда очень эффективный. Но в данном случае это явно не нужно.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 19.09.2011, 14:15   #12
Обыватель
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 98
По умолчанию

Про циклические ссылки я прекрасно понимаю. Идея состоит в том, чтобы сформировать формулу в той же ячейке, предварительно поместив (или скопировав) ее изначальное значение в буфер обмена, поле временной формы (или др.). Это очень практично, поскольку далеко не всегда удобно использовать соседние ячейки.
Обыватель вне форума Ответить с цитированием
Старый 19.09.2011, 14:16   #13
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в буфере обмена на момент выполнения строки
Selection.Formula = "=" & x & "/1.18"
должно быть какое-то числовое значение.
проверок на ошибки нет, вот и вылетает по несоответсвию типов.

вообще-то, пока никто, кроме Вас, не знает что происходит на листе и что должно происходить (отсутсвует понимание логики процесса), соответсвенно, такие советы Вы и получаете.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.09.2011, 14:17   #14
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Если Вы хотите уменьшить значения в выделенном диапазоне "на месте", это можно сделать так:
Код:
selection.value=evaluate(selection.address & "/1.18")
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 19.09.2011, 14:18   #15
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Selection.Formula = "=" & selection.value & "/1.18"
без всяких буферов обмена.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.09.2011, 14:25   #16
Обыватель
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 98
По умолчанию

Я делаю это несколько проще Selection = Selection / 1.18

Пример прикрепил
Вложения
Тип файла: rar Пример.rar (12.7 Кб, 7 просмотров)
Обыватель вне форума Ответить с цитированием
Старый 19.09.2011, 14:28   #17
Обыватель
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 98
По умолчанию

selection.value

Вот в чем моя ошибка =) тип данных не указал. Спасибо!
Обыватель вне форума Ответить с цитированием
Старый 19.09.2011, 14:35   #18
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

так:
Selection.Formula = "=" & selection.value & "/1.18"
в ячейке Вы увидите результат, а в строке формул еще и исходное значение

а так:
Selection = selection.value/1.18
только значение в ячейке (зато нет доп.вычислений, все уже посчитано)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 20.09.2011, 10:17   #19
Обыватель
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 98
По умолчанию

Вся соль как раз в том, чтобы можно было посмотреть изначальное значение =)

Раньше использовал комбинацию макросов:

Sub Zapomnit()
With ActiveCell: .ClearComments: .AddComment .Text: End With
End Sub

и

Sub vichetNDS()
Selection = Selection/1.18
End Sub
Обыватель вне форума Ответить с цитированием
Старый 11.10.2011, 16:44   #20
romahjvf
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 18
По умолчанию

Эдраствуйте всем, помогите пожалуйста, что я делаю неправильно
вот код
mas.Range("Cells(v, h):Cells(v, h)").Value = "=" & X1 & "*" & X2 & ""
romahjvf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
время выполнения кода Pein95 Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2011 23:00
Вставка формулы evdss Microsoft Office Excel 3 25.02.2011 03:38
Форма для выполнения кода segail Microsoft Office Excel 3 16.03.2010 13:28
вставка формулы в ячейку (vba) pride Microsoft Office Excel 5 13.07.2009 09:26
вставка формулы utwer Microsoft Office Excel 18 27.01.2009 23:48