日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

excel 2007 vba与宏完全剖析_Excel宏VBA小技巧系列 | 分段加合

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 excel 2007 vba与宏完全剖析_Excel宏VBA小技巧系列 | 分段加合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
寫在前面的話??知識產權算是一個盛產數據的行業。專利啊商標啊著作啊,都有著錄項目。我們常說的專利分析、產業導航、企業導航、產業預警、競爭情報、技術綜述、知識產權評議等等,常規操作之一就要先處理著錄項目數據,然后再進行不同角度的分析。有的小伙伴們會問,分析啊導航啊預警啊有什么區別啊,不都是一回事兒嗎?君覺得說得很對,就像吃飯:有的人為了減肥,所以糖少一點;有的人為了增肌,所以蛋白質多一點;有的人為了養生,所以注重纖維素和維生素的搭配;吃飯的目的不同,所以食物的結構、成分、數量都不一樣。不過,對大多數過一天算一天的人來說,吃飯就是按部就班、填飽肚子而已。所以說一回事兒也行,說不一回事兒也行,主要看精不精致。
“分析”這種能力,堪稱人類智慧之光。專利分析領域有很多大神,還有許多高明的工具和技巧。不過君對分析是七竅通了六竅——一竅不通,所以分析絕對不是這篇文章的重點。這系列的文章,只想聊幾個Excel宏VBA的小程序(其實并不限于處理專利數據,只是圖個方便圖個開心罷了),篇幅短小,而且比較快更。

假如,某食品企業,每個部門按期提交發明創造。企業統計人員把發明創造的提交日、年份、發明名稱、獎勵系數匯總到一張表里。

如果現在需要分段統計各個部門的獎勵系數的總數,怎么辦呢?有的小伙伴可能手動用SUM函數求和來搞定,或者可能用“合并計算”搞定咯。

不過,雖然手動操作的技巧簡單易學,但當多個數據文件需要一系列的復雜手動操作時,手動操作就存在一些Bug:每換一套數據,就要重新手動操作一遍,并且,如果處理數據的人員更換,這一系列復雜手動操作的可移植性和準確性都比較堪憂。人力因素在處理數據的過程中難以抽離,大家很容易變成“表哥”和“表姐”。相比于人工手動操作,宏VBA程序因為在運行過程中剔除了人工的因素,所以可移植性和準確性都較高。而且,編寫一段程序,相當于對不同的待處理數據固定了相同的“標準”。這個“統計各個部門發明獎勵系數總數”的簡單小例子,著重傳達一種程序思維。

? 第一步:打開宏程序編輯界面

根據Excel版本的不同,可以在 “視圖” 中錄制一個空的宏,停止錄制后進行編輯。也可以在Excel選項的自定義功能區中勾選 “開發工具” 訪問宏功能。

? 第二步:定義Sub過程及變量

我們把完成“按部門加合發明獎勵系數”的這個過程定義為bigtitle,當然,用其他的名字也可以。隨后,我們要定義四個整型變量:

  • i 代表數據區域的行的變量

  • j 代表上一段相同部門底端的行

  • k 代表下一段相同部門底端的行

  • t 代表在一段相同部門的數據范圍內變化的行

隨后我們再定義兩個字符串變量:str1代表第i行的部門名稱,str2代表第i+1行的部門名稱。

寫為:

Sub bigtitle()
Dim i, j, k, t As Integer
Dim str1, str2 As String
*程序主體*
End Sub

? 第三步:梳理循環和條件邏輯

① 第一層循環,i從表的第2行循環賦值至第24行,在i的每次賦值過程中,表中第i列、第3列的部門信息被賦值給str1,同時第i+1行、第3列的部門信息被賦值給str2。

寫為:

For i=2 To 24
? str1 = Sheet2.Cells(i,3)
? str2 = Sheet2.Cells(i+1,3)
? *條件語句*
Next

② 條件語句,當str1不等于str2時,說明i所在的行已經到了該相同部門的最后一行,從i+1行起,就進入了下一個部門。這時,我們把這個i值賦給k,作為該段相同部門底端的行的標記,同時,把原k值賦給j,用于標記上一段相同部門底端的行。在判斷str1和str2是否相同時,我們使用字符串對比函數StrComp。

寫為:

If StrComp(str1, str2, 1) <> 0 Then
? j = k
? k = i
? *第二層循環*
End If

③ 第二層循環,當j和k確定后,從第j+1行到第k行,部門名稱相同,即同一部門。此時設置t變量,其循環范圍從第j+1行到第k行,將在此范圍內的所有第5列的獎勵系數都加總到第k行的第6列。這里需要注意的是,應當設置k的初始值為1。

寫為:

For t = j+1 To kSheet2.Cells(k, 6) = Sheet2.Cells(k, 6) + Sheet2.Cells(t, 5)Next

這樣,運行宏之后,就可以得到各個部門的總獎勵系數:

全體Sub過程如下,由兩層循環和一層條件判斷構成,給大家做個參考。

這樣,當數據量變大時,只需要修改第一層循環中“For i=2 To 24”的24至最后一條數據所在行的行數,然后重新運行宏,即可完成大量數據分段加合的工作。

下期預告: Excel宏VBA小技巧系列之整合排序

總結

以上是生活随笔為你收集整理的excel 2007 vba与宏完全剖析_Excel宏VBA小技巧系列 | 分段加合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。