方法2 此方案是根据A列数字是否具有连续性进行判断,同时向数组读入AB两列数据。其他方案则将先将A列数字读入数组,再读入B列数组。由于思路的差别,导致本方案循环与判断层层嵌套,可读性比较差。 方法2 此方案是根据A列数字是否具有连续性进行判断,同时向数组读入AB两列数据。其他方案则将先将A列数字读入数组,再读入B列数组。由于思路的差别,导致本方案循环与判断层层嵌套,可读性比较差。 Sub p2() Dim m&,arrPre(), arrRes(), k&, maxNum& m =Range("a" & Rows.Count).End(3).Row If m < 3Then Exit Sub arrPre =Range("a1:b" & m).Value ReDim arrRes(1To Rows.Count - 1, 1 To 2) For i = 2 To m‘确定1234序列的最大组数 maxNum = Application.max(maxNum, arrPre(i,1)) Next i k = 0 For i = 2 To m v1 = Val(arrPre(i - 1, 1)): v2 =Val(arrPre(i, 1)) If v1 + 1 <> v2 Then ‘如果相邻数组值不连续 If v1 < maxNum And i > 2 Then ‘如果V1大于最大值4,则向数组arrRes第一列读入v1 + 1至4,第二列数组值为空,起到占位作用 For j = v1 + 1 To maxNum k = k + 1: arrRes(k, 1) = j:arrRes(k, 2) = "" Next j End If If i > 2 Then k = k + 1 ‘增加一个空白行,即4下面的一行数组值为空 If v2 > 1 Then ‘如果V2大于1,则向数组arrRes第一列读入1 至 v2 – 1几个数字,第二列为空,起到占位的作用 For j = 1 To v2 - 1 k = k + 1: arrRes(k, 1) = j:arrRes(k, 2) = "" Next j End If End If k = k + 1: arrRes(k, 1) = v2: arrRes(k, 2)= arrPre(i, 2) ‘将AB列数据读入数组arrRes If i = m And arrPre(m, 1) < maxNum Then ‘如果循环到最后一个值,且该行A列值小于4,则向数组第一列写入arrPre(m, 1) + 1 至4,起到占位作用 For j = arrPre(m, 1) + 1 To maxNum k = k + 1: arrRes(k, 1) = j:arrRes(k, 2) = "" Next j End If Next i Range("d2:e"& Rows.Count).ClearContents [d2].Resize(IIf(k> Rows.Count - 1, Rows.Count - 1, k), 2) = arrRes End Sub |