专业编程基础技术教程

网站首页 > 基础教程 正文

VBA-006:取指定工作表的指定列数据

ccvgpt 2025-01-12 11:52:02 基础教程 2 ℃

一、需求

根据指定的标题名称,提取指定工作表的指定列数据,将结果存放在当前活动工作表的A1位置,依次向右移动


VBA-006:取指定工作表的指定列数据

二、实现思路

  1. 创建一个提取指定列数据的函数,利用该函数循环抓取需求列
  2. 模块顶部定义常量列名称和指定工作表名称,便于后期修改维护
  3. 在主程序中调用以上函数和常量值

三、代码

' 日期:2024-5-9
' 作者:LiuYu
' 版本:1.0
' 文档说明:根据指定的标题名称,提取指定工作表的指定列数据,将结果存放在当前活动工作表的A1位置,依次向右移动
' 自定义修改:可以通过修改常量值,修改提取列的标题名称、工作表名称


' 模块内定义提取列的常量数组、工作表名称
Public Const COLUMN_NAME As String = "装车日期,运单状态,发站,到站,箱号"
Public Const WS_NAME As String = "1.铁路明细表"

Function extract_column_data(COLUMN_NAME As String, ws As Worksheet)
' 提取指定列数据,整列数据
' 输入参数:
'   column_name: 该列的标题名称
'   ws: 工作表对象
' 返回结果:result as array,返回数组,数组中每一项为该列的每一行数据

    Dim result_arr As Variant
    Dim col_index As Integer

    ' 获取列索引,若匹配成功返回该列索引号,否则返回0
    col_index = 1
    For i = 1 To ws.usedrange.columns.count
        If ws.Cells(1, i).value = COLUMN_NAME Then
            col_index = i
            Exit For
        Else
            col_index = 0
        End If
    Next

    ' 获取该列数据
    If col_index > 0 Then
        result_arr = ws.usedrange.columns(col_index).value
    Else
        result_arr = Array()
    End If

    ' 返回结果
    extract_column_data = result_arr

End Function


Sub extract()
' 提取数据

    ' 获取工作表对象
    Dim ws As Worksheet
    Set ws = activeworkbook.worksheets(WS_NAME)
    
    ' 将列名称装进数组
    Dim column_name_array() As String
    Dim i As Integer
    ReDim column_name_array(0 To UBound(Split(COLUMN_NAME, ",")))
    For i = 0 To UBound(Split(COLUMN_NAME, ","))
        column_name_array(i) = Split(COLUMN_NAME, ",")(i)
    Next i


    ' 遍历列名称数组
    For i = 0 To UBound(column_name_array)
        ' 提取数据
        Dim result_arr As Variant
        result_arr = extract_column_data(column_name_array(i), ws)

        ' 结果写入到激活工作表的表格
        ActiveSheet.Cells(1, i + 1).Resize(UBound(result_arr), 1) = result_arr
    Next i

End Sub

四、效果


最近发表
标签列表