|
总的思路是从F3到AM20的范围内,把数字按表中每行接连起来(比如F21:AL21开始),一共是33个数字。
然后按F1:K1的数字,比如我在F21:AL21中把这6个数字的所在位置标出来了。
需求是把
第1个数字位置前面的数字;
第1个数字位置与第2个数字位置之间的数字;
第2个数字位置与第3个数字位置之间的数字;
第3个数字位置与第4个数字位置之间的数字;
第4个数字位置与第5个数字位置之间的数字;
第5个数字位置与第6个数字位置之间的数字;
第6个数字位置之后的数字。
这些全都返回出来。如F23之后的结果。
请问这个代码应该怎么写啊?
- Sub sadf()
- Dim arr1
- Dim arr(1 To 1000)
- Dim arr2, arr3
- Dim k, i, j, x, y, m, kk As Integer
- On Error Resume Next
- k = 0: y = 22
- arr1 = Range("f3:AM20")
- Rows("21:200").ClearContents '清除内容
- For i = 1 To UBound(arr1)
- For j = 1 To UBound(arr1, 2)
- If arr1(i, j) <> "" Then
- k = k + 1
- arr(k) = arr1(i, j)
- End If
- Next
- Next
- Range("f21").Resize(1, k) = arr '以上部分将f3:AM20内的数排成一行,放于第21行
- '以下部分按f1:k1位置分为7部分,最后一部分为从第K1+1位到最后
- arr2 = Range("f1:k1")
- x = 1
- m = 0
- ReDim arr3(1 To 1)
- For kk = 1 To UBound(arr2, 2) + 1
- If kk <= UBound(arr2, 2) Then
- For i = x To arr2(1, kk) - 1
- m = m + 1
- ReDim Preserve arr3(1 To m)
- arr3(m) = arr(i)
- Next
- Else
- If arr2(1, kk - 1) < k Then
- For i = arr2(1, kk - 1) + 1 To k
- m = m + 1
- ReDim Preserve arr3(1 To m)
- arr3(m) = arr(i)
- Next
- End If
- End If
- y = y + 1
- Range("f" & y).Resize(1, m) = arr3
- Erase arr3
- m = 0
- x = arr2(1, kk) + 1
- Next
- End Sub
复制代码你验证一下结果是否正确
|
|