【问题标题】:find which elements of ana array add up to a sum [vba]找出数组的哪些元素加起来是一个总和 [vba]
【发布时间】:2014-06-30 09:39:06
【问题描述】:

我想做什么:我有一个数据列表,我想知道哪些值加起来是一个特定的总和 [即。 1.61],我想知道所有的组合[即。我不管我要加多少数字],应该以某种方式指出答案

我做了什么:我将数据相乘,将其放入三个数组并遍历每个元素;然后检查之前是否出现过解决方案,如果没有,则在单元格中指示组合

Sub po_mojemu()
Dim macierz1(1 To 30)
Dim macierz2(1 To 30)
Dim macierz3(1 To 30)
Dim ostatnia_dane As Long
Dim ostatnia As Long

ostatnia_dane = Range("b" & Rows.Count).End(xlUp).Row

For i = 1 To ostatnia_dane
        macierz1(i) = Cells(i, 2).Value
        macierz2(i) = Cells(i, 2).Value
        macierz3(i) = Cells(i, 2).Value
Next i

For Each element1 In macierz1
  For Each element2 In macierz2
    For Each element3 In macierz3
        If element1 + element2 + element3 = 1.61 Then
            Set c = Range("f:f").Find(What:=element1 & " : " & element2 & " : " & element3)
                If c Is Nothing Then
                    ostatnia = Range("f" & Rows.Count).End(xlUp).Row + 1
                    Cells(ostatnia, 6) = element1 & " : " & element2 & " : " & element3
                End If
        End If
    Next element3
Next element2
Next element1

End Sub

问题是什么:它没有效果,而且只针对特定情况[即。我知道会有 30 行数据,我需要 3 个数字来构成总和]

我将不胜感激任何可以使此代码更灵活的帮助

【问题讨论】:

  • 和另一个问题:它不应该看到 elemen1&element2&element3 和 elemen3&element2&element1 [等等] 之间的区别,但它确实

标签: arrays excel vba


【解决方案1】:

所以我会回答我自己的问题,虽然不完全,但总比没有好[也许有人会觉得它有用]

Sub ostateczna(suma As Double)
Dim macierz()
Dim ostatnia_dane As Double
Dim ostatnia As Double

ostatnia_dane = Range("b" & Rows.Count).End(xlUp).Row

ReDim macierz(1 To ostatnia_dane)

For i = 1 To ostatnia_dane
    macierz(i) = Cells(i, 2).Value
Next i

i = 0

For i = 1 To ostatnia_dane
For j = 1 To ostatnia_dane
    For k = 1 To ostatnia_dane
        If (i + j + k) <= ostatnia_dane Then
            If macierz(i) + macierz(i + k) + macierz(i + k + j) = suma Then
                ostatnia = Range("f" & Rows.Count).End(xlUp).Row + 1
                Cells(ostatnia, 6) = macierz(i) & " : " & macierz(i + k) & " : " &  macierz(i + k + j)
            End If
        End If
    Next k
Next j
Next i

我认为它更有效,我摆脱了一个静态值,但仍然不知道如何解决我想加起来的固定数量的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多