Range 物件(Excel) | Microsoft Docs
文章推薦指數: 80 %
下列範例會將A1 儲存格的值指派給A5 儲存格。
VB 複製. Worksheets("Sheet1") ...
跳到主要內容
已不再支援此瀏覽器。
請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。
下載MicrosoftEdge
其他資訊
目錄
結束焦點模式
閱讀英文
儲存
目錄
閱讀英文
儲存
編輯
Twitter
LinkedIn
Facebook
電子郵件
目錄
Range物件(Excel)
發行項
06/02/2022
1位參與者
本文內容
代表儲存格、列、欄、包含一個或多個連續儲存格區塊的儲存格選取範圍,或是立體範圍。
注意
對於開發跨多個平台,擴充使用者Office體驗的解決方案感到興趣嗎?請參閱新的Office增益集模型。
與VSTO增益集和解決方案相比,Office增益集的佔用空間較小,而且您可以使用幾乎任何網頁程式技術(例如HTML5、JavaScript、CSS3和XML)來建立這些增益集。
備註
Range的預設成員會將不帶參數的呼叫轉傳到Value屬性,將帶參數的呼叫轉傳到Item成員。
相應地,someRange=someOtherRange等於someRange.Value=someOtherRange.Value、someRange(1)等於someRange.Item(1)以及someRange(1,1)等於someRange.Item(1,1)。
在範例部分將會描述下列可傳回Range物件的屬性及方法:
Worksheet物件的Range和Cells屬性
Range物件的Range和Cells屬性
Worksheet物件的Rows和Columns屬性
Range物件的Rows和Columns屬性
Range物件的Offset屬性
Application物件的Union方法
範例
使用Range(arg)來傳回代表單一儲存格或儲存格範圍的Range物件,其中的arg會命名範圍。
下列範例會將A1儲存格的值指派給A5儲存格。
Worksheets("Sheet1").Range("A5").Value=_
Worksheets("Sheet1").Range("A1").Value
下列範例會為範圍中每個儲存格設定公式,以隨機數字填滿範圍A1:H8。
如果使用此公式時沒有指定物件限定詞(句點左邊的物件),則Range屬性會在使用中的試算表上傳回範圍。
如果使用中的試算表不是工作表(worksheet),則此方法將會無效。
必須先使用Worksheet物件的Activate方法啟用工作表,才能在沒有明確物件限定詞的情況下使用Range屬性。
Worksheets("Sheet1").Activate
Range("A1:H8").Formula="=Rand()"'Rangeisontheactivesheet
下列範例會清除Criteria範圍的內容。
注意
如果用文字引數指定範圍位址,則必須以A1樣式的標記法指定該位址(不能使用R1C1樣式的標記法)。
Worksheets(1).Range("Criteria").ClearContents
在工作表上使用Cells可取得工作表中包含所有單一儲存格的範圍。
您可以透過Item(row,column)存取單一儲存格,其中row是列索引,column是欄索引。
Item可以省略,因為呼叫會透過Range的預設成員轉傳而來。
下列範例會在使用中活頁簿的第一個工作表中,將儲存格A1的值設定為24,儲存格B1的值設定為42。
Worksheets(1).Cells(1,1).Value=24
Worksheets(1).Cells.Item(1,2).Value=42
下列範例會設定A2儲存格的公式。
ActiveSheet.Cells(2,1).Formula="=Sum(B1:B5)"
雖然您也可以使用Range("A1")來傳回儲存格A1,但有時使用Cells屬性更方便,因為您可以使用列或欄的變數。
下列範例會在Sheet1上建立欄和列標題。
請注意,啟用工作表後,不用明確宣告試算表即可使用Cells屬性(傳回的儲存格會位在使用中的試算表上)。
注意
雖然可以使用VisualBasic字串函數來變更A1樣式的參照,但是使用Cells(1,1)標記法會較簡便(而且也是較好的程式撰寫方式)。
SubSetUpTable()
Worksheets("Sheet1").Activate
ForTheYear=1To5
Cells(1,TheYear+1).Value=1990+TheYear
NextTheYear
ForTheQuarter=1To4
Cells(TheQuarter+1,1).Value="Q"&TheQuarter
NextTheQuarter
EndSub
Use_expression_.Cells可取得相同位址中由單一儲存格組成的範圍,其中的expression是可傳回Range物件的運算式。
在這個範圍中,您可以透過Item(row,column)存取單一儲存格,其中的值是相對於範圍中第一個區域左上角的相對值。
Item可以省略,因為呼叫會透過Range的預設成員轉傳而來。
下列範例會在使用中活頁簿的第一個工作表中,設定C5和D5的公式。
Worksheets(1).Range("C5:C10").Cells(1,1).Formula="=Rand()"
Worksheets(1).Range("C5:C10").Cells.Item(1,2).Formula="=Rand()"
使用Range(cell1,cell2)可傳回Range物件,其中的cell1及cell2是Range物件,用來指定起始和終止位置的儲存格。
下列範例會設定儲存格A1:J10的框線線條樣式。
注意
請注意,如果前面的With陳述式的結果將套用於Cells屬性,則需要在每次出現Cells屬性前加一個句點。
在這種情況下,這表示儲存格於工作表1上(若沒有句點,Cells屬性將傳回使用中工作表上的儲存格)。
WithWorksheets(1)
.Range(.Cells(1,1),_
.Cells(10,10)).Borders.LineStyle=xlThick
EndWith
在工作表上使用Rows可取得工作表中包含所有列的範圍。
您可以透過Item(row)存取單一列,其中row是列索引。
Item可以省略,因為呼叫會透過Range的預設成員轉傳而來。
注意
將Item的第二個參數提供給由列組成的範圍是不合法的。
您必須先透過Cells轉換為單一儲存格。
下列範例會在使用中活頁簿的第一個工作表中,刪除第5列和第10列。
Worksheets(1).Rows(10).Delete
Worksheets(1).Rows.Item(5).Delete
在工作表上使用Columns可取得工作表中包含所有欄的範圍。
您可以透過Item(row)[sic]存取單一欄,其中row是欄索引,以數字或A1樣式的欄位址形式指定。
Item可以省略,因為呼叫會透過Range的預設成員轉傳而來。
注意
將Item的第二個參數提供給由欄組成的範圍是不合法的。
您必須先透過Cells轉換為單一儲存格。
下列範例會在使用中活頁簿的第一個工作表中,刪除B欄、C欄、E欄和J欄。
Worksheets(1).Columns(10).Delete
Worksheets(1).Columns.Item(5).Delete
Worksheets(1).Columns("C").Delete
Worksheets(1).Columns.Item("B").Delete
Use_expression_.Rows可取得範圍中第一個區域中由列組成的範圍,其中的expression是可傳回Range物件的運算式。
您可以透過Item(row)存取單一列,其中row是從範圍中第一個區域最上方開始的相對列索引。
Item可以省略,因為呼叫會透過Range的預設成員轉傳而來。
注意
將Item的第二個參數提供給由列組成的範圍是不合法的。
您必須先透過Cells轉換為單一儲存格。
下列範例會在使用中活頁簿的第一個工作表中,刪除C8:D8範圍和C6:D6範圍。
Worksheets(1).Range("C5:D10").Rows(4).Delete
Worksheets(1).Range("C5:D10").Rows.Item(2).Delete
Use_expression_.Columns可取得範圍中第一個區域中由欄組成的範圍,其中的expression是可傳回Range物件的運算式。
您可以透過Item(row)[sic]存取單一欄,其中row是從範圍中第一個區域左方開始的相對欄索引,以數字或A1樣式的欄位址形式指定。
Item可以省略,因為呼叫會透過Range的預設成員轉傳而來。
注意
將Item的第二個參數提供給由欄組成的範圍是不合法的。
您必須先透過Cells轉換為單一儲存格。
下列範例會在使用中活頁簿的第一個工作表中,刪除L2:L10範圍、G2:G10範圍、F2:F10範圍和D2:D10範圍。
Worksheets(1).Range("C5:Z10").Columns(10).Delete
Worksheets(1).Range("C5:Z10").Columns.Item(5).Delete
Worksheets(1).Range("C5:Z10").Columns("D").Delete
Worksheets(1).Range("C5:Z10").Columns.Item("B").Delete
使用Offset(row,column)可以傳回相對於另一範圍指定之位移處的範圍,其中row及column是列位移及欄位移。
下列範例會選取位於目前選取範圍左上角儲存格向下三列、向右一欄處的儲存格。
您無法選取不在使用中試算表中的儲存格,因此必須先啟動工作表。
Worksheets("Sheet1").Activate
'Can'tselectunlessthesheetisactive
Selection.Offset(3,1).Range("A1").Select
使用Union(range1,range2,...)可以傳回多區域的範圍,即該範圍是由兩個以上的連續儲存格區塊所組成。
下列範例會建立定義為A1:B2範圍與C3:D4範圍聯集的物件,然後選取定義的範圍。
Dimr1AsRange,r2AsRange,myMultiAreaRangeAsRange
Worksheets("sheet1").Activate
Setr1=Range("A1:B2")
Setr2=Range("C3:D4")
SetmyMultiAreaRange=Union(r1,r2)
myMultiAreaRange.Select
使用包含多個區域的選取範圍時,Areas屬性格外有用。
此屬性會將多區域的選取範圍分成個別的Range物件,然後以集合的形式傳回這些物件。
對傳回的集合使用Count屬性,以驗證是否有包含多個區域的選取範圍,如下列範例所示。
SubNoMultiAreaSelection()
NumberOfSelectedAreas=Selection.Areas.Count
IfNumberOfSelectedAreas>1Then
MsgBox"Youcannotcarryoutthiscommand"&_
"onmulti-areaselections"
EndIf
EndSub
此範例會使用Range物件的AdvancedFilter方法,在欄位A範圍中建立唯一值的清單,以及值發生的次數。
SubCreate_Unique_List_Count()
'Excelworkbook,thesourceandtargetworksheets,andthesourceandtargetranges.
DimwbBookAsWorkbook
DimwsSourceAsWorksheet
DimwsTargetAsWorksheet
DimrnSourceAsRange
DimrnTargetAsRange
DimrnUniqueAsRange
'Varianttoholdtheuniquedata
DimvaUniqueAsVariant
'Numberofuniquevaluesinthedata
DimlnCountAsLong
'InitializetheExcelobjects
SetwbBook=ThisWorkbook
WithwbBook
SetwsSource=.Worksheets("Sheet1")
SetwsTarget=.Worksheets("Sheet2")
EndWith
'Onthesourceworksheet,settherangetothedatastoredincolumnA
WithwsSource
SetrnSource=.Range(.Range("A1"),.Range("A100").End(xlDown))
EndWith
'Onthetargetworksheet,settherangeascolumnA.
SetrnTarget=wsTarget.Range("A1")
'UseAdvancedFiltertocopythedatafromthesourcetothetarget,
'whilefilteringforduplicatevalues.
rnSource.AdvancedFilterAction:=xlFilterCopy,_
CopyToRange:=rnTarget,_
Unique:=True
'Onthetargetworksheet,settheuniquerangeonColumnA,excludingthefirstcell
'(whichwillcontainthe"List"headerforthecolumn).
WithwsTarget
SetrnUnique=.Range(.Range("A2"),.Range("A100").End(xlUp))
EndWith
'AssignallthevaluesoftheUniquerangeintotheUniquevariant.
vaUnique=rnUnique.Value
'Countthenumberofoccurrencesofeveryuniquevalueinthesourcedata,
'andlistitnexttoitsrelevantvalue.
ForlnCount=1ToUBound(vaUnique)
rnUnique(lnCount,1).Offset(0,1).Value=_
Application.Evaluate("COUNTIF("&_
rnSource.Address(External:=True)&_
","""&rnUnique(lnCount,1).Text&""")")
NextlnCount
'Labelthecolumnofoccurrenceswith"Occurrences"
WithrnTarget.Offset(0,1)
.Value="Occurrences"
.Font.Bold=True
EndWith
EndSub
方法
Activate
AddComment
AddCommentThreaded
AdvancedFilter
AllocateChanges
ApplyNames
ApplyOutlineStyles
AutoComplete
AutoFill
AutoFilter
AutoFit
AutoOutline
BorderAround
Calculate
CalculateRowMajorOrder
CheckSpelling
Clear
ClearComments
ClearContents
ClearFormats
ClearHyperlinks
ClearNotes
ClearOutline
ColumnDifferences
Consolidate
ConvertToLinkedDataType
Copy
CopyFromRecordset
CopyPicture
CreateNames
Cut
DataTypeToText
DataSeries
Delete
DialogBox
Dirty
DiscardChanges
EditionOptions
ExportAsFixedFormat
FillDown
FillLeft
FillRight
FillUp
Find
FindNext
FindPrevious
FlashFill
FunctionWizard
Group
Insert
InsertIndent
Justify
ListNames
Merge
NavigateArrow
NoteText
Parse
PasteSpecial
PrintOut
PrintPreview
RemoveDuplicates
RemoveSubtotal
Replace
RowDifferences
Run
Select
SetCellDataTypeFromCell
SetPhonetic
Show
ShowCard
ShowDependents
ShowErrors
ShowPrecedents
Sort
SortSpecial
Speak
SpecialCells
SubscribeTo
Subtotal
表格
TextToColumns
Ungroup
UnMerge
屬性
AddIndent
Address
AddressLocal
AllowEdit
應用程式
Areas
Borders
Cells
Characters
欄
Columns
ColumnWidth
Comment
CommentThreaded
Count
CountLarge
Creator
CurrentArray
CurrentRegion
Dependents
DirectDependents
DirectPrecedents
DisplayFormat
End
EntireColumn
EntireRow
錯誤
Font
FormatConditions
Formula
FormulaArray
FormulaHidden
FormulaLocal
FormulaR1C1
FormulaR1C1Local
HasArray
HasFormula
HasRichDataType
Height
隱藏
HorizontalAlignment
Hyperlinks
識別碼
IndentLevel
Interior
項目
Left
LinkedDataTypeState
ListHeaderRows
ListObject
LocationInTable
Locked
MDX
MergeArea
MergeCells
名稱
Next
NumberFormat
NumberFormatLocal
Offset
Orientation
OutlineLevel
PageBreak
Parent
Phonetic
Phonetics
PivotCell
PivotField
PivotItem
PivotTable
Precedents
PrefixCharacter
Previous
QueryTable
Range
ReadingOrder
Resize
列
RowHeight
Rows
ServerActions
ShowDetail
ShrinkToFit
SoundNote
SparklineGroups
Style
摘要
Text
Top
UseStandardHeight
UseStandardWidth
Validation
值
Value2
VerticalAlignment
Width
Worksheet
WrapText
XPath
另請參閱
Excel物件模型參考資料
支援和意見反應
有關於OfficeVBA或這份文件的問題或意見反應嗎?如需取得支援服務並提供意見反應的相關指導,請參閱OfficeVBA支援與意見反應。
本文內容
延伸文章資訊
- 1Excel VBA 程式設計教學:活頁簿、工作表與儲存格 - GT Wang
Excel VAL程式設計教學寫得不錯我想應用在股票每天5日平均值減60日平均值每天的值計算就不用很辛苦計算請教每天5日平均值60日平均值如何由看盤中取得?
- 2直接用VBA取得儲存格中的數字或英文資料
已經夠複雜的了,若要再取出數字部分,那就更加困難, 建議,這麼複雜的事情,還是改為VBA來做會比較適合, 也許直接跳過EXCEL裡的函數,
- 3Excel VBA教學001 如何在儲存格中輸入資料 - 電腦學習園地
【語法】 Value屬性說明 object.Value = variant object:目標Range物件,variant:儲存格值 【說明】 指定儲存格有Range與Cells兩種方式,Ra...
- 4VBA 常用參數方法| CYL菜鳥攻略 - - 點部落
Cells 將第一行第一列的儲存格 ... 指定某個檔案、某個表單,向下至最底行,取得此行數 ... WorksheetFunction:表示呼叫當前Excel程式裡的公式。
- 5Range.Value 屬性(Excel) | Microsoft Docs
備註. 當設定XML 試算表檔案內容的某一儲存格範圍,僅使用活頁簿第一張工作表上的值。 您無法設定或取得XML 試算表格式中不連續的儲存格範圍。