日常工作中常常要用excel處理這樣或那樣的資料,其中excel的公式以及macro的使用會減少很多的重複工作。有些操作在vba中很容易實現,但是如果僅僅使用公式時,很多操作就不容易實現了。本文記錄一些我常用到的公式。
一、擷取當前sheet名
在當前sheet中,取得sheet名的操作:
=mid(cell("filename",a1),find("]",cell("filename",a1))+1,len(cell("filename",a1)))
解說:1. cell("filename",a1)
可以取得類似 d:\test\[test.xls]sheet1 的字串。其中sheet名是當前所在sheet的名稱。
2. 通過mid來解析並拆分出字串sheet1,以達到目的。
二、獲得當前workbook的sheet一覽。
這個操作需要使用workbook的name定義。
操作方式:
1. 增加name定義sht,內容為
=replace(get.workbook(1), 1, find("]", get.workbook(1)), ) & t(now())
2. 在公式中使用時,用index(shts, 數字) 來取得對應的sheet名。
例如:=if(row()>counta(shts),"",hyperlink("#"&index(shts,row())&"!a1",index(shts,row())))
上面的公式得到的結果是,以行號(row())為索引,逐行顯示sheet名,並且將顯示單元格連線到對應的sheet中的a1單元格上。
解說:1. name定義中,使用 & t(now())的意圖是隨時更新鏈結資訊,如果沒有,則在修改後,可能出現使用的列表是修改前的情況。
2. get方法,必須在name定義中使用,直接寫在公式中,不會被識別。查詢了一下原因,是因為get方法是巨集表函式。關於get,還有get.document等。
增加name的vba
sub addname()三、取得字串對應的單元格的值dim strname as string
strname = "shts"
names.add name:=strname, referstor1c1:= _
"=replace(get.workbook(1),1,find(""]"",get.workbook(1)),)&t(now())"
end sub
=indirect(address(3, 2, 1, false, index(shts,(row()+2))), false )
解說:1. address函式,返回類似sheet1!$e$4的字串。
2. indirect函式,返回指定字串對應的單元格的內容。
excel求和為零的解決方法
某天,有個妹子發過來資訊說是需要計算某一行的值,使用了sum函式,但始終是0,如下圖 作為程式設計師,第乙個想法就是這一列裡邊有字串,所以他的和是0,於是我就有了如下操作 全選這一行,右鍵設定單元格格式,選中數值,然後再用sum求和。這樣大多同學就好使了,但我的還是不好使。於是上網找教程,看到rep...
C 呼叫Excel版本不相容的解決方法
在安裝了office 2010的機器上開發出來的 作用 寫excel 程式,是無法在2003版本上執行的 其原因是版本不相容 報錯資訊如上所示。產生的原因 1。我們不可以直接拷貝.exe給使用者使用,因為相關依賴包在使用者電腦上不存在。所以,我們應該生成安裝檔案,然後進行安裝 在安裝過程中,我們需要...
Excel 2016 開啟後空白的解決方法
最近使用excel 2016時遇到乙個這樣的狀況,就是雙擊開啟乙個有內容的xlsx 後顯示空白,用管理員身份開啟也是一樣,這裡總結一下解決方法 說明 office 2016在安裝時會預設安裝在系統盤,都不給修改安裝位置的機會,我的安裝位置是做了修改的 修改office 2016安裝位置的方法 安裝位...