Di chuyển nhanh con trỏ chuột đến ô cần đến

Liên hệ QC

LienDong

Thành viên thường trực
Tham gia
22/11/12
Bài viết
218
Được thích
46
Nghề nghiệp
Ai nói đúng thì làm!
Em có bảng tính nhập điểm
Ở hàng thứ 6 sau khi nhập lớp 2A1, rồi nhập điểm Tiếng Việt xong, nhập tiếp điểm Toán, sau khi nhập điểm toán xong , nếu enter thì con trỏ chuột sẽ nhảy sang ô lớp 2A1 (ô j6)
Xin hỏi có cách nào không? cảm ơn các bạn.
 

File đính kèm

Em có bảng tính nhập điểm
Ở hàng thứ 6 sau khi nhập lớp 2A1, rồi nhập điểm Tiếng Việt xong, nhập tiếp điểm Toán, sau khi nhập điểm toán xong , nếu enter thì con trỏ chuột sẽ nhảy sang ô lớp 2A1 (ô j6)
Xin hỏi có cách nào không? cảm ơn các bạn.
Bạn thử:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
        If Target.Column = 5 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 6 Then
            Target.Offset(, 1).Select
            ElseIf Target.Column = 7 Then
            Target.Offset(, 3).Select
            ElseIf Target.Column = 10 Then
            Target.Offset(, 1).Select
            ElseIf Target.Column = 10 Then
            Target.Offset(, 1).Select
            ElseIf Target.Column = 11 Then
            Target.Offset(, 1).Select
            ElseIf Target.Column = 12 Then
            Target.Offset(1, -7).Select
        End If
    End If
End Sub
 
Upvote 0
Enter ở G6 sẽ:
- nhẩy tới J6 nếu E6 = 2A1
- nhẩy tới K6 nếu E6 = 2A2
- nhẩy tới L6 nếu E6 = 2A3

???

Nếu không phải thế thì mô tả lại chi tiết.

Còn nếu thế thì có lẽ phải dùng code thôi.

Nếu code thì: click tên sheet1 trên thanh "sheet tabs" ở cạnh dưới cửa sổ -> View code -> dán code ở dưới -> lưu lại là dichuyencontrochuot.xlsm.

Lưu ý:
- code phục vụ tới 100 lớp, bắt đầu từ J5.
- các tên lớp không nhất thiết có chữ số tận cùng, vd. lớp 8A
- các tên lớp trong dòng 5, bắt đầu từ J5, có thể nhập theo thứ tự bất kỳ.

Code
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    If Target.Count = 1 And Target.Column = 7 And Target.Row > 5 Then
        Set rng = Me.Range("J5").Resize(, 100).Find(Target.Offset(, -2).Value, , xlValues, xlWhole, xlByRows, xlNext)
        If Not rng Is Nothing Then rng.Offset(Target.Row - 5).Select
    End If
End Sub
 
Upvote 0
Enter ở G6 sẽ:
- nhẩy tới J6 nếu E6 = 2A1
- nhẩy tới K6 nếu E6 = 2A2
- nhẩy tới L6 nếu E6 = 2A3

???

Nếu không phải thế thì mô tả lại chi tiết.

Còn nếu thế thì có lẽ phải dùng code thôi.

Nếu code thì: click tên sheet1 trên thanh "sheet tabs" ở cạnh dưới cửa sổ -> View code -> dán code ở dưới -> lưu lại là dichuyencontrochuot.xlsm.

Lưu ý:
- code phục vụ tới 100 lớp, bắt đầu từ J5.
- các tên lớp không nhất thiết có chữ số tận cùng, vd. lớp 8A
- các tên lớp trong dòng 5, bắt đầu từ J5, có thể nhập theo thứ tự bất kỳ.

Code
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    If Target.Count = 1 And Target.Column = 7 And Target.Row > 5 Then
        Set rng = Me.Range("J5").Resize(, 100).Find(Target.Offset(, -2).Value, , xlValues, xlWhole, xlByRows, xlNext)
        If Not rng Is Nothing Then rng.Offset(Target.Row - 5).Select
    End If
End Sub
Dạ đúng rồi anh do em nói thiếu
Cho em hỏi thêm 1 tí là bây giờ em di chuyển dòng khối lớp lên trên 1 dòng (từ dòng 5 lên dòng 4)thì code sửa sao ạ!
 

File đính kèm

Upvote 0
Dạ đúng rồi anh do em nói thiếu
Cho em hỏi thêm 1 tí là bây giờ em di chuyển dòng khối lớp lên trên 1 dòng (từ dòng 5 lên dòng 4)thì code sửa sao ạ!
Code của @batman1 chỉ nhảy từ cột 7 sang cột lớp, nếu lớp ở cột E chưa có sẽ nhảy hơi xa
Mượn code của bạn @phulien1902 thêm vài lệnh cho hoàn chỉnh thao tác nhập liên tục cho nhiều lớp
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim jCol&
    If Target.Count = 1 And Target.Row > 5 Then
        jCol = Target.Column
        If jCol = 5 Then
            Target.Offset(0, 1).Select
        ElseIf jCol = 6 Then
            Target.Offset(, 1).Select
        ElseIf jCol = 7 Then
            On Error Resume Next
            Target.Offset(, Application.Match(Cells(Target.Row, 5), Range("H4:L4"), 0)).Select
        ElseIf jCol > 9 And jCol < 13 Then
            Cells(Target.Row + 1, 5).Select
        End If
    End If
End Sub
 
Upvote 0
Code của @batman1 chỉ nhảy từ cột 7 sang cột lớp, nếu lớp ở cột E chưa có sẽ nhảy hơi xa
Chỉ nhẩy từ cột 7 vì đó là yêu cầu của chủ thớt.

Nếu chưa có lớp thì chả nhẩy đi đâu cả.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    If Target.Count = 1 And Target.Column = 7 And Target.Row > 5 Then
        If Target.Offset(, -2).Value <> "" Then
            Set rng = Me.Range("J5").Resize(, 100).Find(Target.Offset(, -2).Value, , xlValues, xlWhole, xlByRows, xlNext)
            If Not rng Is Nothing Then rng.Offset(Target.Row - 5).Select
        End If
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi thêm 1 tí là bây giờ em di chuyển dòng khối lớp lên trên 1 dòng (từ dòng 5 lên dòng 4)thì code sửa sao ạ!
Nếu chưa có lớp thì chả nhẩy đi đâu cả.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    If Target.Count = 1 And Target.Column = 7 And Target.Row >= 6 Then
        If Target.Offset(, -2).Value <> "" Then
            Set rng = Me.Range("J4").Resize(, 100).Find(Target.Offset(, -2).Value, , xlValues, xlWhole, xlByRows, xlNext)
            If Not rng Is Nothing Then rng.Offset(Target.Row - rng.Row).Select
        End If
    End If
End Sub

Lưu ý:
Có thể viết code để nhẩy khi nhấn Enter ở cột Tiếng Việt hoặc cột Toán. Tức nhấn Enter ở 2 cột thì đều nhẩy. Code không khó. Vấn đề làm thế nào cho "tiện lợi" thôi. Thực ra không cần như thế. Có 2 cách nhập: nhập lần lượt Tiếng Việt, Toán rồi nhấn Enter ở cột Toán để nhẩy, và nhấn Enter ở cột Tiếng Việt để nhẩy sau đó lại trở về cột Toán để nhập rồi Enter. Cách 1 thao tác nhanh hơn. Chỉ cần nhập Tiếng VIệt hoặc các bộ môn khác rồi nhấn phím mũi tên sang phải. Hoặc vào Excel -> Options -> Advanced -> ngay ở đầu trong mục "After pressing Enter , move selection" -> "Direction" chọn Right. Lúc đó thao tác như sau: chọn lớp -> nhấn Enter -> ô Tiếng Việt được chọn -> nhập Tiếng Việt -> Enter -> ô Toán được chọn -> nhập Toán -> Enter -> code sẽ cho nhẩy. 2 cách này là nhanh nhất. Và vì thế code tôi viết chỉ nhẩy khi nhấn Enter ở Toán. Trong trường hợp nhiều bộ môn thì nhấn Enter ở bộ môn cuối cùng. Tốt nhất không thay đổi gì trong Options. Enter là xuống dòng còn mũi tên phải để di chuyển sang phải.
-------------
Để trong tương lai bạn có thể tự sửa thì tôi hướng dẫn chi tiết.
Trong tương lai khi vị trí và số bộ môn thay đổi thì bạn phải thay đổi những chỗ như sau:
1. Thay đổi số 7 (chỉ 1 chỗ trong code ở trên). Tại sao là 7? Vì 7 là cột mà ở đó ta nhấn Enter để nhẩy - cột G. Khi cột mà ở đó ta nhấn Enter để nhẩy là vd. cột F thì đổi 7 thành 6.

2. Thay đổi số 6 (chỉ 1 chỗ trong code trong code ở trên). Tại sao là 6? Vì dữ liệu và Data Validation bạn sẽ nhập bắt đầu từ dòng 6. Nếu "Lop-Tiếng Việt-Toán" ở dòng 8, dòng 9 bạn để trống hoặc dùng để đánh số cột, và bạn nhập dữ liệu từ dòng 10 thì thay 6 bằng 10.

3. Thay đổi -2 (2 chỗ trong code trong code ở trên). Tại sao là -2? Nếu bạn dịch cột mà ở đó nhấn Enter để nhẩy (cột Toán của bạn) sang trái 2 cột thì bạn có cột lớp. Vì thế -2. Nếu cột bộ môn cuối cùng mà ở đó sẽ nhấn Enter để nhẩy phải dịch sang trái 4 cột để có cột lớp thì thay -2 bằng -4.

4. Thay đổi J4 (chỉ 1 chỗ trong code ở trên). Tại sao là J4? Vì lớp đầu tiên trong khối lớp nằm ở J4. Thế thôi. Nếu lớp đầu tiên trong khối lớp nằm ở I7 thì thay J4 bằng I7.

Code phục vụ tới 100 lớp. Nếu bạn có số lớp ít hơn thì thay bằng số nhỏ hơn, vd. 70, 50.

Vd. trong Sheet2 tôi cho ví dụ về 4 bộ môn và vị trí của dữ liệu thay đổi như tôi nói ở trên. Nhấn Enter ở bộ môn cuối cùng là Hóa (cột 6).

sheet2.JPG

Code cho Sheet2 là
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    If Target.Count = 1 And Target.Column = 6 And Target.Row >= 10 Then
        If Target.Offset(, -4).Value <> "" Then
            Set rng = Me.Range("I7").Resize(, 100).Find(Target.Offset(, -4).Value, , xlValues, xlWhole, xlByRows, xlNext)
            If Not rng Is Nothing Then rng.Offset(Target.Row - rng.Row).Select
        End If
    End If
End Sub

Code cũng có trong tập tin cho sheet1 và sheet2. Bài viết của tôi trong sheet3.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em cảm ơn mấy anh, nó giúp em giảm thời gian nhập điểm
 
Upvote 0
Web KT

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

Back
Top Bottom