Tìm địa chỉ cell

Liên hệ QC

le tin

Học mãi
Tham gia
22/10/07
Bài viết
722
Được thích
560
Mình có 1 việc cần giúp đỡ như sau:
Làm sao để biết 1 dữ liệu đang ở địa chỉ ô nào
VD:
Ở sheet1 , tôi có chữ "T" đang ở địa chỉ G7
Lập công thức tại A1 ,A2 của sheet2 thế nào để :
A1 là địa chỉ cột (G)
A2 là địa chỉ dòng (7)
Cảm ơn
 
Mình có 1 việc cần giúp đỡ như sau:
Làm sao để biết 1 dữ liệu đang ở địa chỉ ô nào
VD:
Ở sheet1 , tôi có chữ "T" đang ở địa chỉ G7
Lập công thức tại A1 ,A2 của sheet2 thế nào để :
A1 là địa chỉ cột (G)
A2 là địa chỉ dòng (7)
Cảm ơn
Bạn nói cụ thể xem là tìm cái gì? Chứ với 1 chử "T" thì e rằng bị trùng rất nhiều đấy
Có thể cho file cụ thể thì càng tốt
Tôi gợi ý 1 cách nha:
Ví dụ bạn muốn tìm chử "ndu" và bạn biết chắc nó nằm ở sheet 1, đâu đó trong vùng A1:H20 chẳng hạn! Vậy bạn dùng công thức sau đây tại sheet 2:
1> Tim dòng:
=MAX(IF(Sheet1!$A$1:$H$20="ndu",ROW(Sheet1!$A$1:$H$20),""))
Ctrl + Shift + Enter
2> Tim cột (khó hơn 1 chút)
=SUBSTITUTE(ADDRESS(1,MAX(IF(Sheet1!$A$1:$H$20="ndu", COLUMN(Sheet1!$A$1:$H$20),"")),4),1,"")
Cũng Ctrl + Shift + Enter
Chú ý: Công thức tìm dòng, nếu không tìm được sẽ cho kết quả = 0. Còn công thức tìm cột, nếu không tìm được sẽ báo lổi #VALUE!
 
Lần chỉnh sửa cuối:
| A |... | G | Chú thích 1 | 7 | =Column(G7) | | Lấy số cột như cột A là 1, cột B là 2,.. , cột G là 7 2 | 7 | =Row(G7) | | Lấy số dòng ...| ... | ... | ... | ... 7 | G7 | =ADDRESS(A2,A1,4) | T | ... 8 | T | =INDIRECT(A7) | ... | ...
Công thức này không lấy được trực tiếp tên của cột, nhưng có thể lấy được số thứ tự của cột đó. Nếu bạn muốn trả lại giá trị chính sát tên ô đó thì dùng công thức này xem: =ADDRESS(A2,A1,4) Nếu muốn trả giá trị thì dùng hàm Indirect. Như bảng trên. Thân.
 
Lần chỉnh sửa cuối:
Mình có 1 việc cần giúp đỡ như sau:
Làm sao để biết 1 dữ liệu đang ở địa chỉ ô nào
VD:
Ở sheet1 , tôi có chữ "T" đang ở địa chỉ G7
Lập công thức tại A1 ,A2 của sheet2 thế nào để :
A1 là địa chỉ cột (G)
A2 là địa chỉ dòng (7)
Cảm ơn
Nếu như chỉ: "Làm sao để biết 1 dữ liệu đang ở địa chỉ ô nào" thì cần gì công thức nhỉ?
Bạn nhấn Ctrl+F, gọi lệnh Find của Excel ra, biểu nó tìm chữ T, và nhấn Find All, bạn sẽ biết ngay cái chữ T đang ở đâu, như hình sau:
findT.png
 

Nếu như chỉ: "Làm sao để biết 1 dữ liệu đang ở địa chỉ ô nào" thì cần gì công thức nhỉ?
Bạn nhấn Ctrl+F, gọi lệnh Find của Excel ra, biểu nó tìm chữ T, và nhấn Find All, bạn sẽ biết ngay cái chữ T đang ở đâu
Tôi không nghĩ yêu cầu của tác chỉ đơn giãn là "TÌM"... Vì thường khi ta "TÌM" xong thì bước tiếp theo là "XỬ LÝ"
Tôi nghĩ bạn ấy muốn tham chiếu cái gì đó trong công thức thì phải
 
T chỉ là 1 ví dụ thôi , các bạn xem file sẽ rõ .
Đánh vào C1 để tìm
 

File đính kèm

  • Tim.xls
    13.5 KB · Đọc: 21
Vậy đơn giản thì bạn dùng code sau nha! Xem file sẽ hiểu.
PHP:
Sub timdiachi() On Error GoTo Loi tx = [C1].Value Sheet1.Select Cells.Find(What:=tx, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _         xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _         , SearchFormat:=False).Activate a = ActiveCell.Address(0, 0) Sheet2.Select [A1].Value = Left(a, 1) [A2].Value = Right(a, Len(a) - 1) Loi: Exit Sub End Sub
Để cho nó chạy tự động thì thêm vào code sau, code nằm trong Sheet2.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$1" Then Call timdiachi End If End Sub
 

File đính kèm

  • Tim.xls
    27 KB · Đọc: 15
Lần chỉnh sửa cuối:

File đính kèm

  • Tim_01.xls
    26.5 KB · Đọc: 16
Vậy đơn giản thì bạn dùng code sau nha! Xem file sẽ hiểu.
PHP:
Sub timdiachi()
On Error GoTo Loi
tx = [C1].Value
Sheet1.Select
Cells.Find(What:=tx, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
a = ActiveCell.Address(0, 0)
Sheet2.Select
[A1].Value = Left(a, 1)
[A2].Value = Right(a, Len(a) - 1)
Loi:
Exit Sub
End Sub
Bạn
Để cho nó chạy tự động thì thêm vào code sau, code nằm trong Sheet2.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$1" Then
Call timdiachi
End If
End Sub
Bạn Po_Pikachu ơi! sao bạn không làm 1 Function cho dể sử dụng? Với cú pháp là:
Function Vitri (Chuoitim As String, Vung As Range, Option gì đó) As Variant
Cái Option này quy định rằng ta đang muốn tìm dòng hay cột
Đại khái là vậy (tôi mới nghĩ, chưa làm được)
 
Vậy đơn giản thì bạn dùng code sau nha! Xem file sẽ hiểu.

Macro này còn 1 vài sai sót;
* Sai khi vùng tìm thấy dữ liệu tại các cột gần cuối trang tính;
Macro chỉ đúng trong trường hợp cột của ô tìm thấy <27
* Sót: Chưa tìm hết toàn trang tính. Một khi có hơn 1 dữ liệu trên trang tính, thì macro chỉ tìm & cho biết địa chỉ ô đầu tiên tìm thấy!​

Macro sau khắc phục được trường hợp đầu, như sau:​

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$1" Then
   Call timdiachi
ElseIf Not Intersect(Target, [c3]) Is Nothing Then
    GhiDiaChi Target
End If
End Sub

Mã:
 Sub GhiDiaChi(Tag As Range)
 Dim Rng As Range, bCol As Byte
   Set Rng = Sheet1.Cells.Find(What:=Tag, LookIn:=xlFormulas)
   [a5] = Rng.Row
   bCol = Rng.Column \ 26
   [a4] = Chr(64 + (Rng.Column Mod 26))
   If bCol > 0 Then [a4] = Chr(64 + bCol) & [a4]
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn Po_Pikachu ơi! sao bạn không làm 1 Function cho dể sử dụng? Với cú pháp là: Cái Option này quy định rằng ta đang muốn tìm dòng hay cột Đại khái là vậy (tôi mới nghĩ, chưa làm được)
PHP:
Function vitri(chuoitim As String, arr As Range, Optional tim As String = "Dong") As Variant On Error Resume Next If tim = "Dong" Then     For i = arr.Row To arr.End(xlDown).Row     For j = arr.Column To arr.End(xlToRight).Column         If Cells(i, j).Value = chuoitim Then             temp = i         End If     Next     Next     vitri = temp ElseIf tim = "Cot" Then     For i = arr.Row To arr.End(xlDown).Row     For j = arr.Column To arr.End(xlToRight).Column         If Cells(i, j).Value = chuoitim Then             For t = 1 To Len(Cells(i, j).Address(0, 0))             k = Mid(Cells(i, j).Address(0, 0), t, 1)                 If Not IsNumeric(k) = True Then                     temp = temp & k                 End If             Next             vitri = temp         End If     Next     Next Else vitri = "Nap gia tri cuoi vao, gia tri cuoi co the la Dong hoac Cot" End If End Function
Theo ý bác đây! ||||| Nhưng khi em chuyển sang sheet khác thì lại không được nữa, vậy phải sữa code như thế nào! Xin chỉ giáo. Thân.
 

File đính kèm

  • Vitri_AnhTuan1066.xls
    27 KB · Đọc: 10
Lần chỉnh sửa cuối:
Tớ cũng góp 1 UDF :

PHP:
Function DiaChi(Mang As Range, StrF As String, Optional Loai As String = "") As String
    Application.Volatile (False)
    Dim MyCell As Range
    Set MyCell = Mang.Find(StrF, MatchCase:=True, Matchbyte:=True)
    If MyCell Is Nothing Then Exit Function
    If UCase$(Loai) = "ROW" Then
        DiaChi = MyCell.Row
    Else
        DiaChi = Replace(MyCell.Address, "$", "")
        If UCase$(Loai) = "COL" Then DiaChi = Left(DiaChi, Len(DiaChi) - Len(Format(MyCell.Row, "0")))
    End If
End Function


Thân!
 

File đính kèm

  • Vitri_OB.xls
    29.5 KB · Đọc: 17
Không nghĩ ra ta, hàm Find khống chế được dữ liệu ở Sheet khác!?!? Cảm ơn bác nhiều nha! Thân. Xin mạng phép ghép cái này vô, .. để dùng cho trường hợp dữ liệu nằm ở vùng AA trở đi!
Mã:
Function DiaChi(Mang As Range, StrF As String, Optional Loai As String = "") As String     Application.Volatile (False)     Dim MyCell As Range     Set MyCell = Mang.Find(StrF, MatchCase:=True, Matchbyte:=True)     If MyCell Is Nothing Then Exit Function     If UCase$(Loai) = "ROW" Then         DiaChi = MyCell.Row     Else         [COLOR=red]For i = 1 To Len(MyCell.Address(0, 0))             k = Mid(MyCell.Address(0, 0), i, 1)                 If Not IsNumeric(k) = True Then                     temp = temp & k                 End If         Next             DiaChi = temp[/COLOR]     End If End Function
Cảm ơn bác nhiều vì đã chỉ dẫn. Hôm nay lại học thêm được 1 điều mới! Thanks.
 
Lần chỉnh sửa cuối:
Không nghĩ ra ta, hàm Find khống chế được dữ liệu ở Sheet khác!?!?
Cảm ơn bác nhiều nha!
Thân.

Find không phải là 1 hàm, nó là 1 phương thức.

Cách tạo UDF tốt nhất là cứ thử nó = Sub, nếu thấy OK thì sẽ biến nó thành UDF.


Thân!
 
Web KT
Back
Top Bottom