VBA統計單元格圖片數量

2020-10-20 VBA說

在知乎上遇到了統計圖片的問題。

知乎問題截圖:

答案是:有的。這個問題,用VBA可以快速準確的解決。還可以判斷出重疊覆蓋的圖片。

而且,我還幫他想到了不規範的情況,比如:圖片邊界超出單元格區域,單元格中摻雜非圖片等其他shape對象。

諸如下面截圖:

這是誰做的excel,這麼無規律...

一、實現代碼

代碼及詳細注釋:

Sub 統計單元格圖片個數()
    Dim shp As Shape, arr() As Integer '定義shape對象,定義動態數組用來存儲圖片所在行號
    For Each shp In ActiveSheet.Shapes '對所有shape進行循環,獲取已使用的最大行號
        k = k + 1
        ReDim Preserve arr(1 To k)
        arr(k) = shp.TopLeftCell.Row '使用shape對象的Topleftcell屬性,獲取圖片左側的單元格的行號,存入動態數組
    Next
    rmax = Application.Max(arr) 'max函數,求出數組中存放的最大行號
    For r = 2 To rmax '對A列單元格進行循環,最大行號可以手動輸入
        t = Range("a" & r).Top '獲取單元格的頂部坐標,就是該單元格以上行高的累加
        h = Range("a" & r).Height '獲取單元格的高度
        l = Range("a" & r).Left '獲取單元格的左側坐標
        w = Range("a" & r).Width '獲取單元格的寬度
        c = 0
        For Each shp In ActiveSheet.Shapes
            If shp.Type = 13 Then '當shape對象類型是圖片的時候,才開始統計(圖片的值值13)
                x = shp.Left + shp.Width / 2: y = shp.Top + shp.Height / 2 '分別獲取圖片中心的橫縱坐標
                If x >= l And x <= l + w And y >= t And y <= t + h Then '當圖片中心坐標位於單元格內的時候,累加一次
                    c = c + 1
                End If
            Else
            End If
        Next
        Range("b" & r) = c '將單元格內部的圖片個數寫入單元格
    Next
End Sub

實現效果

二、涉及知識點

· 單元格對象的top/Left/Height/Width屬性

某一個單元格的Top屬性,就是代表從第一行的上邊緣到該單元格的上邊緣之間的距離 (以磅為單位)。Left屬性類比。

圖片對象的top/Left/Height/Width屬性類比學習即可。

· Shape對象

Shape 對象都代表繪圖層中的一個對象,如自選圖形、任意多邊形、OLE 對象或圖片。(來源於幫助文件)

名稱

相關焦點

  • Excel返回第一個與所有非空單元格及統計數量,把空單元格替換為0
    當 Excel 表格中某一列只有一個非空單元格,需要把它的值返回到另一個單元格;這種情況通常要用公式實現;還有一種情況,某一列既有非空單元格又有空單元格,需要把所有非空單元格集中到一起,即要一次返回多個值;這種情況可以用高級篩選實現。
  • Excel vba獲取當前當前單元格的行號和列號
    Excel vba獲取當前當前單元格的行號和列號在Excel單元格中,我們在編寫語句代碼的時候需要獲取指定單元格的行號和列號如圖,將指定單元格的行號和列號分別填入表中>在vbe窗口中,添加以下代碼Sub 單元格行列號() Selection.Offset(1, 0) = Selection.Row Selection.Offset(1, 2) = Selection.Column End Sub
  • 如何替換單元格內容,vba代碼幫你一步解決
    具體內容可參考如下圖片,詳細介紹。No.2下面用一個例子來簡單說明一下。本著解決問題的目的,利用一個查找姓名並更改的功能,做了如下表格。可以看到上圖,有一個按鈕控制項,一個文本框控制項,下面是個人信息表 。單擊按鈕執行查找姓名,並更改為文本框內容。
  • Excel怎麼統計相同顏色單元格的數量並進行求和計算?太實用了
    現在我們要統計大於零的整數有多少個?它們的之和是多少?只需統計紅色單元格的數量就可以完成,求它們的和也只用計算紅色單元格中的數據之和就可以啦!這只是一個簡單的例子,具體情況具體分析,在實際操作中還會遇到各種各樣的情況。接下來就一起學習一下這個技巧吧!
  • 「Excel技巧」Excel如何快速統計同一個單元格內的人員數量
    其實,Excel表格嘛,既然是統計人數,肯定缺少不了函數的應用。從表格中,我們可以看到,單元格裡的名字和名字之間都是用頓號分隔開,每個單元格中的名字就比頓號多一個數。所以,我們可以通過計算頓號的數量來計算參會人數,即先計算出頓號的數量,然後再加上1,就得到參會人數。
  • 3種根據單元格填充色求和與計數方法,再也不用一個一個的計算了
    >首先我們要選擇想要統計的數據區域,然後按Ctrl+F調出查找的窗口,然後點擊選項,點擊格式選擇從單元格選取格式,滑鼠就會變成一個小吸管的樣子,我們直接吸取想要統計顏色的單元格,然後點擊全部查找,緊接著按Ctrl+a選擇查找到的全部數據,在工作表右下角的狀態欄就會顯示該顏色的個數及求和二、宏表函數法
  • Excel VBA 中是如何處理單元格呢?複製或者移動,你真的了解她嗎
    我們其實都知道在Excel中間,我們處理和接觸最多的就是單元格區域,所以我們今天就必須要說說如何處理單元格區域,讓你重新認識一下這個,我們一起來看看吧!我們分幾個點來說明如何處理單元格:a、複製單元格區域b、移動單元格區域c、調整單元格區域大小
  • Excel插入圖片,讓圖片自動適應單元格大小
    我們在日常工作中,有時候需要在Excel表格中插入一些圖片,比如我們會在簡歷表上插入照片,公司產品統計表中插入對應的產品圖片,我們都希望把圖片固定在單元格中,圖片能自適應隨著單元格變化而變化,下面我們就一起學習一下如何讓圖片自動適應單元格。
  • vba第二十五課
    vba第二十五課單元格區域Range:代表某一單元格、某一行、某一列、某一選定區域寫法:range(「文件型單元格地址」),因為是文本型所以要加上雙引號,如果引用的區域有變量,則變量不能用雙引號,只能用連接符」&」,如Range("a
  • EXCEL之VBA應用實例-合併單元格並保留所有單元格內容
    默認情況下,EXCEL中合併單元格只保留左上角第一個單元格內容,很多時候我們需要保留所有內容,把合併前的每個單元格內容分行顯示在合併後的單元格內,下面是我想到的一個方法,如果大家有更好的方法歡迎分享。Sub 合併單元格並保留所有單元格內容()Application.DisplayAlerts = False '自動對彈出的確認框進行確認,不顯示彈出對話框。
  • Excel|VBA拆分單元格內容
    最近遇到一個小需求,如何將Excel單元格中的內容拆分到多行?Len(Sheets("Sheet1").Cells(i, 2)) / 9) + 1】先利用長度函數Len函數計算出單元格的長度,在將其長度除以9(雖然每個日期的長度是8,但是日期後面皆跟了一個空白字符,所以除以9),再利用int函數取整,最後結果需要加上1,因為最後一個日期後面沒有空白符,最終得出來的結果就是單元格內部包含的日期個數;如對B2單元格用此函數:INT(LEN(B2)/ 9) + 1=
  • Excel如何自動計算某列中同一顏色單元格的數量,並顯示出數值
    在使用Excel統計數據時,有時會用條件格式等方法把一些符合特定條件的單元格標記成某種顏色。例如把成績表中分數在60分以上的單元格用顏色標記出來,但標記顏色後有時可能還需要對已標記顏色單元格的數量進行統計,從而知道究竟有多少個人達到了標準。我們可以利用Excel的一些功能讓Excel自動計算出已標記顏色的單元格數量。
  • Excel必知:兩種從文本數字混合單元格提取數字和文本的標準方法
    一分鐘讓你學會從文本數字混合單元格提取數字和文本,這個方法應該能滿足大部分提取需求,如圖。 第一種方法操作步驟,在右邊相鄰單元格輸入要提取的數字,上圖是1,然後選中1及以下的空白單元格,滑鼠不動,按鍵盤上的ctrl+e組合鍵即可。
  • 「Excel技巧」用VBA法給單元格批量插入圖片批註
    上一篇文章跟大家介紹的是excel單元格如何手動插入圖片批註。但是在表格產品比較多,想要全部插入圖片批註的情況下,手動一個個插入的方法就不可取了。我們說了,只要思想不滑坡 辦法總比困難多。這時,我們就要考慮更高效的辦法,比如:批量插入圖片批註。關鍵如何實現?
  • 如何將Excel數據表單元格保存為數組,VBA數組進階應用
    No.1在vba編程中,數組應用是一個十分有用的方法。如何把數據表作為數組進行處理,是編程過程中的一個重要技能。學會之後,將大大提高編程技術,也將使數據處理的過程變得更加流暢。No.2上圖為例,把表格內容作為數組值進行保存,然後通過流程編碼對成績進行一個比較判斷,最終得出一個成績等級的判定。
  • Excel132 | 同一單元格內多個姓名,如何統計人數
    >問題來源如下圖:依據每條線路的名單,如何統計人數公式解析公式:在C2單元格輸入公式:公式詳解SUBSTITUTE(B2,"、",""):將B2單元格內的"、"全部替換掉;LEN(SUBSTITUTE(B2,"、","")):替換掉「、」以後的字符串長度;LEN(B2):替換前B2單元格字符的長度;
  • Excel怎麼將圖片嵌入到單元格中?圖片自動適應單元格大小
    有時候我們需要在Excel中插入一些圖片,例如,產品展示、人物介紹等。這些都需要將圖片嵌入到Excel單元格中,否則後期需要處理工作簿,很容易造成圖片產生錯位,一是增加自己工作量,另外會給他人帶來不好的體驗。這樣就與Excel中插入圖片的目的背道而馳。
  • Excel VBA入門教程 1.10 單元格排序示例
    舉個排序的例子,要對A1:A20的單元格區域進行排序,區域內的內容為1-100的隨機整數, 規則是大於50的倒序排列,小於50的正序排列。
  • 使用VBA代碼完成對單元格區域條件求和 - VBA語言專家
    NO.168-NO.169內容是:NO. 168:如何利用VBA代碼,求單元格區域A1:H10正數的和NO. 169:如何利用VBA代碼,求最大值、最小值VBA過程代碼168:如何利用VBA代碼,求單元格區域A1:H10正數的和Sub mynz
  • vba第二十七課
    vba第二十七課使用區域的統計usedrange返回一個range屬性,該對象表示指定工作表上所使用的區域例:Sub 使用區域()Sheet(1).usedrange.selectEnd sub注釋:此段代碼表示的意思是選中單元格存在數據的區域