利用VBA統計給定字符串中每個字符出現的次數

大家好,今日推出常用"積木"過程案例分享第306期,今日內容是利用字典,利用VBA統計給定字符串中每個字符出現的次數。提供給大家的這些內容是我多年經驗的記錄,來源於我多年的實踐。大家在學習VBA的時候,可以把這些代碼塊作為一塊塊的積木對待,平時積累,用時拿來修正、組合。這就是我的"積木編程"的思想,這些講解就是我推出的"積木"方案,希望大家加以利用。最近代碼多是出自我的第三套教程"VBA數組與字典解決方案"。

利用VBA統計給定字符串中每個字符出現的次數

Sub mynzsz_73()

Sheets("73").Select

mystr = Cells(1, 5)

Set mydic = CreateObject("scripting.dictionary")

For i = 1 To Len(mystr)

temp = Mid(mystr, i, 1)

If Not mydic.exists(temp) Then

mydic.Add temp, 1

Else

mydic(temp) = mydic(temp) + 1

End If

Next

[a:b].ClearContents

[a1:b1] = Array("字符", "出現次數")

[a2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.Keys)

[b2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.items)

Set mydic = Nothing

MsgBox "ok!"

End Sub


代碼講解:

1) 上述代碼實現了從一個字符串中統計字符數的功能,首先將字符串放到mystr 中,利用Mid(mystr, i, 1) 函數來分別提取每個字符,放到字典中,用鍵值統計出現的次數.

2) temp = Mid(mystr, i, 1) 從mystr的字符串中第的位置提取一個字符,也就是說將字符串的每個字符都要提取出來。

3) If Not mydic.exists(temp) Then

mydic.Add temp, 1

Else

mydic(temp) = mydic(temp) + 1

End If

將每個字符放到字典的鍵中,鍵值計數,每次出現重複值加1.

4) '清空指定區域

[a:b].ClearContents

'回填數據

[a1:b1] = Array("字符", "出現次數")

[a2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.keys)

[b2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.items)

上述預計清空指定區域,回填數據,這裡利用了分別填鍵和鍵值的方法。當然,還可以有其他的方法。

5) Set mydic = Nothing

上述代碼清空內存.


利用VBA統計給定字符串中每個字符出現的次數

我推出的積木編程思想內涵及教程

在我的系列書籍中一直在強調"搭積木"的編程思路,這也是學習利用VBA的主要方法,特別是職場人員,更是要採用這種方案。其主要的內涵:

1 代碼不要自己全部的錄入。你要做的是把積木放在合適的位置然後去修正代碼,一定要拷貝,從你的積木庫中去拷貝,然後修正代碼,把時間利用到高效的思考上。

2 建立自己的"積木庫"。平時在學習過程中,把自己認為有用的代碼放在一起,多積累,在用到的時候,可以隨時拿來。你的積木庫資料越多,你做程序的思路就會越廣。

VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟件沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!

我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程,目前教程均通過32位和64位兩種OFFICE系統測試。

第一套:VBA代碼解決方案 是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程序文件更是一座不可多得的代碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,程序文件通過32位和64位兩種OFFICE系統測試。

第二套:VBA數據庫解決方案 數據庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,程序文件通過32位和64位兩種OFFICE系統測試。

第三套:VBA數組與字典解決方案 數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。

第四套:VBA代碼解決方案之視頻 是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的視頻講解,聽元音更易接受。這套教程還會額外提供通過32位和64位兩種OFFICE系統測試的程序文件。

第五套:VBA中類的解讀和利用 這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。

第六套教程:《VBA信息獲取與處理》,這是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程序信息獲得、隨機信息的利用、電子郵件的發送、VBA互聯網數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。程序文件通過32位和64位兩種OFFICE系統測試。

上述教程的學習順序:1→3→2→6→5或者4→3→2→6→5。提供的程序文件更是一座巨大的代碼庫,供讀者使用,如需要可以聯絡WeChat: NZ9668

VBA學習是一種枯燥的過程

"眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山"。學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。我的教程助力給正在努力的朋友。

"水善利萬物而不爭",綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。學習時微而無聲,利用時則巨則洶湧。"路漫漫其修遠兮,吾將上下而求索"

每一分收穫都是成長的記錄,正是這種執著,成就了秋日的收穫。最後將兩闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:


其一


浮雲掠過,暗語無聲,

唯有清風,驚了夢中啼鶯。

望星,疏移北斗,

奈將往事雁同行。

阡陌人,昏燈明暗,

忍顧長亭。

多少VBA人,

暗夜中,悄聲尋夢,盼卻天明。

怎無憑!


其二


望空,不見雲頭

幾縷秋風,幾片殘陽

幾處雁陣,幾點燈火闌珊

幾行代碼

哪裡是屬性,哪裡是方法

哪裡又是事件

呵,呵

幾根青絲不見額頭


分享我多年工作實際經驗的成果,隨喜這些有用的東西,給確實需要利用VBA的同路人。迴向學習利用VBA的歷歷往事,不勝感慨,謹以這些文字以紀念,


分享成果,隨喜正能量


分享到:


相關文章: