Xin hướng dẫn về cách chuyển đến 1 ô định trước sau khi nhập dữ liệu (1 người xem)

Liên hệ QC

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

vuphuocha

Thành viên chính thức
Tham gia
20/1/07
Bài viết
71
Được thích
26
Xin mọi người hướng dẫn dùm mình vấn đề như sau:
Trong bảng tính nếu nhập bất kỳ một giá trị vào một ô thì có cách nào để chuyển con trỏ đến một một ô khác định trước không?
Ví dụ như khi nhập 1 giá trị tại ô A1 sau khi bấm Enter hoặc bấm phím Tab thì chuyển sang một ô khác không phải là A2 (nếu bấm Enter) hoặc B1 (nếu bấm phím Tab). Tóm lại là nó chuyển đến bất kỳ ô nào chỉ định chứ không phải 2 ô liền kề.
Xin mọi người hướng dẫn giúp dùm mình.
 
Bạn sửa lại các thông số trong macro này xem sao

Mã:
Option Explicit
[B]Private Sub Worksheet_Change(ByVal Target As Range)[/B]
 If Not Intersect(Target, Range("B2:B3")) Is Nothing Then _
   Cells(3 + (Target.Value \ 3), 6 + (Target.Value Mod 5)).Select
[B]End Sub[/B]
 
Bạn HYen17 có thể hướng dẫn cụ thể hơn cho mình được không vì thật ra mình không biết dùng macro như thế nào! Cụ thể là sửa giá trị trong đoạn code đó như thế nào và sử dụng macro đó làm sao.
Rất cảm ơn bạn đã quan tâm giúp đỡ.
 
Hướng dẫn từ xa:

(*) Đưa macrro vào sử dụng:

Bạn phải chuột vô thanh SheetName (Bên trái dưới cùng của màn hình), khi đó 1 cửa sổ sẽ đổ xuống
Bạn chọn dòng cuối để vô cửa sổ VBE;
Bạn chép nguyên macrro này vô đó.

(*) Thay đổi các thông số trong hai dòng lệnh;

+ Bạn chỉ nhập vô 2 ô B2:B3 macrro mới tác động; Hơn nữa bạn phải nhập là các số trị vô đó;
+ Nơi sẽ di chuyển đến có chỉ số dòng là 3 + (Số đã nhập trong ô trên \ 3) ; Phép chia là phép chia lấy số chẵn mà thôi;
Ví dụ ta nhập số 10 vô B2; khi đó trỏ chuột sẽ đến hàng 3 + 3 => 6
Nơi chuyển đến có chỉ số cột là số đã nhập vô chia cho 5 & cộng với 6; Như ví dụ trên 6 + (10 mod 5) = 6 + 0;
Nghĩa là bạn nhập vô 'B2' số 10, thì con trỏ sẽ chuyển đến ô 'F6'

Tất nhiên bạn có thể chỉ định ô sẽ được kích hoạt khác 1 cách cố định như

PHP:
If Not Intersect(Target, Range("B2:B3")) Is Nothing Then _
   Cells(3, 5)).Select

Khi đó ô hàng thứ 3 cột 5 sẽ được kích hoạt ('E3').
Bạn còn có thể biến hóa các thông số này uyễn chuyển hơn nếu muốn.

Chào bạn & chúc ngon giấc!
 
Cảm ơn bạn rất nhiều, mình sử dụng đoạn code đầu + dòng cells... mà bạn hướng dẫn ở sau để hoàn thành ý đồ ban đầu của mình. Một lần nữa cảm ơn bạn HYen17.
 
Lần chỉnh sửa cuối:
Mình lại vướng ở một điểm như vậy trong quá trình làm, đó là sau khi sử dụng đoạn code của HYen17 hướng dẫn mình đã làm như vậy:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Cells(4, 15)) Is Nothing Then _
Cells(4, 26).Select
If Not Intersect(Target, Cells(4, 16)) Is Nothing Then _
Cells(4, 30).Select
End Sub
Nhưng đoạn code đó chỉ có hiệu lực trên dòng thứ 4 thôi, còn nếu mình muốn có cả hiệu lực trên các dòng còn lại (vị trí cột không thay đổi) thì không được.
Mình xin nói lại mục đích của mình trong trường hợp này như sau:
- Sau khi nhập bất kỳ một giá trị nào (giá trị có thể là số hoặc chữ cái) thì mình muốn con trỏ chỉ đến một ô chỉ định trước, và cách thức này có thể sử dụng được cho tất cả các cột hay hàng định trước.
Ví dụ như tại cột C dòng 4 mình nhập 1 giá trị bất kỳ thì con trỏ phải chuyển đến một cột khác nhưng phải cùng dòng (dòng 4). và cách di chuyển con trỏ này có thể áp dụng cho các dòng và các cột khác nữa (nói chung là mình muốn thay đổi vị trí trỏ chuột theo cột nhưng số thứ tự dòng giữ nguyên như từ hàng 5 cột D có thể chuyển đến hàng 5 cột L; từ hàng 6 cột D chuyển đến hàng 6 cột L)
Nhờ các bạn giúp mình giải quyết vấn đề này. Rất cảm ơn các bạn
 
Lần chỉnh sửa cuối:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Cells(4, 15)) Is Nothing Then _
          Cells(4, 26).Select
 
 End Sub
Mình xin diễn dịch dòng lệnh chính trong macro này, như sau:

Nếu ta nhập/xóa/sửa dữ liệu tại ô thuộc hàng 4, cột 15 thì sau đó con trỏ sẽ chuyển đến ô thuộc dòng 4 cột 26 (Cột 26 có chữ cái 'Z')
Ta gọi Rang1 là vùng ta đụng tới & Rang2 là vùng ta sẽ tới (để dễ hình dung tiếp theo)

Bây giờ bạn muốn khi nào đó đụng đến cột 15 (bất kỳ dòng nào) thi ta viết vế 1 lại như sau:

Mã:
If Not Intersect(Target, Columns(15)) Is Nothing Then _

Câu lệnh cho việc đụng đến cột 'D' như sau:
Mã:
If Not Intersect(Target, Columns("D:D")) Is Nothing Then _
Hay đụng đến cột 'B' với chỉ những ô chứa dữ liệu mà thôi, như sau

Mã:
  If Not Intersect(Target, Range( [B1], [B65535].End(xlUp)) Is Nothing Then _
Hay đơn giản từ B7:B99, như sau
Mã:
  If Not Intersect(Target, Range( [B7], [B99])) Is Nothing Then _

Bạn ngiềnn nghẫm những loại địa chỉ Rang1 như vậy, sau đó sẽ dễ dàng với Rang2

Chúc bạn thành công!
 
Cảm ơn HYen17, thực tình mình cũng có coi cuốn VBA trong Excel của anh Phan Tự Hướng và cũng thử làm đến
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("o4: o99")) Is Nothing Then
Range("Z4: Z99").Select
End If
If Not Intersect(Target, Range("p4: p99")) Is Nothing Then
Range("ad4: ad99").Select
End If
End Sub
Nhưng mình vướng ở chổ là điểm đến của con trỏ là cả một cột (cột Z hoặc cột AD theo như 2 dòng lệnh mình đang làm) chứ nó không đến cùng dòng (dòng 4 của cột Z hay dòng 4 của cột AD). Bạn có thể giải thích thêm dùm mình không.
Nếu chỉ trên 1 dòng thì theo hướng dẫn của bạn mình đã làm được nhưng trên các dòng khác thì mình chịu không biết phải làm sao!.
Và mình cũng có một thắc mắc nữa tuy biết hỏi ở đây là sai nhưng vì muốn tìm hiểu kỹ hơn nên hỏi bạn luôn: Trong đoạn sau
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Cells(4, 15)) Is Nothing Then _
Cells(4, 26).Select
If Not Intersect(Target, Cells(4, 16)) Is Nothing Then _
Cells(4, 30).Select
End Sub
khi mình chạy thì nó chẳng đòi end if (cái đoạn này mình còn làm hơn chục dòng if như vậy nữa) nhưng với đoạn code màu xanh ở trên thì phải có end if nó mới chạy.
 
Lần chỉnh sửa cuối:
PHP:
Option Explicit
 Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("o4: o99")) Is Nothing Then
1         Cells( Target.Row, "Z").Select        
    ElseIf Not Intersect(Target, Range("p4: p99")) Is Nothing Then
2         Cells( 9 + Target.Row, "AD").Select                
  End If
End Sub
Ta cũng có thể viết chung trong If . . . End If như trên;
(*) Dòng lệnh 1 sẽ cho ta đến cột 'Z' cùng dòng với ô ta đụng tới
(**) Dòng sau sẽ đến cột 'AD' nhưng xuống dưới 9 hàng so với ô có hàng (row) ta đụng tới.

Viết If . . . End If như bạn là chân phương nhất;
Còn cách mình viết là được phép;
Ngoài ra còn cách viết nữa, bạn sẽ thấy ở đâu đó

PHP:
If GPE = "Ngưng" then My_Buon = True Else My_Buon = False
 
Rất cảm ơn bạn đã giải thích dùm mình. Sau bài này mình sẽ đọc kỹ hơn cuốn sách mình đang có.
 
Rất cảm ơn bạn đã giải thích dùm mình. Sau bài này mình sẽ đọc kỹ hơn cuốn sách mình đang có.
Yêu cầu của bạn là:
- Nếu gõ gì đó vào O4: O99 thì dịch chuyển con trỏ sang phải 11 cột (tức cột Z)
- Nếu gõ gì đó vào P4: P99 thì dịch chuyển con trỏ sang phải 14 cột (tức cột AD)
Vậy code đơn giản là vầy đây:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("O4: O99")) Is Nothing Then
    Target.Offset(, 11).Select
  End If
  If Not Intersect(Target, Range("P4: P99")) Is Nothing Then
    Target.Offset(, 14).Select
  End If
End Sub
Bạn có thể sửa số 11 và 14 trong code nếu bạn có nhu cầu dịch chuyển khác hơn (cứ đếm là ra)
 
Cảm ơn ndu96081631 đã hướng dẫn, mình sẽ thử luôn cách của ndu96081631 nhưng với hướng dẫn của HYen17 thì những thắc mắc của mình đã được giải quyết triệt để.
Thật ra chính xác là mình muốn khi nhập giá trị tại một dòng X của cột Y thì con trỏ sẽ chuyển đến dòng X của cột Z được chỉ định. Cái tham số Cells(Target.Row đã làm mình rất vui rồi.
Cảm ơn các bạn đã tận tình giúp đỡ.
 
các bạn cho mình hỏi:
Mình có thiết kế 1 file Excel, nhập liệu ở Sheet 1 và lưu kết quả tự động ở Sheet 2.Mình muốn là sau khi nhập dữ liệu xong ở Sheet 1 và ấn Enter thì tự động chuyển sang ô kết quả tương ứng ở Sheet 2 nhưng ko biết làm thế nào
Mong các cao thủ GPE giúp đỡ.
 
Web KT

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

Back
Top Bottom