Không biết có phải tìm địa chỉ ô hay không? Bạn xem bài này có đúng như ý Bạn chưa nhé?Em có danh sách các địa chỉ là A1+A3+A5+A7+A9 (dạng tetxt). như vậy mình có cách nào dò tìm dữ liệu theo địa chỉ trên không (Tương tự như hàm INDIRECT()).Nếu được nhờ các anh chị hướng dẫn giúp.
Cám ơn các anh chị quan tâm
Đọc code của bạn hoangminhtien lại thấy chả giống tí nào so với mô tả của tác giả! Nhưng bạn thuyyeu99 đã THANKS, chứng tỏ bạn đồng ý với code này!Function addtxt(arr As Range)
Dim rng As Range
Dim tam As String
For Each rng In arr
If Not IsNumeric(rng) Then
tam = tam & rng.Address & "+"
End If
Next
If tam = "" Then
addtxt = ""
Else
addtxt = Left(tam, Len(tam) - 1)
End If
End Function
Option Explicit
Sub InDiRect()
Dim Arr, jJ As Byte
Arr = Split(Selection.Value, "+")
For jJ = 0 To UBound(Arr)
With [D65500].End(xlUp).Offset(1)
.Value = Range(Arr(jJ)).Value
End With
Next jJ
End Sub
Em hiểu nhầm bài toán, em nghĩ là từ dãy đưa ra địa chỉ các ô chứa dạng text, bây giờ mới hiểu đề. các bác xem file có đúng không nhé!
Bạn xem đã được chưa ?Mình có 1 file có 3 sheet trong đó sheet Flowchart dùng để báo cáo. Khi mình bấm vào ô B4 thì sẽ chọn được loại mã hàng tương ứng với các số liệu. Bài này trước kia có bạn minhtien.hoang đã giúp mình rồi. tuy nhiên khi mình mở rộng phần dữ liệu thì có mã được mã lại không được. Các bạn giúp mình với.(Và có những cách nào để thực hiện được điều này). Cảm ơn rất nhiều.
Giả sử bạn gõ chuổi A1+E1+C1 vào cell A2Nhờ các anh hướng dẫn em thêm 1 vấn đề nữa
bây giờ em có đoạn text là A1+E1+C1 vậy mình có cách nào xác định trong Range("A1,E1,C1") ô nào chứa dữ liệu không ạh (nhưng phải theo số thứ tự của cột tức là từ cột nhỏ cho đến cột lớn A1 - C1 - E1 . Nếu A1,C1,E1 đều có dữ liệu thì láy địa chỉ ô có cột lớn nhất là E1
Sub Test()
Dim Tmp As String
On Error Resume Next
Tmp = Replace(Range("A2"), "+", ",")
With Range(Tmp).SpecialCells(2, 2)
MsgBox Intersect(Range(Replace(.Address, ",", ":")).EntireColumn.Resize(, 1), .Cells)(1, 1).Address
End With
End Sub
Chưa ổn trong trường hợp nào? Bạn cho file lên xem thử nhéỒ hình như nó chạy chưa ổn anh ạh. Dữ liệu các ô chỉ nằm trên 1 dòng thôi anh
Hỏi tiếp:Dạ ví dụ đây ạh, nhờ anh xem giúp![]()
Thử code này xem:dạ nếu được nhờ anh tạo giùm em cái UDF
Function GetVal(RngText As String)
Dim Tmp As String, Clls As Range
Application.Volatile
On Error Resume Next
Tmp = Replace(RngText, "+", ",")
For Each Clls In Range(Tmp)
If Clls <> "" Then GetVal = Clls
Next
End Function
Code ở trên vẫn chưa hoàn chỉnh đâu!Em cung mới suu tầm được cái UDF lam bằng lệnh Find còn cái vụ công thức thì Hichic. Nếu mà làm được bằng công thức thì các anh nhớ thêm dấu bằng vào A1+C1+E1+G1 (=A1+C1+E1+G1) nhé
On Error Resume Next
lrw = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
On Error Resume Next
lcol = rng.Find(What:="*", _
After:=rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
On Error GoTo 0
On Error Resume Next
Last1 = rng.Parent.Cells(lrw, lcol).Address(False, False)
If Err.Number > 0 Then
Last1 = rng.Cells(1).Address(False, False)
Err.Clear
End If
On Error GoTo 0
End Select
Thử tiếp UDF tôi vừa cải tiến xong!Dạ anh nói đúng cách này cũng bị tình trạng tương tự như code của anh
Function GetVal(RngText As String)
Dim Clls As Range
Application.Volatile
On Error Resume Next
For Each Clls In Range(Replace(RngText, "+", ":"))
If Not Intersect(Clls, Range(Replace(RngText, "+", ","))) Is Nothing Then
If Clls <> "" Then GetVal = Clls
End If
Next
End Function
Chính vì lý do hàm không tự cập nhật nên tôi phải dùng Application.Volatile ---> Có cái này vào, ta sẽ có thể bấm F9 cho hàm cập nhật lại giá trị mớiAnh cho em hoi chút xíu về Application.Volatile
Sao Em dùng cong thức GetVal ở sheet1 và em qua Sheet 2 và chở về sheet1 lại thì hàm GetVal không chạy ?
Ái chà... còn vụ này nữa chứ!!!nấu ở Sheet chứa công thức thì nó chạy nhưng ờ Sheet khác thì nó cũng im re
Function GetVal(RngText As Range)
Dim Clls As Range
Application.Volatile
On Error Resume Next
For Each Clls In RngText.Parent.Range(Replace(RngText, "+", ":"))
If Not Intersect(Clls, RngText.Parent.Range(Replace(RngText, "+", ","))) Is Nothing Then
If Clls <> "" Then GetVal = Clls
End If
Next
End Function
Parent là CHA MẸ ---> RngText là vùng dữ liệu mà ta chọn làm tham chiếu, như trong file thì RngText là cell I1Anh giải thích Parent gíup em được không ạh