Liệt kê các vị trí không trùng của mã hàng (5 người xem)

Liên hệ QC

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

Playstationvita.ultimate

Thành viên mới
Tham gia
9/7/18
Bài viết
9
Được thích
3
Tì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 ạ.1531107456431.png
 

File đính kèm

Tì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
Nhờ anh chị giúp đỡ với
Bạn sửa lại tiêu đề bài viết, chứ để như vậy là tiêu đề không rõ ràng, không ai trả lời và bài có thể sẽ bị khóa.
Có thể sửa thành: "Liệt kê các vị trí không trùng của mã hàng"
 

File đính kèm

cảm ơn bạn. rất đúng ý mình. Cho mình xin cái macros được không ạ
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.1531120099365.png
 

File đính kèm

File đính kèm

Chỉ vầy là xong:
H2=SUBSTITUTE(GPE($B$3:$C$30,G2,2),"++","+")
Enter fill xuống.
Thân.
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ỹ. hi1531121694573.png
 

File đính kèm

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
Chắc là chưa xem bài #9 đã vội hỏi bài #10.
 
Làm phiền bạn quá, bạn có thể giúp mình lần cuối không. Hix
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
 
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
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:
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
Công thức tại H2:
Mã:
=joinif("+",($B$3:$B$26=G2)*($C$3:$C$26<>""),">0",$C$3:$C$26)
Ctrl + Shift + Enter để kết thúc (vì là công thức mảng)
Xem file
 

File đính kèm

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:
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
Công thức tại H2:
Mã:
=joinif("+",($B$3:$B$26=G2)*($C$3:$C$26<>""),">0",$C$3:$C$26)
Ctrl + Shift + Enter để kết thúc (vì là công thức mảng)
Xem file
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 ạ
Bài đã được tự động gộp:

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
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 ạ
 
Web KT

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

Back
Top Bottom