从连续数据数组?

时间:2018-11-20 04:29:15

标签: excel vba excel-formula

我有一个非常棘手的问题,我不能缠住我的头..希望你能帮助我!

比如说我的数据在A1:G1中:

A1   B1   C1   D1   E1   F1 G1

X    X    0    X    X    X   0  
or
Y    X    X    X    X    Z   X  

我需要解决的是如何根据X,BUT从此数据中获取数组,但如果像示例1一样,开头有2倍X且彼此相邻3倍,那么数组应该出来像{2; 2; 0; 3; 3; 3; 0}这样,所以我希望数组的长度为7,并且数组应显示x为数字,彼此相邻。

示例2应该像{0; 4; 4; 4; 4; 0; 1}

那样出现

如果您能弄清楚这一点,将对我有很大帮助!

编辑:

试图更好地展现我的意思。

如果数据是:

    A   B   C  
1   X   X
2       X   X
3   X        

它应该显示为

    A   B   C
1:  2   4   0 
2:  0   4   2
3:  1   0   0

或数组{2 \ 4 \ 0; 0 \ 4 \ 2; 1 \ 0 \ 0}

在B1和B2上应该有4,因为公式应该计算水平连续性,也应该计算垂直连续性。我尝试使用usmanhaqs公式,但无法对其进行修改,因此计数会在每一行重置。 表格的实际大小是7个单元格的7倍。

我将使用sumproduct将这个数组与另一个数组(记分板也是7乘7个单元,每个单元上都有数字1、2或3)一起使用,它将给出该玩家的得分。

感谢您在vba上帮助新手学习者的努力:)

2 个答案:

答案 0 :(得分:1)

对于公式解决方案,在目前只有X和零(示例1)的特殊情况下,我只能提出一个:

curl -X GET "http://admin-app.prod.order-services.cp.glb.prod.walmart.com/order-services-admin/plutus-admin/published-transactions/count?fromDate=$from_date&toDate=$to_date"

使用 Ctrl Shift Enter

输入为数组公式

我将其包装在一个SUM函数中,以演示它生成了一个数组,该数组可以传递给另一个函数(结果:13),也可以在多个单元格之间进行数组输入:

enter image description here

答案 1 :(得分:0)

您可以测试此代码

Function get_array(r As Range, match_chr As String)

    Dim check_val
    Dim array_value

    array_value = "{"

    For i = 1 To r.Count

    check_value = r.Item(i)

        If (check_value = match_chr) Then
            j = i + 1
            Do While (j <= r.Count) And (check_value = r.Item(j))

                j = j + 1
            Loop

            array_value = array_value & WorksheetFunction.Rept(j - i & ", ", j - i)
            i = j - 1
        Else
            array_value = array_value & "0, "
        End If

    Next

    array_value = Left(array_value, Len(array_value) - 2) & "}"
    get_array = array_value


End Function

您可以按以下方式使用它

enter image description here

编辑

在另一个函数下查找以返回可以在公式中使用的值的数组

Function get_number_array(r As Range, match_chr As String)

    Dim check_val
    Dim array_value
    Dim number_array(1 To 50) As Long

    For i = 1 To r.Count

    check_value = r.Item(i)

        If (check_value = match_chr) Then
            j = i + 1
            Do While (j <= r.Count) And (check_value = r.Item(j))

                j = j + 1
            Loop

            For k = 1 To j - i
                number_array(i + k - 1) = j - i
            Next k

            i = j - 1
        Else
            number_array(i) = 0
        End If

    Next

    get_number_array = number_array


End Function

您必须使用与上一个相同的名称,但是它将返回excel数组。