Guest User

Untitled

a guest
May 7th, 2013
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Option Explicit
  2.  
  3. Type Parts_coordinate
  4.     Row_Start As Integer
  5.     Row_End As Integer
  6.     Column_Start As Integer
  7.     Column_End As Integer
  8. End Type
  9.  
  10.  
  11. Sub grow_control()
  12.  
  13. Dim i, j, k, p As Integer 'Переменные, используемые в циклах, соответствующие обозначениям модели МОБ
  14. Dim Parts_coordinate(1 To 3) As Parts_coordinate 'Массив, содержащий координаты каждого из разделов
  15. Dim x As Variant '1ый раздел модели МОБ, где x(i,j) - сколько продуктов i-й отрасли надо затратить, чтобы обеспечить пр-во j-й отрасли
  16. Dim y As Variant '2ой раздел модели МОБ, где y(i,k) - сколько продукции i-й отрасли надо затратить, чтобы удовлетворить потребности в k-ом направлении
  17. Dim z As Variant '3ий раздел модели МОБ, где z(p,j) - первичное распледеление доходов от продаж по различным отраслям
  18. Dim Resource_Names, Process_Names, Consumers_Names As Variant 'Переменные, используемые для записи необходимых названий отраслей, потребителей и пр.
  19. Dim gdp_expenses As Double 'ВВП, рассчитанный по расходам на конечное потребление
  20. Dim gdp_income As Double 'ВВП, рассчитанный по доходам полученным от продаж продукции и ресурсов
  21. Dim gdp_3rd_method As Double 'ВВП по методу: ВВП=совокупные затраты покупателей на покупку продуктов - промежуточное потребление + импорт
  22. Dim all_consumers_expenses As Double 'Cовокупные затраты покупателей на покупку продуктов (Итого использовано в ценах покупателей)
  23. Dim intermediate_consumption_expenses As Double 'Расходы на промежуточное потребление
  24. Dim import As Double 'Совокупный импорт
  25. Dim production_expenses_matrix() As Double 'Матрица коэффициентов производственных затрат
  26. Dim production_final_consumption() As Variant 'Конечное потребление продукции отраслей
  27. Dim base() As Double 'База
  28. Dim net_income() As Double 'Чистые доходы
  29. Dim total_final_consumption() As Double 'Всего конечное потребление
  30. Dim final_consumption_matrix() As Variant 'Матрица коэффициентов затрат на конечное потребление
  31.  
  32. ThisWorkbook.Sheets("рост").Activate
  33.  
  34. 'Сбор координат разделов
  35. For i = 1 To 3
  36.     With Parts_coordinate(i)
  37.         .Row_Start = Cells(1 + i, 4)
  38.         .Row_End = Cells(1 + i, 5)
  39.         .Column_Start = Cells(1 + i, 6)
  40.         .Column_End = Cells(1 + i, 7)
  41.     End With
  42. Next i
  43. 'Сбор данных из соответствующих разделов
  44.    'Сбор численной информации
  45.    Range(Cells(Parts_coordinate(1).Row_Start, Parts_coordinate(1).Column_Start), _
  46.     Cells(Parts_coordinate(1).Row_End, Parts_coordinate(1).Column_End)).Select
  47.     x = Selection.Value 'Ubound(x,1) != Ubound(x,2)
  48.    
  49.     Range(Cells(Parts_coordinate(2).Row_Start, Parts_coordinate(2).Column_Start), _
  50.     Cells(Parts_coordinate(2).Row_End, Parts_coordinate(2).Column_End)).Select
  51.     y = Selection.Value
  52.    
  53.     Range(Cells(Parts_coordinate(3).Row_Start, Parts_coordinate(3).Column_Start), _
  54.     Cells(Parts_coordinate(3).Row_End, Parts_coordinate(3).Column_End)).Select
  55.     z = Selection.Value
  56.     'Сбор названий
  57.    Range(Cells(Parts_coordinate(1).Row_Start - 2, Parts_coordinate(1).Column_Start), _
  58.     Cells(Parts_coordinate(1).Row_Start - 1, Parts_coordinate(1).Column_End)).Select
  59.     Process_Names = Selection.Value
  60.    
  61.     Range(Cells(Parts_coordinate(1).Row_Start, Parts_coordinate(1).Column_Start - 1), _
  62.     Cells(Parts_coordinate(1).Row_End, Parts_coordinate(1).Column_Start - 2)).Select
  63.     Resource_Names = Selection.Value
  64.     Resource_Names(UBound(Resource_Names, 1), 1) = "Денежные затраты"
  65.    
  66.     Range(Cells(Parts_coordinate(2).Row_Start - 2, Parts_coordinate(2).Column_Start), _
  67.     Cells(Parts_coordinate(2).Row_Start - 1, Parts_coordinate(2).Column_End)).Select
  68.     Consumers_Names = Selection.Value
  69.  
  70. 'Расчет ВВП тремя способами
  71.    'ВВП по расходам
  72.    For i = 1 To UBound(y, 1)
  73.         For k = 1 To UBound(y, 2): gdp_expenses = gdp_expenses + y(i, k): Next
  74.     Next
  75.     'ВВП по доходам
  76.    For p = 1 To UBound(z, 1)
  77.         For j = 1 To UBound(z, 2): gdp_income = gdp_income + z(p, j): Next
  78.     Next
  79. '?? 'ВВП по методу: ВВП=совокупные затраты покупателей на покупку продуктов - промежуточное потребление + импорт
  80.    ''Cовокупные затраты покупателей на покупку продуктов (Итого использовано в ценах покупателей)
  81.    For j = 1 To UBound(x, 2): all_consumers_expenses = all_consumers_expenses + x(UBound(x, 1), j): Next
  82.     For p = 1 To UBound(z, 2): all_consumers_expenses = all_consumers_expenses + z(1, p): Next  'чистые налоги на продукты
  83.    ''Расходы на промежуточное потребление
  84.    For j = 1 To UBound(x, 2)
  85.         For i = 1 To UBound(x, 1) - 1: intermediate_consumption_expenses = intermediate_consumption_expenses + x(i, j): Next
  86.     Next
  87.     ''Совокупный импорт
  88.    For i = 1 To UBound(y, 1): import = import + y(i, UBound(y, 2)): Next
  89.    
  90.     gdp_3rd_method = all_consumers_expenses - intermediate_consumption_expenses + import
  91.  
  92. 'Расчет всех матриц затрат и потребления (Таб.2-Таб.4)
  93.    ReDim production_expenses_matrix(1 To UBound(x, 1), 1 To UBound(x, 1))
  94.     ReDim base(1 To 1, 1 To UBound(x, 1)) 'Костыль в размерности, но лень переделывать print_data_massive
  95.    ReDim net_income(1 To UBound(z, 2))
  96.     ReDim total_final_consumption(1 To UBound(x, 1))
  97.     ReDim final_consumption_matrix(1 To UBound(x, 1), 1 To UBound(y, 2) + 1)
  98.     ReDim production_final_consumption(1 To UBound(x, 1) + 2, 1 To 4)
  99.     'Расчет чистого дохода
  100.    For j = 1 To UBound(x, 2)
  101.         For p = 1 To UBound(z, 1): net_income(j) = net_income(j) + z(p, j): Next
  102.     Next
  103.     'Расчет матрицы коэффициентов затрат на конечное потребление
  104.    For k = 1 To UBound(y, 2)
  105.         For i = 1 To UBound(y, 1)
  106.             'Матрица коэффициентов затрат на конечное потребление по всем отраслям
  107.            final_consumption_matrix(i, k) = y(i, k) / gdp_expenses
  108.             'Вектор коэффициентов затрат на конечное потребление по "всего конечное потребление"
  109.            final_consumption_matrix(i, UBound(y, 2) + 1) = final_consumption_matrix(i, UBound(y, 2) + 1) + final_consumption_matrix(i, k)
  110.         Next i
  111.     Next k
  112.     'Расчет базы
  113.    base(1, UBound(x, 1)) = 1
  114.     For i = 1 To UBound(x, 1) - 1: base(1, i) = x(UBound(x, 1), i) / gdp_expenses: Next
  115.     'Расчет матрицы коэффициентов затрат
  116.        'Из модели МОБ следует, что UBound(x,1)=UBound(y,1)!
  117.    For j = 1 To UBound(x, 2)
  118.         For i = 1 To UBound(x, 1):
  119.             'Расчет матрицы по всем отраслям
  120.            production_expenses_matrix(i, j) = x(i, j) / x(UBound(x, 1), j)
  121.             'Расчет вектора "Денежные затраты"
  122.            production_expenses_matrix(UBound(x, 1), j) = net_income(j) / x(UBound(x, 1), j)
  123.             'Расчет вектора "Потребление"
  124.            production_expenses_matrix(i, UBound(x, 1)) = final_consumption_matrix(i, UBound(y, 2) + 1)
  125.         Next i
  126.     Next j
  127.     'Расчет конечного потребления продукции отраслей
  128.    production_final_consumption(1, 2) = "Внутреннее потребление"
  129.     production_final_consumption(1, 3) = "Экспорт"
  130.     production_final_consumption(1, 4) = "Импорт"
  131.     production_final_consumption(UBound(x, 1) + 2, 1) = "Всего"
  132.     For i = 1 To UBound(x, 1)
  133.         'Расчет внутреннего потребления
  134.        For k = 1 To UBound(y, 2) - 2
  135.             production_final_consumption(i + 1, 2) = production_final_consumption(i + 1, 2) + final_consumption_matrix(i, k)
  136.         Next k
  137.         'Присвоение названий отраслей из Resource_Names
  138.        production_final_consumption(i + 1, 1) = Resource_Names(i, 1)
  139.         'Копирование данных об экспорте из final_consumption_matrix
  140.        production_final_consumption(i + 1, 3) = final_consumption_matrix(i, UBound(y, 2) - 1)
  141.         'Копирование данных об импорте из final_consumption_matrix
  142.        production_final_consumption(i + 1, 4) = final_consumption_matrix(i, UBound(y, 2))
  143.         'Расчет строки "Всего"
  144.        production_final_consumption(UBound(x, 1) + 2, 2) = production_final_consumption(UBound(x, 1) + 2, 2) _
  145.         + production_final_consumption(i + 1, 2)
  146.         production_final_consumption(UBound(x, 1) + 2, 3) = production_final_consumption(UBound(x, 1) + 2, 3) _
  147.         + production_final_consumption(i + 1, 3)
  148.         production_final_consumption(UBound(x, 1) + 2, 4) = production_final_consumption(UBound(x, 1) + 2, 4) _
  149.         + production_final_consumption(i + 1, 4)
  150.     Next i
  151.  
  152. 'Вывод полученных расчетов на лист "Нейман"
  153. ThisWorkbook.Sheets("Нейман2").Activate
  154. Cells.Clear
  155.     'Вывод "Таб.1"
  156.    Cells(3, 3) = "Таб.1"
  157.     Cells(3, 3).Select: Cell_Color
  158.     Cells(3, 4) = "Число отраслей"
  159.     Cells(3, 5) = "Число потребителей"
  160.     Cells(4, 4) = UBound(x, 1) - 1
  161.     Cells(4, 5) = 1
  162.     Cells(2, 8) = "Расходы на потребление ВВП1 =": Cells(2, 11) = gdp_expenses
  163.     Cells(3, 8) = "Доходы населения ВВП2= ": Cells(3, 11) = gdp_income
  164.     Cells(4, 8) = "ВВП3=": Cells(4, 11) = gdp_3rd_method
  165.     Cells(5, 8) = "Итого использовано в ценах покупателей":
  166.     Cells(6, 8) = all_consumers_expenses
  167.     Cells(5, 9) = "Производственное потребление"
  168.     Cells(6, 9) = intermediate_consumption_expenses
  169.     Cells(5, 10) = "Импорт"
  170.     Cells(6, 10) = import
  171.     'Вывод "База"
  172.    Cells(9, 2) = "База"
  173.     Cells(9, 2).Select: Cell_Color
  174.     Call print_data_massive(9, 3, base): Number_Format_Three_decimal_places
  175.     'Вывод "Таб.2"
  176.    Cells(11, 2) = "Таб.2"
  177.     Cells(11, 2).Select: Cell_Color
  178.     Call print_data_massive(10, 3, Process_Names)
  179.     Cells(10, 3 + UBound(Process_Names, 2)) = "Потребление"
  180.     Cells(11, 3 + UBound(Process_Names, 2)) = UBound(x, 1)
  181.     Call print_data_massive(12, 1, Resource_Names)
  182.     Call print_data_massive(12, 3, production_expenses_matrix):  Number_Format_Three_decimal_places
  183.     'Вывод "Таб.3"
  184.    Cells(11, 30) = "Таб.3"
  185.     Cells(11, 30).Select: Cell_Color
  186.     Call print_data_massive(12, 31, final_consumption_matrix): Number_Format_Three_decimal_places
  187.     Cells(10, 30 + UBound(final_consumption_matrix, 2)) = "Всего конечное потребление"
  188.     Call print_data_massive(12, 29, Resource_Names)
  189.     Call print_data_massive(10, 31, Consumers_Names)
  190.     'Вывод "Таб.4"
  191.    Cells(10, 45) = "Табл. 4  Конечное потребление продукции отраслей  (доли ВВП)"
  192.     Cells(10, 45).Select: Cell_Color
  193.     Call print_data_massive(11, 45, production_final_consumption): Number_Format_Four_decimal_places
  194. End Sub
  195. Sub print_data_massive(row As Integer, column As Integer, print_massive As Variant)
  196. 'Функция для вывода массива данных на лист
  197. '(row,column) - начальные координаты (левый верхний угол) массива
  198. 'print_massive - массив, которые необходимо вывести на лист
  199. Range(Cells(row, column), Cells(row + UBound(print_massive, 1) - LBound(print_massive, 1), _
  200. column + UBound(print_massive, 2) - LBound(print_massive, 1))).Select
  201. Selection.Value = print_massive
  202. End Sub
  203. Sub Number_Format_Three_decimal_places()
  204.     Selection.NumberFormat = "0.000"
  205.     ActiveWindow.LargeScroll Down:=-2
  206. End Sub
  207. Sub Number_Format_Four_decimal_places()
  208.     Selection.NumberFormat = "0.0000"
  209.     ActiveWindow.LargeScroll Down:=-2
  210. End Sub
  211.  
  212. Sub Cell_Color()
  213.     With Selection.Interior
  214.         .ColorIndex = 8
  215.     End With
  216. End Sub
Advertisement
Add Comment
Please, Sign In to add comment