我有一个非常棘手的问题,我不能缠住我的头..希望你能帮助我!
比如说我的数据在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上帮助新手学习者的努力:)
答案 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),也可以在多个单元格之间进行数组输入:
答案 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
您可以按以下方式使用它
编辑
在另一个函数下查找以返回可以在公式中使用的值的数组
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数组。