Nhờ giúp đỡ lấy giá trị theo điều kiện

Liên hệ QC

t2bg88

Thành viên mới
Tham gia
18/10/16
Bài viết
30
Được thích
11
Giới tính
Nam
Tình hình là em vừa được giao bài tập như này mà không biết phải dùng cách gì để có thể lấy được giá trị cho đúng vào cột H, mong mọi người trong diễn đàn giúp đỡ
1621501675023.png
 

File đính kèm

  • Bai tap 1.xlsx
    10.1 KB · Đọc: 13
bạn có thể giải thích rõ hơn được không, mình không hiểu quy luật lấy kết quả ở đây là như thế nào
 
Upvote 0
dạ, quy luật thứ tự ưu tiên là :
1. Nếu cột C có xuất hiện Phân bổ thì cột H = Phân bổ & số lượng phân bổ
2. Nếu cột C có xuất hiện Mở bán thì cột H = Mở bán
3. Nếu cột C có xuất hiện Tạm ngừng bán thì cột H = Tạm ngừng bán
4. Nếu C = Ngừng bán luôn thì H = ngừng bán luôn
Giả sử Variant "ARBTLDNY2K4" trong bảng [A : D] có trạng thái
" Mở bán/Phân bổ / tạm ngừng bán" thì giá trị H = Phân bổ - số lượng phân bổ
" Mở bán/Ngừng bán luôn" thì giá trị H = Mở bán
...
 
Upvote 0
nếu có cả tạm ngưng và ngừng bán thì lấy tạm ngừng bán ak
 
Upvote 0
vâng, đúng rồi bạn
 
Upvote 0
Bấm nút Chạy code nhé!

Rich (BB code):
Sub LayGTTheoDK()
Dim arrVT(), arrTemp, arrGT(), arrKQ
Dim i As Long, j As Long, k As Long
Dim strVar As String
Dim DblPB As Double
Dim chk As Boolean, chk2 As Boolean

arrTemp = Sheet1.Range("A4:D" & Sheet1.Range("A" & Rows.Count).End(xlUp).Row)
arrGT = Array("Phan bo", "Mo ban", "Tam ngung ban", "Ngung ban luon")
ReDim arrKQ(1 To UBound(arrTemp, 1), 1 To 2)
ReDim arrVT(1 To 2)
strVar = arrTemp(1, 2)
arrVT(1) = "": arrVT(2) = 4
For i = 1 To UBound(arrTemp)
    If UCase(arrTemp(i, 3)) = "PHAN BO" Then
        DblPB = arrTemp(i, 4)
    End If
    If arrTemp(i, 2) = strVar Then
        chk = True
        GoTo GhiVT
V1: Else
        chk2 = True
        GoTo GhiKQ
V3:     arrVT(1) = "": arrVT(2) = 4
        strVar = arrTemp(i, 2)
        chk = False
        GoTo GhiVT
V2: End If
Next

GhiKQ:
    k = k + 1
    arrKQ(k, 1) = strVar
    If arrVT(1) = "PHAN BO" Then
        arrKQ(k, 2) = arrGT(arrVT(2) - 1) & " - " & DblPB
    Else
        arrKQ(k, 2) = arrGT(arrVT(2) - 1)
    End If
    If chk2 = True And i <= UBound(arrTemp, 1) Then GoTo V3: chk2 = False
    
Sheet1.Range("G4:H200").ClearContents
Sheet1.Range("G4").Resize(k, 2) = arrKQ
MsgBox "Xong!"
Exit Sub

GhiVT:
    For j = 0 To UBound(arrGT)
        If UCase(arrGT(j)) = UCase(arrTemp(i, 3)) Then
            If j + 1 < arrVT(2) Then
                arrVT(1) = UCase(arrTemp(i, 3))
                arrVT(2) = j + 1
            End If
            Exit For
        End If
    Next
    If chk = True Then GoTo V1 Else: GoTo V2
End Sub
 

File đính kèm

  • Bai tap 1_t2bg88.xlsm
    20.5 KB · Đọc: 6
Upvote 0
Bấm nút Chạy code nhé!

Rich (BB code):
Sub LayGTTheoDK()
Dim arrVT(), arrTemp, arrGT(), arrKQ
Dim i As Long, j As Long, k As Long
Dim strVar As String
Dim DblPB As Double
Dim chk As Boolean, chk2 As Boolean

arrTemp = Sheet1.Range("A4:D" & Sheet1.Range("A" & Rows.Count).End(xlUp).Row)
arrGT = Array("Phan bo", "Mo ban", "Tam ngung ban", "Ngung ban luon")
ReDim arrKQ(1 To UBound(arrTemp, 1), 1 To 2)
ReDim arrVT(1 To 2)
strVar = arrTemp(1, 2)
arrVT(1) = "": arrVT(2) = 4
For i = 1 To UBound(arrTemp)
    If UCase(arrTemp(i, 3)) = "PHAN BO" Then
        DblPB = arrTemp(i, 4)
    End If
    If arrTemp(i, 2) = strVar Then
        chk = True
        GoTo GhiVT
V1: Else
        chk2 = True
        GoTo GhiKQ
V3:     arrVT(1) = "": arrVT(2) = 4
        strVar = arrTemp(i, 2)
        chk = False
        GoTo GhiVT
V2: End If
Next

GhiKQ:
    k = k + 1
    arrKQ(k, 1) = strVar
    If arrVT(1) = "PHAN BO" Then
        arrKQ(k, 2) = arrGT(arrVT(2) - 1) & " - " & DblPB
    Else
        arrKQ(k, 2) = arrGT(arrVT(2) - 1)
    End If
    If chk2 = True And i <= UBound(arrTemp, 1) Then GoTo V3: chk2 = False
  
Sheet1.Range("G4:H200").ClearContents
Sheet1.Range("G4").Resize(k, 2) = arrKQ
MsgBox "Xong!"
Exit Sub

GhiVT:
    For j = 0 To UBound(arrGT)
        If UCase(arrGT(j)) = UCase(arrTemp(i, 3)) Then
            If j + 1 < arrVT(2) Then
                arrVT(1) = UCase(arrTemp(i, 3))
                arrVT(2) = j + 1
            End If
            Exit For
        End If
    Next
    If chk = True Then GoTo V1 Else: GoTo V2
End Sub
cảm ơn bạn nhé, code vẫn còn 1 chút sai sót khi tính toán
1621840526190.png
Nếu cùng 1 variant mà vừa có "Mo ban" và "Phan bo" thì nó cho kết quả sai.
Lẽ ra kết quả của ARBTLDNY2K4 = Phan bo - 200 nhưng không hiểu sao nó lại ra kết quả "Phan bo - 120"
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom