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

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

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

3d10dcab7e5b20044f7b4c4bde0ea316.png

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

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

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

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

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

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

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

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

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

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

fcd3df991f3a3d3c69701b2e6591eb0b.png

隨后我們再定義兩個字符串變量: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

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

3b0a0ff5dc8f7443e070e515613fc903.png

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

dbc7afc4feec29bf148ffeae647cb63f.png

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

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457974.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457974.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457974.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SecureCRT:保存輸出日志的方法

處理地址&#xff1a; http://blog.sina.com.cn/s/blog_64c1dd210101gzgz.html 或者&#xff1a; http://renchen.blog.51cto.com/4531967/1195862 重點在與設定文檔的文件名稱&#xff0c;里面有說明。 http://renchen.blog.51cto.com/4531967/1195862轉載于:https://www.cnbl…

redhat虛擬機安裝

做過好多使用VMware workstation虛擬機搭建的系統&#xff0c;這是我第一次使用Virtual Box&#xff0c;感覺跟Vmware差不多&#xff0c;我的本子的系統是win7 64位。 下面演示安裝的是在VirtualBox里安裝rhel 6.4 linux 64位系統。 一、VirtualBOX 版本。 二、虛擬機的配置。…

mysql 查看表v空間自增漲_MySQL InnoDB表空間加密

從 MySQL5.7.11開始&#xff0c;MySQL對InnoDB支持存儲在單獨表空間中的表的數據加密 。此功能為物理表空間數據文件提供靜態加密。該加密是在引擎內部數據頁級別的加密手段&#xff0c;在數據頁寫入文件系統時加密&#xff0c;加密用的是AES算法&#xff0c;而其解密是在從文件…

arm之mmu原理

實驗目的&#xff1a;啟用MMU&#xff0c;映射SDRAM的地址空間&#xff0c;操作虛擬地址實現“點燈大法”&#xff0c;借此掌握MMU的使用。實驗環境及說明&#xff1a;恒頤S3C2410開發板H2410。H2410核心板擴展有64MB的K4S561632 SDRAM(4M*16bit*4BANK)&#xff0c;地址范圍是0…

osal_start_timerEx(Lock_TaskID,SBP_START_DEVICE_EVT,SBP_PERIODIC_EVT_PERIOD)的理解

osal_start_timerEx(Lock_TaskID,SBP_START_DEVICE_EVT,SBP_PERIODIC_EVT_PERIOD)與osal_set_event(Music_TaskID,event)的區別是osal_start_timerEx周期性的一直推送事件周期時間由SBP_PERIODIC_EVT_PERIOD決定&#xff0c;而osal_set_event是只推送一次。osal_start_timerEx開…

ideaspringboot項目上傳服務器_PHP中使用 TUS 協議來實現可恢復文件上傳

曾經嘗試過用PHP上傳大文件嗎&#xff1f;想知道您是否可以從上次中斷的地方繼續上傳&#xff0c;而不會在遇到任何中斷的情況下再次重新上傳整個數據&#xff1f;如果您覺得這個場景很熟悉&#xff0c;請接著往下閱讀。文件上傳是我們幾乎所有現代Web項目中的一項很常見的任務…

無密碼登陸

server A /B以root賬戶在A上無密碼ssh到B方式一ON A:ssh-keygen -t dsa -P -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys service sshd restart ON B:ssh-keygen -t dsa -P -f ~/.ssh/id_dsa cat ~/.ssh/id_d…

嵌入式常見筆試題總結

預處理器&#xff08;Preprocessor&#xff09;1. 用預處理指令#define 聲明一個常數&#xff0c;用以表明1年中有多少秒&#xff08;忽略閏年問題&#xff09; #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在這想看到幾件事情&#xff1a; 1). #define 語法的基本知識…

【轉】php利用mkdir創建多級目錄

先介紹一下 mkdir() 這個函數&#xff1a; mkdir($path,0777,true); 第一個參數&#xff1a;必須&#xff0c;代表要創建的多級目錄的路徑&#xff1b; 第二個參數&#xff1a;設定目錄的權限&#xff0c;默認是 0777&#xff0c;意味著最大可能的訪問權&#xff1b; 第三個參數…

java使用xml存儲數據_用存儲過程和 JAVA 寫報表數據源有什么弊端?

用存儲過程和 JAVA 寫報表數據源有什么弊端&#xff1f;跟著小編一起來一看一下吧&#xff01;我們在報表開發中經常會使用存儲過程準備數據&#xff0c;存儲過程支持分步計算&#xff0c;可以實現非常復雜的計算邏輯&#xff0c;為報表開發帶來便利。所以&#xff0c;報表開發…

GIT文件的三種狀態

對于任何一個文件&#xff0c;在 Git 內都只有三種狀態&#xff1a;已提交&#xff08;committed&#xff09;&#xff0c;已修改&#xff08;modified&#xff09;和已暫存&#xff08;staged&#xff09;。已提交表示該文件已經被安全地保存在本地數據庫 中了&#xff1b;已修…

嵌入式常見筆試題總結(2)

預處理器&#xff08;Preprocessor&#xff09;   1. 用預處理指令#define 聲明一個常數&#xff0c;用以表明1年中有多少秒&#xff08;忽略閏年問題&#xff09;   #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL   我在這想看到幾件事情&#xff1a;   1). #…

MAC OS上JAVA1.6 升級1.7,以及?maven3.2.1配置

一、我的MAC系統 預裝的Jdk是1.6&#xff0c;由于需要使用eclipse MARs 2版本&#xff0c;故需要升級到1.7 二、下載JAVA jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 不知道為什么直接下非常慢&#xff0c;后來用的迅雷就超級快…

sql server 創建唯一性非聚集索引語句_數據庫專題—索引原理

深入淺出數據庫索引原理參見:https://www.cnblogs.com/aspwebchh/p/6652855.html1.為什么給表加上主鍵&#xff1f;1.平時創建表的時候&#xff0c;都會給表加上主鍵。如果沒有主鍵的表&#xff0c;數據會一行行的排列在磁盤上&#xff0c;查找一個數據需要一條條的進行對比。而…

String,StringBuffer,StringBuilder區別

String 字符串常量StringBuffer 字符串變量&#xff08;線程安全&#xff09;StringBuilder 字符串變量&#xff08;非線程安全&#xff09; 簡要的說&#xff0c; String 類型和 StringBuffer 類型的主要性能區別其實在于 String 是不可變的對象, 因此在每次對 String 類型進行…

oracle數據庫更新語句_20_手把手教你學Python之操作數據庫

數據庫是數據的倉庫&#xff0c;將大量數據按照一定的方式組織并存儲起來&#xff0c;方便進行管理和維護&#xff0c;例如快速檢索和統計等。數據庫的主要特點&#xff1a;以一定的方式組織、存儲數據&#xff1b;能為多個用戶共享&#xff1b;與程序彼此獨立。……數據庫管理…

第十周學習進度

第十周 所花時間&#xff08;包括上課&#xff09; 10小時 代碼量&#xff08;行&#xff09; 0行 博客量&#xff08;篇&#xff09; 4篇 了解到的知識點 對各組進行評價&#xff1b;思考并回復各組 轉載于:https://www.cnblogs.com/qwer111/p/5470819.html

嵌入式常見筆試題總結(3)

1:設float a2, b4, c3&#xff1b;&#xff0c;以下C語言表達式與代數式 (ab)c計算結果不一致的是 A.(ab)*c/2 B.(1/2)*(ab)*c C.(ab)*c*1/2 D.c/2*(ab) 參考答案&#xff1a;B&#xff0c;因為a,b,c三個變量都是浮點數&#xff0c;所以在B答案中其結果是0&#xff0c;因為…

查詢Oracle正在執行的sql語句

--查詢Oracle正在執行的sql語句及執行該語句的用戶 [sql] view plaincopy SELECT b.sid oracleID, b.username 登錄Oracle用戶名, b.serial#, spid 操作系統ID, paddr, sql_text 正在執行的SQL, b.machine 計算機名 FROM v$p…

WinForm 清空界面控件值的小技巧

WinForm 清空界面控件值的小技巧 原文:WinForm 清空界面控件值的小技巧在WinForm里面有時候需要清空自己輸入內容或是選擇的選項&#xff0c;以便重新操作流程&#xff0c;那么一般你是怎么清空界面各個控件值的呢&#xff1f;如果窗體里面控件&#xff0c;尤其是TextBox控件比…