PDA

View Full Version : Công thức Offset



le tin
06-10-08, 08:38 AM
Tôi dùng công thức Offset để chọn 1 vùng , tương tự trong VBA là gì,nhờ các bạn chỉ hộ.Cảm ơn

Po_Pikachu
06-10-08, 08:42 AM
Bạn vào xem ở đây nè!
http://www.giaiphapexcel.com/forum/showthread.php?t=7188
Thân.

le tin
06-10-08, 08:46 AM
Ý mình là viết đoạn code trong VBA mà bạn , trong đó tìm không thấy .

ThuNghi
06-10-08, 08:51 AM
Ý mình là viết đoạn code trong VBA mà bạn , trong đó tìm không thấy .
Bạn xem trong phần Resize (Bài của Bác SA_DQ).
Đây là ví dụ từ "OldRng" tạo ra New01, 02, ...


Sub Thay()
[A1:D10].Name = "OldRng"
Range("OldRng").Offset(1, 2).Name = "New01" 'dời qua 2 cột, xuống 1 dòng
Range("OldRng").Resize(2, 3).Name = "New02" 'từ OldRng chỉ lấy 2 dòng va 3 cột
Range("OldRng").Resize(2, 3).Offset(1, 2).Name = "New03" 'từ OldRng chỉ lấy 2 dòng va 3 cột và dời qua 2 cột và xuống 2 dòng
Range("OldRng").Cells(1, 2).Name = "New04" 'tu OldRng chi lay dong 1 cot 2
End Sub

Po_Pikachu
06-10-08, 09:00 AM
Offset trong VBA cũng gần giống vậy!
Cú pháp: Là địa chỉ ô nguồn rồi (.)Offset(hàng, cột). Ví dụ:
Range("A1").Offset(5, 2).Value = ô C6
Range("A1").Offset(, 2).Value = ô C1
Range("A1").Offset(5).Value = ô A6
Vầy chắc bạn đã hiểu rồi chứ!
Thân.

le tin
06-10-08, 09:17 AM
Cảm ơn các bạn , nhưng đó là 1 ô .
Ở đây mình muốn 1 VÙNG kia mà

Po_Pikachu
06-10-08, 09:31 AM
Nếu vùng thì có hai cách!
C1: Bạn lấy range của ô đầu vùng đó rồi dùng Offset như trên.
C2: Bạn Set 1 vùng tạm rồi dùng nó làm 1 mảng lấy dữ liệu. Ví dụ:

Sub thu()
Set Vung = range("A1:D10")
k = 1
For i = 1 to 10
For j = 1 to 4
Cells(k,6) = vung.cells(i,j).Value
k = k +1
next
next
End Sub
Cài hàm Vung.Cells(i,j) nghĩa là lấy hàng i cột j ở trong vùng đó. Và code sẽ quét cột trước hàng sau rồi xếp vào 1 cột mới.
Thân.

SA_DQ
06-10-08, 09:37 AM
Cảm ơn các bạn , nhưng đó là 1 ô .
Ở đây mình muốn 1 VÙNG kia mà
Nếu 1 vùng thì sẽ có 1 vùng, bằng cách bạn thử đoạn mã sau:



Range("B2:C9").Select
MsgBox Selection.Offset(0 , 1).Address

Sau một hồi suy ngẫn kết quả từ hộp thoại kết xuất, bạn thử thay dần các số khác vô chổ số 0 & số 1 trong mệnh đề Offsẻt(i, j) xem sau ( Kể cả số âm, nhưng là số âm lớn, VD:= -1)

:-=}}}}})(&&@@

le tin
06-10-08, 10:58 AM
Ví dụ thế này:
Con trỏ đang ở A1 , vùng chọn là B1:T1
Di chuyển đến A2 , vùng chọn là B2:T2

Di chuyển đến Ai , vùng chọn là Bi:Ti
Thì làm sao

Po_Pikachu
06-10-08, 11:04 AM
Ý bạn giống như vầy! Phải không?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 Then
Range("B" & Target.Row & ":T" & Target.Row).Select
End If
End Sub
Thân.

lypt
06-10-08, 02:18 PM
For i = 1 To 5
Cells(i, 1).Select
ActiveCell.Range("B1:T1") = i
MsgBox "Ghi"
ActiveCell.Range("B1:T1").ClearContents
MsgBox "Xoa"
Next i

ndu96081631
06-10-08, 07:50 PM
Cái này chỉ cần 1 code duy nhất:

[B1:T1].Offset(Target.Row - 1).Select
Không vòng lập

huyen09
02-02-09, 06:51 PM
Mình chưa hiểu hàm Offset phục vụ cho mục đích gì, mong bạn nào biết chỉ dùm với?

Po_Pikachu
02-02-09, 06:57 PM
Hàm Offset trong VBA dùng để giời vị trí chọn từ 1 cell gốc đi.
Cấu trúc của hàm Offset là Offset(hàng, cột)

Ví dụ:
Nếu Cell gốc tại A1 và ta muốn chọn ở ô B3 thì ta viết như sau:
Range("A1").Offset(2,1)
Nếu Cell gốc tại A1 và ta muốn chọn ở ô D1 thì ta viết như sau:
Range("A1").Offset(,3)
Nếu Cell gốc tại A1 và ta muốn chọn ở ô A10 thì ta viết như sau:
Range("A1").Offset(9)
Thân.

SA_DQ
02-02-09, 09:30 PM
Hàm Offset trong VBA dùng để giời vị trí chọn từ 1 cell gốc đi.
Cấu trúc của hàm Offset là Offset(hàng, cột)
. . . .
Thân.

Đó là ta không thể hiểu hay diễn dịch qua tiếng Việt đây là 1 hàm, mà là 'Thuộc tính'; Sau đây là phần giúp đỡ của VBE một khi ta nhập từ 'OFFSET' trong cửa sổ này & nhấn {F1}:

Offset Property

See Also . . . Applies To . . . . Example


Returns a Range object that represents a range that’s offset from the specified range. Read-only.

expression.Offset(RowOffset, ColumnOffset)
expression Required. An expression that returns a Range object.

RowOffset Optional Variant. The number of rows (positive, negative, or 0 (zero)) by which the range is to be offset. Positive values are offset downward, and negative values are offset upward. The default value is 0.

ColumnOffset Optional Variant. The number of columns (positive, negative, or 0 (zero)) by which the range is to be offset. Positive values are offset to the right, and negative values are offset to the left. The default value is 0.

Offset property as it applies to the TickLabels object.

Returns or sets the distance between the levels of labels, and the distance between the first level and the axis line. The default distance is 100 percent, which represents the default spacing between the axis labels and the axis line. The value can be an integer percentage from 0 through 1000, relative to the axis label’s font size. Read/write Long.

expression.Offset
expression Required. An expression that returns a TickLabels object.

Example
As it applies to the Range object.

This example activates the cell three columns to the right of and three rows down from the active cell on Sheet1.


Worksheets("Sheet1").Activate
ActiveCell.Offset(rowOffset:=3, columnOffset:=3).Activate
This example assumes that Sheet1 contains a table that has a header row. The example selects the table, without selecting the header row. The active cell must be somewhere in the table before the example is run.


Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, tbl.Columns.Count).Select