VBA Code - Excel Cells & Ranges
Có thể bạn quan tâm
Empty Cells
The best way to test if a cell is empty is to use the IsEmpty() function.
If VBA.IsEmpty = False ThenTesting for a zero-length string will be true when a formula returns a zero-length string
If rgeCell.Value <> "" ThenNo Cell Object
There is no Cell object nor is there a Cells collection.Individual cells are treated as Range objects that refer to one cell.
Contents of a Cell
The easiest way to find what the contents of a cell are is to use the Visual Basic TypeName function
Range("A1").Value = 100 Range("B1").Value = VBA.TypeName(Range("A1").Value) = "Double" Range("A2").Value = #1/1/2006# Range("B2").Value = VBA.TypeName(Range("A2").Value) = "Date" Range("A3").Value = "some text" Range("B3").Value = VBA.TypeName(Range("A3").Value) = "String" Range("A4").Formula = "=A1" Range("B4").Value = VBA.TypeName(Range("A4").Value) = "Double"Text Property
You can assign a value to a cell using its Value property.You can give a cell a number format by using its NumberFormat property.The Text property of a cell returns the formatted appearance of the contents of a cell.
Range("A1").Text = "$12,345.00"Range Object
The Range object can consist of individual cells or groups of cells.Even an entire row or column is considered to be a range.Although Excel can work with three dimensional formulas the Range object in VBA is limited to a range of cells on a single worksheet.It is possible to edit a range either using a Range object directly (e.g. Range("A1").BackColor ) or by using the ActiveCell or Selection methods (e.g. ActiveCell.BackColor )
Cells Property
Application.Cells ActiveSheet.Cells ActiveCell CellsWhen the cells property is applied to a Range object the same object is returned.It does have some uses though:
Range.Cells.Count - The total number of cells in the range.
Range.Cells(row, column) - To refer to a specific cell within a range.
To loop through a range of cells
Cells automatically refer to the active worksheet.If you want to access cells on another worksheet then the correct code is:
Range( Worksheets(n).Cells(""), Worksheets(n).Cells("") )Range Property
Application.Range ActiveSheet.Range RangeWhen Range is not prefixed and used in a worksheet module, then it refers to that specific worksheet and not the active worksheet.
Selection Property
Selection will return a range of cellsBe aware that the Selection will not refer to a Range object if another type of object, such as a chart or shape is currently selected.Using the Selection object performs an operation on the currently selected cells.If a range of cells has not been selected prior to this command, then the active cell is used.
Selection.Resize(4,4).SelectIt is always worth checking what is currently selected before using the Selection property.
If TypeName(Selection) = "Range" Then End IfRelative References
It is important to remember that when a Cells property or a Range property is applied to a Range object, all the references are relative to the upper-left corner of that range.
ActiveSheet.Range("B2:D4").Cells(2,2) = ActiveSheet.Range("C3") ActiveSheet.Range("B2:D4").Range("B2") = ActiveSheet.Range("C3")ActiveCell returns a reference to the currently active cellThis will only ever return a single cell, even when a range of cells is selected.The active cell will always be one of the corner cells of a range of cells. - will it what if you use the keyboard ??
Total number of populated cells
iTotal = Application.CountA(ActiveSheet.Cells)Window Object Only
This property applies only to a window objectThis will enter the value 12 into the range that was selected before a non-range object was selected.
ActiveWindow.RangeSelection.Value = 12Window.RangeSelection property is read-only and returns a Range object that represents the selected cells on the worksheet in the active window.If a graphic object is active or selected then this will returns the range of cells that was selected before the graphic object was selected.
Counting
Dim ltotal As Long ltotal = Cells.Count 'returns a long Dim dbtotal As Double dbtotal = Cells.CountLarge ' returns a doubleRange of a Range
It is possible to treat a Range as if it was the top left cell in the worksheet.This can be used to return a reference to the upper left cell of a Range objectThe following line of code would select cell "C3".
Range("B2").Range("B2").Select Range("B2").Cells(2).SelectRemember that cells are numbered starting from A1 and continuing right to the end of the row before moving to the start of the next row.
Range("B2").Cells(2,2).SelectAn alternative to this is to use the Offset which is more intuitive.
Range.Address
The Address method returns the address of a range in the form of a string.
Range("A1:B3").Address = "$A$1:$B$3" Range("A1:B3").Address(False,False) = "A1:B3"Using the parameters allows you to control the transformation into a string (absolute vs relative).
Range.Address([RowAbsolute], [ColumnAbsolute], [ReferenceStyle], [External], [RelativeTo]) As StringRowAbsolute - True or False, default is TrueColumnAbsolute - True or False, default is TrueReferenceStyle - xlReferenceStyle.xlA1External - True to return an external reference, default is falseRelativeTo - Range representing a relative to cell. Only relevant when ReferenceStyle = xlR1C1
Range.AddressLocal
This is similar to Address but it returns the address in the regional format of the language of the particular country.
Cells.Replace SearchFormat:=True, ReplaceFormat:=True lLastRowNo = ActiveCell.End(xlDown).RowMoving large amounts of data quickly
Dim vArray As Variant vArray = Range("A1").Resize(10,10) Range("H6").Resize(10,10) = vArrayObtaining the cell reference of the active cell
Dim lrownumber As Long Dim icolumnno As Integer lrownumber = ActiveCell.Row icolumnno = ActiveCell.Column Call MsgBox("The currently active cell is " & lrowno & " , " & icolumnno)Makes the active cell the top left cell in the window
ActiveCell.Select ActiveWindow.ScrollColumn = ActiveCell.Column ActiveWindow.ScrollRow = ActiveCell.RowSelection
Selection.PasteSpecial Paste:=xlValues Selection.Copy Selection.Cut Set objRange = Selection Selection.Rows.CountLooping through all the selected cells
For Each objCell In Selection.Cells Next objCellRange of cells currently selected
ifirstcol = Range(Selection.Address).Column inoofcols = Range(Selection.Address).Column + Selection.Columns.Count lfirstrow = Range(Selection.Address).Row lnoofrows = Range(Selection.Address).Row + Selection.Rows.Count Selection.Font.Size = 12 If TypeName(Selection) = "Range" Then MsgBox("More than one cell currently selected")Formatting
Call MsgBox( Range("A3").Font.ColorIndex ) Call MsgBox( Range("A3").Interior.ColorIndex ) If (Range("A3").Font.ColorIndex < 0) Then Call MsgBox (" When ?") If (Range("A3").Interior.ColorIndex < 0) Then Call MsgBox (" When ?") Range("A2").Font.Bold = True Range("A4:D10").NumberFormat = "mmm-dd-yyyy"Looping Through Cells
Dim rgeCell As Cell For Each rgeCell In Range("A1:D30").Cells rgeCell.Value = 20 Next rgeCell Dim rgeCurrent As Range Do While Not IsEmpty(rgeCurrent) 'do something Set rgeCurrent = rgeCurrent.Offset(1,0) LoopYou can prevent the user scrolling around a worksheet by defining the scroll area. Worksheets("Sheet1").ScrollArea = "A1:D400". To set the scrolling back to normal just assign the ScrollArea to an empty string. Note that this setting is not saved so it may be necessary to include it in the WorkBook_Open() event procedure. You can quickly assign an Excel Range of cells to an array and visa-versa. Be aware that these arrays will start at 1 and not 0. vArrayName = Range(---).Value.
Determining a Cell Datatype
Help determine the type of data contained in a cell.This accepts a range of any size but only operates on the upper left cell in the range.
Function CellType(Rng) ' Returns the cell type of the upper left' cell in a range Application.Volatile Set Rng = Rng.Range("A1") Select Case True Case IsEmpty(Rng): CellType = "Blank" Case Application.IsText(Rng): CellType = "Text" Case Application.IsLogical(Rng): CellType = "Logical" Case Application.IsErr(Rng): CellType = "Error" Case IsDate(Rng): CellType = "Date" Case InStr(1, Rng.Text, ":") <> 0: CellType = "Time" Case IsNumeric(Rng): CellType = "Value" End Select End FunctionSave Shape As PNG
Sub SaveShapeAsPicture() Dim cht As ChartObject Dim ActiveShape As Shape Dim UserSelection As Variant On Error GoTo ErrorHandler Set UserSelection = ActiveWindow.Selection Set ActiveShape = ActiveSheet.Shapes(UserSelection.Name) 'Create a temporary chart object (same size as shape) Set cht = ActiveSheet.ChartObjects.Add( _ Left:=ActiveCell.Left, _ Width:=ActiveShape.Width, _ Top:=ActiveCell.Top, _ Height:=ActiveShape.Height) 'Format temporary chart to have a transparent background cht.ShapeRange.Fill.Visible = msoFalse cht.ShapeRange.Line.Visible = msoFalse 'Copy/Paste Shape inside temporary chart ActiveShape.Copy cht.Activate ActiveChart.Paste 'Save chart to User's Desktop as PNG File cht.Chart.Export Environ("USERPROFILE") & "\Desktop\" & ActiveShape.Name & ".png" 'Delete temporary Chart cht.Delete 'Re-Select Shape (appears like nothing happened!) ActiveShape.Select Exit Sub ErrorHandler: End SubSave Range as JPG
Sub SaveRangeAsPicture() Dim cht As ChartObject Dim ActiveShape As Shape On Error GoTo ErrorHandler 'Confirm if a Cell Range is currently selected If TypeName(Selection) <> "Range" Then MsgBox "You do not have a single shape selected!" Exit Sub End If 'Copy/Paste Cell Range as a Picture Selection.Copy ActiveSheet.Pictures.Paste(link:=False).Select Set ActiveShape = ActiveSheet.Shapes(ActiveWindow.Selection.Name) 'Create a temporary chart object (same size as shape) Set cht = ActiveSheet.ChartObjects.Add( _ Left:=ActiveCell.Left, _ Width:=ActiveShape.Width, _ Top:=ActiveCell.Top, _ Height:=ActiveShape.Height) 'Format temporary chart to have a transparent background cht.ShapeRange.Fill.Visible = msoFalse cht.ShapeRange.Line.Visible = msoFalse 'Copy/Paste Shape inside temporary chart ActiveShape.Copy cht.Activate ActiveChart.Paste 'Save chart to User's Desktop as PNG File cht.Chart.Export Environ("USERPROFILE") & "\Desktop\" & ActiveShape.Name & ".jpg" 'Delete temporary Chart cht.Delete ActiveShape.Delete 'Re-Select Shape (appears like nothing happened!) ActiveShape.Select Exit Sub ErrorHandler: End Sub © 2024 Better Solutions Limited. All Rights Reserved. © 2024 Better Solutions Limited TopPrevNextTừ khóa » Visual Basic Excel Range Cells
-
Range.Cells Property (Excel) - Microsoft Docs
-
Range Object (Excel) | Microsoft Docs
-
Excel VBA Ranges And Cells
-
Hướng Dẫn Sử Dụng Hàm CELLS Và RANGE để Lấy Giá Trị ô VBA ...
-
Đối Tượng Range Trong Excel VBA - Viblo
-
The Complete Guide To Ranges And Cells In Excel VBA
-
Range Object In Excel VBA - Easy Dim And Set
-
VBA Cells Excel | How To Use Cell Reference Property With Range ...
-
Understanding Excel Cells Vs. Range Functions In VBA - MakeUseOf
-
Excel VBA Range Object: 18 Useful Ways Of Referring To Cell Ranges
-
Using For Each In Excel Range - Code VBA
-
Working With Range And Cells In VBA - Excel Champs
-
Working With Cells And Ranges In Excel VBA (Select, Copy, Move ...