Playstationvita.ultimate
Thành viên mới

- Tham gia
- 9/7/18
- Bài viết
- 9
- Được thích
- 3
Nhờ anh chị giúp đỡ vớiTình hình mình có file đính kèm trong bài cần giúp đỡ về công thức. Các bạn có thể giúp mình được không ạ. Mình cần công thức thống kê được như trong phần yêu cầu ạ. Với những vị trí lặp lại thì phần thống kê chỉ hiện 1 lần, còn phát sinh vị trí mới thì sẽ thống báo thêm ạ.View attachment 199117
Ghép chuỗi dùng hàm Excel rất khó.Cảm ơn bạn. mình mới tham gia nên còn chưa rõ ạ
cảm ơn bạn. rất đúng ý mình. Cho mình xin cái macros được không ạGhép chuỗi dùng hàm Excel rất khó.
Dùng hàm tự tạo nhé.
Chọn Enable Macros khi mở file hàm mới hoạt động:
Chỉ vầy là xong:Mình đã lấy Macros của bạn và đã làm được. nhưng có vấn đề như thế này. ví dụ ở trong dãy vị trí của mình có 1 mã ko có vị trí ( hay ô đó là Bank ) thì bạn có cách nào cho nó không hiên là ++ được không.View attachment 199137
Mình đã lấy Macros của bạn và đã làm được. nhưng có vấn đề như thế này. ví dụ ở trong dãy vị trí của mình có 1 mã ko có vị trí ( hay ô đó là Bank ) thì bạn có cách nào cho nó không hiên là ++ được không.
Cảm ơn bạn đã giúp đã rất nhiều, đã fix được lỗi đó, nhưng quá trình làm lại phát sinh 1 vấn đề nữa nếu fix được thì quá hoàn hảo. Đó là nếu mã đầu tiên phát sinh không nằm ở trị trí 1 mà nằm bên vị trí hai ( vị trí 1 sẽ là Bank ) thì dấu + sẽ nằm ở trước rất là mất thẩm mỹ. hiChỉ vầy là xong:
H2=SUBSTITUTE(GPE($B$3:$C$30,G2,2),"++","+")
Enter fill xuống.
Thân.
Chắc là chưa xem bài #9 đã vội hỏi bài #10.Cảm ơn bạn đã giúp đã rất nhiều, đã fix được lỗi đó, nhưng quá trình làm lại phát sinh 1 vấn đề nữa nếu fix được thì quá hoàn hảo. Đó là nếu mã đầu tiên phát sinh không nằm ở trị trí 1 mà nằm bên vị trí hai ( vị trí 1 sẽ là Bank ) thì dấu + sẽ nằm ở trước rất là mất thẩm mỹ. hi
Mình cảm ơn bạn rất nhiều, do kéo xuống bài dưới cùng xem nên không biết vấn đề đã được bạn giải quyết. Thân. Chúc bạn luôn vui vẻ hiChắc là chưa xem bài #9 đã vội hỏi bài #10.
Copy Function này vào Module.Làm phiền bạn quá, bạn có thể giúp mình lần cuối không. Hix
Public Function Gpe_Max(ByVal Rng As Range, ByVal Deli As String) As Long
Dim Arr(), Tmp, I As Long, J As Long
Arr = Rng.Value
For I = 1 To UBound(Arr)
Tmp = Split(Arr(I, 1), Deli)
For J = LBound(Tmp) To UBound(Tmp)
If Tmp(J) > Gpe_Max Then Gpe_Max = Tmp(J)
Next J
Next I
End Function
Tôi có viết bộ hàm nối chuỗi chuyên trị mấy vụ này. Nói chung là điều kiện gì cũng được, chỉ cần bạn phát biểu đúng sẽ ra kết quảCảm ơn bạn đã giúp đã rất nhiều, đã fix được lỗi đó, nhưng quá trình làm lại phát sinh 1 vấn đề nữa nếu fix được thì quá hoàn hảo. Đó là nếu mã đầu tiên phát sinh không nằm ở trị trí 1 mà nằm bên vị trí hai ( vị trí 1 sẽ là Bank ) thì dấu + sẽ nằm ở trước rất là mất thẩm mỹ. hiView attachment 199142
Function JoinIf(ByVal Delimiter As String, ByVal CriteriaArray, ByVal Criteria, Optional ByVal TargetArray) As String
Dim arrDes()
Dim arrTmpCrit As Variant
Dim arrTmpDest As Variant
Dim strCrit As Variant
Dim strDest As Variant
Dim dic As Object
Dim bComp As Boolean
Dim idx As Long
Dim dTmpVal As Double
Set dic = CreateObject("Scripting.Dictionary")
If IsMissing(TargetArray) Then TargetArray = CriteriaArray
arrTmpCrit = ConvertTo1DArray(CriteriaArray)
arrTmpDest = ConvertTo1DArray(TargetArray)
If (Not IsArray(arrTmpCrit)) Or (Not IsArray(arrTmpDest)) Then Exit Function
'On Error Resume Next
bComp = (InStr("<>=", Left(Criteria, 1)) > 0)
For idx = LBound(arrTmpDest) To UBound(arrTmpDest)
strCrit = arrTmpCrit(idx): strDest = arrTmpDest(idx)
If TypeName(strCrit) <> "Error" Then
If TypeName(strDest) <> "Error" Then
If bComp And Len(Criteria) Then
dTmpVal = CDbl(arrTmpCrit(idx))
If Evaluate(dTmpVal & Criteria) Then
If Not dic.Exists(strDest) Then dic.Add strDest, ""
End If
Else
If (Left(Criteria, 1) = "!") Then
If Not (UCase(strCrit) Like UCase(Mid(Criteria, 2))) Then
If Not dic.Exists(strDest) Then dic.Add strDest, ""
End If
Else
If (UCase(strCrit) Like UCase(Criteria)) Then
If Not dic.Exists(strDest) Then dic.Add strDest, ""
End If
End If
End If
End If
End If
Next
If dic.Count Then
arrDes = dic.Keys
JoinIf = Join(arrDes, Delimiter)
End If
'If Err.Number Then MsgBox Err.Description
End Function
Private Function ConvertTo1DArray(ByVal SourceArray)
Dim arrDest()
Dim arrSrc As Variant
Dim Item As Variant
Dim idx As Long
'On Error Resume Next
arrSrc = SourceArray
If Not IsArray(arrSrc) Then arrSrc = Array(arrSrc)
For Each Item In arrSrc
idx = idx + 1
ReDim Preserve arrDest(1 To idx)
arrDest(idx) = Item
Next
ConvertTo1DArray = arrDest
'If Err.Number Then MsgBox Err.Description
End Function
=joinif("+",($B$3:$B$26=G2)*($C$3:$C$26<>""),">0",$C$3:$C$26)
Rất cảm ơn BQT rất nhiều ạ . Mình là thành viên mới mà mọi người giúp đỡ nhiệt tình quá, rất cảm động ạTôi có viết bộ hàm nối chuỗi chuyên trị mấy vụ này. Nói chung là điều kiện gì cũng được, chỉ cần bạn phát biểu đúng sẽ ra kết quả
Cách dúng gần giống với SUMIF (hỗ trợ ký tự đại diện như ? hay *) và cũng giống SUMPRODUCT (cho phép hoạt động với mảng)
Code hơi dài như xài thoải mái:
Công thức tại H2:Mã:Function JoinIf(ByVal Delimiter As String, ByVal CriteriaArray, ByVal Criteria, Optional ByVal TargetArray) As String Dim arrDes() Dim arrTmpCrit As Variant Dim arrTmpDest As Variant Dim strCrit As Variant Dim strDest As Variant Dim dic As Object Dim bComp As Boolean Dim idx As Long Dim dTmpVal As Double Set dic = CreateObject("Scripting.Dictionary") If IsMissing(TargetArray) Then TargetArray = CriteriaArray arrTmpCrit = ConvertTo1DArray(CriteriaArray) arrTmpDest = ConvertTo1DArray(TargetArray) If (Not IsArray(arrTmpCrit)) Or (Not IsArray(arrTmpDest)) Then Exit Function 'On Error Resume Next bComp = (InStr("<>=", Left(Criteria, 1)) > 0) For idx = LBound(arrTmpDest) To UBound(arrTmpDest) strCrit = arrTmpCrit(idx): strDest = arrTmpDest(idx) If TypeName(strCrit) <> "Error" Then If TypeName(strDest) <> "Error" Then If bComp And Len(Criteria) Then dTmpVal = CDbl(arrTmpCrit(idx)) If Evaluate(dTmpVal & Criteria) Then If Not dic.Exists(strDest) Then dic.Add strDest, "" End If Else If (Left(Criteria, 1) = "!") Then If Not (UCase(strCrit) Like UCase(Mid(Criteria, 2))) Then If Not dic.Exists(strDest) Then dic.Add strDest, "" End If Else If (UCase(strCrit) Like UCase(Criteria)) Then If Not dic.Exists(strDest) Then dic.Add strDest, "" End If End If End If End If End If Next If dic.Count Then arrDes = dic.Keys JoinIf = Join(arrDes, Delimiter) End If 'If Err.Number Then MsgBox Err.Description End Function Private Function ConvertTo1DArray(ByVal SourceArray) Dim arrDest() Dim arrSrc As Variant Dim Item As Variant Dim idx As Long 'On Error Resume Next arrSrc = SourceArray If Not IsArray(arrSrc) Then arrSrc = Array(arrSrc) For Each Item In arrSrc idx = idx + 1 ReDim Preserve arrDest(1 To idx) arrDest(idx) = Item Next ConvertTo1DArray = arrDest 'If Err.Number Then MsgBox Err.Description End Function
Ctrl + Shift + Enter để kết thúc (vì là công thức mảng)Mã:=joinif("+",($B$3:$B$26=G2)*($C$3:$C$26<>""),">0",$C$3:$C$26)
Xem file
Tuyệt vời ông mặt trời. Mọi vấn đề đã được bạn giúp đỡ giải quyết nhiệt tình. Mình vô cùng cảm ơn ạCopy Function này vào Module.
Công thức tại ô nào đó:
=Gpe_max(H2:H13;"+")
PHP:Public Function Gpe_Max(ByVal Rng As Range, ByVal Deli As String) As Long Dim Arr(), Tmp, I As Long, J As Long Arr = Rng.Value For I = 1 To UBound(Arr) Tmp = Split(Arr(I, 1), Deli) For J = LBound(Tmp) To UBound(Tmp) If Tmp(J) > Gpe_Max Then Gpe_Max = Tmp(J) Next J Next I End Function