расчет с ключами словаря - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь рассчитать процентную разницу в двух столбцах. Я сохранил значения в двух разных словарях и рассчитал процентную разницу. Результат сохраняется в значении = pct_change.

Затем я хочу добавить его в список, чтобы подсчитать, сколько из значений имело процентное увеличение, а сколько - процентное уменьшение. Можно ли создать новый словарь, сохранить pct_change в качестве ключа и добавить ключ в новый словарь? После l oop и подсчета количества ключей в словаре?
Я опубликую свой текущий код ниже. Обратите внимание, что я знаю о многих определенных переменных, которые я не использую.
Я надеюсь, что кто-то может мне помочь

Sub benchmark()

Const NETSCONT_SHT3 = "D"
Const NETSCONT_SHT4 = "I"
Const NETSEXP_SHT4 = "H"


Dim wb As Workbook, wbNew As Workbook
Dim ws1 As Worksheet, ws3 As Worksheet, ws4 As Worksheet
Dim iRow As Long, iLastRow, iTargetRow As Long, iCopyRow As Long, NbCont_SHT3 As Long, AmCont_SHT3 As Double
Dim NbCont_SHT4 As Long, AmCont_SHT4 As Double, NbResults As Integer, AmResult As Double, pct_change As Double
Dim msg As String, i As Integer, j As Integer
Dim count As Long, countWB As Integer
Dim WkSht_Src   As Worksheet
Dim WkBk_Dest   As Workbook
Dim WkSht_Dest  As Worksheet
Dim Rng As Range
Dim r As Long

Set wb = ThisWorkbook
Set ws1 = wb.Sheets("BrokerSelect")
Set ws3 = wb.Sheets("ContributionSplitReport")
Set ws4 = wb.Sheets("ContributionExceptionReport")

Dim dict As Object, dictEXP As Object, sKey As Double, ar As Variant
Dim sEXP As Double, arEXP As Variant

Set dict = CreateObject("Scripting.Dictionary")
Set dictEXP = CreateObject("Scripting.Dictionary")

' pct change in expected and actual cont
iLastRow = ws4.Cells(Rows.count, NETSCONT_SHT4).End(xlUp).Row
For iRow = 18 To iLastRow
    sKey = ws4.Cells(iRow, NETSCONT_SHT4)
    sEXP = ws4.Cells(iRow, NETSEXP_SHT4)
    If sKey <> "0" Then
        pct_change = (sKey - sEXP) / sKey
        MsgBox (pct_Change)
    Else

    End If
Next


End Sub

1 Ответ

1 голос
/ 03 апреля 2020

Для вашего последнего запроса, пожалуйста, замените

MsgBox (pct_Change)

на

 Dim d As Long, dE as Long
    If pct_Change > 0 Then
      dict.Add d, pct_Change: d = d + 1
    ElseIf pct_Change < 0 Then
      dictEXP.Add dE, pct_Change: dE = dE + 1
    End If

  'finally:
  Debug.Print dict.Count, dictEXP.Count, dictEXP.Items(2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...