Tìm ngày bắt đầu và ngày kết thúc

Liên hệ QC

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,014
Được thích
163
Nhờ anh/chị giúp em như sau
Trong file đính kèm em muốn tìm ngày bắt đầu (cột A) và ngày kết thúc ( cột B)
Em giải thích như sau:
Dòng thứ 7 và từ cột F trở đi: là ngày bán
Từ dòng thứ 7 trở xuống và từ cột F trở đi: là số lượng bán trong ngày
Ví dụ:
* Mã hàng hóa H001
Bắt đầu bán ngày 02/06/2019
Kết thúc bán ngày: 28/06/2019

* Mã hàng hóa H002
Bắt đầu bán ngày: Không có
Kết thúc bán ngày: không có

* Mã hàng hóa H003
Bắt đầu bán ngày 28/06/2019
Kết thúc bán ngày: 30/06/2019

Nhờ anh chị giúp công thức
Xin cảm ơn!
 

File đính kèm

  • NgayBatDau_NgayKetThuc.xlsx
    8.4 KB · Đọc: 24
Phương án xài VBA sẽ là như sau:
Duyệt theo cột C từ [C7] trở xuống có dữ liệu;
Trong khi duyệt thì xài phương thức End(xlToRight) cho từng ô bên phải liện kề
Tùy kết quả phương thức này mà tìm ra ngày đầu hay không có ngày đầu (cũng như ngày cuối)
Nếu đã có ngày đầu thì xài phương thức End(xlToLeft) từ cột cuối (của dòng đang duyệt) để tìm ngày KT

Chúc bạn thành công!
 
Nhờ anh/chị giúp em như sau
Trong file đính kèm em muốn tìm ngày bắt đầu (cột A) và ngày kết thúc ( cột B)
Em giải thích như sau:
Dòng thứ 7 và từ cột F trở đi: là ngày bán
Từ dòng thứ 7 trở xuống và từ cột F trở đi: là số lượng bán trong ngày
Ví dụ:
* Mã hàng hóa H001
Bắt đầu bán ngày 02/06/2019
Kết thúc bán ngày: 28/06/2019

* Mã hàng hóa H002
Bắt đầu bán ngày: Không có
Kết thúc bán ngày: không có

* Mã hàng hóa H003
Bắt đầu bán ngày 28/06/2019
Kết thúc bán ngày: 30/06/2019

Nhờ anh chị giúp công thức
Xin cảm ơn!
Công thức A7=MIN(IF($F7:$W7>0;$F$6:$W$6;""))
Công thức B7=MAX(IF($F7:$W7>0;$F$6:$W$6;""))
đây là công thức CSE (mảng)
 
Phương án xài VBA sẽ là như sau:
Duyệt theo cột C từ [C7] trở xuống có dữ liệu;
Trong khi duyệt thì xài phương thức End(xlToRight) cho từng ô bên phải liện kề
Tùy kết quả phương thức này mà tìm ra ngày đầu hay không có ngày đầu (cũng như ngày cuối)
Nếu đã có ngày đầu thì xài phương thức End(xlToLeft) từ cột cuối (của dòng đang duyệt) để tìm ngày KT

Chúc bạn thành công!
Em đã làm = code cho sheet1, bài này dễ tính vì dòng ngày tháng (dòng 6) được sắp xếp từ nhỏ đến lớn
Mã:
Sub Min_Max()
    Dim lC As Long, LR As Long, Data As Variant, kQ As Variant
    Dim i As Long, j As Long

    LR = Range("C" & Rows.Count).End(xlUp).Row
    'lC = Range("IV6").End(xlToLeft).Column
    Data = Range("C6:w" & LR).Value
    ReDim kQ(1 To LR, 1 To 2)
    ' tính Min
    For i = 2 To UBound(Data)
        For j = 4 To UBound(Data, 2)
            If Data(i, j) > 0.1 Then
                kQ(i - 1, 1) = Data(1, j)
                Exit For
            End If
        Next j
        ' tính max
        For j = UBound(Data, 2) To 4 Step -1
            If Data(i, j) > 0.1 Then
                If Data(1, j) > 0 Then
                    kQ(i - 1, 2) = Data(1, j)
                    Exit For
                End If
            End If
        Next j
    Next i
    ' giáng ket qua
    Range("a7:b" & LR).ClearContents
    Range("a7:b" & LR).Value = kQ
    MsgBox "xong"
End Sub
Ở code trên có dòng
Mã:
 If Data(i, j) > 0.1 Then
Đặt điều kiện như trên là vì, giả sử Sheet1!F7 ai mà vô tình nhập 1 khoảng trắng thì code cho sai kết quả
Anh/chị nào có cách hay hơn thì hướng dẫn
=====
Bây giờ bài toán đặt ra là dòng ngày tháng không xếp theo thứ tự nữa (ở sheet ABC), em chưa tìm ra cách giải nhờ anh/chị giúp giùm. em cảm ơn
 

File đính kèm

  • NgayBatDau_NgayKetThuc.xlsm
    19 KB · Đọc: 12
Em đã làm = code cho sheet1, bài này dễ tính vì dòng ngày tháng (dòng 6) được sắp xếp từ nhỏ đến lớn
Mã:
Sub Min_Max()
    Dim lC As Long, LR As Long, Data As Variant, kQ As Variant
    Dim i As Long, j As Long

    LR = Range("C" & Rows.Count).End(xlUp).Row
    'lC = Range("IV6").End(xlToLeft).Column
    Data = Range("C6:w" & LR).Value
    ReDim kQ(1 To LR, 1 To 2)
    ' tính Min
    For i = 2 To UBound(Data)
        For j = 4 To UBound(Data, 2)
            If Data(i, j) > 0.1 Then
                kQ(i - 1, 1) = Data(1, j)
                Exit For
            End If
        Next j
        ' tính max
        For j = UBound(Data, 2) To 4 Step -1
            If Data(i, j) > 0.1 Then
                If Data(1, j) > 0 Then
                    kQ(i - 1, 2) = Data(1, j)
                    Exit For
                End If
            End If
        Next j
    Next i
    ' giáng ket qua
    Range("a7:b" & LR).ClearContents
    Range("a7:b" & LR).Value = kQ
    MsgBox "xong"
End Sub
Ở code trên có dòng
Mã:
 If Data(i, j) > 0.1 Then
Đặt điều kiện như trên là vì, giả sử Sheet1!F7 ai mà vô tình nhập 1 khoảng trắng thì code cho sai kết quả
Anh/chị nào có cách hay hơn thì hướng dẫn
=====
Bây giờ bài toán đặt ra là dòng ngày tháng không xếp theo thứ tự nữa (ở sheet ABC), em chưa tìm ra cách giải nhờ anh/chị giúp giùm. em cảm ơn
Mã:
Sub Min_Max()
    Dim sArr(), Res()
    Dim sRow As Long, sCol As Long, i As Long, j As Long
    Dim fDay As Date, eDay As Date, Day1 As Date, Day2 As Date
    
    Day1 = DateValue("2100/1/1")
    Day2 = DateValue("1000/1/1")
    sArr = Range("C6:w" & Range("C" & Rows.Count).End(xlUp).Row).Value
    sRow = UBound(sArr):    sCol = UBound(sArr, 2)
    ReDim Res(2 To sRow, 1 To 2)
    For i = 2 To sRow
        fDay = Day1:        eDay = Day2
        For j = 4 To sCol
            If Len(sArr(i, j)) Then
                If fDay > sArr(1, j) Then fDay = sArr(1, j)
                If eDay < sArr(1, j) Then eDay = sArr(1, j)
            End If
        Next j
        If fDay <> Day1 Then
          Res(i, 1) = fDay
          Res(i, 2) = eDay
        End If
    Next i
    Range("A7").Resize(sRow - 1, 2).Value = Res
    MsgBox "xong"
End Sub
 
Bây giờ bài toán đặt ra là dòng ngày tháng không xếp theo thứ tự nữa (ở sheet ABC), em chưa tìm ra cách giải nhờ anh/chị giúp giùm. em cảm ơn
Bạn thử Sub này cho sheet ABC
PHP:
Public Sub s_Gpe()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Col As Long
Dim fDate As Long, eDate As Long, DK As Boolean
If Range("C1000").End(xlUp).Row < 7 Then Exit Sub
    Col = Range("F6").End(xlToRight).Column - 2
    sArr = Range("C6", Range("C1000").End(xlUp)).Resize(, Col).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 2)
For I = 2 To R
    K = K + 1
    DK = False
    fDate = 10 ^ 5
    eDate = 0
    For J = 4 To Col
        If sArr(I, J) <> Empty Then
            DK = True
            If sArr(1, J) < fDate Then fDate = sArr(1, J)
            If sArr(1, J) > eDate Then eDate = sArr(1, J)
        End If
    Next J
    If DK = True Then
        dArr(K, 1) = fDate
        dArr(K, 2) = eDate
    End If
Next I
    Range("A7").Resize(K, 2) = dArr
End Sub
 
Web KT
Back
Top Bottom