Страницы: 1
RSS
Расчет НДС
 
В бухгалтерии НДС рассчитывается двумя способами   или на сумму накручиваем (10,18, ...) процентов. Или когда говорят что он внутри высчитывают НДС из конечной суммы. А нельзя ли сделать макрос который в зависимости от того какая сумма известна - прописывал бы нужную формулу для рассчета? Пример в файле. Было бы совсем красиво, если бы макрос до начала работы запросил (один раз только) в каком столбце находяться Сумма без НДС; Размер НДС; НДС; Сумма с НДС. Может это будет полезно не только мне.
 
Так?
 
Или так.
 
Спасибо уважаемый Азам но не совсем то что я хотел при активации листа определяем столбцы этого листа что Сумм с НДС, что размер НДС, что сумма самого НДС, Что сумма без НДС. Потом при активации ямеек столбца С в данном случае пишем одну формулу при активации ячеек столбца F пишем другую.
 
Господа  макросописатели неужели так сложно ..могу упростить если вводим данные в столбец С то формулы в столбец D:F а если число в F то формулы в в C:E.
 
Привет, Михаил. Попробуй.  
Если есть сумма с НДС, то обычно так считаем: сумма с НДС / 1,18 = сумма без НДС.
 
{quote}{login=nilem}{date=15.08.2011 07:37}{thema=}{post}Привет, Михаил. Попробуй.  
Если есть сумма с НДС, то обычно так считаем: сумма с НДС / 1,18 = сумма без НДС.{/post}{/quote}  
Спасибо Николай, Да можно и так считать ... это почти то что нужно ..только я не очень понял где у тебя привязка к столбцам в макросе... чтоб мне можно было перенести на рабочий файл. И еще одно если не стоит размер НДС (колонка D) при заполнении F  он впадает в циклическую ссылку.. может пусть ставит сам 18 % автоматом?
 
В модуль листа:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
If Target.Count > 1 Then Exit Sub  
If Target.Row < 2 Then Exit Sub 'если строка целевой ячейки меньше 2, то выходим  
Application.EnableEvents = False  
Select Case Target.Column  
   Case 3 'если изменилась ячейка в 3-м столбце (С)  
       Target.Offset(, 1) = 0.18  
       Target.Offset(, 2).FormulaR1C1 = "=ROUND(RC[-2]*RC[-1],2)"
       Target.Offset(, 3).FormulaR1C1 = "=RC[-3]+RC[-1]"
   Case 6 'если изменилась ячейка в 6-м столбце (F)  
       Target.Offset(, -2) = 0.18  
       Target.Offset(, -3).FormulaR1C1 = "=ROUND(RC[3]/(1+RC[1]),2)"
       Target.Offset(, -1).FormulaR1C1 = "=RC[1]-RC[-2]"
End Select  
Application.EnableEvents = True  
End Sub
 
Спасибо теперь понятно как его монтировать куда угодно...
 
{quote}{login=nilem}{date=16.08.2011 11:28}{thema=}{post}В модуль листа:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
If Target.Count > 1 Then Exit Sub  
If Target.Row < 2 Then Exit Sub 'если строка целевой ячейки меньше 2, то выходим  
Application.EnableEvents = False  
Select Case Target.Column  
   Case 3 'если изменилась ячейка в 3-м столбце (С)  
       Target.Offset(, 1) = 0.18  
       Target.Offset(, 2).FormulaR1C1 = "=ROUND(RC[-2]*RC[-1],2)"
       Target.Offset(, 3).FormulaR1C1 = "=RC[-3]+RC[-1]"
   Case 6 'если изменилась ячейка в 6-м столбце (F)  
       Target.Offset(, -2) = 0.18  
       Target.Offset(, -3).FormulaR1C1 = "=ROUND(RC[3]/(1+RC[1]),2)"
       Target.Offset(, -1).FormulaR1C1 = "=RC[1]-RC[-2]"
End Select  
Application.EnableEvents = True  
End Sub{/post}{/quote}  
Николай сам то пробовал? , если 18 % не стоит в D  то циклическая ссылка и потом так красиво столбцы с цифр в буковки моргают....
 
Тогда ставим ограничение.  
 
Вместо этой строки:  
If Target.Row < 2 Then Exit Sub 'если строка целевой ячейки меньше 2, то выходим  
 
Пишем так:  
'если целевя ячейка не принадлежит диапазону C2:C1000,F2:F1000, то выходим  
If Intersect(Target, Range("C2:C1000,F2:F1000")) Is Nothing Then Exit Sub  
 
Ну, бывает :)
 
Работает ..я так понимаю бухгалтерам и экономистам пригодится..правда наверно лучше УДФ написать или надстройку...но это только предложение к любителям
 
Можно с выпадающим списком попробовать:
 
{quote}{login=DV}{date=17.08.2011 02:42}{thema=}{post}Можно с выпадающим списком попробовать:{/post}{/quote}  
Я Вас конечно очень уважаю, но не понял как это работает у меня например не работает...
 
Возможно, делал в 2010-м, там работает.  
Надо пустановить еще 2003-й
Страницы: 1
Читают тему
Наверх