国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Excel·VBA按指定順序排序函數(shù)

這篇具有很好參考價值的文章主要介紹了Excel·VBA按指定順序排序函數(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

與之前寫過的《Excel·VBA數(shù)組冒泡排序函數(shù)》不同,不是按照數(shù)值大小的升序/降序?qū)?shù)組進行排序,而是按照指定數(shù)組的順序,對另一個數(shù)組進行排序

以下代碼調(diào)用了《Excel·VBA數(shù)組冒泡排序函數(shù)》bubble_sort_arr函數(shù)(如需使用代碼需復(fù)制)

Function 按指定順序排序(ByVal sorted, ByVal arr, Optional ByVal key_col& = 1, Optional start As Boolean = False)
    'sorted已排序的數(shù)組,arr數(shù)組第key_col列將按sorted順序排序,arr如果是一維數(shù)組則key_col無意義,key_col從1開始計數(shù)
    'start參數(shù)為True時,arr數(shù)組第key_col列值的開頭符合sorted中的值,也進行排序;否則排在最后(匹配模式)
    'sorted數(shù)組可以是一維或二維,都會讀取為字典(從上往下從左往右順序);返回數(shù)組從1開始計數(shù)
    Dim dict As Object, x&, a, c&, dc&, i&, j&, temp, result
    Set dict = CreateObject("scripting.dictionary"): On Error Resume Next
    For Each s In sorted  'sorted數(shù)組轉(zhuǎn)換為字典,鍵為字符串,值為順序號
        If Not dict.Exists(s) Then x = x + 1: dict(s) = x
    Next
    x = 0: dc = dict.Count: a = TypeName(UBound(arr, 2))  '利用報錯判斷,獲取數(shù)組維數(shù)
    If a = "" Then  'arr為一維數(shù)組
        c = UBound(arr) - LBound(arr) + 1: ReDim temp(1 To c, 1 To 2): ReDim result(1 To c)
        For Each a In arr  'temp數(shù)組,第1列為對應(yīng)arr的值,第2列為排序序號
            x = x + 1: temp(x, 1) = a
            For Each k In dict.keys
                If a = k Then
                    temp(x, 2) = dict(k): Exit For    '全部相同,使用排序序號
                ElseIf start And a Like k & "*" Then  '開頭符合,使用排序序號+0.1
                    temp(x, 2) = dict(k) + 0.1: Exit For
                End If
            Next
            If Len(temp(x, 2)) = 0 Then temp(x, 2) = dc + 1  '都不符合,排在最后
        Next
        temp = bubble_sort_arr(temp, 2)  '調(diào)用函數(shù)排序
        For x = 1 To c  '排序結(jié)果寫入result數(shù)組,并輸出
            result(x) = temp(x, 1)
        Next
        按指定順序排序 = result
    Else  'arr為二維數(shù)組
        If LBound(arr) = 0 Or LBound(arr, 2) = 0 Then  '轉(zhuǎn)為從1開始計數(shù)
            arr = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))
        End If
        c = UBound(arr): ReDim temp(1 To c, 1 To 2): ReDim result(1 To c, 1 To UBound(arr, 2))
        For x = 1 To c  'temp數(shù)組,第1列為對應(yīng)arr的序號,第2列為排序序號
            temp(x, 1) = x: a = arr(x, key_col)  'key_col從1開始計數(shù)
            For Each k In dict.keys
                If a = k Then
                    temp(x, 2) = dict(k): Exit For    '全部相同,使用排序序號
                ElseIf start And a Like k & "*" Then  '開頭符合,使用排序序號+0.1
                    temp(x, 2) = dict(k) + 0.1: Exit For
                End If
            Next
            If Len(temp(x, 2)) = 0 Then temp(x, 2) = dc + 1  '都不符合,排在最后
        Next
        temp = bubble_sort_arr(temp, 2)  '調(diào)用函數(shù)排序
        For i = 1 To c  '排序結(jié)果寫入result數(shù)組,并輸出
            x = temp(i, 1)
            For j = 1 To UBound(arr, 2)
                result(i, j) = arr(x, j)
            Next
        Next
        按指定順序排序 = result
    End If
End Function
  • 舉例1
Sub 排序測試1()
    Dim arr, brr, crr
    '一維數(shù)組
    arr = Array("A", "B", "C", "D", "E", "F")
    brr = Array("AA", "C", "BB", "B", "CC", "A")
    crr = 按指定順序排序(arr, brr)
    [e1].Resize(1, UBound(crr)) = crr  '一維數(shù)組單行輸出
    '二維數(shù)組
    arr = [a1].CurrentRegion: brr = [c1].CurrentRegion
    crr = 按指定順序排序(arr, brr)
    [e1].Resize(UBound(crr), UBound(crr, 2)) = crr  '二維數(shù)組單列輸出
End Sub

start參數(shù)為默認值False,字符串完全相同時確定序號
Excel·VBA按指定順序排序函數(shù),# Excel,VBA,算法,excel,算法,vba,排序算法
start參數(shù)為True,使用開頭匹配模式,字符串完全相同或開頭相同時確定序號,結(jié)果與上面不同
Excel·VBA按指定順序排序函數(shù),# Excel,VBA,算法,excel,算法,vba,排序算法

  • 舉例2
Sub 按指定順序排序_測試()
    Dim arr, brr, crr
    arr = [a1].CurrentRegion: brr = [c1].CurrentRegion
    crr = 按指定順序排序(arr, brr, , True)  '開頭匹配模式
    [f1].Resize(UBound(crr), UBound(crr, 2)) = crr
End Sub

start參數(shù)為True,使用開頭匹配模式,字符串完全相同或開頭相同時確定序號
Excel·VBA按指定順序排序函數(shù),# Excel,VBA,算法,excel,算法,vba,排序算法文章來源地址http://www.zghlxwxcb.cn/news/detail-824169.html

到了這里,關(guān)于Excel·VBA按指定順序排序函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Excel VBA 復(fù)制除指定工作表外所有的工作表的內(nèi)容到一張工作表中

    Excel VBA 復(fù)制除指定工作表外所有的工作表的內(nèi)容到一張工作表中

    當我們有一張表里面有很多sheet 具有相同的表結(jié)構(gòu),如果需要匯總到一張表中,那么我們可以借助VBA 去實現(xiàn)匯總自動化 示例1 : 運行結(jié)果如下: 示例2 : 如下圖所示 匯總的時候需要插入一個新列,填入各個sheetname ; 各個sheet 有合并單元格,匯總之后需要拆分合并單元格并

    2024年02月12日
    瀏覽(27)
  • EXCEL VBA從入門到精通 第九章:Excel VBA高級編程技巧

    介紹Excel VBA中的API編程,以及如何利用它們來訪問Windows系統(tǒng)的功能。 Excel VBA提供了訪問Windows系統(tǒng)API的功能,通過調(diào)用API函數(shù)可以訪問Windows系統(tǒng)底層的功能和資源,例如操作系統(tǒng)、文件系統(tǒng)、網(wǎng)絡(luò)、注冊表等。API函數(shù)可以是Windows操作系統(tǒng)內(nèi)置的函數(shù),也可以是Windows DLL文件中

    2024年02月02日
    瀏覽(25)
  • EXCEL VBA從入門到精通 第一章:VBA入門

    介紹VBA的定義,作用和優(yōu)點。 VBA(Visual Basic for Applications)是一種編程語言,是微軟Office套件中的一個重要組成部分,主要用于自動化處理Office中的各種操作,包括Excel、Word、PowerPoint、Outlook等。 VBA是一種基于VB(Visual Basic)語言的編程語言,它具有簡單易學、功能強大、靈

    2024年02月07日
    瀏覽(28)
  • 掌握 Microsoft Excel 宏和 Excel VBA

    掌握 Microsoft Excel 宏和 Excel VBA

    掌握 Microsoft Excel 宏和 Excel VBA 基于項目的 Excel VBA(Visual Basic for Applications)和 Excel 宏課程 課程英文名:Master Microsoft Excel Macros and Excel VBA 此視頻教程共27.0小時,中英雙語字幕,畫質(zhì)清晰無水印,源碼附件全 課程編號:286 百度網(wǎng)盤地址:https://pan.baidu.com/s/1ivLIGKt_3R0wncmCswMTR

    2024年02月05日
    瀏覽(22)
  • Excel VBA 語法基礎(chǔ)

    VBA(Visual Basic for Applications)是一種用于宏編程和自動化任務(wù)的編程語言,廣泛應(yīng)用于 Microsoft Office 套件中的各種應(yīng)用程序,如 Excel、Word 和 PowerPoint。掌握 VBA 基礎(chǔ)語法可以幫助您通過編寫自定義的宏來增強和自動化這些應(yīng)用程序的功能。 本文將介紹 Excel VBA 的基礎(chǔ)語法,幫

    2024年02月09日
    瀏覽(26)
  • Excel+VBA幫助

    ?目錄 一、VBA 入門知識 1、激活工作簿 2、創(chuàng)建新工作簿 3、打開工作簿 4、用編號引用工作表 5、用名稱引用工作表 6、將文檔保存為 Web 頁 7、用 A1 樣式的記號引用單元格和單元格區(qū)域 8、用編號引用單元格 9、引用行或列 10、用快捷記號引用單元格 11、引用命名單元格區(qū)域

    2024年02月05日
    瀏覽(18)
  • 【一】Excel VBA開發(fā) 初探

    【一】Excel VBA開發(fā) 初探

    1、點擊Excel左上角的【文件】,然后點擊文件下方的【選項】 2、【Excel選項】中點擊【自定義功能區(qū)】,右邊勾選【開發(fā)工具】,點擊【確定】 ?3、返回excel sheet 頁面。點擊【開發(fā)工具】,我們將看到三個我們開發(fā)過程中必用的按鈕,分別是:【Visual Basic】、【宏】、【錄制

    2024年02月11日
    瀏覽(23)
  • VBA技術(shù)資料MF43:VBA_Excel中自動填充

    VBA技術(shù)資料MF43:VBA_Excel中自動填充

    【分享成果,隨喜正能量】以時寢息,當愿眾生,身得安隱,心無動亂。愿我們都能,夢見幸福!在踉蹌中前進,在跌倒后躍進,逐漸強大.。 我給VBA的定義:VBA是個人小型自動化處理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高數(shù)據(jù)的準確度。我的

    2024年02月12日
    瀏覽(28)
  • VBA技術(shù)資料MF35:VBA_在Excel中過濾數(shù)據(jù)

    VBA技術(shù)資料MF35:VBA_在Excel中過濾數(shù)據(jù)

    【分享成果,隨喜正能量】好馬好在腿,好人好在嘴。不會燒香得罪神,不會講話得罪人。慢慢的你就會發(fā)現(xiàn),一顆好心,永遠比不上一張好嘴。。 我給VBA的定義:VBA是個人小型自動化處理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高數(shù)據(jù)的準確度。

    2024年02月14日
    瀏覽(26)
  • Excel·VBA合并工作簿2

    Excel·VBA合并工作簿2

    其他合并工作簿的方法,見之前的文章《Excel·VBA合并工作簿》 與之前的文章《Excel·VBA合并工作簿(3,合并文件夾下所有工作簿中所有工作表)》類似,但是按照表頭名稱,將表格數(shù)據(jù)匯總至合并表格,表頭名稱相同的在同一列 舉例 共5個工作簿13個工作表,并且改變了C、

    2024年01月21日
    瀏覽(49)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包