N Khánh
Thành viên mới

- Tham gia
- 22/11/18
- Bài viết
- 30
- Được thích
- 0
Bạn cho kết quả cụ thể đi, Z, X, Y ?Mình có 1 file excel như này, có cách nào lấy ra với mỗi T (mình có bôi màu) thì mình tìm ra được giá trị Z nhỏ nhất không ạ. Nếu tìm được cả X Y cùng dòng với Z đó thì tốt quá, mọi người giúp mình với mình với !!!
Ví dụ T1 mình muốn lấy Z ở dòng 21 là Z46.Bạn cho kết quả cụ thể đi, Z, X, Y ?
cái z mình muốn lấy luôn có cái G98 ở đầu ý, có cách nào ko bác giúp mình vớiBạn cho kết quả cụ thể đi, Z, X, Y ?
Còn X,Y lấy ở đâu bạn?Ví dụ T1 mình muốn lấy Z ở dòng 21 là Z46.
T2 mình muốn lấy Z là Z-6.
Bài đã được tự động gộp:
cái z mình muốn lấy luôn có cái G98 ở đầu ý, có cách nào ko bác giúp mình với
Mình nhầm X Y phải suy luận nên k tự động đc, bác có cách nào lấy đc Z là tốt quá rùi ạCòn X,Y lấy ở đâu bạn?
Code nhe bạn:Mình nhầm X Y phải suy luận nên k tự động đc, bác có cách nào lấy đc Z là tốt quá rùi ạ![]()
Function sfind(ByVal str As String, ByVal n As Long)
Static reg As Object: If reg Is Nothing Then Set reg = CreateObject("vbscript.regexp")
With reg
.Global = True
If n = 1 Then
.Pattern = "^N.*\s(T\d+)\s.*$"
Else
.Pattern = "^.*G98.*\s(Z\-?\d*\.?\d+).+$"
End If
If .test(str) Then sfind = reg.Replace(str, "$1")
End With
End Function
Sub a()
Dim arr: arr = Range("A1:A" & [A100000].End(xlUp).Row)
Dim res: ReDim res(0 To 0)
Dim i As Long, j As Long, z As Long
For i = 1 To UBound(arr)
If Len(sfind(arr(i, 1), 1)) > 0 Then
res(z) = sfind(arr(i, 1), 1) & ": "
For j = i + 1 To UBound(arr)
If Len(sfind(arr(j, 1), 1)) Then Exit For
If Len(sfind(arr(j, 1), 2)) Then
res(z) = res(z) & sfind(arr(j, 1), 2)
Exit For
End If
Next
z = z + 1: ReDim Preserve res(z + 1)
End If
Next
[b1].Resize(UBound(res), 1) = WorksheetFunction.Transpose(res)
End Sub
Bác ví dụ vào file mẫu vs đc không ạ, mình làm mãi ko được, cảm ơn bác giúp nhiều lắm luôn ^^Code nhe bạn:
PHP:Function sfind(ByVal str As String, ByVal n As Long) Static reg As Object: If reg Is Nothing Then Set reg = CreateObject("vbscript.regexp") With reg .Global = True If n = 1 Then .Pattern = "^N.*\s(T\d+)\s.*$" Else .Pattern = "^.*G98.*\s(Z\-?\d*\.?\d+).+$" End If If .test(str) Then sfind = reg.Replace(str, "$1") End With End Function Sub a() Dim arr: arr = Range("A1:A" & [A100000].End(xlUp).Row) Dim res: ReDim res(0 To 0) Dim i As Long, j As Long, z As Long For i = 1 To UBound(arr) If Len(sfind(arr(i, 1), 1)) > 0 Then res(z) = sfind(arr(i, 1), 1) & ": " For j = i + 1 To UBound(arr) If Len(sfind(arr(j, 1), 1)) Then Exit For If Len(sfind(arr(j, 1), 2)) Then res(z) = res(z) & sfind(arr(j, 1), 2) Exit For End If Next z = z + 1: ReDim Preserve res(z + 1) End If Next [b1].Resize(UBound(res), 1) = WorksheetFunction.Transpose(res) End Sub
Đây bạn!!!Bác ví dụ vào file mẫu vs đc không ạ, mình làm mãi ko được, cảm ơn bác giúp nhiều lắm luôn ^^
Tuyệt vời quá bác ạ ^^ không biết cảm ơn bác thế nào. Em muốn nhờ bác thêm xíu là có thể lấy thêm nguyên cả những ô này ra 1 cột riêng nữa đc không ạĐây bạn!!!
Bạn nhận lại file!!!Tuyệt vời quá bác ạ ^^ không biết cảm ơn bác thế nào. Em muốn nhờ bác thêm xíu là có thể lấy thêm nguyên cả những ô này ra 1 cột riêng nữa đc không ạ![]()
File bác làm cho rất là tuyệt rồi, nhưng mà mình xóa cột A đi import cái khác vào thì lại báo lỗi bác ạBạn nhận lại file!!!
File này bạn gửi đâu giống file ban đầu, file đầu thì kiếm máy thằng T dựa vào chuỗi dạng "N*T*" như "N104 T1 M6", còn file mới gửi bạn dựa vào đâu để lấy thằng T.File bác làm cho rất là tuyệt rồi, nhưng mà mình xóa cột A đi import cái khác vào thì lại báo lỗi bác ạ(