Я работаю над статистическим кодом / функцией, которая будет возвращать меру вероятности.проблема заключается в проверке, находится ли диапазон в массиве или нет.Однако этот диапазон также может изменяться в соответствии с установленными критериями.
Допустим, у вас есть массив с 25 строками и 2 столбцами.в этом случае A1: B25 первым диапазоном, который вы хотите проверить в этом массиве, является A1: B1 в массиве A1: B25.
с некоторыми включенными критериями, значения этого диапазона могут изменяться.если массив в двух столбцах равен
9 4
4 8
8 1
1 2
2 4
, а диапазон, который вы хотите проверить, равен
9 4
, а критерии - 1 (+ -1), что означает, что мы хотим найтиэтот диапазон между -1 и 1 в массиве.таким образом, первая проверка состоит в том, чтобы увидеть, существует ли {9, 4}, то есть, поскольку там присутствуют две ступени, возвращается 1 найденный, но {9,5} {10,5} {10,4} {9,3} {8,4} {8,5} {10,3} {8,3}, не существует в массиве и ничего не возвращает.поэтому найдено только 1 значение.
Извинения, если я не объясняю это должным образом.надеюсь, поможет изображение ниже.щелкните это: Пример Excel
Я могу найти значения {8, 3} {9, 4} {10, 5} в массиве, следовательно, с этими критериями, {-1,-1} {0, 0} {1, 1} в массиве (два столбца), но не {-1, 0} {0, -1} {1, -1} {-1, 1} {-1, -1}.
Что подводит меня к моей проблеме.
приведенный ниже код находит каждый диапазон в массиве.но только сколько раз он видит себя в массиве.поэтому нет перестановок в пределах допуска + -r
Sub get_matches()
'note this isnt dynamic and only works for columns of 2
Dim arr() As Variant, trr As Variant
Dim i As Long, j As Long, m As Double
Dim ans As Double, r As Double
ans = 0
m = 2
arr = Range("A2:B26").value
For k = 2 To 26
trr = Range("A" & k & ":B" & k).value
For i = 1 To UBound(arr, 1) ' Iterate through the rows of the array
For j = 1 To UBound(arr, m) 'iterate through the columns of the array
If arr(i, j) = trr(1, j) Then
j = j + 1
If j <= m Then
If arr(i, j) = trr(1, j) Then
ans = ans + 1
Else
ans = ans
End If
End If
End If
Next
Next
Range("N" & k).value = ans
ans = 0
Next k
Отметим, что исходный массив, который у меня есть, является динамическим.поэтому размер диапазона может изменяться, а размер массива также может меняться в зависимости от критериев.границы для массива (от 1 до rowcount, от 1 до columncount) от диапазона (i, 1 до columncount), если вы понимаете, что я имею в виду.поэтому размер может измениться.
, например:
Function ChangeMatrixTwo(ByRef inputCol As Range, NumCols As Long) As
Variant
'recreate the range of your data into the different vector sizes.
'the vector size m and m+1
'by resizing the range into the vector wanted with values following after
each other
'to better explain, should you have a series 123456, for vector 2, it will
return {1,2} {2,3} {3,4} {4,5} {5,6}
Dim NewMatrix() As Variant
Dim i, j, k, n As Long
Dim rowsize As Long
n = inputCol.Count
rowsize = n - NumCols + 1
ReDim NewMatrix(1 To rowsize, 1 To NumCols)
k = 1
For i = 1 To rowsize
For j = 1 To NumCols
NewMatrix(i, j) = inputCol(k, 1)
k = k + 1
Next j
k = k - NumCols + 1
Next i
ChangeMatrixTwo = NewMatrix
End Function
, изменив номер столбца, я могу сгенерировать матрицу / массив m и m + 1, и это я должен объединить с моей первоначальной проблемой><</p>