Оптимизация кода при помощи цикла - VBA

Узнай цену своей работы

Формулировка задачи:

Здравствуйте дорогие прогеры есть файл (приложил), в лист 1 справа необходимо проставить курсы из листа курсы за каждый день написал тупой код, можно его как то циклом или как нибудь оптимизировать? буду рад за любую помощь
Листинг программы
  1. Dim usd As String
  2. usd = "USD"
  3. Dim euro As String
  4. euro = "EUR"
  5. Dim kol As Integer
  6. kol = 3000
  7. For i = 1 To kol
  8. Dim val
  9. Data = Sheets("Отчет (лист 1)").Cells(i, 9).Value
  10. val = Sheets("Отчет (лист 1)").Cells(i, 10).Value
  11.  
  12. If Data = "01.07.2016" Then
  13. If val = usd Then
  14. Sheets("Отчет (лист 1)").Cells(i, 18) = Sheets("курсы").Cells(2, 2).Value
  15. End If
  16. If val = euro Then
  17. Sheets("Отчет (лист 1)").Cells(i, 18) = Sheets("курсы").Cells(2, 3).Value
  18. End If
  19. End If
  20. If Data = "02.07.2016" Then
  21. If val = usd Then
  22. Sheets("Отчет (лист 1)").Cells(i, 18) = Sheets("курсы").Cells(3, 2).Value
  23. End If
  24. If val = euro Then
  25. Sheets("Отчет (лист 1)").Cells(i, 18) = Sheets("курсы").Cells(3, 3).Value
  26. End If
  27. End If
  28. If Data = "03.07.2016" Then
  29. If val = usd Then
  30. Sheets("Отчет (лист 1)").Cells(i, 18) = Sheets("курсы").Cells(4, 2).Value
  31. End If
  32. If val = euro Then
  33. Sheets("Отчет (лист 1)").Cells(i, 18) = Sheets("курсы").Cells(4, 3).Value
  34. End If
  35. End If

Решение задачи: «Оптимизация кода при помощи цикла»

textual
Листинг программы
  1. Sub Проставить_курсы_многих_валют()
  2.     Dim i&, j&, A, B, Dic
  3.     A = Worksheets("Курсы").[A1].CurrentRegion.Value
  4.     Set Dic = CreateObject("Scripting.Dictionary"): Dic.CompareMode = 1
  5.     For i = 2 To UBound(A)
  6.         For j = 2 To UBound(A, 2)
  7.             Dic(A(i, 1) & A(1, j)) = A(i, j)
  8.         Next j
  9.     Next i
  10.     With Worksheets(2)
  11.         '.Range("R4:R" & .UsedRange.Rows.Count).ClearContents  'раскомментировать, если надо стереть все старые курсы
  12.        B = Intersect(.UsedRange, .Columns("I:J")).Value
  13.         For i = 4 To UBound(B)
  14.             If Dic.Exists(B(i, 1) & B(i, 2)) Then .Cells(i, 18) = Dic(B(i, 1) & B(i, 2))
  15.         Next i
  16.     End With
  17.     Set Dic = Nothing
  18. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы