Excel数组排序+图片统一大小
发布日期:2021-08-26 12:38:19 浏览次数:3 分类:技术文章

本文共 9064 字,大约阅读时间需要 30 分钟。

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    NextEnd SubSub 图片统一()    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)    NextEnd SubFunction 数组升序(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 FunctionSub 图片统一大小()    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 = SelectionEnd SubSub 重复标红()    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    NextEnd SubSub test()    Dim arr(99)    For i = 1 To 10        t = Int(Rnd() * 100)        arr(t) = t & ";"    Next    Debug.Print Replace(Join(arr), " ", "")End SubSub 文本升序()    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 sortarrEnd SubSub 文本降序()    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 sortarrEnd SubSub 数值升序()    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 sortarrEnd SubSub 数值降序()    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 sortarrEnd SubSub 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)    NextEnd SubSub 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)    NextEnd SubSub 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 SubSub 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 iEnd 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 Ifkk:    Next iEnd 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 iEnd 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    NextEnd 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    LoopEnd 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    WendEnd 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)    NextEnd 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)    NextEnd Sub'此方法的缺点是需要借助辅助单元格?

 

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

转载地址:https://blog.csdn.net/weixin_33885253/article/details/93297451 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:web应用乱码解决
下一篇:oracle存储过程基本

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月17日 01时54分57秒