VBA突擊01-012

請叫我小程壯士發表於2020-10-07

(工作需要,臨時啃vba)

01

輸入資料

Sub 輸入100()

//輸入100 Macro
// 巨集由 Lenovo User 錄製,時間: 2011-4-22

Range("A1").Select
ActiveCell.FormulaR1C1 = "100"
Range("B4").Select
End Sub

刪除資料
Sub 刪除A1的內容()

’ 刪除A1的內容 Macro
’ 巨集由 Lenovo User 錄製,時間: 2011-4-22


Range(“A1”).Select
Selection.ClearContents
End Sub

02

1語句:

'VBA中的程式碼的基本結構與組成部分

'VBA語句
'一、巨集程式語句(填充)
  '執行後可以完成一個功能

Sub test()  '開始語句
  
  Range("a1") = 100

End Sub   '結束語句


'二、函式程式語句(呼叫函式)
   
   '執行後可以返回一個值
   
Function shcount()

  shcount = Sheets.Count
  
End Function


'三、在程式中應用的語句(呼叫test這個巨集)

  Sub test2()
    
    Call test
    
  End Sub

 Sub test3()(迴圈語句,在1-100中填充1-100)
 
   For x = 1 To 100   'for next 迴圈語句
      Cells(x, 1) = x
   Next x
 
 End Sub

VBA物件

'VBA中的物件其實就是我們操作的具有方法、屬性的excel中支援的物件

'Excel中的幾個常用物件表示方法:

’1、工作簿

  ' Workbooks 代表工作簿集合,所有的工作簿,Workbooks(N),表示已開啟的第N個工作簿
   ' Workbooks ("工作簿名稱")
   ' ActiveWorkbook 正在操作的工作簿
   ' ThisWorkBook '程式碼所在的工作簿

’2、工作表

'Sheets("工作表名稱")
'Sheet1 表示第一個插入的工作表,Sheet2表示第二個插入的工作表....
'Sheets(n) 表示按排列順序,第n個工作表
'ActiveSheet 表示活動工作表,游標所在工作表
'worksheet 也表示工作表,但不包括圖表工作表、巨集工作表等。

’3、單元格

'cells 所有單元格
'Range ("a1:a10,c2")
'Cells(行數,列數)
'Activecell 正在選中或編輯的單元格
'Selection 正被選中或選取的單元格或單元格區域

3.VBA屬性

'VBA屬性就是VBA物件所具有的特點
'表示某個物件的屬性的方法是:

’物件.屬性=屬性值
(賦值)

 Sub ttt()
   Range("a1").Value = 100
 End Sub

(改名)

 Sub ttt1()
 Sheets(1).Name = "工作表改名了"
 End Sub

(工作表的單元格的值)

 Sub ttt2()
 
 Sheets("Sheet2").Range("a1").Value = "abcd"
 
 End Sub

(把單元格改成紅色的背景色)
’Range(“A2”).Interior.ColorIndex = 3 (修改背景色)
‘Range(“A2”).Font.ColorIndex = 3 (修改字型顏色)

Sub ttt3()
 
Range("A2").Interior.ColorIndex = 3
  
End Sub

4.VBA方法

'VBA方法是作用於VBA物件上的動作

'表示用某個方法作用於VBA的物件上,可以用下面的格式:

物件.方法 引數名稱 := 引數值
(把a1的內容複製到a2中)

Sub ttt4()
Range("A1").Copy Range("A2")
End Sub

()

Sub ttt5()
Sheet1.Move before:=Sheets("Sheet3")
End Sub

(刪除工作表)

Sub ttt4()
sheets("sheet2").Delete
End Sub

03判斷語句

1.if判斷語句

If 條件 Then
語句1
Else
語句2
End If

單條件判斷

Sub 判斷1()
If Range("a1").Value > 0 Then
Range("b1") = "正數"
Else
Range("b1") = "負數或0"
End If
End Sub

多條件判斷

If   條件1 Then
語句1
Else If   條件2   Then
語句2
Else  If   條件3   Then
語句3
End If
Sub 判斷2() '
If Range("a1").Value > 0 Then
Range("b1") = "正數"
ElseIf Range("a1") = 0 Then
Range("b1") = "等於0"
ElseIf Range("B1") <= 0 Then
Range("b1") = "負數"
End If
End Sub
If   條件1   And    條件2   Then
語句
End If

(IF語句具有多條件判斷優勢,if使用較多)

Sub 多條件判斷2()
If     Range("a1") <> ""     And     Range("a2") <> ""      Then
Range("a3") = Range("a1") * Range("a2")
End If
End Sub

2.select-case
先找到判斷物件;再根據情況進行操作。

(單條件判斷)

Select Case 判斷物件
  Case 條件1
     語句1
  Case Else
     語句2
  End Select
Sub 判斷1() 
  Select Case Range("a1").Value
  Case Is > 0
     Range("b1") = "正數"
  Case Else
     Range("b1") = "負數或0"
  End Select
End Sub

('多條件判斷)

 Select Case 物件
  Case 條件1
      語句1
  Case 條件2
     語句2
  Case Else
     語句3
  End Select
Sub 判斷2() 
  Select Case Range("a1").Value
  Case Is > 0
     Range("b1") = "正數"
  Case Is = 0
     Range("b1") = "0"
  Case Else
     Range("b1") = "負數"
  End Select
End Sub

(直接與字母比較)

Sub 判斷3()
 If Range("a3") < "G" Then
    MsgBox "A-G"
 End If
End Sub

3.IFF函式

只能作為簡單的判斷在簡化語句時使用;

Sub 判斷4()
  Range("a3") = IIf(Range("a1") <= 0, "負數或零", "負數")
End Sub

4.區間判斷
使用IF:
需求:根據a2判斷b2的取值

Sub if區間判斷()
If Range("a2") <= 1000 Then
  Range("b2") = 0.01
ElseIf Range("a2") <= 3000 Then
  Range("b2") = 0.03
ElseIf Range("a2") > 3000 Then
  Range("b2") = 0.05
End If
End Sub

使用select-case:
注:可以使用to來創造區間

Sub select區間判斷()
 Select Case Range("a2").Value
 Case 0 To 1000
   Range("b2") = 0.01
 Case 1001 To 3000
   Range("b2") = 0.03
 Case Is > 3000
   Range("b2") = 0.05
 End Select
End Sub

04.迴圈語句

(複雜做法)

Sub t1()
  Range("d2") = Range("b2") * Range("c2")
  Range("d3") = Range("b3") * Range("c3")
  Range("d4") = Range("b4") * Range("c4")
  Range("d5") = Range("b5") * Range("c5")
  Range("d6") = Range("b6") * Range("c6")
End Sub

(1.構造迴圈,有數字規律時使用for-to-step)

Sub t2()
Dim x As Integer     '宣告一個變數
 For x = 10000 To 2 Step -3   //For x = 2 To 6 Step 1(從2到6,按1遞增)
  Range("d" & x) = Range("b" & x) * Range("c" & x)
 Next x
End Sub

(2.構造迴圈,有位置規律時使用for-each-in-range)

Sub t3()
Dim rg As Range   //宣告一個單元格物件
 For Each rg In Range("d2:d18")    //從約定範圍內逐個取出單元格
  rg = rg.Offset(0, -1) * rg.Offset(0, -2)  //該單元格數值等於右邊一個單元格數值乘以右邊第二個單元格的數值
 Next rg
End Sub

(在一定區域的空白單元格內填充0)
(注:如果找不到數字規律,看看是否可以使用for-each-in-range來達到目的)

Sub case1()
 Dim rg As Range   //宣告單元格物件
	 For Each rg In Range("a1:b7,d5:e9")  //定位兩個修改範圍(類似於選定兩個班級)
		   If rg = ""   Then 
		     rg = 0    //空白區域填充0
		   End If
	  Next rg   //迴圈
End Sub

3.do迴圈
注意:很容易造成死迴圈

Sub t4()
	Dim x As Integer  //宣告變數
	x = 1  //初始值,作為計數器
	Do   //開始語句
		   x = x + 1    //迴圈結構
		   Cells(x, 4) = Cells(x, 2) * Cells(x, 3)  //操作語句:同一行的第四列等於第二列乘以第三列
	Loop Until x = 18     //迴圈語句+結束語句(設定不好容易造成死迴圈)
End Sub

(do-while:終止條件放到前面)

Sub t5()
 x = 1    //計數器
 Do While x < 18   //迴圈結束條件
   x = x + 1
   Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
 Loop  //語句
End Sub

(用do語句尋找資料中存在的斷點)

Sub s2()
 Dim x As Integer
 Do
	   x = x + 1
	   If Cells(x + 1, 1) <> Cells(x, 1) + 1 Then
		      Cells(x, 2) = "斷點"   //找到斷點,強制退出迴圈
		      Exit Do
	   End If
Loop Until x = 14  //如果一直找不到斷點,在第14行結束迴圈
End Sub

05.變數

’變數
一、什麼是變數?
所謂變數,就是可變的量。就好象在記憶體中臨時存放的一個小盒子,這個小盒子放的什麼物體不固定。

Sub t1()
Dim X As Integer   //x就是一個整數型變數
For X = 1 To 10
    Cells(X, 1) = X
    Next X
End Sub

二、小盒子裡可以放什麼?
1 放數字:如t1

2 放文字

Sub t2()
Dim st As String
Dim X As Integer
For X = 1 To 10
	 st = st & "Excel精英培訓"
	 Next X
End Sub

3 放物件

Sub t3()
Dim rg As Range  
Set rg = Range("a1")   //把a1單元格這個物件,放進rg這個物件變數中,此後,rg就代表了單元格a1(注:給物件變數賦值,一定要使用set關鍵詞)
rg = 100
End Sub

4 放陣列

Sub t4()
Dim arr(1 To 10) As Integer, X As Integer  //宣告變數 dim-as
For X = 1 To 10
  arr(X) = X
  Next X
End Sub

三、變數的型別和宣告
幫助-語言參考-資料型別
1 變數的型別

詳見幫助檔案

2 為什麼要宣告變數
物盡其用,人盡其才。
3 宣告變數
dim public

四、變數的存活週期

1 過程級變數:過程結束,變數值釋放
如t1

2 模組級變數:在模組頂上宣告的變數
變數的值只在本模組中保持,工作簿關閉時隨時釋放
例:

Sub t6()
m = 1
End Sub
Sub t5()
MsgBox m
m = 7
End Sub

3。 全域性級變數:
在所有的模組中都可以呼叫,值會儲存到EXCEL關閉時才會被釋放。
public 變數名稱 as 型別

Sub t7()
MsgBox qq
End Sub

五 變數的釋放

一般情況下,過程級變數在過程執行結束後就會自動從記憶體中釋放,而只有一些從外部借用的物件變數才需要使用set 變數=nothing進行釋放。

06公式與函式

一、在單元格中輸入公式

1、用VBA在單元格中輸入普通公式

例1:

  Sub t1()
       Range("d2") = "=b2*c2"
     End Sub

修改例1:

Sub t2()
Dim x As Integer
	For x = 2 To 6
		Cells(x, 4) = "=b" & x & "*c" & x //與上面的公式相比,只需要把行號x的位置獨立出來(變數和字串連線一定要使用&符號)
	Next x
End Sub

'2、用VBA在單元格輸入帶引號的公式(一般字串需要加雙引號)

Sub t3() 
Range("c16") = "=SUMIF(A2:A6,""b"",B2:B6)" //遇到單引號就把單引號加倍
End Sub

3、用VBA在單元格中輸入陣列公式

 Sub t4()
      Range("c9").FormulaArray = "=SUM(B2:B6*C2:C6)" //使用陣列公式,計算:b2*c2+b3*c3+b4*c4+b5*c5+b6*c6
    End Sub

’二、利用單元格公式返回值(單元格公式)

Sub t5()
     Range("d16") = Evaluate("=SUMIF(A2:A6,""b"",B2:B6)") //使用公式把表示式返回成數值
     Range("d9") = Evaluate("=SUM(B2:B6*C2:C6)")
 End Sub

’三、借用工作表函式(工作表函式)

 Sub t6() 
 Range("d8") = Application.WorksheeFunction.CountIf(Range("A1:A10"), "B")   //呼叫sum函式
 End Sub

’四、利用VBA函式(VBA函式)

Sub t7()     
   Range("C20") = VBA.InStr(Range("a20"), "E")//查詢字串的位置
End Sub

'五、編寫自定義函式

  Function wn()
     wn = Application.Caller.Parent.Name
  End Function

VBE編輯器

’一、VBE的視窗
’1、工程視窗

'A 顯示工作簿工作表物件
'B 窗體
'C 模組
'D 類模組

'range(“a1”)=10

'對應工程視窗的物件和模板,顯示其所具體的一些特徵。

’3、程式碼視窗
'A 註釋文字的設定
'B 程式碼縮排的設定
'C 程式碼強制轉行的設定(在想要轉行的地方,先輸入空格,再輸入下劃線,回車)
'D 程式碼執行和除錯
'逐句執行(除錯-逐語句/F8)
'設定斷點(點選左邊邊欄,設定斷點)
'E 物件列表框和過程列表框
’4、立即視窗 (各種視窗在檢視中尋找)

'立即視窗可以把執行過程中的值立即顯示出來,主要用於程式的除錯
(Debug.Print方法,把結果顯示到立即視窗中)

Sub d()
 Dim x As Integer, st As String
 For x = 1 To 10
    st = st & Cells(x, 1)
    Debug.Print "第" & x & "次執行結果:" & st  //把每一步結果顯示到立即視窗中,方便在除錯程式時檢視
 Next x
End Sub

’5、本地視窗

在本地視窗中可以顯示執行中斷時物件資訊、變數值、陣列資訊等。

Sub d1()
 Dim x As Integer, k As Integer
 For x = 1 To 10
   k = k + Cells(x, 1)
 Next x
 End Sub

08VBA分支與AND語句

一、END語句
作用:強制退出所有正在執行的程式。

二、Exit語句

'退出指定的語句

'1、Exit Sub

   Sub e1()
     Dim x As Integer
        For x = 1 To 100
          Cells(1, 1) = x
          If x = 5 Then
            Exit Sub   //退出當前程式,不執行後面語句
          End If
         Next x
      Range("b1") = 100
     End Sub
'2、Exit function
 Function ff()
 Dim x As Integer
    For x = 1 To 100
      If x = 5 Then
        Exit Function  //退出整個function
      End If
     Next x
  ff = 100
 End Function

3、Exit for

Sub e2()
 
 Dim x As Integer
    For x = 1 To 100
	      Cells(1, 1) = x
	      If x = 5 Then
	        Exit For  //退出整個for迴圈
	      End If     
       Range("b1") = 100
     End Sub
          Next x

'4、Exit do

 Sub e3()
 Dim x As Integer
   Do
     x = x + 1
      Cells(1, 1) = x
      If x = 5 Then
        Exit Do   //退出do迴圈
      End If
   Loop Until x = 100
   Range("b1") = 100
 End Sub

二.分支語句(按照需要跳轉到指定位置)

1.Goto語句:無條件跳轉到指定的地方

Sub t1()
  Dim x As Integer
  Dim sr
100:   //設定行號
  sr = Application.InputBox("請輸入數字", "輸入提示") //讀取使用者輸入
  If Len(sr) = 0 Or Len(sr) = 5 Then GoTo 100    //如果沒有輸入或者點選取消(false),則啟動跳轉設定
  
End Sub

2.gosub-return ,跳過去,再跳回來

Sub t2()
  Dim x As Integer
  For x = 1 To 10
     If Cells(x, 1) Mod 2 = 0 Then GoSub 100
  Next x
Exit Sub   //當x執行完1-10時,不需要再執行100後面的語句,直接退出程式。
100:
   Cells(x, 1) = "偶數"
   Return          '跳到gosub 100 這一句
End Sub

on error resume next '遇到錯誤,跳過繼續執行下一句

 Sub t3()
  On Error Resume Next  //遇到錯誤-忽略-繼續執行
  Dim x As Integer
  For x = 1 To 10
    Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
  Next x
 End Sub

on error goto '出錯時跳到指定的行數

 Sub t4()
  On Error GoTo 100  //遇到錯誤進行指定輸出
  Dim x As Integer
  For x = 1 To 10
    Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
  Next x
   Exit Sub  //一定要加這句,否則正常執行狀態下也要出現錯誤提示
100:
   MsgBox "在第" & x & "行出錯了"
  End Sub

on error goto 0 '取消錯誤跳轉

  Sub t5()
  On Error Resume Next
  Dim x As Integer
  For x = 1 To 10
    If x > 5 Then On Error GoTo 0  //當到達某一範圍,錯誤提示語句將不再發揮作用
    Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
  Next x
   Exit Sub

  End Sub

09excel檔案操作

一.excel檔案和工作簿

excel檔案就是excel工作簿,excel檔案開啟需要excel程的支援;

Workbooks 工作簿集合,泛指excel檔案或工作簿;

Workbooks(“A.xls”),名稱為A的excel工作簿;

Sub t1()
Workbooks("A.xls").Sheets(1).Range("a1") = 100    //某個工作簿的某個工作表的某個單元格=100
End Sub

workbooks(2),按開啟順序,第二個開啟的工作簿;

Sub t2()
Workbooks(2).Sheets(2).Range("a1") = 200
End Sub

ActiveWorkbook ,當開啟多個excel工作簿時,你正在操作的那個就是ActiveWorkbook(活動工作簿);
Thisworkbook,VBA程式所在的工作簿,無論你開啟多少個工作簿,無論當前是哪個工作簿是活動的,thisworkbook就是指它所在的工作簿;
(區別:一個是正在操作的工作簿,一個是程式碼所在的工作簿)

工作簿視窗

Windows(“A.xls”),A工作簿的視窗,使用windows可以設定工作簿視窗的狀態,如是否隱藏等;

Sub t3()
Windows("A.xls").Visible = False  //工作簿介面隱藏(使用名稱)
End Sub
Sub t4()
Windows(2).Visible = True   //第幾個開啟的工作簿視窗
End Sub
    

二.操作技巧
’1 判斷A.Xls檔案是否存在

Sub W1()
     If Len(Dir("d:/A.xls")) = 0 Then   //判斷是否存在
       MsgBox "A檔案不存在"
     Else
       MsgBox "A檔案存在"
     End If
End Sub

’2 判斷A.Xls檔案是否開啟

Sub W2()
 Dim X As Integer
	  For X = 1 To Windows.Count
	    If Windows(X).Caption = "A.XLS"  Then  //遍歷所有開啟的工作簿
		      MsgBox "A檔案開啟了"
		      Exit Sub
	   End If
	 Next
End Sub

’3 excel檔案新建和儲存

Sub W3()
     Dim wb As Workbook  //宣告一個工作簿型別變數(盒子中只能放工作簿)
     Set wb = Workbooks.Add //使用set給物件變數賦值,使用add方法
     wb.Sheets("sheet1").Range("a1") = "abcd"  //單元格賦值
     wb.SaveAs "D:/B.xls"  //工作簿儲存
End Sub

’4 excel檔案開啟和關閉

Sub w4()
    Dim wb As Workbook  //宣告物件變數
    Set wb = Workbooks.Open("D:/B.xls")  ///開啟檔案,放入wb變數
    MsgBox wb.Sheets("sheet1").Range("a1").Value
    wb.Close False //不儲存並關閉檔案
 End Sub

’5 excel檔案儲存和備份

   Sub w5()
      Dim wb As Workbook   //宣告
      Set wb = ThisWorkbook    //賦值
      wb.Save   //儲存
      wb.SaveCopyAs "D:/ABC.xls"    //備份
   End Sub

’6 excel檔案複製和刪除

Sub W6()
      FileCopy "D:/ABC.XLS", "E:/ABCd.XLS" //被複制的檔案-存放的檔案和路徑
      Kill "D:/ABC.XLS"  //刪除檔案
End Sub

10excel工作表操作

1.excel工作表的分類
excel工作表有兩大類,一類是我們平常用的工作表(worksheet)-,另一類是圖表、巨集表等。這兩類的統稱是sheets;
(sheets 工作表集合,泛指excel各種工作表)*
Sheets(“A”):是指名稱為A的excel工作表

 Sub t1()
    Sheets("A").Range("a1") = 100
 End Sub

workbooks(2),按開啟順序,第二個開啟的工作簿。(按照從左到右的先後順序,包含隱藏的工作表)

Sub t2()
    Sheets(2).Range("a1") = 200
 End Sub

ActiveSheet ,當開啟多個excel工作簿時,你正在操作的那個就是ActiveSheet

2.操作技巧

’1 判斷A工作表檔案是否存在

 Sub s1()
     Dim X As Integer
      For X = 1 To Sheets.Count  //遍歷所有工作表
        If Sheets(X).Name = "A" Then
          MsgBox "A工作表存在" 
          Exit Sub
        End If
      Next
      MsgBox "A工作表不存在"
    End Sub

’2 excel工作表的插入

 Sub s2()
     Dim sh As Worksheet
     Set sh = Sheets.Add //新增
       sh.Name = "模板"
       sh.Range("a1") = 100
  End Sub

’3 excel工作表隱藏和取消隱藏

Sub s3()
    Sheets(2).Visible = True  //可見
 End Sub

’4 excel工作表的移動

 Sub s4()
     Sheets("Sheet2").Move before:=Sheets("sheet1")   //sheet2移動到sheet1前面
     Sheets("Sheet1").Move after:=Sheets(Sheets.Count) //sheet1移動到所有工作表的最後面
 End Sub

’6 excel工作表的複製

  Sub s5() '在本工作簿中
      Dim sh As Worksheet
      Sheets("模板").Copy before:=Sheets(1)
       Set sh = ActiveSheet
          sh.Name = "1日"
          sh.Range("a1") = "測試"
   End Sub
Sub s6() '另存為新工作簿
      Dim wb As Workbook
       Sheets("模板").Copy
       Set wb = ActiveWorkbook
          wb.SaveAs ThisWorkbook.Path & "/1日.xls"
          wb.Sheets(1).Range("b1") = "測試"
          wb.Close True
   End Sub

’7 保護工作表

 Sub s7()
      Sheets("sheet2").Protect "123"
   End Sub
  Sub s8() '判斷工作表是否新增了保護密碼
      If Sheets("sheet2").ProtectContents = True Then
        MsgBox "工作簿保護了"
      Else
        MsgBox "工作簿沒有新增保護"
      End If
   End Sub

’8 工作表刪除

  Sub s9()
       Application.DisplayAlerts = False
         Sheets("模板").Delete
       Application.DisplayAlerts = True
     End Sub

’9 工作表的選取

  Sub s10()
       Sheets("sheet2").Select
     End Sub

11單元格的選取

’1 表示一個單元格(a1)

Range(“a1”).Select;
Cells(1, 1).Select;
Range(“A” & 1).Select;
Cells(1, “A”).Select;
Cells(1).Select;
[a1].Select;

’2 表示相鄰單元格區域(a1:c5這個區域)

Range(“a1:c5”).Select
Range(“A1”, “C5”).Select
Range(Cells(1, 1), Cells(5, 3)).Select
Range(“a1:a10”).Offset(0, 1).Select
//offset(上下偏移量,左右偏移量)
Range(“a1”).Resize(5, 3).Select
//a1為頂點,Resize(行數, 列數)

’3 表示不相鄰的單元格區域

Range(“a1,c1:f4,a7”).Select //注意:只用一對雙引號;
Union(Range(“a1”), Range(“c1:f4”), Range(“a7”)).Select;
//連線多個單元格物件,作為一個整體表示
(union示例)

  Sub dd() 
      Dim rg As Range, x As Integer
      For x = 2 To 10 Step 2
        If x = 2 Then Set rg = Cells(x, 1)  //先給rg進行初始化
        Set rg = Union(rg, Cells(x, 1)) //在舊的單元格容器中,通過迴圈,不斷增加新的單元格
      Next x
      rg.Select    //選取連線起來的所有單元格
    End Sub

4 表示行

Rows(1).Select //第一行
Rows(“3:7”).Select //第三行到第七行
Range(“1:2,4:5”).Select //選取不連續的行
Range(“c4:f5”).EntireRow.Select //EntireRow用於返回單元格區域所在的行

’5 表示列

Columns(1).Select
Columns(“A:B”).Select
Range(“A:B,D:E”).Select
Range(“c4:f5”).EntireColumn.Select //選取c4:f5所在的行

’6 重置座標下的單元格表示方法

 Sub cc()
   Range("b2").Range("a1") = 100   //以B2作為新的座標,將新座標的A1單元格賦值100
 End Sub

’7 表示正在選取的單元格區域

Sub d2()
  Selection.Value = 100 
End Sub

012特殊單元格的定位

’1 已使用的單元格區域

Sub d1()
  Sheets("sheet2").UsedRange.Select   //選取已經使用過的區域
  wb.Sheets(1).Range("a1:a10").Copy Range("i1") //將內容複製到以i1為頂點的單元格區域  
End Sub

’2 某單元格所在的連續單元格區域(無論有邊還是頂點重疊,都是連續區域)

Sub d2()
 
   Range("b8").CurrentRegion.Select //選擇以B8為頂點的連續區域
 
End Sub

’3 兩個單元格區域共同的區域(選取區域的交集)

Sub d3()  
    Intersect(Columns("b:c"), Rows("3:5")).Select
End Sub

’4 呼叫定位條件選取特殊單元格(含空格、含註釋、含常量、含公示)

Sub d4()
   Range("A1:A6").SpecialCells(xlCellTypeBlanks).Select //選取區域內的空單元格
End Sub

’5 端點單元格

Sub d5()

  Range("a65536").End(xlUp).Offset(1, 0) = 1000  //從最後一個單元格向上找最近的一個非空空單元格,並向下偏倚一行
  
End Sub
Sub d6()

  Range(Range("b6"), Range("b6").End(xlToRight)).Select  //從左向右選
End Sub

例:查詢客戶首次還款月份

Sub test()
Dim x As Integer //宣告
For x = 2 To 6    //選擇範圍,遍歷
  If Cells(x, 2) > 0 Then
    Cells(x, "N") = "1月"
  Else
    Cells(x, "N") = Range("b" & x).End(xlToRight).Column - 1 & "月"   //從B列向右找,得到非空單元格所在列數,根據數量關係求得相應月份
  End If
Next x

End Sub  

相關文章