美文网首页
对总表数据按同一类型进行分割

对总表数据按同一类型进行分割

作者: 心的知觉 | 来源:发表于2017-09-28 15:54 被阅读0次

Public Sub Arrchart()

Dim d As Object, sht As Worksheet, arr, brr, r, kr, i&, j&, k&, x&

Dim Rng As Range, Rg As Range, ST$, tRow&, tCol&, aCol&, pd&

Application.ScreenUpdating = False '关闭屏幕更新

Application.DisplayAlerts = False '关闭警告信息提示

Set d = CreateObject("scripting.dictionary") 'set字典

Set Rg = Application.InputBox("请框选拆分依据列!只能选择单列单元格区域!", Title:="提示", Type:=8)

'用户选择的拆分依据列

tCol = Rg.Column '取拆分依据列列标

tRow = Val(Application.InputBox("请输入总表标题行的行数?"))

'用户设置总表的标题行数

If tRow = 0 Then MsgBox "你未输入标题行行数,程序退出。": Exit Sub

Set Rng = ActiveSheet.UsedRange '总表的数据区域

arr = Rng '数据范围装入数组arr

tCol = tCol - Rng.Column + 1 '在建立的数据组中第一列,计算依据列在数组中的位置

aCol = UBound(arr, 2) '二维数组的上标,数据源的列数

MsgBox UBound(arr, 2)

MsgBox LBound(arr, 2)

For i = tRow + 1 To UBound(arr) '遍历数组arr

If Not d.exists(arr(i, tCol)) Then

d(arr(i, tCol)) = i '字典中不存在关键词则将行号装入字典

Else

d(arr(i, tCol)) = d(arr(i, tCol)) & "," & i '如果存在则合并行号,以逗号间隔

End If

Next

For Each sht In Worksheets '遍历一遍工作表,如果字典中存在则删除

If d.exists(sht.Name) Then sht.Delete

Next

kr = d.keys '字典的key集

For i = 0 To UBound(kr) '遍历字典key值

If kr(i) <> "" Then '如果key不为空

r = Split(d(kr(i)), ",") '取出item里储存的行号

ReDim brr(1 To UBound(r) + 1, 1 To aCol) '声明放置结果的数组brr

k = 0

For x = 0 To UBound(r)

k = k + 1 '累加记录行数

For j = 1 To aCol '循环读取列

brr(k, j) = arr(r(x), j)

Next

Next

With Worksheets.Add(, Sheets(Sheets.Count))

'新建一个工作表,位置在所有已存在sheet的后面

.Name = kr(i) '表格命名

.[a1].Resize(tRow, aCol) = arr '放标题行

.[a1].Offset(tRow, 0).Resize(k, aCol) = brr '放置数据区域

Rng.Copy '复制粘贴总表的格式

.[a1].PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

.[a1].Select

End With

End If

Next

Sheets(1).Activate '激活第一个表格

Set d = Nothing '释放字典

Erase arr: Erase brr '释放数组

MsgBox "数据拆分完成!"

Application.ScreenUpdating = True '恢复屏幕更新

Application.DisplayAlerts = True '恢复警示

Application.CutCopyMode = xlCut

End Sub

相关文章

  • 对总表数据按同一类型进行分割

    Public Sub Arrchart() Dim d As Object, sht As Worksheet, ...

  • 数据类型(1)常量《1》

    数据类型总表 数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作 基本数据类型 说...

  • Python实战作业1-2:获取本地网页数据

    任务: 成果: 代码: 星星统计思路: 第一步对获取的数据列表按奇数进行遍历;第二步对遍历的数据进行分割;第三步对...

  • 什么是浅拷贝和深拷贝?

    浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递。 深拷贝:对基本数据类型进行值传递,对引用数据类型,...

  • 自动转换规则

    自动转换遵循以下规则: 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 转换按数据长度增加的方向进行,...

  • C自动转换遵循规则

    若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 转换按数据长度增加的方向进行,以保证精度不降低。如in...

  • 字符_编码_编码表

    一、姓名存储和展现 1. 按学生总表编码存储 李洋薛鹏磊按照学生总表进行编码,并将编码进行存储或者发送 左边是客户...

  • Pandas-处理日期的接口dt

    对于一个datetime类型的字段,在dataframe中日期时间类型的列数据也可以进行分割处理,即应用属性接口d...

  • 数据透视表

    1. 需要规范的数据源 ①源数据包含标题行②同一类数据,放置在一列科目应该放在同一列③源数据中,按标准数据类型存储...

  • Redis Bitmaps

    Redis位图:位图并不是一种实际的数据类型,而是在字符串数据类型上定义的按位操作集合(对普通的字符串键也可以进行...

网友评论

      本文标题:对总表数据按同一类型进行分割

      本文链接:https://www.haomeiwen.com/subject/ovfvextx.html