Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Помогите плиз редактировать макрос! Добавлено: 27.04.10 09:37  

Автор вопроса:  tropicana
Добрый день! Может у кого есть время и желание. Есть задача и макрос, в задаче 3 смены, в макросе 2 смены. Надо исправить или может написать по новой. Спасибо заранее всем кто сможет помочь. Мой адрес sveta-ya.82@bk.ru.
Задание.
На склад из цеха в течение 3-х смен поступают готовые изделия 7-ми наименований, а затем отгружаются заказчиками.
Написать программу на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит на экран:
исходные данные в виде таблицы, где перечислены наименования изделий, поступивших или отгруженных в течение каждой смены;
количество изделий, поступивших в течение каждой смены;
стоимость всех отгруженных изделий в каждой смене;
стоимость всех оставшихся изделий к окончанию 2-ей смены;
наименование изделия наименьшего спроса.
Макрос.
Sub Расчитать()
'Сначала объявляем переменные, используемые в программе

'стоимость отгрузки изделий 1ой и 2ой смены
Dim cena(7, 2) As Double
'количество принятых изделий каждого вида
Dim kollp(7, 2) As Integer
'количество отгруженных изделий каждого вида
Dim kollo(7, 2) As Integer
'стоимость оставшихся изделий после смены
Dim zar(7, 2) As Double
'количество оставшихся изделий после 1 и 2 смены
Dim koll_p(7, 2) As Integer
'стоимость отгруженных изделий
Dim koll_o(7, 2) As Double
'количество оставшихся изделий к концу 2 смены
Dim koll_ost(7) As Integer
'стоимость всех отгруженных изделий 1 и 2 смены
Dim koll_all(7, 2) As Double
'стоимость всех оставшихся изделий к окончанию 2 смены
Dim zar_all(7, 2) As Double
'наименование изделия меньшего спроса
Dim izd As Integer
'счетчик циклов
Dim i As Integer, j As Integer

'Далее всем переменным присваивается нулевое значение
For i = 1 To 7
For j = 1 To 2
cena(i, j) = 0
Next j
Next i

For i = 1 To 7
For j = 1 To 2
kollp(i, j) = 0
Next j
Next i

For i = 1 To 7
For j = 1 To 2
kollo(i, j) = 0
Next j
Next i

'В этом фрагменте кода происходит считывание начальных данных с листа "Нач_д"
Sheets("Нач_д").Select
'вводим цену
For i = 1 To 7
For j = 1 To 2
cena(i, j) = Cells(6 + i, 7)
Next j
Next i
' забиваем количество поступившего
For j = 1 To 2
For i = 1 To 7
kollp(i, j) = Cells(6 + i, 1 + j + j)
Next i
Next j
' забиваем количество отгруженного
For j = 1 To 2
For i = 1 To 7
kollo(i, j) = Cells(6 + i, 2 + j + j)
Next i
Next j

'Далее на листе "Результат" в ячейку с определенным номером вводится ее название
Sheets("Результат").Select
' 1 смена
Sheets("Результат").Cells(2, 4) = "1 смена"
Sheets("Результат").Cells(4, 2) = "Наименование изделия"
Sheets("Результат").Cells(6, 2) = "болт"
Sheets("Результат").Cells(7, 2) = "гайка"
Sheets("Результат").Cells(8, 2) = "шуруп"
Sheets("Результат").Cells(9, 2) = "отвертка"
Sheets("Результат").Cells(10, 2) = "молоток"
Sheets("Результат").Cells(11, 2) = "гвоздь"
Sheets("Результат").Cells(12, 2) = "шайба"
Sheets("Результат").Cells(4, 3) = "Изделий поступило"
Sheets("Результат").Cells(4, 4) = "Изделий отгружено"
Sheets("Результат").Cells(4, 5) = "Стоимость изделий"
Sheets("Результат").Cells(4, 6) = "Стоимость отгруженных изделий"
Sheets("Результат").Cells(4, 7) = "Осталось изделий после 1ой смены"
Sheets("Результат").Cells(4, 8) = "Стоимость оставшихся изделий"
' 2 смена
Sheets("Результат").Cells(15, 4) = "2 смена"
Sheets("Результат").Cells(17, 2) = "Наименование изделий"
Sheets("Результат").Cells(19, 2) = "болт"
Sheets("Результат").Cells(20, 2) = "гайка"
Sheets("Результат").Cells(21, 2) = "шуруп"
Sheets("Результат").Cells(22, 2) = "отвертка"
Sheets("Результат").Cells(23, 2) = "молоток"
Sheets("Результат").Cells(24, 2) = "гвоздь"
Sheets("Результат").Cells(25, 2) = "шайба"
Sheets("Результат").Cells(17, 3) = "Изделий поступило"
Sheets("Результат").Cells(17, 4) = "Изделий отгружено"
Sheets("Результат").Cells(17, 5) = "Стоимость изделий"
Sheets("Результат").Cells(17, 6) = "Стоимость отгруженных изделий"
Sheets("Результат").Cells(17, 7) = "Осталось изделий после 2х смен"
Sheets("Результат").Cells(17, 8) = "Стоимость оставшихся изделий"
Sheets("Результат").Cells(28, 2) = "Стоимость всех отгруженных изделий 1 смены"
Sheets("Результат").Cells(29, 2) = "Стоимость всех отгруженных изделий 2 смены"
Sheets("Результат").Cells(30, 2) = "Стоимость всех оставшихся изделий к окончанию 2 смены"
Sheets("Результат").Cells(31, 2) = "Изделие пользующиеся наименьшим спросом"

'В этом фрагменте происходит подсчет и вывод на рабочий лист всех необходимых данных
For i = 1 To 7
For j = 1 To 2
'Вывод на лист "Результат" количества погруженных и отгруженных изделий, а так же их цены
Sheets("результат").Cells(5 + i + (j - 1) * 13, 5) = cena(i, j)
Sheets("результат").Cells(5 + i + (j - 1) * 13, 3) = kollp(i, j)
Sheets("результат").Cells(5 + i + (j - 1) * 13, 4) = kollo(i, j)
'Подсчет и вывод на рабочий лист стоимости отгруженных изделий
koll_o(i, j) = cena(i, j) * kollo(i, j)
Sheets("результат").Cells(5 + i + (j - 1) * 13, 6) = koll_o(i, j)
'Подсчет и вывод на рабочий лист количества оставшихся изделий после 1 смены и к концу 2 смены
koll_p(i, 1) = kollp(i, 1) - kollo(i, 1)
Sheets("результат").Cells(5 + i + (1 - 1) * 13, 7) = koll_p(i, 1)
koll_p(i, 2) = kollp(i, 2) - kollo(i, 2) + koll_p(i, 1)
Sheets("результат").Cells(5 + i + (2 - 1) * 13, 7) = koll_p(i, 2)
'Находим стоимость оставшихся изделий после 1 и 2 смены
zar(i, j) = koll_p(i, j) * cena(i, j)
Sheets("результат").Cells(5 + i + (j - 1) * 13, 8) = zar(i, j)
'Находим стоимость всех отгруженных изделий 1 и 2 смены
koll_all(7, j) = koll_all(7, j) + cena(i, j) * kollo(i, j)
Sheets("результат").Cells(27 + j, 6) = koll_all(7, j)
'Высчитываем общую стоимость оставшихся изделий к концу 2 смены
zar_all(7, j) = zar_all(7, j) + koll_p(i, j) * cena(i, j)
Sheets("результат").Cells(30, 6) = zar_all(7, j)
Next j
Next i

'Здесь описан алгоритм сравнения изделий по наименьшему спросу
izd = kollo(1, 1)
For i = 1 To 7
For j = 1 To 2
If kollo(i, j) < izd Then
izd = kollo(i, j)
Sheets("Результат").Cells(31, 6) = Sheets("Результат").Cells(5 + i + (j - 1) * 13, 2)
End If
Next j
Next i
End Sub

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #1 Добавлено: 27.04.10 14:57
  1. Sub Расчитать3()
  2. 'Сначала объявляем переменные, используемые в программе
  3.  
  4. 'стоимость отгрузки изделий 1ой и 2ой смены
  5. Dim cena(7, 3) As Double
  6. 'количество принятых изделий каждого вида
  7. Dim kollp(7, 3) As Integer
  8. 'количество отгруженных изделий каждого вида
  9. Dim kollo(7, 3) As Integer
  10. 'стоимость оставшихся изделий после смены
  11. Dim zar(7, 3) As Double
  12. 'количество оставшихся изделий после 1 и 2 смены
  13. Dim koll_p(7, 3) As Integer
  14. 'стоимость отгруженных изделий
  15. Dim koll_o(7, 3) As Double
  16. 'количество оставшихся изделий к концу 2 смены
  17. Dim koll_ost(7) As Integer
  18. 'стоимость всех отгруженных изделий 1 и 2 смены
  19. Dim koll_all(7, 3) As Double
  20. 'стоимость всех оставшихся изделий к окончанию 2 смены
  21. Dim zar_all(7, 3) As Double
  22. 'наименование изделия меньшего спроса
  23. Dim izd As Integer
  24. 'счетчик циклов
  25. Dim i As Integer, j As Integer
  26.  
  27. Dim MySheetResultName As String
  28.  
  29. MySheetResultName = "Результат"
  30.  
  31. 'Далее всем переменным присваивается нулевое значение
  32. For i = 1 To 7
  33.   For j = 1 To 3
  34.     cena(i, j) = 0
  35.     kollp(i, j) = 0
  36.     kollo(i, j) = 0
  37.   Next j
  38. Next i
  39.  
  40. 'В этом фрагменте кода происходит считывание начальных данных с листа "Нач_д"
  41. Sheets("Нач_д").Select
  42. For i = 1 To 7
  43.   For j = 1 To 3
  44.     'вводим цену
  45.     cena(i, j) = Cells(6 + i, 9)
  46.     'забиваем количество поступившего
  47.     kollp(i, j) = Cells(6 + i, 1 + j + j)
  48.     'забиваем количество отгруженного
  49.     kollo(i, j) = Cells(6 + i, 2 + j + j)
  50.   Next j
  51. Next i
  52.  
  53. 'Далее на листе MySheetResultName в ячейку с определенным номером вводится ее название
  54.  
  55. Sheets(MySheetResultName).Select
  56. For j = 0 To 13 * 2 Step 13
  57.   'шапка
  58.   Sheets(MySheetResultName).Cells(2 + j, 4) = j / 13 + 1 & " смена"
  59.   Sheets(MySheetResultName).Cells(4 + j, 2) = "Наименование изделия"
  60.   Sheets(MySheetResultName).Cells(6 + j, 2) = "болт"
  61.   Sheets(MySheetResultName).Cells(7 + j, 2) = "гайка"
  62.   Sheets(MySheetResultName).Cells(8 + j, 2) = "шуруп"
  63.   Sheets(MySheetResultName).Cells(9 + j, 2) = "отвертка"
  64.   Sheets(MySheetResultName).Cells(10 + j, 2) = "молоток"
  65.   Sheets(MySheetResultName).Cells(11 + j, 2) = "гвоздь"
  66.   Sheets(MySheetResultName).Cells(12 + j, 2) = "шайба"
  67.   Sheets(MySheetResultName).Cells(4 + j, 3) = "Изделий поступило"
  68.   Sheets(MySheetResultName).Cells(4 + j, 4) = "Изделий отгружено"
  69.   Sheets(MySheetResultName).Cells(4 + j, 5) = "Стоимость изделий"
  70.   Sheets(MySheetResultName).Cells(4 + j, 6) = "Стоимость отгруженных изделий"
  71.   Sheets(MySheetResultName).Cells(4 + j, 7) = "Осталось изделий после " & j / 13 + 1 & " смены"
  72.   Sheets(MySheetResultName).Cells(4 + j, 8) = "Стоимость оставшихся изделий"
  73. Next j
  74.  
  75. 'Итоги
  76. Sheets(MySheetResultName).Cells(41, 2) = "Стоимость всех отгруженных изделий 1 смены"
  77. Sheets(MySheetResultName).Cells(42, 2) = "Стоимость всех отгруженных изделий 2 смены"
  78. Sheets(MySheetResultName).Cells(43, 2) = "Стоимость всех отгруженных изделий 3 смены"
  79. Sheets(MySheetResultName).Cells(44, 2) = "Стоимость всех оставшихся изделий к окончанию 2 смены"
  80. Sheets(MySheetResultName).Cells(45, 2) = "Стоимость всех оставшихся изделий к окончанию 3 смены"
  81. Sheets(MySheetResultName).Cells(46, 2) = "Изделие пользующиеся наименьшим спросом"
  82.  
  83. 'В этом фрагменте происходит подсчет и вывод на рабочий лист всех необходимых данных
  84. For i = 1 To 7
  85.   For j = 1 To 3
  86.     'Вывод на лист MySheetResultName количества погруженных и отгруженных изделий, а так же их цены
  87.     Sheets(MySheetResultName).Cells(5 + i + (j - 1) * 13, 5) = cena(i, j)
  88.     Sheets(MySheetResultName).Cells(5 + i + (j - 1) * 13, 3) = kollp(i, j)
  89.     Sheets(MySheetResultName).Cells(5 + i + (j - 1) * 13, 4) = kollo(i, j)
  90.     'Подсчет и вывод на рабочий лист стоимости отгруженных изделий
  91.     koll_o(i, j) = cena(i, j) * kollo(i, j)
  92.     Sheets(MySheetResultName).Cells(5 + i + (j - 1) * 13, 6) = koll_o(i, j)
  93.     'Подсчет и вывод на рабочий лист количества оставшихся изделий после 1 смены и к концу 2 смены
  94.     koll_p(i, 1) = kollp(i, 1) - kollo(i, 1)
  95.     Sheets(MySheetResultName).Cells(5 + i + (1 - 1) * 13, 7) = koll_p(i, 1)
  96.     koll_p(i, 2) = kollp(i, 2) - kollo(i, 2) + koll_p(i, 1)
  97.     Sheets(MySheetResultName).Cells(5 + i + (2 - 1) * 13, 7) = koll_p(i, 2)
  98.     koll_p(i, 3) = kollp(i, 3) - kollo(i, 3) + koll_p(i, 2)
  99.     Sheets(MySheetResultName).Cells(5 + i + (3 - 1) * 13, 7) = koll_p(i, 3)
  100.     'Находим стоимость оставшихся изделий после 1 и 2 смены
  101.     zar(i, j) = koll_p(i, j) * cena(i, j)
  102.     Sheets(MySheetResultName).Cells(5 + i + (j - 1) * 13, 8) = zar(i, j)
  103.   Next j
  104. Next i
  105.  
  106. izar_all = 41
  107. For i = 6 To 32 Step 13
  108.   'Находим стоимость всех отгруженных изделий 1 смены
  109.   Sheets(MySheetResultName).Cells(izar_all, 6).Formula = "=SUM(F" & i & ":F" & i + 6 & ")"
  110.   izar_all = izar_all + 1
  111. Next i
  112.  
  113. 'Высчитываем общую стоимость оставшихся изделий к концу 2 смены
  114. Sheets(MySheetResultName).Cells(44, 6).Formula = "=SUM(H19:H25)"
  115. 'Высчитываем общую стоимость оставшихся изделий к концу 3 смены
  116. Sheets(MySheetResultName).Cells(45, 6).Formula = "=SUM(H32:H38)"
  117.  
  118. 'Здесь описан алгоритм сравнения изделий по наименьшему спросу
  119. izd = kollo(1, 1)
  120. For i = 1 To 7
  121.   For j = 1 To 3
  122.     If kollo(i, j) < izd Then
  123.       izd = kollo(i, j)
  124.       Sheets(MySheetResultName).Cells(46, 6) = Sheets(MySheetResultName).Cells(5 + i + (j - 1) * 13, 2)
  125.     End If
  126.   Next j
  127. Next i
  128.  
  129. End Sub



Еще можно это сделать формулами самого листа.

Ответить

Номер ответа: 2
Автор ответа:
 tropicana



Вопросов: 1
Ответов: 4
 Профиль | | #2 Добавлено: 27.04.10 16:00
 Jasmin
Спасибо за отклик, видимо изначально неверно сформулировала свой вопрос. Как вы пишите "Еще можно это сделать формулами самого листа" наверно мне именно это и требуется. Примитивно объясняясь - есть лист1 в экселе с данными, нужно написать макрос, который рассчитает и вставит данные на лист2. Дали задание в институте, лекций не читают, макросы незнаю. Выучить программу за 1-2 дня нереально. Сможете помочь?

Ответить

Номер ответа: 3
Автор ответа:
 tropicana



Вопросов: 1
Ответов: 4
 Профиль | | #3 Добавлено: 27.04.10 16:14
 Jasmin
Спасибо Вам большое, всё получилось!!! Очень Вам благодарна. Спасибо!

Ответить

Номер ответа: 4
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #4 Добавлено: 27.04.10 17:00
Пожалуйста. :-) Т. е. уже не нужно объяснять ? :-)
Как вы пишите "Еще можно это сделать формулами самого листа" наверно мне именно это и требуется.

Одно дело подсчитать что-то через макрос и выдать на лист только результат (числа, строки), другое - в макросе написать, чтобы он вставлял нужные формулы на лист, как если бы Вы писали сами, третье - можно самим написать эти формулы в ячейках. Что именно требовалось ?

Ответить

Номер ответа: 5
Автор ответа:
 tropicana



Вопросов: 1
Ответов: 4
 Профиль | | #5 Добавлено: 05.05.10 10:28
Jasmin
Добрый день! С макросом все в порядке :-), теперь преподавателю необходима блок-схема к этому макросу. Очень надеюсь на ваш отзыв. Заранее благодарна.

Ответить

Номер ответа: 6
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #6 Добавлено: 06.05.10 11:09
Насколько подробная схема ?

Ответить

Номер ответа: 7
Автор ответа:
 tropicana



Вопросов: 1
Ответов: 4
 Профиль | | #7 Добавлено: 06.05.10 13:55
у меня есть пример в ворде не могу сюда вставить

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам