mọi người giúp đỡ điền dữ liệu theo điều kiện

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

nguyencanhhoa1986

Thành viên mới
Tham gia
1/6/18
Bài viết
12
Được thích
1
Mong mọi người giúp đỡ điền dữ liệu theo điều kiện từ sheet 2 vào các cột tương ứng ở sheet 1
Sheet 2 là dữ liệu thông tin của file pdf có trong từng folder gồm có "Từ tờ -tới tờ" "ngày tháng"...
Sheet 1 có cột là "số tờ" là số tờ lớn nhất của file.pdf trong folder
Ngày bắt đầu là ngày cũ nhất của các file pdf có trong folder
Ngày cuối cùng là ngày mới nhất của các file pdf có trong folder
 

File đính kèm

  • Vidu.xlsx
    11.1 KB · Đọc: 9
Mong mọi người giúp đỡ điền dữ liệu theo điều kiện từ sheet 2 vào các cột tương ứng ở sheet 1
Sheet 2 là dữ liệu thông tin của file pdf có trong từng folder gồm có "Từ tờ -tới tờ" "ngày tháng"...
Sheet 1 có cột là "số tờ" là số tờ lớn nhất của file.pdf trong folder
Ngày bắt đầu là ngày cũ nhất của các file pdf có trong folder
Ngày cuối cùng là ngày mới nhất của các file pdf có trong folder
Cái này dùng MAXIFS được không nhỉ? Hay bắt buộc phải dùng VBA thế thớt?
 
Upvote 0
VBA nhé bạn.,,.

Mã:
Option Explicit
Sub soto()
Dim lr&, i&, k&, rng, res(), sp, s, min, max
Dim dic As Object, key
Set dic = CreateObject("scripting.Dictionary")
With Sheets("Sheet2")
    lr = .Range("A2").End(xlDown).Row
    rng = .Range("A2:C" & lr).Value
End With
For i = 1 To UBound(rng)
    If Not dic.exists(rng(i, 1)) Then
        min = CDate(rng(i, 2)): max = CDate(rng(i, 2))
        dic.Add rng(i, 1), min & "|" & max & "@" & rng(i, 3)
    Else
        sp = Split(dic(rng(i, 1)), "@")
        s = Split(sp(0), "|")
        min = CDate(s(0)): max = CDate(s(1))
        If CDate(rng(i, 2)) < min Then min = CDate(rng(i, 2))
        If CDate(rng(i, 2)) > max Then max = CDate(rng(i, 2))
        dic(rng(i, 1)) = min & "|" & max & "@" & sp(1) & "-" & rng(i, 3)
    End If
Next
ReDim res(1 To dic.Count, 1 To 4)
For Each key In dic.keys
    sp = Split(dic(key), "@"): max = 0
    k = k + 1: res(k, 1) = key
    res(k, 3) = Split(sp(0), "|")(0): res(k, 4) = Split(sp(0), "|")(1)
    For Each s In Split(sp(1), "-")
        If CLng(s) > max Then max = CLng(s)
    Next
    res(k, 2) = Format(max, "00")
Next
With Sheets("Sheet1")
    .Range("A2:D10000").ClearContents
    .Range("A2").Resize(dic.Count, 4).Value = res
End With
Set dic = Nothing
End Sub
 

File đính kèm

  • Vidu.xlsm
    24.3 KB · Đọc: 3
Upvote 0
dùng vba thì tốt ah, maxif excel cũ không dùng được
Tham khao thêm cách khác
Mã:
Option Explicit
Sub ACB()
    Dim Dic As Object, sArr(), i&, MaxPage As Double, Res()
    Dim S, sS, n&, Ngay, Trang&, NgayMax, NgayMin
    Set Dic = CreateObject("scripting.dictionary")
    With Sheet2
        sArr = .Range("A2:C32").Value
        For i = 1 To UBound(sArr)
            Dic(sArr(i, 1)) = Dic(sArr(i, 1)) & "|" & sArr(i, 2) & "#" & sArr(i, 3)
        Next
    End With
    With Sheet1
        sArr = .Range("A2:A11").Value
        ReDim Res(1 To UBound(sArr), 1 To 3)
        For i = 1 To UBound(sArr)
            NgayMin = "01/01/1900"
            If Dic.exists(sArr(i, 1)) = True Then
                S = Split(Dic.Item(sArr(i, 1)), "|")
                For n = 1 To UBound(S)
                    sS = Split(S(n), "#")
                    Ngay = DateSerial(Split(sS(0), "/")(2), Split(sS(0), "/")(1), Split(sS(0), "/")(0))
                    Trang = Split(sS(1), "-")(UBound(Split(sS(1), "-")))
                    If NgayMax < Ngay Then NgayMax = Ngay
                    If NgayMin > Ngay Then NgayMin = Ngay
                    If MaxPage < Trang Then MaxPage = Trang
                Next
                Res(i, 2) = NgayMin: Res(i, 3) = NgayMax: Res(i, 1) = MaxPage
                MaxPage = 0: NgayMax = Empty
            End If
        Next
        .Range("E2").Resize(UBound(sArr), 3).Value = Res
    End With
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom