刪除單元格_VBA(實驗1)用VBA 刪除某列空單元格的3種方法:刪除法,轉移到其他列方法,數組方法...

d028b028b34d74d0282b04957bf7b6c5.png

1 要解決的問題:刪除某列中的空單元格/空行

暫時只實現了刪除一列中的空行,并沒有實現多行的判斷空行和刪除方法。----之后再做更復雜的

1.1 需求分析

用VBA刪除如下內容,解決思路都不同

  1. 刪除1列的空行(本文要做的)
  2. 刪除整個區域內的空行
  3. 刪除整個區域內的空格(這個一般很少有這種需求,用處不大----可用currentregion .specialcells()解決)
  4. 下面是原始數據,下面看看如何處理

b5e432c6e31ae5a69d9e54459414deba.png

2 如果是刪除全表/某區域的空單元格, 直接在當前列刪除

簡潔代碼:刪除區域內所有空單元格 cells ---實際需要少,so用處不大

使用 sheet.usedrange / region.currentregion .specialcells()

  • 刪除,表格頁面內使用區域的空格所在的行
  • 局限性就是表格的上方,左邊還會存在一些空行空列,不過這個手動刪下就可以了
  • 這個只是刪除了空的cells 并不是刪除了空行
Sub 刪空單元格()
ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Delete
End Sub

3 如果是刪一列的空行

3.1 代碼1:基礎代碼,假設確認知道這列的長度,關鍵是倒著刪

  • 熟悉 isempty() 或者用 if xxxx=""
  • 刪除單元格后,要設置屬性 shift:=xlup等
  • 需要倒著刪除,否則會因為一邊刪除行,一遍重新排列有問題
Sub 刪一列的空行()
For i = 20 To 1 Step -1 '需要倒著刪除
If IsEmpty(Cells(i, 1)) Then
Cells(i, 1).Delete shift:=xlUp
End If
Next i
End Sub

3.2 改進版: 先查這一列的非空最大行數

Sub jackma_delete_row()
For i = Range("c65536").End(xlUp).Rows To 1 Step -1
If IsEmpty(Cells(i, 3)) Then
rows(i).Delete shift:=xlUp
End If
Next i
End Sub

3.3 也可以不用 isempty() 函數,直接判斷 if cells()=""

  • 直接判斷 if cells(i,j) =""
  • 這種刪除整行不合適 rows(i) .delete,會影響其他列的元素
Sub ponyma_del_row1()
For i = Range("c65536").End(xlUp).Row To 1 Step -1
If Cells(i, 3) = "" Then
Cells(i, 3).Delete
' Rows(i).Delete
End If
Next i
End Sub

4 不動原數據,將非空數據放到另外一列

4.1 錯誤版:

要明白“寫入列”的循環數,明顯和“輸出列”的循環數 應該不同!
這么寫相當于 輸出列 那行為空的時候,只是不往 寫入列寫,所以沒覆蓋,也是空的
Sub jackma_delete_row2()
For i = 1 To Range("c65536").End(xlUp).Rows
If Not IsEmpty(Cells(i, 3)) Then
Cells(i, 9) = Cells(i, 3)
End If
Next i
End Sub

4.2 正確版: 寫入列/輸出列,應該是單獨的循環變量!

Sub jackma_delete_row2()
k = 1
For i = 1 To Range("c65536").End(xlUp).Rows
If Not IsEmpty(Cells(i, 3)) Then
Cells(k, 9) = Cells(i, 3)
k = k + 1
End If
Next i
End Sub

5 先寫入數組array中,再寫到其他地方,據說這樣能大幅提高速度!

把需要的篩選的數據,存在數據,然后從數組寫到需要的地方,這是個好習慣

第1版:局限性很大,沒有自動查這列的 元素個數,以及 最大非空行是多少

Sub 刪除空格4()
Dim arr1() '定義了一個數組,并且是動態數組,因為沒指定大小
ReDim arr1(11) '動態數組,使用前必須重新redim,數組大小
j = 0 'j=1開始,不會越界,但arr1(0)為空,因為賦值跳過了它
For i = 1 To 11 Step 1
If Not IsEmpty(Cells(i, 1)) Then
arr1(j) = Cells(i, 1)
j = j + 1
End If
Next i
For j = 0 To UBound(arr1())
Cells(j + 1, 9) = arr1(j) '單元格得從1開始,arr(),默認得從0開始,但可以改
Next j
End Sub

第2版重寫

注意debug.print用來監測的時候,需要注意,放在循環的位置,尤其是在k=K+1這種變化時,和放在哪個for循環之內外!

Sub ponyma_array22()
Dim arr1() '當數組定義,且默認開始的index為0! preserve時需要有0的index
'dim arr1 當變量定義
k = 1
m = 1
ReDim arr1(0 To Application.WorksheetFunction.CountA(Range("c:c")))
For i = 1 To Range("c65536").End(xlUp).Row Step 1
If Cells(i, 3) <> "" Then
Debug.Print Cells(i, 3)
arr1(k) = Cells(i, 3)
Debug.Print arr1(k)
k = k + 1
' Debug.Print arr1(k),寫在這里問題1:k已經變了,下一個k還沒賦值為空,2最后的k越界
' 循環是很精巧的,放的地方很講究,放得不對,就錯誤百出
' Debug.Print arr1(k) 如果放在k=K+1 后,就看起來沒打印出東西,因為都打印的arr1的空元素
End If
Next i
For j = 1 To UBound(arr1(), 1)
Cells(m, 10) = arr1(j)
m = m + 1
Next j
End Sub

第3版

Option Explicit
Sub ponyma1()
Dim arr1()
Dim k1, k2, k
Dim i, j
k1 = WorksheetFunction.CountA(Range("a:a"))
k2 = Range("a65536").End(xlUp).Row
Debug.Print "這列非空數據個數k1=" & k1
Debug.Print "這列最后1個有數據的行數k2=" & k2
'arr1(0) = 1
'ReDim Preserve arr1(1, k)
'這樣會越界,因為你需要preserve數據。但是index系不符合
'但是,如果不preserve 就無所謂
'或者雖然 dim arr1() 是動態數據從index0開始,但是arr1()一直為空,preserve也不會出現index越界問題
ReDim Preserve arr1(1 To k1)
'ReDim Preserve arr1(1, k1) 這樣就會越界。。。因為語法是2維數組了!
'ReDim Preserve arr1(1 to k1) 這樣就對的
k = 1
For i = 1 To k2
If Cells(i, 1) <> "" Then
arr1(k) = Cells(i, 1)
Debug.Print arr1(k)
k = k + 1
End If
Next i

————————————————

版權聲明:本文為CSDN博主「奔跑的犀牛先生」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:【原創】VBA(實驗1)用VBA 刪除某列空單元格的3種方法:刪除法,轉移到其他列方法,數組方法

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

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

相關文章

安卓qpythonttsspeak_當python遇到Android手機 那么,萬物皆可盤

囂張開場今天不跟大家講python知識&#xff0c;是不很失望&#xff1f;No&#xff0c;看過了今天的內容&#xff0c;你python的裝13指數&#xff0c;至少上升1w&#xff0c;并附帶暴擊、濺射、眩暈、致盲效果。沒錯&#xff0c;就是這么囂張.....當python遇到安卓手機我們日常的…

winpe制作u盤啟動盤_怎么制作u盤啟動盤 u盤啟動盤制作方法【介紹】

使用u盤裝系統時就需要先將u盤制作成一個啟動u盤&#xff0c;這樣才能夠通過u盤啟動裝系統操作&#xff0c;那么 如何制作u盤啟動盤 呢?為此&#xff0c;今天我們就為小伙伴們詳細的介紹 怎樣制作u盤啟動盤 的操作。制作u盤啟動盤準備工作&#xff1a;① 、準備一個空間容量大…

插入空行_如何一鍵插入表格空行,這個方法才最高級!

100萬職場人都在看后臺回復禮包領199元職場干貨很久很久之前&#xff0c;小可教過大家如何一鍵刪除空行&#xff0c;回顧請戳→《如何一鍵刪除表格空行&#xff0c;這個方法才最高級&#xff01;》這次&#xff0c;小可反過來&#xff0c;教大家如何一鍵插入很多空行&#xff0…

的控制臺主題_【12.11最新版】芯片機/大氣層主題軟件NXThemesInstaller

Switch的主題的安裝和管理主要通過自制軟件——NXThemesInstaller軟件地址&#xff1a;https://github.com/exelix11/SwitchThemeInjector本文只傳了工具&#xff0c;主題需要自行去下載&#xff0c;可以按照自己喜歡的更換&#xff01;&#xff01;教程簡單概括如下這是最常見…

數據卡片_E015 如何批量匯總工作簿數據,形成獨立工作簿信息卡片

Hi&#xff0c;How are you doing?我是職場編碼&#xff08;CodeVoc&#xff09;。在E000中&#xff0c;我們介紹了Node.js、Ruby、Electron等工具下載安裝。這期&#xff0c;給你演示一下由Electron聯合Ruby制作的小工具。知乎視頻?www.zhihu.com借助Electron官方Demo&#…

linux 編譯3g驅動_linux重新編譯內核

1.內容簡介linux內核簡介linux內核版本號linux為什么重新編譯內核linux內核編譯模式linux內核功能劃分linux內核編譯步驟2linux內核簡介內核&#xff0c;是一個操作系統的核心。它負責管理系統的進程、內存、設備驅動、文件和網絡系統&#xff0c;決定著系統的性能和穩定性。3.…

r語言平均值顯著性檢驗_R語言:常用統計檢驗方法

轉自http://blog.sciencenet.cn/home.php?modspace&uid255662&doblog&id240107正態總體均值的假設檢驗t檢驗單個總體例一某種元件的壽命X(小時)&#xff0c;服從正態分布&#xff0c;N(mu,sigma^2)&#xff0c;其中mu,sigma^2均未知&#xff0c;16只元件的壽命如下…

redis哨兵模式沒有切換主機_Redis哨兵(Sentinel)模式

Redis哨兵(Sentinel)模式在這里插入圖片描述一、主從復制高可用當我們使用主從復制出現的問題手動故障轉移寫能力和存儲能力受限主從復制 -master 宕機故障處理主從切換技術的方法是&#xff1a;當主服務器宕機后&#xff0c;需要手動把一臺從服務器切換為主服務器&#xff0c;…

mysql rpm 安裝6_linux6.5 RPM方式安裝 mysql5.6

步驟一、檢查下linux是不是已經安裝了MySQL# rpm -qa|grep mysqlmysql-libs-5.1.71-1.el6.x86_64# rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64 //卸載# find / -name mysql//有mysql文件夾的話&#xff0c;把mysql的文件夾刪掉步驟二、下載需要的安裝包&#xff0c;下載地…

php mysql 索引_MySQL索引

mysql 如何創建索引&#xff1f;1.添加PRIMARY KEY(主鍵索引)mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column )2.添加UNIQUE(唯一索引)mysql>ALTER TABLE table_name ADD UNIQUE (column)3.添加INDEX(普通索引)mysql>ALTER TABLE table_name ADD INDEX index…

linux ftp mysql_linux下ftp和ftps以及ftp基于mysql虛擬用戶認證服務器的搭建

命令連接&#xff0c;控制連接&#xff1a;21/tcp數據連接: 主動模式,運行在20/tcp端口 和 被動模式,運行在隨機端口數據傳輸模式(自動模式)&#xff1a;有二進制(mp3,jpg等)和文本(html)兩種傳輸模式ftp服務器端程序&#xff1a;wu-ftpd&#xff1a;vsftpd pureftpd Filezilla…

阿里云rds for mysql平臺介紹_阿里云RDS for MySQL 快速入門——筆記

1初始化配置1.1設置白名單創建RDS實例后&#xff0c;需要設置RDS實例的白名單&#xff0c;以允許外部設備訪問該RDS實例。默認的白名單只包含默認IP地址127.0.0.1&#xff0c;表示任何設備均無法訪問該RDS實例。設置白名單包括兩種操作&#xff1a;設置IP白名單&#xff1a;添加…

mysql數據庫下載壓縮包_mysql 8.0.22 zip壓縮包版(免安裝)下載、安裝配置步驟詳解...

大家好&#xff0c;今天我在學習 MySQL 8.0.22安裝及配置遇到了一些問題&#xff0c;特地將我整個安裝過程分享出來希望可以幫助不會安裝的小伙伴&#x1f61c;。參考鏈接第一步 MySQL的下載進入MySQL官網下載&#xff0c;按下圖所示步驟操作&#xff0c;耐心等待下載完成就可以…

mysql 5.5 主從同步問題_MySQL 5.5 主從復制異步、半同步以及注意事項詳解

大綱一、前言二、Mysql 基礎知識三、Mysql 復制(Replication)四、Mysql 復制(Replication)類型五、Mysql 主從復制基本步驟六、Mysql 主從復制(異步)七、Mysql 主從復制(半同步)八、Mysql 復制工具九、Mysql 復制注意事項十、Mysql 復制過濾一、前言從這一篇博客開始我們就來學…

開源內容管理系統 php mysql_十大免費PHP+MySql平臺內容管理系統推薦

最近&#xff0c;朋友要建站讓我幫著推薦個好的CMS(內容管理系統)&#xff0c;個人認為其實選擇哪個CMS并不重要&#xff0c;除了對搜索引擎的親好外&#xff0c;個人的使用操作習慣和對所選CMS系統的熟悉程度有很大關系。這里為需要建站但又徘徊的朋友介紹10個免費PHPMySql平臺…

mysql導入xml 工具下載_XML導入Mysql工具下載|XmlToMysql 最新版v2.1 下載_當游網

XmlToMysql是一款十分不錯的XML導入Mysql工具&#xff0c;它可以幫助用戶們將XML中的數據快速的導入到MySQL數據庫中&#xff0c;可以直接跳過解析環節&#xff0c;因此可以有效的提升程序員傳輸數據的效率&#xff0c;讓程序員可以擁有更多的時間去處理其他環節的事宜。所以喜…

mysql忽略表名大小寫_Mysql 表名忽略大小寫-連接字符集隨筆記錄

1.參數說明&#xff1a;lower_case_table_names0表名存儲為給定的大小和比較是區分大小寫的lower_case_table_names 1表名存儲在磁盤是小寫的&#xff0c;但是比較的時候是不區分大小寫lower_case_table_names2表名存儲為給定的大小寫但是比較的時候是小寫的unix,linux下lower_…

mysql與orancl_清晰講解SQL語句中的外連接,通用于Mysql和Oracle,全是干貨哦

清晰講解SQL語句中的外連接&#xff0c;通用于Mysql和Oracle&#xff0c;全是干貨哦直入主題&#xff1a;我們做一個操作&#xff0c;將員工SCOTT的部門去掉&#xff0c;再次通過內連接查看數據&#xff0c;看看會產生什么現象&#xff1f;使用內連接&#xff0c;查詢數據問題&…

.net mysql查詢數據庫連接_asp.net連接查詢SQL數據庫并把結果顯示在網頁上(2種方法)...

在ASP.NET中&#xff0c;使用C#連接SQL數據庫&#xff0c;并使用SQL語句查詢&#xff0c;以前從來沒有接觸過C#&#xff0c;最近用到了&#xff0c;摸索了兩天終于運行起來了&#xff0c;Mark一下&#xff0c;不喜勿噴有兩種方法&#xff1a;(說的是第一種方法不安全&#xff0…

mysql異常恢復工具_[MySQL異常恢復]mysql ibd文件恢復

在mysql中由于某種原因保存有ibd文件&#xff0c;但是表已經被刪除或者frm文件損壞亦或者ibdata文件損壞/丟失等。本文模擬在這種情況下&#xff0c;通過mysql自身技術即可完成ibd文件恢復.測試環境mysql版本mysql> select version();-----------| version() |-----------| …