khi bấm enter, con trỏ tự động chuyển đến cột đầu tiên hoặc đến ô mặc định (1 người xem)

Liên hệ QC

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

khanhnth02

Thành viên thường trực
Tham gia
5/8/07
Bài viết
338
Được thích
36
làm thế nào để khi bấm enter, con trỏ tự động chuyển đến cột đầu tiên hoặc đến ô mặc định, sẽ dùng hàm macro như thế nào vậy các anh chị. xin chân thành cảm ơn
 
Để giải quyết vấn đề này trên diễn đàn cũng đã nhiều lần đề cập. Mình chỉ nêu lại hướng sử lý tuỳ theo mức độ:
-Nếu việc di chuyển chỉ đơn giản là chuyển dịch bỏ qua 1 số cột và đến cột nào đó thì chuyển về cột đầu trên 1 vùng nào đó thì sử dụng Lock Cell và Protect sheet là giải quyết được.
-Nếu việc di chuyển phức tạp thì phải dùng VBA và thường áp vào sự kiện Selection Change để điều khiển.
 
Upvote 0
mình không thể khoá cột hoặc dòng. ý mình muốn khi nhấn Enter ở ô F2, sẽ tự động chuyển con trỏ đến cột đầu tiên của dòng kế tiếp (ví dụ này là ô A3), tương tự Enter ô F3 con trỏ sẽ tự chuyển ô A4.....
 
Upvote 0
làm thế nào để khi bấm enter, con trỏ tự động chuyển đến cột đầu tiên hoặc đến ô mặc định, sẽ dùng hàm macro như thế nào vậy các anh chị. xin chân thành cảm ơn

Sao lại con trỏ? Con trỏ là cái biểu tượng hình chữ thập. Có thể nhấn "mũi tên xuống" liên tục để di chuyển ô chọn liên tục nhưng con trỏ vẫn đứng yên một chỗ. Vị trí on trỏ và vị trí ô chọn thì liên quan gì với nhau? Sao nhiều bạn có khó khăn trong việc diễn tả những cái đơn giản thế nhỉ!

mình không thể khoá cột hoặc dòng. ý mình muốn khi nhấn Enter ở ô F2, sẽ tự động chuyển con trỏ đến cột đầu tiên của dòng kế tiếp (ví dụ này là ô A3), tương tự Enter ô F3 con trỏ sẽ tự chuyển ô A4.....

Nếu là di chuyển ô chọn (activecell) thì có nhiều cách, tốt nhất là dùng OnKey. Nghĩ qua cũng có 2 cách
Mã:
Private Sub Auto_Open()
    Application.OnKey "~", "DoEnter"
End Sub

Private Sub Auto_Close()
    Application.OnKey "~"
End Sub

Private Sub DoEnter()
'    hoac
'    SendKeys "{HOME}{DOWN}"
'    hoac
    Cells(ActiveCell.row + 1, 1).Select
End Sub

Code trên dùng chuyển activecell tới ô đầu của dòng tiếp theo. Còn nếu chuyển tới ô mặc định, vd. ô tại dòng r cột c thì tương tự thôi
Mã:
Cells(r, c).Select

Còn nếu chuyển tới ô có offset là a, b so với ô hiện hành - ô mà tại đó sẩy ra ENTER thì cũng dễ như trên
Mã:
Dim r As Long, c As Long
...
    r = ActiveCell.row + a
    c = ActiveCell.Column + b
    If r < 1 Then r = 1
    If c < 1 Then c = 1
    Cells(r, c).Select
 
Upvote 0
tôi đã làm được rồi, xong nó sẽ áp dụng tất cả các sheet trong bảng tính luôn, có cách nào chỉ cần áp dụng trong một sheet tối cần không?. và cái này chỉ được dùng cho một phím Enter (lớn, ở giữa), còn phím Enter bên dãy gần phím số (phím nhỏ) không chạy được
 
Upvote 0
Tại sao bạn hỏi lại kiệm file ví dụ thế nhỉ? Nói thì vậy chứ ai biết bạn di chuyển thế nào.
Bác Siwtom đưa ra cách bạn có thể áp dụng chung cho WorkSheet. Nhưng ta hoàn toàn có thể áp dụng riêng cho các Sheet cụ thể. Thậm chí còn cách khác không ảnh hưởng đến các phím chức năng nữa. Nhưng mình không làm chi tiết vì khi trả lới lại không phải rồi, ý tôi thế này cơ thì mệt lắm.
 
Upvote 0
a chỉ nói thôi chứ chưa thấy ra đưa ra lời giải cụ thể nào thì tôi có làm gì được đâu. cách nào khác thì a cứ làm giúp tôi
 
Upvote 0
tôi đã làm được rồi, xong nó sẽ áp dụng tất cả các sheet trong bảng tính luôn, có cách nào chỉ cần áp dụng trong một sheet tối cần không?. và cái này chỉ được dùng cho một phím Enter (lớn, ở giữa), còn phím Enter bên dãy gần phím số (phím nhỏ) không chạy được

Bạn sửa code trên của bác siwtom đưa vào code sự kiện của worksheet bạn muốn áp dụng: worksheet_Active và worksheet_Deactive
là được
 
Upvote 0
Mình cũng muốn chuyển ô như trong chủ đề này nhưng không biết làm thế nào.
Vì mình chưa từng dùng VBA nên nhờ mọi người chỉ thêm giùm.
Mình đính kèm file và chú thích, nhờ mọi người hỗ trợ.
Cảm ơn mọi người.
 

File đính kèm

  • Chuyen o.PNG
    Chuyen o.PNG
    13.3 KB · Đọc: 43
Upvote 0
Mình cũng muốn chuyển ô như trong chủ đề này nhưng không biết làm thế nào.
Vì mình chưa từng dùng VBA nên nhờ mọi người chỉ thêm giùm.
Mình đính kèm file và chú thích, nhờ mọi người hỗ trợ.
Cảm ơn mọi người.
Khi Excel đang ở chế độ mặc định (nhấn Enter là chuyển đến cell dưới)
Thì bạn giữ Ctrl sau đó kích chọn lần các cell B5, C5, B6,... chọn xong bỏ Ctrl/nhấn Enter để xem Excel chạy các cell đã đúng ý bạn chưa?
 
Upvote 0
Khi Excel đang ở chế độ mặc định (nhấn Enter là chuyển đến cell dưới)
Thì bạn giữ Ctrl sau đó kích chọn lần các cell B5, C5, B6,... chọn xong bỏ Ctrl/nhấn Enter để xem Excel chạy các cell đã đúng ý bạn chưa?
Cảm ơn bạn đã chỉ dẫn, ý mình đang muốn là ô B5 khi nhập "A" và enter thì sẽ tự động chuyển qua ô C5. Tại ô C5 mình nhập 100 sau đó enter thì tự chuyển xuống ô B6 để nhập "C", làm tương tự vậy ở các ô khác.
Cảm ơn bạn nhiều.
 
Upvote 0
Bạn nhập thử 10 dòng vào File dưới đây
Ồ, cảm ơn bạn nhiều nhé. đã đúng như ý mình muốn nhưng muốn sửa thành nhiều dòng như vậy thì làm thế nào hả bạn?
Bài đã được tự động gộp:

Ồ, cảm ơn bạn nhiều nhé. đã đúng như ý mình muốn nhưng muốn sửa thành nhiều dòng như vậy thì làm thế nào hả bạn?
Xin nói thêm là mình cần thực hiện như vậy có khi dữ liệu lên đến 1000 dòng đó bạn. :)
 
Upvote 0
Vẫn hướng đó thì: mở tập tin của bạn phulien1902 -> phải chuột trên Sheet1 ở "sheet tabs" ở dưới cùng -> View code -> thay toàn bộ code hiện có bằng
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
        If Target.Column = 2 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 3 Then
            Target.Offset(1, -1).Select
        End If
    End If
End Sub

Code chuyển qua lại giữa 2 cột B (2) và C (3) vì thế trong code co 2 và 3. Nếu bạn muốn chuyển qua lại giữa 2 cột khácv thì tự sửa code. Vd. giữa E (5) và F (6) thì trong code sửa 2 và 3 thành 5 và 6

siwtom không trả lời tin nhắn của bạn vì siwtom bây giờ chỉ xuất hiện với nick batman1 thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Vẫn hướng đó thì: mở tập tin của bạn phulien1902 -> phải chuột trên Sheet1 ở "sheet tabs" ở dưới cùng -> View code -> thay toàn bộ code hiện có bằng
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
        If Target.Column = 2 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 3 Then
            Target.Offset(1, -1).Select
        End If
    End If
End Sub

Code chuyển qua lại giữa 2 cột B (2) và C (3) vì thế trong code co 2 và 3. Nếu bạn muốn chuyển qua lại giữa 2 cột khácv thì tự sửa code. Vd. giữa E (5) và F (6) thì trong code sửa 2 và 3 thành 5 và 6

siwtom không trả lời tin nhắn của bạn vì siwtom bây giờ chỉ xuất hiện với nick batman1 thôi.
Cảm ơn bạn nhiều. Đã làm được như mình muốn.
Cảm ơn bạn rất nhiều luôn. Mình tìm cách làm cái này mấy ngày mà không xong cho đến khi đăng ký diễn đàn này.
 
Upvote 0
Kính chào quý Thầy/Cô cùng các Anh/Chị!
Cũng cùng đề tài trên, nhờ các Anh/Chị giúp em viết lệnh VBA (theo file đính kèm).
Em muốn làm nhiều lệnh theo 2 hàng trong cùng 1 Sheet như vậy thì làm sao ạ!. Rất mong sự giúp đỡ quý Thầy/Cô cùng các Anh/Chị.
Trân trọng cảm ơn!
 

File đính kèm

Upvote 0
Kính chào quý Thầy/Cô cùng các Anh/Chị!
Cũng cùng đề tài trên, nhờ các Anh/Chị giúp em viết lệnh VBA (theo file đính kèm).
Em muốn làm nhiều lệnh theo 2 hàng trong cùng 1 Sheet như vậy thì làm sao ạ!. Rất mong sự giúp đỡ quý Thầy/Cô cùng các Anh/Chị.
Trân trọng cảm ơn!
Bạn thử với KHAY1 bảng A
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
        If Target.Column = 2 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 3 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 4 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 5 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 6 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 7 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 8 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 9 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 10 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 11 Then
            Target.Offset(1, -9).Select
        End If
    End If
End Sub
 
Upvote 0
Bạn thử với KHAY1 bảng A
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
        If Target.Column = 2 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 3 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 4 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 5 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 6 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 7 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 8 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 9 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 10 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 11 Then
            Target.Offset(1, -9).Select
        End If
    End If
End Sub
Dear Bác!
Cảm ơn Bác đã giúp đỡ. Từ "Khay 1" Chuyển xuống "Khay 2" từ K13 đến vị trí B17 có làm được không ạ? Và nếu áp dụng cho Bảng B cùng với bảng A được không Ạ?
Trân trọng cảm ơn!
 
Upvote 0
Dear Bác!
Cảm ơn Bác đã giúp đỡ. Từ "Khay 1" Chuyển xuống "Khay 2" từ K13 đến vị trí B17 có làm được không ạ? Và nếu áp dụng cho Bảng B cùng với bảng A được không Ạ?
Trân trọng cảm ơn!
Bạn muốn nhập dữ liệu vào KHAY 2, thì bạn đặt con trỏ chuột vào B17, sau đó nhập dữ liệu vào bình thường.
Tương tự cho KHAY nào đó bạn đặt con trỏ chuột vào Cell đầu tiên của KHAY đó ......
 
Upvote 0
Bạn muốn nhập dữ liệu vào KHAY 2, thì bạn đặt con trỏ chuột vào B17, sau đó nhập dữ liệu vào bình thường.
Tương tự cho KHAY nào đó bạn đặt con trỏ chuột vào Cell đầu tiên của KHAY đó ......
Cảm ơn bác nhiều. Vậy nếu áp dụng cho Bảng B thì mình lồng ghép hàm VBA như thế nào ạ?
Thanks!
 
Upvote 0
Cảm ơn bác nhiều. Vậy nếu áp dụng cho Bảng B thì mình lồng ghép hàm VBA như thế nào ạ?
Cảm ơn!
Bạn thử:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    'BANG A
    If Target.Count = 1 Then
        If Target.Column = 2 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 3 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 4 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 5 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 6 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 7 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 8 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 9 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 10 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 11 Then
            Target.Offset(1, -9).Select
        End If
        ' BANG B
          If Target.Column = 14 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 15 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 16 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 17 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 18 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 19 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 20 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 21 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 22 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 23 Then
            Target.Offset(1, -9).Select
        End If
    End If
End Sub
 
Upvote 0
Bạn thử:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    'BANG A
    If Target.Count = 1 Then
        If Target.Column = 2 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 3 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 4 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 5 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 6 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 7 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 8 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 9 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 10 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 11 Then
            Target.Offset(1, -9).Select
        End If
        ' BANG B
          If Target.Column = 14 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 15 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 16 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 17 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 18 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 19 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 20 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 21 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 22 Then
            Target.Offset(0, 1).Select
        ElseIf Target.Column = 23 Then
            Target.Offset(1, -9).Select
        End If
    End If
End Sub
Cảm ơn bác nhiều ạ!
 
Upvote 0
Bạn không muốn code nó mộc mạc hơn sao
----------------------------
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Target.Count = 1 Then
    Dim I%
    For I = 2 To 11
      Select Case Target.Column
        Case I, I + 12: Target(1, IIf(I = 11, -8, 2).Select: Exit For
      End Select
    Next
  End If
  Application.EnableEvents = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn không muốn code nó mộc mạc hơn sao
----------------------------
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Target.Count = 1 Then
    Dim I%
    For I = 2 To 11
      Select Case Target.Column
        Case I, I + 12: Target.Offset(0, IIf(I = 11, -9, 1)).Select: Exit For
      End Select
    Next
  End If
  Application.EnableEvents = True
End Sub
Chắc bạn chưa Test thử trước khi gửi bài, vì nó chưa đúng ý chủ Topic.
 
Upvote 0
Chắc bạn chưa Test thử trước khi gửi bài, vì nó chưa đúng ý chủ Topic.
Vì nhìn thấy code cần rút gọn , chớ chưa đọc qua bài của bạn ấy

Bác phulien1902 có thể tóm tắc 1 tí không?

-------------------------------------------
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Target.Count = 1 Then
      Select Case Target.Column
        Case 2 to 10, 14 to 22:Target(1,  2).Select
        Case 11, 23:Target(1, -8).Select    
      End Select
  End If
  Application.EnableEvents = True
End Sub
 
Upvote 0
Vì nhìn thấy code cần rút gọn , chớ chưa đọc qua bài của bạn ấy

Bác phulien1902 có thể tóm tắc 1 tí không?

-------------------------------------------
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Target.Count = 1 Then
      Select Case Target.Column
        Case 2 to 10, 14 to 22:Target(1,  2).Select
        Case 11, 23:Target(1, -8).Select   
      End Select
  End If
  Application.EnableEvents = True
End Sub
Vẫn chưa được.
 
Upvote 0
Chắc sẽ được. toanxn

Không có giới hạn Khay, mà thực hiện cho đến giới hạn của Excel, Đặt LimitTable để giới hạn

PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Target.Count = 1 Then Call MoveZigZag(10, 10, Target, [B4], 4)
  Application.EnableEvents = True
End Sub
Sub MoveZigZag(Row%, Col%, LRNG As Range, Rng As Range,Optional LimitTable&)
  Dim X&, Y&, LRow&, LCol&, tX&, tY&
  Dim dX&, WF As WorksheetFunction
  Set WF = Application.WorksheetFunction
  X = Rng.Row - 1:   Y = Rng.Column - 1
  LRow = LRNG.Row:   LCol = LRNG.Column
  If LRow = Rows.Count Then Exit Sub
  dX = WF.RoundDown(LRow / (Row + X), 0)
  tX = dX * Row + dX * X + X
  tY = IIf(LCol - Y < Col + Y + 2, 0, Col + 2) + Y
  Select Case LCol
    Case 1 + tY To Col + tY - 1: Rng(LRow - X, LCol).Select
    Case Col + tY:
      If tX = LRow + X Then
        If LCol = Col + Y Then
          Rng(tX - Row - X - 2, LCol + tY + 1).Select
        Else
          If dX = LimitTable And LimitTable > 0 Then _
            LRNG.Select: MsgBox "Ða là ô cuoi' cung`!": Exit Sub
          tY = Y: Rng(tX - X + 1, tY).Select
        End If
      Else
        Rng(LRow - X + 1, tY).Select
      End If
  End Select
End Sub
Copy vào module để kiểm tra
PHP:
Sub test()
  Dim I
  [B4].Select
  For I = 1 To 1000
    Selection(1, 1).Value = I
    DoEvents
  Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Xin các cao thủ giải giúp bài này.
Đã nghiên cứu mãi 1 đêm mà ko ra cách giải..... Vô cùng biết ơn. Trân trọng
Bài đã được tự động gộp:

Như bài trên, nhưng mở rộng ra nhiều Khay, mỗi Khay 96 vị trí như vậy, và cho chạy lần lượt từng khay , với số Khay được sinh ra tự động, mỗi khay cách nhau 2 dòng.... Trân trọng
 

File đính kèm

  • 2021-03-05_215219.jpg
    2021-03-05_215219.jpg
    48.8 KB · Đọc: 9
Upvote 0

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

Back
Top Bottom