Excel·VBA二维数组S形排列

与之前的文章《Excel·VBA螺旋数组函数》将一维数组转为二维螺旋数组

本文将数组转为S形排列的二维数组,类似考场座位S形顺序

vbnet 复制代码
Function S形排列(ByVal arr, ByVal num_rows&, ByVal num_cols&, Optional ByVal mode$ = "row")
    '将数组arr转为num_rows行 * num_cols列的S形排列二维数组(数组从1开始计数)
    '写入模式mode,row按行写入,col按列写入
    Dim a, brr, result, rc&, i&, j&, x&, y&
    rc = num_rows * num_cols: ReDim brr(1 To rc), result(1 To num_rows, 1 To num_cols)
    For Each a In arr  '多行多列的,按列从左往右读取,防止arr元素个数超出rc
        If x < rc Then x = x + 1: brr(x) = a
    Next
    If mode = "row" Then
        For i = 1 To num_rows
            If i Mod 2 = 1 Then
                For j = 1 To num_cols  '奇数行,从左往右写入
                    y = y + 1: result(i, j) = brr(y)
                Next
            Else
                For j = num_cols To 1 Step -1  '偶数行,从右往左写入
                    y = y + 1: result(i, j) = brr(y)
                Next
            End If
        Next
    ElseIf mode = "col" Then
        For j = 1 To num_cols
            If j Mod 2 = 1 Then
                For i = 1 To num_rows  '奇数列,从上往下写入
                    y = y + 1: result(i, j) = brr(y)
                Next
            Else
                For i = num_rows To 1 Step -1  '偶数列,从下往上写入
                    y = y + 1: result(i, j) = brr(y)
                Next
            End If
        Next
    End If
    S形排列 = result
End Function
  • 举例
vbnet 复制代码
Sub 测试()
    Dim arr, brr
    arr = [a1].CurrentRegion
    brr = S形排列(arr, 5, 4)
    [c1].Resize(UBound(brr), UBound(brr, 2)) = brr
    brr = S形排列(arr, 4, 5)
    [c8].Resize(UBound(brr), UBound(brr, 2)) = brr
End Sub

按行写入再使用Transpose函数转置后的结果,与直接使用按列写入一致

vbnet 复制代码
Sub 测试()
    Dim arr, brr
    arr = [a1].CurrentRegion
    brr = WorksheetFunction.Transpose(S形排列(arr, 5, 4))
    [c1].Resize(UBound(brr), UBound(brr, 2)) = brr
    brr = S形排列(arr, 4, 5, "col")
    [c8].Resize(UBound(brr), UBound(brr, 2)) = brr
End Sub
相关推荐
沉到海底去吧Go4 小时前
【行驶证识别成表格】批量OCR行驶证识别与Excel自动化处理系统,行驶证扫描件和照片图片识别后保存为Excel表格,基于QT和华为ocr识别的实现教程
自动化·ocr·excel·行驶证识别·行驶证识别表格·批量行驶证读取表格
Abigail_chow1 天前
EXCEL如何快速批量给两字姓名中间加空格
windows·microsoft·excel·学习方法·政务
xiaohezi2 天前
Rag chunk 之:Excel 文档解析
excel
weixin_472339462 天前
python批量解析提取word内容到excel
python·word·excel
2 天前
Unity与Excel表格交互热更方案
unity·游戏引擎·excel
金融小白数据分析之路2 天前
Excel高级函数使用FILTER、UNIQUE、INDEX
excel
未来之窗软件服务2 天前
Excel表格批量下载 CyberWin Excel Doenlaoder 智能编程-——玄武芯辰
excel·批量下载·仙盟创梦ide·东方仙盟
阿斯加德的IT2 天前
Power Automate: 从Excel 选择列,每200条生成一个CSV文件并保存在sharepoint文档库
低代码·excel
步达硬件2 天前
【转bin】EXCEL数据转bin
excel
wtsolutions3 天前
JSON to Excel 3.0.0 版本发布 - 从Excel插件到Web应用的转变
json·excel·json-to-excel·wtsolutions