20161212xlVBA工作表数据整理合并单元格

Sub NextSeven_CodeFrame()
‘应用程序设置
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.Calculation = xlCalculationManual

    ‘错误处理
    On Error GoTo ErrHandler

    ‘计时器
    Dim StartTime, UsedTime As Variant
    StartTime = VBA.Timer

    ‘变量声明
    Dim Wb As Workbook
    Dim Sht As Worksheet
    Dim OpenWb As Workbook
    Dim oSht As Worksheet
    Dim i&, j&

    Dim Rng As Range
    Dim Arr As Variant
    Dim EndRow As Long
    Dim RowCount As Long
    Dim ColCount As Long

    Dim FilePath As String

    ‘实例化对象
    Set Wb = Application.ThisWorkbook

    ‘选取单个文件
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .InitialFileName = Wb.Path    ‘指定初始化路径
        .Filters.Clear
        .Filters.Add "Excel文件", "*.xls;*.xlsx"
        If .Show = -1 Then
            FilePath = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With

    Set OpenWb = Application.Workbooks.Open(FilePath)
    Set oSht = OpenWb.Worksheets(1)
    With oSht
        Set Rng = Application.Intersect(.UsedRange.Offset(1), .UsedRange)
        RowCount = Rng.Rows.Count
        ColCount = Rng.Columns.Count
        Arr = Rng.Value
        For i = LBound(Arr) To UBound(Arr)
            ‘长数字加单引号
            Arr(i, 2) = "‘" & Arr(i, 2)
            Arr(i, 10) = "‘" & Arr(i, 10)
            Arr(i, 14) = "‘" & Arr(i, 14)
            Arr(i, 15) = "‘" & Arr(i, 15)
            Arr(i, 18) = "‘" & Arr(i, 18)
            ‘转置关系
            Arr(i, 20) = Arr(i, 2)
            Arr(i, 2) = Arr(i, 1)
            Arr(i, 1) = ""

        Next i
    End With
    OpenWb.Close False

    Set Sht = Wb.Worksheets(1)
    With Sht
        .UsedRange.Offset(6).Clear    ‘预先清除
        Set Rng = .Range("A7").Resize(RowCount, ColCount)
        Rng.Value = Arr    ‘导入内容
    End With

    Dim RowStart As Object
    Dim RowsCount As Object
    Dim Key As String
    Dim OneKey As Variant
    Set RowStart = CreateObject("scripting.dictionary")
    Set RowsCount = CreateObject("scripting.dictionary")

    MergeColumnNo = 2    ‘关键字所在列

    For i = LBound(Arr, 1) To UBound(Arr, 1)
        Key = CStr(Arr(i, MergeColumnNo))
        If RowStart.Exists(Key) = False Then
            RowStart(Key) = i
            RowsCount(Key) = 1
        Else
            RowsCount(Key) = RowsCount(Key) + 1
        End If
    Next i

    MergeCols = Array("A", "B", "D", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Z")    ‘合并列
    For Each OneKey In RowStart.Keys
        For n = LBound(MergeCols) To UBound(MergeCols)
            Rng.Cells(RowStart(OneKey), MergeCols(n)).Resize(RowsCount(OneKey), 1).Merge
        Next n
    Next OneKey

    Const HeadRow As Long = 6
    Dim Index As Long
    With Sht
        EndRow = .Cells(.Cells.Rows.Count, 2).End(xlUp).Row
        Index = 0
        For i = HeadRow + 1 To EndRow
            If .Cells(i, 2).Value <> "" Then
                Index = Index + 1
                .Cells(i, 1).Value = Index
            End If
        Next i
    End With

    SetEdges Rng
    CustomFormat Rng
    Union(Sht.Range("A6:Z6"), Rng).Columns.AutoFit

    ‘运行耗时
    UsedTime = VBA.Timer - StartTime
    MsgBox "本次运行耗时:" & Format(UsedTime, "0.0000000秒") & "——NextSeven竭诚为您服务。"
ErrorExit:        ‘错误处理结束,开始环境清理
    Set Wb = Nothing
    Set OpenWb = Nothing
    Set Sht = Nothing
    Set oSht = Nothing
    Set Rng = Nothing

    Set RowStart = Nothing
    Set RowsCount = Nothing

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Application.Calculation = xlCalculationAutomatic
    Exit Sub
ErrHandler:
    If Err.Number <> 0 Then
        MsgBox Err.Description & "!", vbCritical, "错误提示!"
        ‘Debug.Print Err.Description
        Err.Clear
        Resume ErrorExit
    End If
End Sub
Sub CustomFormat(ByVal Rng As Range)
    With Rng
        .Font.Name = "宋体"
        .Font.Size = 10
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
End Sub

  

时间: 2024-12-25 20:01:34

20161212xlVBA工作表数据整理合并单元格的相关文章

创建数据透视表数据包含合并单元格

我们都知道,含合并单元格格当数据创建数据透视表,结果会出来空,我们不能满足我们的要求,关键的问题是,合并的单元格的值它是空的值,然后,现在的问题是,如何将这些结合单位格作为有值它合并,那,尽管被合并,但值还在,仅仅是不显示出来而已,这样创建出的数据透视表就能得到正确的结果了. 上图: 操作: 0.原始含合并单格格的值为"原始"部分: 1.将0的部分使用格式刷刷至①处保留: 2.将"原始"部分取消合并单元格,并填充为正常的值. ※ 假设数据量较大,能够參考这种方法进行

Apache POI 合并单元格--简单解释版带Demo

合并单元格所使用的方法: sheet.addMergedRegion( CellRangeAddress  cellRangeAddress  ); CellRangeAddress  对象的构造方法需要传入合并单元格的首行.最后一行.首列.最后一列. CellRangeAddress cra=new CellRangeAddress(0, 3, 3, 9); 怎样把数据写入合并后的单元格中 首先要查看你 CellRangeAddress 构造方法的firstcol index 创建firstc

用含有合并单元格的数据创建数据透视表

大家知道,使用含有合并单元格的数据创建数据透视表时,会有空的结果出来,不能达到我们的要求,问题的关键在于被合并的单元格的值是空值,那么,问题来了,怎么把这些被合并的单元格作为有值合并呢,即,虽然被合并,但值还在,只是不显示出来而已,这样创建出的数据透视表就能得到正确的结果了. 上图: 操作: 0.原始含合并单格格的值为"原始"部分: 1.将0的部分使用格式刷刷至①处保留: 2.将"原始"部分取消合并单元格,并填充为正常的值: ※ 如果数据量较大,可以参考这个方法进行

实操记录之-----Ant Design of Vue 增强版动态合并单元格,自动根据数据进行合并,可自定义横纵向合并

前几天搞了个简易版的动态合并单元格 但是需求有变化,就只能稍微改改了~~ 欢迎路过的各位大佬指出我代码的问题~~~~ 另: 代码执行效率不是很高,如果需要大量渲染更多数据建议可以直接使用原生 <template> <page-view :title="title"> <h1>第一種數據結構,前端渲染</h1> <div class="snall-table-spacing"> <a-table :co

jQuery_easyUI 合并单元格 (DataGrid 数据表格)

<table id="dg" style="height:350px;z-index:-5555; " class="easyui-datagrid" rownumbers="true" data-options="fitColumns: true, iconCls: 'icon-edit', scrollbarSize:0, multiSort:true, remoteSort:true, paginatio

[办公应用]如何将excel合并单元格分拆后每个单元格上仍保留数据?

合并单元格虽然美观,但是无法进行排序.筛选等操作. 只有合并单元格拆分后才可以按常规进行统计.但是普通拆分后,excel仅保留合并单元格数据到区域左上角的单元格. 解决方案:选定多个合并单元格,应用本宏即可每个单元格均保留数据:Sub 拆分() Dim c As Range For Each c In ActiveSheet.UsedRange.Cells If c.MergeCells Then c.Select c.UnMerge Selection.Value = c.Value End

php 数据导出到excel 2种带有合并单元格的导出

具体业务层面 可能会有所不同.以下两种方式涉及的合并单元格地方有所不同,不过基本思路是一致的. 第一种是非插件版本.可能更容易理解点,基本思路就是 组装table 然后 读取 输出到excel上.缺点是要设置样式不太好设置. 第二种是利用插件  PHPExcel   有点是可以对输出格式做各种设置.缺点是初次接触这个插件的同学,并且对表格合并不熟悉的同学,可能要花点时间理解 另外注意excel对数字过长会处理成你不想要的数据,记得对该数据格式化成字符串 貌似就可以解决.以前遇到过 /** * *

Javascript横向/纵向合并单元格TD

在报表系统中,涉及“HTML的TD单元格的合并”恐怕为数不少. 比如,从DB查得数据并经过后台的整理后,可能是这样的: Table1     JOB TOTAL SAL INDEX EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 1 ANALYST 6000 1 7788 SCOTT ANALYST 7566 4/19/1987 3000.00   20 1 ANALYST 6000 2 7902 FORD ANALYST 7566 12/3/1981

easyui datagrid 合并单元格

整理以前做的东西,这个合并单元格的问题再新浪博客也写过了..... 下面这段代码是列表数据 //载入排放系数管理报表数据 function LoadEmissionReportData() { //获取计算ID var CountID = getUrlParam("CountID"); $.ajax({ type: "POST", url: "../Ashx/GetGasInventoryListInfo.ashx?type=getParamReport&