Vba第四十三課

2020-09-19 EXCEL初學進階

Vba第四十三課

關於vba操作工作表、數組、字典等所有的基本功能如果大家仔細去學習、認真敲代碼的話,數據分析應該是入門,當然vba作vb的分支語言,在office的平臺上去運行還是大有作為的,更深層次的功能都相當不錯,而前面的課程所講的功能基本可以定義為少量數據的清洗運算功能,要達到數據分析的水平是遠遠不夠的,比如操作資料庫、自定義函數等等都是數據分析的一些必要技巧,後面也會慢慢上傳教程,今天就講一下自定義函數;

自定義的函數可以在工作表中使用,也可以在VBA過程裡使用,函數其實是一組可重複使用的代碼,可以在程序中的任何地方調用。這消除了一遍又一遍地編寫相同的代碼的需要,這樣能夠將一個大程序劃分成許多小的可管理的功能模塊。

例:

Public Function SfzId(ID) As String

If Len(ID) = 18 Then

SfzId = IIf((Mid(ID, 17, 1) Mod 2) = 0, &34;, &34;)

Else

SfzId = &34;

End If

End Function

代碼解析:

Public Function SfzId(ID) As String

Public表示定義的模塊級變量(也就是SfzId)對外界可見,可以被本模塊和其他模塊使用。而Private定義的模塊級變量,只能用於本模塊,不能被其他模塊調用。一般情況Public用的較多;

Function表示是定義了一個函數,這是自定函數必須要寫的名稱,就像sub一樣約定俗成的;

SfzId 給這個自定義函數起一個名字,不能跟系統已有的函數同名,也不能使用保留的欄位;

(ID)就是這個函數要加的參數,可以是多個,上圖中ID代表的就是要放入函數的參數,也就是身份證號,如果下面的代碼要使用多個參數,這裡也必須定義兩個參數;

If Len(ID) = 18 Then 判斷身份證是否等於18位,如果有運行下面的代碼,沒有就運行else後的代碼,len表示計算ID的長度;

SfzId = IIf((Mid(ID, 17, 1) Mod 2) = 0, &34;, &34;) 表IIF後面運算的值賦給函數名(SfzId);在vba中if可以直接調用,但必須寫成IIF,Mid截取字符,表示從ID也就是身份證號中的第17位後截取1個字符,Mod表示求餘數,也就是mid截取的值除以2,如果沒有餘數表示為0,通過Iff來斷是男是女,我們知道身份證倒數第2位能被2整除就是女性,不能整除就是男性,這樣就通過多個Excel中自帶的函數來進行運算;

在圖中方框中就顯示這個自定義函數可以直接在excel中直接使用,當然在程序中怎麼調用呢;

例:

Sub strSex()

Dim a As Integer

arr = Sheets(1).Range(&34;)

For a = 1 To UBound(arr)

arr(a, 2) = SfzId(arr(a, 1))

Next

Sheets(1).[a2].Resize(UBound(arr), UBound(arr, 2)) = arr

End Sub

如圖:

arr(a, 2) = SfzId(arr(a, 1))這句代碼就是調用了這個自定義函數,當我們有多段代碼,簡單說有多個sub時都要用到這個自定義函數時,就不必要重複寫了,直接調用,然後運行自定義函數中的所有代碼;

如果對自定義函數的參數不是太明白的話,大家可以簡單的做一個求長方形面的自定義函數,也就是長*寬,那麼這裡就要兩個參數(長、寬),自已動手試一試,有問題的話可以留言;

如果覺得有幫助的話記得關注和點讚,有不懂的地方可以私信我,需要表格素材的也可私信給我轉發給你們。

如果各位在實際工作中遇見excel常規方法無法解決的或操作比較複雜的報表可以私信我,可以免費編寫代碼來解決!

相關焦點

  • Vba第十九課
    Vba第十九課Like 運算符Like用來比較兩個字符串,比較運算裡面就涉及到通配符,下面介紹一下:「?」代表任何一個單一字符「*」 代表零個或多個字符「#」 代表任何一個數字(0-9)Like對英文字符比較是區分大小寫的,也就是不匹配例:Sub like語句() If 「Vba」 like 「vba」 then Msgbox」匹配」 Else Msgobx」不匹配」
  • vba第十七課
    vba第十七課with語句當對某一個對象執行一系列語句時,不用重複指出對象名稱例:用vba代碼進行排版,加上黑色邊框,設置行高為30,垂直居中,水平居中、字體大小為18,寬度自適應Sub with語句()With Sheets(1).Range("a1:f11") .Borders.ColorIndex
  • vba第十五課
    vba第十五課跳轉語句goto:指無條件地轉移到過程中指定的行,直接進例子:例:Sub goto跳轉()Dim a!
  • excel VBA是什麼?VBA編程入門教程
    本篇將介紹excel vba是什麼?vba編程入門教程,有興趣的朋友可以了解一下!一、excel vba是什麼?VBA的英文全稱是Visual Basic for Applications,是一門標準的宏語言。VBA語言不能單獨運行,只能被office軟體(如:Word、Excel等)所調用。
  • 時政熱點:中華人民共和國主席令(第四十三號)
    時政熱點:中華人民共和國主席令(第四十三號)由北京人事考試網提供:更多關於時政熱點,國考時政,省考時政的內容請關注北京人事考試網!或關注北京華圖微信公眾號(bjhuatu),北京華圖諮詢電話:400-010-1568。
  • 「Python替代Excel Vba」系列(終):vba中調用Python
    最後,定義一個方法,讓vba調用。如下圖:這個方法的上方套上一個 xlwings 的裝飾器 @xw.func。表示這個方法需要註冊到 Vba 模塊中。外部傳入的是字符串,比如參數 groups 可以是 "col1,col2",因此需要對 groups 和 values 參數調用 split 分裂成列表。然後就順序調用之前定義的2個方法 where_df 和 group_df。
  • Vba第三十七課
    Vba第三十七課三十六課預留作業代碼詳解:如圖:使用數組對B3:G15單元格區域的基礎數據一次性生成J3:O9單元格區域的匯總結果, UBound(brr, 2)) = brrc = Sheets(1).Range(&34;).End(xlDown).RowSheets(1).Range(&34; & Sheets(1).Cells(c, 15).Address(0, 0)).Borders.ColorIndex = 1End Sub代碼分析:綜合了三十五課和三十六課的內容
  • 中國化學會第32屆學術年會 | 第四十三分會:納米催化
    中國化學會第32屆學術年會 | 第四十三分會:納米催化 2020-12-23 17:47 來源:澎湃新聞·澎湃號·政務
  • Vba第三十六課
    Vba第三十六課利用數組提取不重複值Address(0, 0)).Borders.ColorIndex = 1加上邊框,注意15表示15列,從圖中我們可以知道是一個固定值,當然我們也可以自動獲取,代碼為Sheets(1).Range(&34;).End(xltoleft).column,獲取第二行的最後一列,然後把它的值賦給一個變量就可以;留個作業:把第三十五課與三十六課的要求合併
  • word vba 案例
    前期分享了部分word vba案例,今天分享代碼【字體設置】Sub FontSet() Set MyRange = ActiveDocument.Paragraphs(1).Range With MyRange.Font .Bold = True .Name = "黑體" .Size
  • VBA編程理論學習之談
    有些是解決基本應用需求,也有一些是Excel vba基礎的對象以及屬性功能介紹。總的來說,這個月有一些進展,也有一些心得和知識積累。有幾篇比較不錯的文章持續得到展示和瀏覽,說明這方面還是做到了大多數關注。所以也對這些文件做進一步修改,以完善其功能。同時也查漏一些錯誤存在。
  • Vba第三十三課
    Vba第三十三課數組很重要的一個特點就是讀寫速度快,因為數組的數據是存儲在電腦的內存中,操作數據,之前用的是單元格循環,可以看作是在硬碟中操作數據。內存當然比硬碟要快的多了。另一個就是可以將單元格區域賦值給數組,極大的簡化了VBA代碼。
  • Vba第三十四課
    Vba第三十四課數組的實際運用如下圖,如何把表裡的數據加入到數組當中並進行運算,求出庫存數量:[aa2].End(xlToLeft).Column).Address(0, 0))這句代碼表示上圖A2:H2的數據放入數組,後面雖然比較長,但意思很簡單就是自動獲取表格範圍,就是獲取到最後一行和最後一列的地址,也就是H2這個單元格的地址,大家可以在我二十八課的教程了解其意思;For a = 2 To UBound(arr)
  • Excel VBA Programming For Dummies, 5th Edition 電子書分享
    Excel vba編程的假人介紹了一系列新的Excel選項,從最重要的工具和操作為Visual Basic編輯器開始。在內部,您將找到用Excel編程的基本元素和概念的概述。您很快就會發現處理錯誤和消除錯誤、處理範圍對象和控制程序流等技術。有了關於開發自定義對話框、工具欄和菜單最簡單方法的友好建議,讀者將根據自己的獨特需求定製Excel應用程式!
  • Vba第三十九課
    Vba第三十九課Vba中index函數使用如圖:
  • Vba第三十八課
    Vba第三十八課利用數助多表格數據合併如圖:
  • vba Page分頁控制項使用方法介紹
    分頁在vba編程中使用,會大大增加程序的整潔度,也是應用程式比較實用的一個功能。基本說一下Page使用方法,包括添加分頁、刪除分頁、和設置分頁屬性等幾點比較重要的內容。一個表單示例,標題分布以按鈕形式來顯示,默認為標籤形式。
  • Excel製作二維碼生成器,會vba就是不一般
    二維碼生成器,想必不陌生,用Excel vba 可以很好地生成二維碼。在一些信息記錄過程當中,也有一些實際的用處。下面介紹一下如何用vba代碼生成二維碼。下面看下效果圖左側是生成的二維碼,右側是一個文本框,輸入要二維碼存儲的信息。
  • excel怎麼利用vba獲取單元格交叉範圍的數據
    excel中使用vba獲取多個單元格區域的交叉範圍  1、首先我們打開一個工作樣表作為例子。   3、實際上我們用vba可以方便的對這個區域作出選擇。
  • Excel vba 批量刪除窗體控制項
    文/江覓易見動態創建窗體控制項後,可以進行動態刪除,如果是設計時從工具欄添加的控制項,不能動態刪除,不要問為什麼vba就是這麼規定的,也可以認為這是一個BUG,反正就是不能。其實,vba編程並不十分理想,因為有很多不可預知的問題出現,而且依賴環境也十分不友好,由於版本不同,同樣的文件就不能很好地運行,這也是一個不小的麻煩。因為在自己的電腦上編寫好的程序,換一臺電腦可能就無法運行,運行環境改變相應地要做一些系統設置,不然程序不能很好地發揮作用。