当前位置: 首页 > news >正文

Excel数组排序+图片统一大小

Sub 图片调整合适大小()
'    Debug.Print ActiveWorkbook.Name
    图片显示比例 = 0.9    '1为顶满单元格
    Dim wb As Workbook, sh As Worksheet, ce As Range, shp As Shape
    Dim dic As Object, re As Object, shel As Object, WS As Object, FSO As Object
    Dim arr(), brr()    'Redim preserve arr(i)
    Set dic = CreateObject("scripting.dictionary")
    Set wb = ActiveWorkbook
    Set sh = wb.Sheets(1)
    For Each shp In sh.Shapes
        '思路判断:有时图片会跨越两个单元格,这时就需要比较图片的高度和单元格的高度,更好的思路是先将图片尺寸缩小一半,如,然后再进行调整
        With shp
        shp.Name = shp.Name & Round(Rnd() * 125, 1)
            shp.Top = shp.Top + shp.Height / 2
            shp.Left = shp.Left + shp.Width / 2
            shp.Height = shp.Height / 8    '先缩小图片,以防出现占据多个单元格的问题
            shp.Width = shp.Width / 8

            '.Name = .Name & Rnd(1000)
            '--------------------------------------------------------------
            wt = shp.TopLeftCell.MergeArea.Width  '单元格区域宽度;
            ht = shp.TopLeftCell.MergeArea.Height    '单元格区域高度

            bl = .Width / .Height
            If wt / ht < bl Then
                .Width = wt * 图片显示比例  ' sh0.Cells(st_mid2, 1).Width
                .Height = .Width / bl
                .Left = shp.TopLeftCell.MergeArea.Left + (wt - .Width) / 2  ' + 2
                .Top = shp.TopLeftCell.MergeArea.Top + (ht - .Height) / 2
            Else
                .Height = ht * 图片显示比例
                .Width = .Height * bl
                .Top = shp.TopLeftCell.MergeArea.Top + (ht - .Height) / 2
                .Left = shp.TopLeftCell.MergeArea.Left + (wt - .Width) / 2
            End If
        End With
    Next
End Sub

Sub 图片统一()
    Dim wb As Workbook, sh As Worksheet, ce As Range, shp As Shape
    Dim dic As Object, re As Object, shel As Object, WS As Object, FSO As Object
    Dim arr(), brr()    'Redim preserve arr(i)
    Set dic = CreateObject("scripting.dictionary")
    Set wb = ActiveWorkbook
    Set sh = wb.Sheets(1)
    For Each shp In sh.Shapes
        dic.Add shp.TopLeftCell.Row, shp.Name
    Next
    b = dic.keys
    C = 数组升序(b)
    For i = 0 To UBound(b)
        Debug.Print b(i), C(i)
    Next
End Sub
Function 数组升序(arr)
    Set js = CreateObject("msscriptcontrol.scriptcontrol")
    js.Language = "javascript"
    'arr = Application.Transpose(Range("A1:A10"))
    TEMP = Join(arr, ",")
    js.addcode "function aa(bb){js=bb.split(',');js.sort(function(a,b){return a-b;});return js;}"
    sortarr = js.eval("aa('" & TEMP & "')")
    数组升序 = Split(sortarr, ",")
End Function
Sub 图片统一大小()
    Dim wb As Workbook, sh As Worksheet, ce As Range, shp As Shape
    Dim wb As Workbook, sh As Worksheet, ce As Range, shp As Shape
    Dim dic As Object, re As Object, shel As Object, WS As Object, FSO As Object
    Dim arr(), brr()    'Redim preserve arr(i)
    Set dic = CreateObject("scripting.dictionary")
    Set wb = ActiveWorkbook
    Set sh = wb.Sheets(1)
    Set shp = Selection
End Sub

Sub 重复标红()
    Dim wb As Workbook, sh As Worksheet, ce As Range, shp As Shape
    Dim dic As Object, re As Object, shel As Object, WS As Object, FSO As Object
    Dim arr(), brr()    'Redim preserve arr(i)
    Set dic = CreateObject("scripting.dictionary")
    Set wb = ActiveWorkbook
    Set sh = wb.Sheets(1)
    Aend = sh.Range("a65536").End(3).Row
    For Each ce In sh.Range("a1:a" & Aend)
        If dic.exists(ce.Value) Then
            ce.Interior.Color = vbRed
        Else
            dic.Add ce.Value, 1
        End If
    Next
End Sub

Sub test()
    Dim arr(99)
    For i = 1 To 10
        t = Int(Rnd() * 100)
        arr(t) = t & ";"
    Next
    Debug.Print Replace(Join(arr), " ", "")
End Sub


Sub 文本升序()
    Set js = CreateObject("msscriptcontrol.scriptcontrol")
    js.Language = "javascript"
    arr = Application.Transpose(Range("A1:A10"))
    TEMP = Join(arr, ",")
    js.addcode "function aa(bb){js=bb.split(',');js.sort();return js;}"
    sortarr = js.eval("aa('" & TEMP & "')")
    Debug.Print sortarr
End Sub
Sub 文本降序()
    Set js = CreateObject("msscriptcontrol.scriptcontrol")
    js.Language = "javascript"
    arr = Application.Transpose(Range("A1:A10"))
    TEMP = Join(arr, ",")
    js.addcode "function aa(bb){js=bb.split(',');js.sort();js.reverse();return js;}"
    sortarr = js.eval("aa('" & TEMP & "')")
    Debug.Print sortarr
End Sub
Sub 数值升序()
    Set js = CreateObject("msscriptcontrol.scriptcontrol")
    js.Language = "javascript"
    arr = Application.Transpose(Range("A1:A10"))
    TEMP = Join(arr, ",")
    js.addcode "function aa(bb){js=bb.split(',');js.sort(function(a,b){return a-b;});return js;}"
    sortarr = js.eval("aa('" & TEMP & "')")
    Debug.Print sortarr
End Sub
Sub 数值降序()
    Set js = CreateObject("msscriptcontrol.scriptcontrol")
    js.Language = "javascript"
    arr = Application.Transpose(Range("A1:A10"))
    TEMP = Join(arr, ",")
    js.addcode "function aa(bb){js=bb.split(',');js.sort(function(a,b){return a-b;});js.reverse();return js;}"
    sortarr = js.eval("aa('" & TEMP & "')")
    Debug.Print sortarr
End Sub
Sub Sortlist()    '但需要系统支持Framework
    Set objSortedlist = CreateObject("System.Collections.Sortedlist")
    For i = 1 To 10
        objSortedlist.Add Range("A" & i).Value, Range("A" & i).Value
    Next i
    For i = 0 To objSortedlist.Count - 1
        Debug.Print objSortedlist.GetKey(i)
    Next
End Sub
Sub Arraylist()
    Set objArrayList = CreateObject("System.Collections.ArrayList")
    For i = 1 To 10
        objArrayList.Add Range("A" & i).Value
    Next i
    objArrayList.Sort
    For i = 0 To objArrayList.Count - 1
        Debug.Print objArrayList(i)
    Next
End Sub

Sub test2()
    brr = WorksheetFunction.Transpose([a1:a100&"-"])
    For i = 1 To 10
        t = Int(Rnd() * 100 + 1)
        brr(t) = t
    Next
    Debug.Print Join(Filter(brr, "-", False), ";")
End Sub

Sub test3()
    Dim arr(-99 To 99)
    For i = 1 To 20
        t = Int(Rnd() * 199 - 99)
        arr(t) = t & ";"
    Next
    Debug.Print Replace(Join(arr), " ", "")
End Sub

'在介绍具体方法之前,先给个数组生成过程。(将数组a(1 to 50)定义成公用数组)
Sub MakeArr()
    For i = 1 To 50
        a(i) = Int(Rnd(1) * 890 + 10)
    Next i
End Sub

'1 ?快速排序法
Sub FastSort()
    M = 1
    For i = 1 To 49
        If a(i) <= a(i + 1) Then
            If i > M Then
                M = i
            Else
                i = M
            End If
            GoTo kk:
        Else
            x = a(i)
            a(i) = a(i + 1)
            a(i + 1) = x
            If i <> 1 Then i = i - 2
        End If
kk:
    Next i
End Sub

'2 ?冒泡排序法
Sub BubbleSort()
    For i = 1 To 49
        For j = i + 1 To 50
            If a(i) > a(j) Then
                TEMP = a(j)
                a(j) = a(i)
                a(i) = TEMP
            End If
        Next j
    Next i
End Sub

'3 ?桶排序法
Sub Bucket()
    Dim Index
    Dim tempnum
    For i = 2 To 50
        tempnum = a(i)
        Index = i
        Do
            If Index > 1 Then
                If tempnum < a(Index - 1) Then
                    a(Index) = a(Index - 1)
                    Index = Index - 1
                Else
                    Exit Do
                End If
            Else
                Exit Do
            End If
        Loop
        a(Index) = tempnum
    Next
End Sub

'4 ?希尔排序法
Sub ShellSort()
    Dim skipnum
    Dim Index
    Dim i
    Dim tempnum
    Size = 50
    skipnum = Int((Size / 2)) - 1
    Do While skipnum > 0
        i = 1 + skipnum
        For j = i To 50
            Index = j
            Do
                If Index >= (1 + skipnum) Then
                    If a(Index) < a(Index - skipnum) Then
                        tempnum = a(Index)
                        a(Index) = a(Index - skipnum)
                        a(Index - skipnum) = tempnum
                        Index = Index - skipnum
                    Else
                        Exit Do
                    End If
                Else
                    Exit Do
                End If
            Loop
        Next
        skipnum = (skipnum - 1) / 2
    Loop
End Sub

'5 ?选择排序法
Sub SelectionSort()
    Dim Index
    Dim Min
    Dim i
    Dim tempnum
    BzArr
    i = 1
    While (i < 50)
        Min = 50
        Index = Min - 1
        While (Index >= i)
            If a(Index) < a(Min) Then
                Min = Index
            End If
            Index = Index - 1
        Wend
        tempnum = a(Min)
        a(Min) = a(i)
        a(i) = tempnum
        i = i + 1
    Wend
End Sub

'以上五种排序方法均是数组排序的常用方法,优点是不需借助辅助单元格。执行效率视数组成员的相对有序性的不同而不同。以附件中的50位一维数组为例,快速排序法的循环次数是745次、冒泡法的循环次数是1225次、桶排序法的循环次数是704次、希尔排序法的循环次数是347次、选择排序法的循环次数为1225次。

'下面再介绍两种用EXCEL函数的排序方法,一般来说使用EXCEL自带函数或方法的执行效率会高一些,但限于函数参数的限制有的不得不借助于辅助单元格。

'6 ?SMALL函数法
Sub SmallSort()
    Dim b(1 To 50)
    For i = 1 To 50
        b(i) = Application.WorksheetFunction.Small(a, i)
    Next
End Sub
'原数组不变,生成一个新的按升序排列的数组。同理也可以用LARGE函数?我个人觉得用这种方法较快?

'7 ?RANK函数法
Sub RankSort()
    BzArr
    Dim b(1 To 50)
    For i = 1 To 50
        Sheet2.Cells(i, 1) = a(i)
    Next
    Set rankrange = Sheet2.Range("a1:a50")
    For i = 1 To 50
        For k = 0 To Application.WorksheetFunction.CountIf(rankrange, Sheet2.Cells(i, 1)) - 1
            j = Application.WorksheetFunction.Rank(Sheet2.Cells(i, 1), rankrange, 1)
            a(j + k) = Sheet2.Cells(i, 1)
        Next
    Next
    For i = 1 To 50
        Sheet1.Cells(i + 2, 7) = a(i)
    Next
End Sub
'此方法的缺点是需要借助辅助单元格?

 

转载于:https://www.cnblogs.com/zhanglei1371/p/6667138.html

相关文章:

  • composer
  • 不求完美但求易用 报价软件适时出笼(温州传奇4)
  • 微信开源mars源码分析1—上层samples分析
  • 如何让普通域用户可以登录域控
  • jQuery实现AJAX定时局部页面刷新
  • Centos文件查看命令字符
  • ospf实例分析 (子网掩码实战)
  • 欢迎访问我的个人网站
  • 通过串口收发短消息(上)
  • [LeetCode]Reverse Linked List II
  • Vijos 1067Warcraft III 守望者的烦恼
  • 清除连接(其他电脑的)记录
  • 袋鼠云助力光伏产业 | 基于阿里云数加平台做算法预测
  • 重作了一次学生
  • 第十九章,指针小练习(C++)
  • 分享一款快速APP功能测试工具
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript的使用你知道几种?(上)
  • Java知识点总结(JavaIO-打印流)
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • 程序员该如何有效的找工作?
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 技术发展面试
  • 前端设计模式
  • 栈实现走出迷宫(C++)
  • zabbix3.2监控linux磁盘IO
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​如何在iOS手机上查看应用日志
  • # 计算机视觉入门
  • #pragma once与条件编译
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (1)SpringCloud 整合Python
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (52)只出现一次的数字III
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)VC++中ondraw在什么时候调用的
  • **python多态
  • .Mobi域名介绍
  • .NET Core WebAPI中封装Swagger配置
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net打印*三角形
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET开发不可不知、不可不用的辅助类(一)
  • .net开发时的诡异问题,button的onclick事件无效
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .net中的Queue和Stack