Chọn vùng trong VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

keke355992

Thành viên thường trực
Tham gia
19/1/08
Bài viết
310
Được thích
20
Nghề nghiệp
KẾ TOÁN THUẾ, TƯ VẪN THUẾ
Chào các AC trong diễn đàn. Nhờ các AC xem giúm e file này, trong file e đã ghi rõ y/c. E cảm ơn ạ
 

File đính kèm

Chào các AC trong diễn đàn. Nhờ các AC xem giúm e file này, trong file e đã ghi rõ y/c. E cảm ơn ạ
Làm biếng "chế" lại cái mới nên lấy code của bạn luôn: Bạn sửa câu lệnh
Mã:
Range(Cells(.Row, 2), Cells(.Row, 10).End(xlDown)).Select
thành
Mã:
Range(Cells(.Row, 2), Cells(.Row, 10).End(xlDown)[COLOR=#ff0000][B].Offset(-5)[/B][/COLOR]).Select
 
Upvote 0
Làm biếng "chế" lại cái mới nên lấy code của bạn luôn: Bạn sửa câu lệnh
Mã:
Range(Cells(.Row, 2), Cells(.Row, 10).End(xlDown)).Select
thành
Mã:
Range(Cells(.Row, 2), Cells(.Row, 10).End(xlDown)[COLOR=#ff0000][B].Offset(-5)[/B][/COLOR]).Select

Ôi đơn giản vậy mà e k nghĩ ra. Cứ loay hoay ++ -- row các kiểu. Thank a nhìu :)
 
Upvote 0
Nếu chọn 1 vùng thì xác định điểm đầu cần chọn rồi mở rộng bằng resize ra số dòng, số cột . Nếu biết một chút về VBA thì tự sửa thôi ...
Có thể trên thực tế thì cái dòng cuối cùng đó không biết là dòng nào, do đó cũng chưa biết được tổng số dòng cần chọn. Như vậy thì Resize trong trường hợp này là không ổn. Và tất nhiên nếu dòng cuối cùng mà không lớn hơn 5 thì cách dùng Offset như bài #2 cũng "tèo".
 
Upvote 0
Có thể trên thực tế thì cái dòng cuối cùng đó không biết là dòng nào, do đó cũng chưa biết được tổng số dòng cần chọn. Như vậy thì Resize trong trường hợp này là không ổn. Và tất nhiên nếu dòng cuối cùng mà không lớn hơn 5 thì cách dùng Offset như bài #2 cũng "tèo".
Vẫn bài toán này, nhờ A và các Ac khác xem giúp em 1 chút nữa ạ. E cảm ơn nhìu !!!
 

File đính kèm

Upvote 0
Bác @nghiaphuc xem giúp em với ạ
 
Upvote 0
Có thể trên thực tế thì cái dòng cuối cùng đó không biết là dòng nào, do đó cũng chưa biết được tổng số dòng cần chọn. Như vậy thì Resize trong trường hợp này là không ổn. Và tất nhiên nếu dòng cuối cùng mà không lớn hơn 5 thì cách dùng Offset như bài #2 cũng "tèo".
Trong file của bạn ấy có 2 câu thế này , mình xin trích dẫn :
- Khi em Click button, vùng chọn của em là : C4:J27
- E muốn khi ấn button thì chọn 1 vùng cách dòng dữ liệu cuối cùng 5 dòng, trong trường hợp này vùng chọn sẽ là C4:J22
Nên chẳng biết làm theo câu nào , nên làm tạm vậy, nếu chưa đúng thì la lên ...Nhưng chủ topic coi như không nhìn thấy... thì thôi . Nếu nói về chọn vùng mà còn chưa biết thì đừng nói đến VBA nữa . Chủ đề này mình không tham gia nữa ...
 
Upvote 0
Trong file của bạn ấy có 2 câu thế này , mình xin trích dẫn :
- Khi em Click button, vùng chọn của em là : C4:J27
- E muốn khi ấn button thì chọn 1 vùng cách dòng dữ liệu cuối cùng 5 dòng, trong trường hợp này vùng chọn sẽ là C4:J22
Nên chẳng biết làm theo câu nào , nên làm tạm vậy, nếu chưa đúng thì la lên ...Nhưng chủ topic coi như không nhìn thấy... thì thôi . Nếu nói về chọn vùng mà còn chưa biết thì đừng nói đến VBA nữa . Chủ đề này mình không tham gia nữa ...
E chào A. Cho phép e nói 1 chút. Hôm qa đúng là em có thử cách của A, sau đó thử cách của A NghiaPhuc. Theo đó, cách của A nghiaphuc đáp ứng đúng y/c của e mong muốn, e vội cảm ơn A ý. Có thể trong lúc đó, e đã quên k Reply lại cho A. Mong a thông cảm ạ. Có thể a sẽ hỏi là: Hôm nay chẳng nhẻ vẫn quên... E còn trẻ ng, mới tập tành VBA và còn rất nhiều điều muốn hỏi A và các thầy, Ac trong diễn đàn. E sẽ rút kinh nghiệm. Chúc A 1 ngày tốt lành !
 
Upvote 0
cho em hỏi :muốn chọn vùng ( cụ thể là hàng) mà trong đó chứa biến i thì chọn như thế nào? ví dụ như sau
Sub vidu()
Dim i, j As Integer
j = 3
For i = 1 To 100
If Worksheets("concrete").Cells(i, 4).Value = "Flocculation and Sedimentation Basin" Then
Worksheets("Sheet1").Range(...).Value = ...' em muốn chọn hàng thứ i "
Else
....


End If
Next i






End Sub
 
Upvote 0
cho em hỏi :muốn chọn vùng ( cụ thể là hàng) mà trong đó chứa biến i thì chọn như thế nào? ví dụ như sau
Sub vidu()
Dim i, j As Integer
j = 3
For i = 1 To 100
If Worksheets("concrete").Cells(i, 4).Value = "Flocculation and Sedimentation Basin" Then
Worksheets("Sheet1").Range(...).Value = ...' em muốn chọn hàng thứ i "
Else
....


End If
Next i






End Sub
Hàng thứ i thì là cột thứ mấy? Hay chỉ là hàng không thôi? Nếu chỉ là chọn hàng không thôi thì bạn cứ cho luôn vào : Rows(i) . Nếu chọn vùng kiểu như Range("A5:B8") mà số 8 là i thì điền Range("A5:B" & i)
 
Upvote 0
cho em hỏi :muốn chọn vùng ( cụ thể là hàng) mà trong đó chứa biến i thì chọn như thế nào? ví dụ như sau
Sub vidu()
Dim i, j As Integer
j = 3
For i = 1 To 100
If Worksheets("concrete").Cells(i, 4).Value = "Flocculation and Sedimentation Basin" Then
Worksheets("Sheet1").Range(...).Value = ...' em muốn chọn hàng thứ i "
Else
....


End If
Next i

End Sub
Nếu chỉ muốn chọn hàng i thì sử dụng thế này.
Mã:
Worksheets("Sheet1").Rows([COLOR=#ff0000][B]i[/B][/COLOR]).Select
 
Upvote 0
cho em hỏi thêm câu này:
em có sub sau mà sao khi chạy nó báo lỗi ở dòng tô đỏ.
các bác giúp em với.

Sub copy1() Dim copyrange As Range
Dim numrow, numcol As Integer
Set copyrange = Sheets("con1").[a4].CurrentRegion
copyrange.Offset(2).Resize(copyrange.Rows.Count - 2, copyrange.Columns.Count).Select
Selection.copy
Worksheets("FSB").Range("A5").Select
Selection.Insert Shift:=xlDown
End Sub
 
Upvote 0
cho em hỏi thêm câu này:
em có sub sau mà sao khi chạy nó báo lỗi ở dòng tô đỏ.
các bác giúp em với.

Sub copy1() Dim copyrange As Range
Dim numrow, numcol As Integer
Set copyrange = Sheets("con1").[a4].CurrentRegion
copyrange.Offset(2).Resize(copyrange.Rows.Count - 2, copyrange.Columns.Count).Select
Selection.copy
Worksheets("FSB").Range("A5").Select
Selection.Insert Shift:=xlDown
End Sub
Bạn xem lại sheet FSB có tồn tại hay không?
 
Upvote 0
cho em hỏi thêm câu này:
em có sub sau mà sao khi chạy nó báo lỗi ở dòng tô đỏ.
các bác giúp em với.

Sub copy1() Dim copyrange As Range
Dim numrow, numcol As Integer
Set copyrange = Sheets("con1").[a4].CurrentRegion
copyrange.Offset(2).Resize(copyrange.Rows.Count - 2, copyrange.Columns.Count).Select
Selection.copy
Worksheets("FSB").Range("A5").Select
Selection.Insert Shift:=xlDown
End Sub

Thêm một dòng màu đỏ:

Selection.copy
Sheets("FSB").Select
Sheets("FSB").Range("A5").Select
 
Upvote 0
Thêm một dòng màu đỏ:

Selection.copy
Sheets("FSB").Select
Sheets("FSB").Range("A5").Select
em đã làm như bác nói nhưng nó lại hiện bôi vàng dòng màu đỏ
em gửi file lên bác xem hộ em cái. không biết excel của em có bị lỗi gì không


Sub copy2()
Dim copyrange As Range
Dim numrow, numcol As Integer
Set copyrange = Sheets("con1").[a4].CurrentRegion
copyrange.Offset(2).Resize(copyrange.Rows.Count - 2, copyrange.Columns.Count).Select
Selection.copy
Sheets("FSB").Select
Worksheets("FSB").Range("A3").Select
Selection.Insert Shift:=xlDown
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
em đã làm như bác nói nhưng nó lại hiện bôi vàng dòng màu đỏ
em gửi file lên bác xem hộ em cái. không biết excel của em có bị lỗi gì không

Thêm dòng màu xanh

Set copyrange = Sheets("con1").[a4].CurrentRegion
Sheets("con1").Select
copyrange.Offset(2).Resize(copyrange.Rows.Count - 2).Select
 
Upvote 0
Thêm dòng màu xanh

Set copyrange = Sheets("con1").[a4].CurrentRegion
Sheets("con1").Select
copyrange.Offset(2).Resize(copyrange.Rows.Count - 2).Select
cảm ơn bác rất nhiều nhiều nha ..dòng lệnh của em đã chạy.
mà bác có thể giải thích cho em rõ hơn tại lại như vậy ạ.
còn một vấn đề nữa khi em nhấn F5 để chạy thì chương trình hiện bảng "update Value" như hình . em không hiểu gì nên click "Cancel"..cái bảng đó lại hiện ra lần nữa, em tiếp tục click "cancel" thì bảng đó mất đi mà dòng lệnh chạy được.
 

File đính kèm

  • update.jpg
    update.jpg
    25.2 KB · Đọc: 25
Upvote 0
cảm ơn bác rất nhiều nhiều nha ..dòng lệnh của em đã chạy.
mà bác có thể giải thích cho em rõ hơn tại lại như vậy ạ.
còn một vấn đề nữa khi em nhấn F5 để chạy thì chương trình hiện bảng "update Value" như hình . em không hiểu gì nên click "Cancel"..cái bảng đó lại hiện ra lần nữa, em tiếp tục click "cancel" thì bảng đó mất đi mà dòng lệnh chạy được.
Mã:
Sub copy2()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
[COLOR=#0000ff]'// code của bạn: Từ chỗ Dim tới trước End Sub
'.......[/COLOR]

Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
End Sub
 
Upvote 0
em lại vướng nữa bác ơi,
sau khi em sort bằng code

Sub sort()
Dim sortrange As Range
Set sortrange = Sheets("con1").[a4].CurrentRegion
Sheets("con1").Select
sortrange.AutoFilter Field:=3, Criteria1:= _
"Flocculation and Sedimentation Basin"

End Sub

em cho chạy tiếp code hồi nãy ( ở dưới ). thì nó không báo lỗi mà cũng không xuất kết quả luôn.
nếu không chạy sub sort () thì sub copy2() lại chạy ngon lành...mong các bác chỉ em biết sai ở chỗ nào vậy ;;;;;;;;;;;


Sub copy2()
Dim copyrange As Range
Dim numrow, numcol As Integer
Set copyrange = Sheets("con1").[a4].CurrentRegion
Sheets("con1").Select
copyrange.Offset(2).Resize(copyrange.Rows.Count - 2, copyrange.Columns.Count).Select
Selection.copy
Sheets("FSB").Select
Worksheets("FSB").Range("A3").Select
Selection.Insert Shift:=xlDown
End Sub
 
Upvote 0
cái phần thêm này của bác có ý nghĩ như thế nào vậy !
em thử thêm và chạy lại thì kết quả vẫn vậy .
Mã:
Sub copy2()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
[COLOR=#0000ff]'// code của bạn: Từ chỗ Dim tới trước End Sub
'.......[/COLOR]

Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
End Sub
 
Upvote 0
Các bác giúp em chọn các vùng khác nhau (màu vàng trong file gửi kèm) theo vùng chỉ định nhập ở ô L1:M2 (em muốn chọn kiểu như này ah; B&vlueL1:C&valueM1, B&valueL2:C&valueM2) em xin cảm ơn
 

File đính kèm

Upvote 0
Các bác giúp em chọn các vùng khác nhau (màu vàng trong file gửi kèm) theo vùng chỉ định nhập ở ô L1:M2 (em muốn chọn kiểu như này ah; B&vlueL1:C&valueM1, B&valueL2:C&valueM2) em xin cảm ơn
Dùng đỡ cái này:
PHP:
Option Explicit
Sub chonvung()
Dim i&, rng, startC As String, endC As String
Dim u As Range, addr As String
rng = Range("L1:M" & Cells(Rows.Count, "L").End(xlUp).Row).Value
startC = "B"' cot dau
endC = "C" ' cot cuoi
For i = 1 To UBound(rng)
    If rng(i, 1) <> "" And rng(i, 2) <> "" Then
        addr = startC & rng(i, 1) & ":" & endC & rng(i, 2)
        If u Is Nothing Then
            Set u = Range(addr)
        Else
            Set u = Union(u, Range(addr))
        End If
    End If
Next
u.Select
End Sub
 
Upvote 0
Các bác giúp em chọn các vùng khác nhau (màu vàng trong file gửi kèm) theo vùng chỉ định nhập ở ô L1:M2 (em muốn chọn kiểu như này ah; B&vlueL1:C&valueM1, B&valueL2:C&valueM2) em xin cảm ơn
Bạn thử coi

Mã:
Sub troioi()
    With Sheets("Sheet1")
        Union(.Cells(2, 2), .Cells(2, 3), .Range(.Cells(7, 2), .Cells(8, 3))).Select
    End With
End Sub
 
Upvote 0
Bạn thử coi

Mã:
Sub troioi()
    With Sheets("Sheet1")
        Union(.Cells(2, 2), .Cells(2, 3), .Range(.Cells(7, 2), .Cells(8, 3))).Select
    End With
End
[/QUOTE]

Bạn thử coi

Mã:
Sub troioi()
    With Sheets("Sheet1")
        Union(.Cells(2, 2), .Cells(2, 3), .Range(.Cells(7, 2), .Cells(8, 3))).Select
    End With
End Sub
hay wa cảm ơn bác nhiều
Bài đã được tự động gộp:

hay wa cảm ơn bác nhiều
ah không dc vì giá trị cột L1 đến M2 thay đổi nó ko chọn dc
Bài đã được tự động gộp:

Dùng đỡ cái này:
PHP:
Option Explicit
Sub chonvung()
Dim i&, rng, startC As String, endC As String
Dim u As Range, addr As String
rng = Range("L1:M" & Cells(Rows.Count, "L").End(xlUp).Row).Value
startC = "B"' cot dau
endC = "C" ' cot cuoi
For i = 1 To UBound(rng)
    If rng(i, 1) <> "" And rng(i, 2) <> "" Then
        addr = startC & rng(i, 1) & ":" & endC & rng(i, 2)
        If u Is Nothing Then
            Set u = Range(addr)
        Else
            Set u = Union(u, Range(addr))
        End If
    End If
Next
u.Select
End Sub
Cảm ơn bác nhiều đúng cái em đang cần
 
Lần chỉnh sửa cuối:
Upvote 0
Trực quan hơn nè, mại zô:
PHP:
Sub SelectionRanges1()
 Dim Rng As Range
 
 With Sheets("Sheet1")
    Set Rng = .Range("B" & .[L1].Value & ":C" & .[M1].Value)
    MsgBox Rng.Address, , "Rng.Address:"
    Union(Rng, .Range("B" & .[L2].Value & ":C" & .[M2].Value)).Select
    MsgBox Selection.Address, , "Vùng Chon Theo Chi Sô Dòng & Côt"
 End With
End Sub
 
Upvote 0
Trực quan hơn nè, mại zô:
PHP:
Sub SelectionRanges1()
 Dim Rng As Range
 
 With Sheets("Sheet1")
    Set Rng = .Range("B" & .[L1].Value & ":C" & .[M1].Value)
    MsgBox Rng.Address, , "Rng.Address:"
    Union(Rng, .Range("B" & .[L2].Value & ":C" & .[M2].Value)).Select
    MsgBox Selection.Address, , "Vùng Chon Theo Chi Sô Dòng & Côt"
 End With
End Sub
Bác lại trói cái vùng L1:M2 rồi. Thời đại 4.0 rồi thả rông cho nó tự do mát mẻ đi bác.
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom