Nhờ giúp tạo macro in theo list hồ sơ, có quy định sheet in theo mỗi số thứ tự (1 người xem)

  • Thread starter Thread starter diennv50
  • Ngày gửi Ngày gửi
Liên hệ QC

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

diennv50

Thành viên mới
Tham gia
27/8/09
Bài viết
22
Được thích
0
Mình muốn tạo macro in list hồ sơ theo thứ tự từ a đến b, kèm theo điều kiện để chọn sheet in theo yêu cầu.
 

File đính kèm

Mình muốn tạo macro in list hồ sơ theo thứ tự từ a đến b, kèm theo điều kiện để chọn sheet in theo yêu cầu.
Bạn tham khảo thử
Mã:
Sub InBB()
    Dim Rng As Range, Cll As Range, SoBB As String
With Sheet1
    Set Rng = .Range("A11", .Range("A" & Rows.Count).End(xlUp))
End With
With Sheet2
    For Each Cll In Rng
        If Cll.Value <> Empty And IsNumeric(Cll.Value) Then
            .Range("N55").Value = Cll.Value
            .PrintPreview
            SoBB = .Range("A53").Value
            If InStrRev(SoBB, "VC", -1, vbBinaryCompare) > 0 Then
                Sheet3.PrintPreview: Sheet4.PrintPreview: GoTo Tiep
            End If
            If InStrRev(SoBB, "ATGT", -1, vbBinaryCompare) > 0 Then
                Sheet5.PrintPreview: GoTo Tiep
            End If
            If InStrRev(SoBB, "BT", -1, vbBinaryCompare) > 0 Then
                Sheet4.PrintPreview
            End If
        End If
Tiep:
    Next
End With
End Sub
Khi nào ưng cái bụng thì thay PrintPreview bằng PrintOut nhoé
 
Bạn tham khảo thử
Mã:
Sub InBB()
    Dim Rng As Range, Cll As Range, SoBB As String
With Sheet1
    Set Rng = .Range("A11", .Range("A" & Rows.Count).End(xlUp))
End With
With Sheet2
    For Each Cll In Rng
        If Cll.Value <> Empty And IsNumeric(Cll.Value) Then
            .Range("N55").Value = Cll.Value
            .PrintPreview
            SoBB = .Range("A53").Value
            If InStrRev(SoBB, "VC", -1, vbBinaryCompare) > 0 Then
                Sheet3.PrintPreview: Sheet4.PrintPreview: GoTo Tiep
            End If
            If InStrRev(SoBB, "ATGT", -1, vbBinaryCompare) > 0 Then
                Sheet5.PrintPreview: GoTo Tiep
            End If
            If InStrRev(SoBB, "BT", -1, vbBinaryCompare) > 0 Then
                Sheet4.PrintPreview
            End If
        End If
Tiep:
    Next
End With
End Sub
Khi nào ưng cái bụng thì thay PrintPreview bằng PrintOut nhoé
em hỏi thêm chút. bây giờ mình muốn chọn số thứ tự in biên bản thì làm thế nào ạ.... ví dụ chỉ in biên bản theo số thựu tự từ 2-5 chẳng hạn ạ
 

File đính kèm

Giúp thêm em về hàm này với ạ... Em có nhiều chuỗi phải nối kiểu này.
Bạn thử cái hàm này xem sao
Mã:
Function UniqueTextJoin(ByVal Table_Array As Range, Optional Delimiter As String) As String
    Dim sArr, Str, N As Long
    Dim Dic As Object, Tmp, Khoa As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Table_Array.Value
For Each Str In sArr
    Tmp = Split(Str, Delimiter)
    For N = 0 To UBound(Tmp)
        If Tmp(N) <> Empty Then
            Khoa = Trim(Tmp(N))
            If Not Dic.Exists(Khoa) Then Dic.Add Khoa, ""
        End If
    Next N
Next
If Dic.Count Then UniqueTextJoin = Join(Dic.Keys, Delimiter)
End Function
Mã:
D7=UniqueTextJoin(B5:B9;", ")
 
Bạn thử cái hàm này xem sao
Mã:
Function UniqueTextJoin(ByVal Table_Array As Range, Optional Delimiter As String) As String
    Dim sArr, Str, N As Long
    Dim Dic As Object, Tmp, Khoa As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Table_Array.Value
For Each Str In sArr
    Tmp = Split(Str, Delimiter)
    For N = 0 To UBound(Tmp)
        If Tmp(N) <> Empty Then
            Khoa = Trim(Tmp(N))
            If Not Dic.Exists(Khoa) Then Dic.Add Khoa, ""
        End If
    Next N
Next
If Dic.Count Then UniqueTextJoin = Join(Dic.Keys, Delimiter)
End Function
Mã:
D7=UniqueTextJoin(B5:B9;", ")
Bạn thử cái hàm này xem sao
Mã:
Function UniqueTextJoin(ByVal Table_Array As Range, Optional Delimiter As String) As String
    Dim sArr, Str, N As Long
    Dim Dic As Object, Tmp, Khoa As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Table_Array.Value
For Each Str In sArr
    Tmp = Split(Str, Delimiter)
    For N = 0 To UBound(Tmp)
        If Tmp(N) <> Empty Then
            Khoa = Trim(Tmp(N))
            If Not Dic.Exists(Khoa) Then Dic.Add Khoa, ""
        End If
    Next N
Next
If Dic.Count Then UniqueTextJoin = Join(Dic.Keys, Delimiter)
End Function
Mã:
D7=UniqueTextJoin(B5:B9;", ")
Em copy vào sao mà nó không chạy ra được kết quả mong muốn ạ
 

File đính kèm

Em hỏi thêm bác về cách tính này với ạ
Thêm nhiều thế :p:p:p
Mã:
Function SumDate(ByVal Date_value As Date, _
        ByVal Table_Lookup As Range, ByVal Col_Index As Long) As Long
    Dim sArr(), i As Long, fDate As Date, eDate As Date, Sum_Date As Long
sArr = Table_Lookup.Value
For i = 1 To UBound(sArr)
    If sArr(i, Col_Index) <> Empty Then
        fDate = sArr(i, 1): eDate = sArr(i, 2)
        If Date_value <= eDate Then
            If Date_value >= fDate Then
                Sum_Date = sArr(i, Col_Index) + Sum_Date
            End If
        End If
    End If
Next i
SumDate = Sum_Date
End Function
 

File đính kèm

Thêm nhiều thế :p:p:p
Mã:
Function SumDate(ByVal Date_value As Date, _
        ByVal Table_Lookup As Range, ByVal Col_Index As Long) As Long
    Dim sArr(), i As Long, fDate As Date, eDate As Date, Sum_Date As Long
sArr = Table_Lookup.Value
For i = 1 To UBound(sArr)
    If sArr(i, Col_Index) <> Empty Then
        fDate = sArr(i, 1): eDate = sArr(i, 2)
        If Date_value <= eDate Then
            If Date_value >= fDate Then
                Sum_Date = sArr(i, Col_Index) + Sum_Date
            End If
        End If
    End If
Next i
SumDate = Sum_Date
End Function
em mong muốn ngày 23/02/2020 là 5 ạ. kiểu như là 19/02/2020 đến 23/02/2020 là 2 người... từ ngày 23/02/2020 đến ngày 26/02/2020 là 5 người.. thì ngày 23/02/2020 sẽ lấy bằng với giá trị bắt của công việc bắt đầu sau. theo công thức của anh thì đang là 7 mất rồi ạ
Bài đã được tự động gộp:

em mong muốn ngày 23/02/2020 là 5 ạ. kiểu như là 19/02/2020 đến 23/02/2020 là 2 người... từ ngày 23/02/2020 đến ngày 26/02/2020 là 5 người.. thì ngày 23/02/2020 sẽ lấy bằng với giá trị bắt của công việc bắt đầu sau. theo công thức của anh thì đang là 7 mất rồi ạ
giá trị của ngày 23/02/2020 được gán trong ô G5 để mình có thể thay đổi ngày trong ô đó ạ
 
em mong muốn ngày 23/02/2020 là 5 ạ. kiểu như là 19/02/2020 đến 23/02/2020 là 2 người... từ ngày 23/02/2020 đến ngày 26/02/2020 là 5 người.. thì ngày 23/02/2020 sẽ lấy bằng với giá trị bắt của công việc bắt đầu sau. theo công thức của anh thì đang là 7 mất rồi ạ
Bài đã được tự động gộp:


giá trị của ngày 23/02/2020 được gán trong ô G5 để mình có thể thay đổi ngày trong ô đó ạ
ngày 23/2/2020 có 2 em
+ em 1 nhân công =2
+ em 2 nhân công = 5
Vậy nó phải = 7 chứ sao lại = 5
 
ngày 23/2/2020 có 2 em
+ em 1 nhân công =2
+ em 2 nhân công = 5
Vậy nó phải = 7 chứ sao lại = 5
dạ. em muốn để ngày 23/02/2020 nghiệm thu công việc đào móng rồi thì nhân công chỉ lấy theo nhân công thực hiện công việc xây tường móng
 
dạ. em muốn để ngày 23/02/2020 nghiệm thu công việc đào móng rồi thì nhân công chỉ lấy theo nhân công thực hiện công việc xây tường móng
Bạn lấy C7=D6+1
Còn không thì thay If Date_value <= eDate Then thành If Date_value < eDate Then thử xem sao
Mình thì bố trí dữ liệu kiểu này
1589014750341.png
 
Bạn lấy C7=D6+1
Còn không thì thay If Date_value <= eDate Then thành If Date_value < eDate Then thử xem sao
Mình thì bố trí dữ liệu kiểu này
Bạn lấy C7=D6+1
Còn không thì thay If Date_value <= eDate Then thành If Date_value < eDate Then thử xem sao
Mình thì bố trí dữ liệu kiểu này
dạ. em sửa theo bác rồi ạ. Nhưng có vẻ chưa được tổng quát ạ. Khi có công việc thi công và nghiệm thu trong cùng ngày kết quả trả về 0. Bác xem giúp em với ạ
 

File đính kèm

dạ. em sửa theo bác rồi ạ. Nhưng có vẻ chưa được tổng quát ạ. Khi có công việc thi công và nghiệm thu trong cùng ngày kết quả trả về 0. Bác xem giúp em với ạ
Bạn thêm dòng If fDate = eDate Then eDate = eDate + 1 vào dưới dòng fDate = sArr(i, 1): eDate = sArr(i, 2) xem sao
 
Tốt nhất là Bạn làm thêm 1 cột ngày nghiệm thu nữa.
Dạ... Ngày nghiệm thu thì em có 1 cột riêng rồi ạ. Với đoạn code trên của bác khi em thử với ngày 26/02/2020 thì bị lỗi trả về giá trị bằng 0. Nhờ bác sửa thêm đoạn code em với ạ
 
Dạ... Ngày nghiệm thu thì em có 1 cột riêng rồi ạ. Với đoạn code trên của bác khi em thử với ngày 26/02/2020 thì bị lỗi trả về giá trị bằng 0. Nhờ bác sửa thêm đoạn code em với ạ
Vậy thì mình đầu hàng rồi. Bạn gắng chờ có các Anh (Chị) khác ngang qua giúp đỡ nhé
 
Vậy thì mình đầu hàng rồi. Bạn gắng chờ có các Anh (Chị) khác ngang qua giúp đỡ nhé
có anh trên diễn đàn viết cho công thức này ạ. bác xem có thể giúp em lấy giá trị cần lấy theo ngày tháng ô G5 được không ạ
 

File đính kèm

Bạn tham khảo thử
Mã:
Sub InBB()
    Dim Rng As Range, Cll As Range, SoBB As String
With Sheet1
    Set Rng = .Range("A11", .Range("A" & Rows.Count).End(xlUp))
End With
With Sheet2
    For Each Cll In Rng
        If Cll.Value <> Empty And IsNumeric(Cll.Value) Then
            .Range("N55").Value = Cll.Value
            .PrintPreview
            SoBB = .Range("A53").Value
            If InStrRev(SoBB, "VC", -1, vbBinaryCompare) > 0 Then
                Sheet3.PrintPreview: Sheet4.PrintPreview: GoTo Tiep
            End If
            If InStrRev(SoBB, "ATGT", -1, vbBinaryCompare) > 0 Then
                Sheet5.PrintPreview: GoTo Tiep
            End If
            If InStrRev(SoBB, "BT", -1, vbBinaryCompare) > 0 Then
                Sheet4.PrintPreview
            End If
        End If
Tiep:
    Next
End With
End Sub
Khi nào ưng cái bụng thì thay PrintPreview bằng PrintOut nhoé
với đoạn code trên em muốn gọi code ẩn hiện dòng ở sheet3 thì mình thêm vào đâu ạ. bác hướng dẫn em với ạ
 
Bạn tham khảo thử
Mã:
Sub InBB()
    Dim Rng As Range, Cll As Range, SoBB As String
With Sheet1
    Set Rng = .Range("A11", .Range("A" & Rows.Count).End(xlUp))
End With
With Sheet2
    For Each Cll In Rng
        If Cll.Value <> Empty And IsNumeric(Cll.Value) Then
            .Range("N55").Value = Cll.Value
            .PrintPreview
            SoBB = .Range("A53").Value
            If InStrRev(SoBB, "VC", -1, vbBinaryCompare) > 0 Then
                Sheet3.PrintPreview: Sheet4.PrintPreview: GoTo Tiep
            End If
            If InStrRev(SoBB, "ATGT", -1, vbBinaryCompare) > 0 Then
                Sheet5.PrintPreview: GoTo Tiep
            End If
            If InStrRev(SoBB, "BT", -1, vbBinaryCompare) > 0 Then
                Sheet4.PrintPreview
            End If
        End If
Tiep:
    Next
End With
End Sub
Khi nào ưng cái bụng thì thay PrintPreview bằng PrintOut nhoé
Em nhờ bác giúp thêm code này ạ. Khi ô a53 không phải là các giá trị VC,ATGT hay BT thì cần thêm gì vào đoạn code để chạy liên tục được ạ
 

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

Back
Top Bottom