前言
本節會介紹通過VBA中的Range對象,來實現Excel表格中的單元格寫入、區域范圍寫入,當然也可以寫入不同類型的數據,如數值、文本、公式,以及實現公式下拉自動填充的功能。
一、單元格輸入數據
1.通過Value方法實現輸入不同類型的數據
向A1寫入姓名(文本),A2寫入年齡(數值),A3寫入入學時間(日期),A4、A5、A6分別寫入語數外成績(數值),A7寫入三科成績之和(公式),代碼如下:
Sub InputData()Range("A1").Value = "小明"Range("A2").Value = 16Range("A3").Value = "2021-9-1"Range("A4").Value = 91.5Range("A5").Value = 95Range("A6").Value = 86Range("A7").Value = "=Sum(A4:A6)"End Sub
2.單元格輸入文本內容
向單元格輸入文本內容時,需要將其輸入的字符串需要用 雙引號 引起來
需要注意的是,如果想要輸入文本型數字時,例如常見的卡號、工號、身份證號等信息,則需要在數字前加 單引號,
示例代碼如下:
Range("B1").Value = "成績單"Range("B2").Value = "ABCD"Range("B3").Value = "今天是:" & Format(Date,"yyyy-mm-dd")Range("B4").Value = "'001258"Range("B5").Value = "'110110199212220001"
3.單元格輸入多行數據
向單元格輸入多行數據時,可以使用換行符Char(10),如下示例中,向單元格A1中分三行輸入"姓名",“性別”,“年齡”
Range("A1").value = "姓名" & Chr(10) & "性別" & Chr(10) & "年齡"
4.單元格輸入公式Formula
向單元格輸入公式時,既可以使用Range的value屬性,也可以使用其Formula屬性,兩者執行的結果是一樣的。
Range("C1").Value = "=Sum(A4:A6)"Range("C2").Formula = "=Sum(A4:A6)"
5.實例
題目:已知sheet1中A、B、C三列分別存放的學生語數外科目的成績,需要在D列進行計算三科成績的總和,注意:總行數未知
思路:因總行數未知,則需先根據A列獲取到sheet1的總行數;其次計算和公式應該從D2開始寫入=SUM(A2:C2);因行數較多,故以下代碼應通過公式自動填充快速實現求和計算。
完整的代碼如下:
Sub SumScore()Dim ws As WorksheetDim wb As WorkbookDim lastRow As Long' 設置當前工作簿以及工作表Set ws = ThisWorkbook.Worksheets("Sheet1")Set wb = ThisWorkbook' 通過A列獲取最大行數lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row' 寫入D2單元格匯總公式ws.Range("D2").Value = "=SUM(A2:C2)"' 自動下拉填充所有行公式ws.Range("D2").AutoFill ws.Range("D2:D" & lastRow)End Sub
二、單元格區域輸入數據
1.輸入行數據
通過Array函數,可以快速的輸入一行數據,例如在第一行A1~D1輸入行標題,代碼如下:
Range("A1:D1") = Array("語文成績", "數學成績", "外語成績", "總成績")
2.輸入列標題
同樣通過Array函數快速輸入一列數據,可以使用Transpose函數進行轉置,代碼如下:
Range("A1:A4") = WorksheetFunction.Transpose(Array("姓名", "性別", "班級", "成績"))
3.區域輸入相同的數據
在A1:E10區域范圍內快速輸入相同的內容,代碼如下:
Range("A1:E10").Value = 100
4.示例
題目:已知有兩張sheet,需要將Sheet1中的A-E列的數據完全復制到Sheet2中B-F列中,完整的代碼如下:
Sub CopyData()Dim ws1 As WorksheetDim ws2 As WorksheetDim wb As WorkbookDim lastRow As Long' 設置當前工作簿以及工作表Set ws1 = ThisWorkbook.Worksheets("Sheet1")Set ws2 = ThisWorkbook.Worksheets("Sheet2")Set wb = ThisWorkbook' 通過A列獲取最大行數lastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row' 將sheet1中的A-E列數據復制到Sheet2中的B-F列ws2.Range("B1:F" & lastRow).Value = ws1.Range("A1:E" & lastRow).ValueEnd Sub