Bạn tham khảo thử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.
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
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 ạBạn tham khảo thử
Khi nào ưng cái bụng thì thay PrintPreview bằng PrintOut nhoé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
Bạn có muốn cái Form như thế này khôngem 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 ạ
dạ vâng... hướng dẫn em với ạ... em cũng đang muốn làm 1 forrm như này trên biên bản trên. vậy thêm code như nào ạBạn có muốn cái Form như thế này không
Thái Lọ nhà mình sao mà chán thế. Viết cho đúng chính tả tí coi nàodạ vâng... hướng dẫn em với ạ... em cũng đang muốn làm 1 forrm như này trên biên bản trên. vậy thêm code như nào ạ
Hướng dẫn em với ạ.Thái Lọ nhà mình sao mà chán thế. Viết cho đúng chính tả tí coi nào![]()
Để chiều nhé Bạn. Giờ phải đi mâm mân mất rồiHướng dẫn em với ạ.
giúp em cái form như này với ạ. Khi mình ấn vào nút Print hiện ra một Form để mình chọn in từ biên bản này đến biên bản kia. Em làm mà nó không chạy đượcĐể chiều nhé Bạn. Giờ phải đi mâm mân mất rồi
Bạn tải File Bài 8 xem thửgiúp em cái form như này với ạ. Khi mình ấn vào nút Print hiện ra một Form để mình chọn in từ biên bản này đến biên bản kia. Em làm mà nó không chạy được
Đúng rồi ạ. Em cảm ơn nhiều ạBạn tải File Bài 8 xem thử
Dạ... Có hàm nào xử lý được chuỗi dữ liệu này không ạBạn tải File Bài 8 xem thử
Hàm độ thì có Bạn àDạ... Có hàm nào xử lý được chuỗi dữ liệu này không ạ
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.Hàm độ thì có Bạn à
Bạn thử cái hàm này xem saoGiú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.
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
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 ạ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;", ")
Uổi. Bây giờ mới đọc lại hoá ra Bạn không phải là Chủ Topic.Em copy vào sao mà nó không chạy ra được kết quả mong muốn ạ
Em vào diễn đàn thấy có bạn thắc mắc giống mình nên tham gia topic luôn... Em cảm ơn bác nhiềuUổi. Bây giờ mới đọc lại hoá ra Bạn không phải là Chủ Topic.![]()
Em hỏi thêm bác về cách tính này với ạUổi. Bây giờ mới đọc lại hoá ra Bạn không phải là Chủ Topic.![]()
Thêm nhiều thếEm hỏi thêm bác về cách tính này với ạ
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 ạThêm nhiều thế
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
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 ạ
ngày 23/2/2020 có 2 emem 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 ô đó ạ
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óngngà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
Bạn lấy C7=D6+1dạ. 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
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 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 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 saodạ. 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 ạ
em thêm dòng code của bác nào vẫn không được bác ạ.. em thử với ngày 26/02/2020. lại bị trả về kết quả bằng 0 ạ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.em thêm dòng code của bác nào vẫn không được bác ạ.. em thử với ngày 26/02/2020. lại bị trả về kết quả bằng 0 ạ
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 ạTốt nhất là Bạn làm thêm 1 cột ngày nghiệm thu nữa.
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é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âng. Em cảm ơn ạ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 ạ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ớ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ử
Khi nào ưng cái bụng thì thay PrintPreview bằng PrintOut nhoé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
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ạn tham khảo thử
Khi nào ưng cái bụng thì thay PrintPreview bằng PrintOut nhoé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