Excel獲取單元格批註

量子物理學發表於2016-03-29

 Microsoft Office中的Excel軟體有著強大的資料統計分析功能,最近自己碰到一個問題,需要將一列單元格中的批註提取到另外的一列中去。如果數量比較少大可以通過“Ctrl+C”和“Ctrl+V”來實現,但是面對成百上千行資料的就出現麻煩了。自己就在網上搜尋了一些關於此方面的資料,發現Excel有兩個方面的應用非常實用:VBA和巨集表函式,這裡只是舉出其中兩個簡單的例子,如有興趣可以深究。

一、獲取單元格批註

    VBA全稱為:Visual Basic for Applications,是一種Visual Basic的一種巨集語言,主要能用來擴充套件Windows的應用程式功能,特別是Microsoft Office軟體。雖然這種語言較為古老,但在Microsoft Office軟體風靡全球的情形下還是有很大的應用價值,特別是一些使用者非常熟悉了Excel的操作介面之後就對它有著非常大的依賴性,通過Excel自帶的VBA程式來對資料進行處理可以帶來極大的方便。

    下面就講講如何通過VBA獲取單元格的一個小例子,主要參考了http://club.excelhome.net/forum.php?mod=viewthread&tid=938019中5樓“xinhunter”發的帖子來實現的。

    如下圖所示,A列中有多行帶有批註的單元格,如何將A列中的單元格都提取到對應的E列中來呢?通過如下的幾個步驟可以成功地獲取單元格批註。

1、  開啟VBA,新建模組,建立使用者自定義函式,如下圖所示:

2、  編寫自定義函式GetComment()

    Function GetComment(myRange As Range) As String

        GetComment = myRange.Comment.Text

      End Function

    如下圖所示:

 

 

3、  呼叫自定義函式GetComment()。在E1的編輯框中輸入:=GetComent(A1),選定之後按“F9”,就會變成如下的情況:

 

 

  按“F9”呼叫GetComment()函式之後,成功獲取批註如下:

 

 

4、  呼叫SUBSTITUTE()函式,去掉多餘文字

從上圖可以看出,E1單元格中已經成功地將A1中的批註獲取到了,但是包含了當前編輯者的姓名,如上圖中的“ZKH:”,可以通過呼叫如下函式去掉多於的使用者名稱文字。如下圖所示:

 

 

 

    5、拖拽填充柄,依次獲取單元格批註  

    

 

二、獲取某路徑下檔名

    除了Excel自帶的函式以及通過VBA自定義的函式之外,我們在Excel中有可能用到的一種函式叫做“巨集表函式”,以下也通過一個具體的應用小例子來簡單演示。

    在應用過程中,也許會碰到將一堆檔案的名字加以統計起來的需求,如果檔案數較多的時候是個麻煩的事情,Excel中自帶的巨集表函式可以很輕鬆地解決類似這樣的問題,主要以下操作步驟:

1、  定義新名稱

    通過“公式→定義新名稱”,定義一個“myfile”的巨集表函式,其中名稱myfile呼叫了Excel中自帶的“FILES()”的函式,如下所示:

2、  呼叫myfiles(),在C1輸入“=myfile”按“F9

路徑檔案如下:

  執行效果如下:

3、  調整效果

    如上圖所示,將“D:\新建資料夾\”路徑下的4個檔名都獲取到C1的單元格中,能否將檔名逐個地依次獲取到單元格呢?答案是可以的,我們還可以對指定的檔案型別加以獲取:

呼叫INDEX()函式,如下:

  拖拽填充柄如下:

4、  加條件判斷

如上圖所示,下拉的單元格數超出了檔案數的時候,容易出現錯誤亂碼如“#REF!”,可通過IF條件函式加以判斷如下:

5、  指定檔案型別獲取

如在myfiles名稱中指定檔案型別,所定義的巨集表函式可只獲取指定的檔名列表,如下指定.xls檔案型別:

結果如下:

 2014-10-27,為了每次使用方便,通過程式碼建立以上名稱以及呼叫:

//VBA,執行巨集建立名稱:

Sub myFile()
' 獲取路徑下所有檔名'
  ActiveWorkbook.Names.Add Name:="myfile", RefersToR1C1:= _
    "=FILES(""C:\Users\ZKH\Desktop\2014-10-20\*.*"")"
  ActiveWorkbook.Names("myfile").Comment = ""
End Sub

 

//呼叫

=IF(ROW()>COUNTA(myfile),"",INDEX(myfile,ROW()))

相關文章