网站首页  词典首页

请输入您要查询的论文:

 

标题 VBA实现按合并单元格拆分Excel工作表
范文

    姚晔 石翠

    

    摘要:在Excel应用中,部门信息常见的格式设置,一种是占据一列,另一种格式为合并单元格,占据一行,文章讨论的是后一种,通过合并单元格的判定,确定要包含的数据范围,然后复制到以合并单元格提取的内容作为新建工作簿命名的文件中去。

    关键词:VBA;合并单元格;Excel

    1 问题提出

    在Excel应用中,常会遇到以合并单元格拆分数据[1],如图1所示。

    2 解决方法

    经过多次尝试,在Excel表格中,简单的函数功能无法实现,因此选择采用宏(Macro)来实现。 宏是一种批处理,是一些命令组织在一起,作为一个单独命令完成一个特定任务。Microsoft O伍ce办公软件自动集成“VBA”高级程序语言,使用宏语言Visual Basic将宏作为一系列指令来编写[2]。

    定义宏seprateExcel

    Sub seprateExcel()

    End sub

    2.1合并单元格的判定

    合并单元格为班级信息,通过MergeCells来判定[3]。

    Duni As Long

    Dim titleCounts As Long

    titleCounts=3

    Dun RowCounts As Long

    RowCounts= Cells(Rows.Count, l).End(xlUp).Row

    Dim cel As Range

    For i=titleCounts+1 To RowCounts

    Set cel= Range("A"&i;)

    If cel.MergeCells Then

    …

    End If

    Nexti

    End Sub

    2.2计算列

    计算总列数的前提条件是最后一列必须保证为数据,因为列标题行所有单元格都有数据,因此,选择标题行计算工作表的列数,再以列数得到最后一列的字母列名,这样无论是Office哪一个版本,都可以通过计算获得[4]。

    columnTitleRow=3

    Dim ColumnCounts As Long

    ColumnCounts=Cells(columnTitleRow, Columns.Count).End(xlToLeft).Column

    卜计算最后一列的列名

    Dim columnLetter As String

    num= ColumnCounts

    Do While num>0

    columnLetter=Chr《num -1)Mod 26+65)&columnLetter;

    num= Int《num -1)/26)

    Loop

    2.3提取合并单元格内容

    titleCounts=3

    RowCounts= Cells(Rows.Count, l).End(xlUp).Row

    Dim sourceFile As String

    sourceFile=”成绩表.xls"

    Dim targetFile As String

    Dim targetFilewithPath As String

    Dim cel As Range

    For i=titleCounts+1 To RowCounts

    Set cel= Range("A"&i;)

    Ifcel.MergeCells Then

    targetFile= Trim(cel)&".xls"

    targetFilewithPath=ThisWorkbook.Path&”\”&Trim;(cel)&”.xls”

    Workbooks.Add

    ActiveWorkbook.SaveAs targetFilewithPath

    Windows(sourceFile).Activate

    …

    End If

    Nexti

    2.4复制表头

    Windows(sourceFile).Activate

    ThisWorkbook.Sheets("sheetl").Activate

    Range("Al:"&columnLetter;&titleCounts;).Copy

    Windows(targetFile).Activate

    Range("Al").Select

    ActiveSheet.Paste

    2.5復制内容

    拆分工作表,首先确定拆分范围。起止行的判定也是通过合并单元格的判定来完成。

    Dim BeginRow As Long, EndRow As Long

    For i=titleCounts+1 To RowCounts

    Set cel= Range("A"&i;)

    Ifcel.MergeCells Then

    Ifi>titleCounts+1 Then

    EndRow=i-1

    Windows(sourceFile).Activate

    ThisWorkbook.Sheets (" sheetl").Activate

    Range( "A" & BeginRow & ":" & columnLetter &EndRow;).Copy

    Windows(targetFile).Activate

    Range("Al").Select

    ActiveSheet.Paste

    …

    End If

    targetFile= Trim(cel)&”.xls” targetFilewithPath=ThisWorkbook.Path&”\”&Trim;(cel)&”.xls”

    Workbooks.Add

    ActiveWorkbook.SaveAs targetFilewithPath

    Windows(sourceFile).Activate

    BeginRow= 1+1

    End If

    Nexti

    EndRow= RowCounts

    Windows(sourceFile).Activate

    ThisWorkbook.Sheets(" sheetl").Activate

    Range("A"&BeginRow;&”:”&columnLetter;&EndRow;).Copy

    Windows(targetFile).Activate

    Range("Al").Select

    ActiveSheet.Paste

    3 结语

    由于微软办公自动化软件Office的普及,包含在其中的各个组件都可以利用VBA,VBA的应用有助于使工作自动化,可以使这些软件的应用获得更高的工作效率。另外,由于VBA可以直接應用Office套装软件的各项强大功能,所以,对Office进行二次程序设计和程序开发更加方便快捷。

    [参考文献]

    [1]廖丽嵘基于Excel VBA的成绩管理系统[J].现代计算机(专业版),2012( 23):64-66

    [2]高世萍,翟滨,廉锁原.基于Excel函数及Excel VBA的成绩分析[J].电脑学习,2011(1):18-19.

    [3]李利民.基于Exce12007 VBA的学生成绩管理系统的设计与实现[J]电脑知识与技术,2010(5):1128-1129,1137

    [4]格林.Excel 2007 VBA参考大全[M].Excel Home,译北京:人民邮电出版社,2009

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/4/13 18:05:28