alibaba2209
Thành viên thường trực




- Tham gia
- 4/12/10
- Bài viết
- 283
- Được thích
- 13
Bạn xem sửa lại như thế này có được không:e xóa 2 cột đi giờ phải đổi code như nào a nhỉ
Public Sub GPE_EPG()
Application.ScreenUpdating = False
Dim sArr(), dArr(1 To 1000, 1 To 5), i As Long, j As Long, k As Long, R As Long, Edate As Long
With Sheets("List BB")
sArr = .Range("B3", .Range("B3").End(xlDown)).Resize(, 7).Value
R = UBound(sArr)
End With
For i = 1 To R
For j = sArr(i, 4) To sArr(i, 6)
k = k + 1: dArr(k, 1) = k
dArr(k, 2) = j: dArr(k, 3) = sArr(i, 1)
dArr(k, 4) = sArr(i, 2): dArr(k, 5) = sArr(i, 3)
Next j
k = k + 1: dArr(k, 1) = k
dArr(k, 2) = sArr(i, 7): dArr(k, 3) = "Nthu: " & sArr(i, 1)
dArr(k, 4) = sArr(i, 2): dArr(k, 5) = sArr(i, 3)
Next i
With Sheets("GPE")
.Range("A2").Resize(1000, 5).ClearContents
.Range("C2").Resize(1000, 3).Font.ColorIndex = 0
If k Then
.Range("A2").Resize(k, 5) = dArr
.Range("B2").Resize(k, 4).Sort Key1:=.Range("B2")
For i = k + 1 To 3 Step -1
If .Range("B" & i) = .Range("B" & i - 1) Then .Range("B" & i).ClearContents
If Left(.Range("C" & i), 4) = "Nthu" Then
.Range("C" & i).Resize(, 3).Font.ColorIndex = 3
.Range("C" & i).Characters(Start:=1, Length:=5).Font.Underline = xlUnderlineStyleSingle
End If
Next i
.Range("A2:G65535").Borders.LineStyle = xlNone
.Range("A2 :G" & k+1).Borders.LineStyle = xlContinuous
.Range("A2 :G" & k+1).Borders(xlInsideHorizontal).Weight = xlHairline
For i = k + 1 To 3 Step -1
If .Range("B" & i) <> Empty Then
With .Range("A" & i & ":G" & i).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
End With
End If
Next i
.PageSetup.PrintArea = "$A$1:$G$" & k + 1
Thoitiet
End If
End With
End Sub
Bạn xem sửa lại như thế này có được không:
Mã:Public Sub GPE_EPG() Application.ScreenUpdating = False Dim sArr(), dArr(1 To 1000, 1 To 5), i As Long, j As Long, k As Long, R As Long, Edate As Long With Sheets("List BB") sArr = .Range("B3", .Range("B3").End(xlDown)).Resize(, 7).Value R = UBound(sArr) End With For i = 1 To R For j = sArr(i, 4) To sArr(i, 6) k = k + 1: dArr(k, 1) = k dArr(k, 2) = j: dArr(k, 3) = sArr(i, 1) dArr(k, 4) = sArr(i, 2): dArr(k, 5) = sArr(i, 3) Next j k = k + 1: dArr(k, 1) = k dArr(k, 2) = sArr(i, 7): dArr(k, 3) = "Nthu: " & sArr(i, 1) dArr(k, 4) = sArr(i, 2): dArr(k, 5) = sArr(i, 3) Next i With Sheets("GPE") .Range("A2").Resize(1000, 5).ClearContents .Range("C2").Resize(1000, 3).Font.ColorIndex = 0 If k Then .Range("A2").Resize(k, 5) = dArr .Range("B2").Resize(k, 4).Sort Key1:=.Range("B2") For i = k + 1 To 3 Step -1 If .Range("B" & i) = .Range("B" & i - 1) Then .Range("B" & i).ClearContents If Left(.Range("C" & i), 4) = "Nthu" Then .Range("C" & i).Resize(, 3).Font.ColorIndex = 3 .Range("C" & i).Characters(Start:=1, Length:=5).Font.Underline = xlUnderlineStyleSingle End If Next i .Range("A2:G65535").Borders.LineStyle = xlNone .Range("A2 :G" & k+1).Borders.LineStyle = xlContinuous .Range("A2 :G" & k+1).Borders(xlInsideHorizontal).Weight = xlHairline For i = k + 1 To 3 Step -1 If .Range("B" & i) <> Empty Then With .Range("A" & i & ":G" & i).Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin End With End If Next i .PageSetup.PrintArea = "$A$1:$G$" & k + 1 Thoitiet End If End With End Sub
Hì hì..........
Người ta chuẩn bị 3 cái nút (chỉ xem hình chứ chưa thấy mặt mũi), bạn "gom" lại thì thiếu chỗ "ấn nút" rồi.
Public Sub GPE_EPG()
Application.ScreenUpdating = False
Dim sArr(), dArr(1 To 1000, 1 To 7), i As Long, j As Long, k As Long, R As Long
With Sheets("List BB")
sArr = .Range("B3", .Range("B3").End(xlDown)).Resize(, 7).Value
R = UBound(sArr)
End With
For i = 1 To R
For j = sArr(i, 4) To sArr(i, 6)
k = k + 1: dArr(k, 1) = k
dArr(k, 2) = j: dArr(k, 3) = sArr(i, 1)
dArr(k, 4) = sArr(i, 2): dArr(k, 5) = sArr(i, 3)
Next j
k = k + 1: dArr(k, 1) = k
dArr(k, 2) = sArr(i, 7): dArr(k, 3) = "Nthu: " & sArr(i, 1)
dArr(k, 4) = sArr(i, 2): dArr(k, 5) = sArr(i, 3)
Next i
With Sheets("GPE")
.Range("A2").Resize(1000, 5).ClearContents
.Range("C2").Resize(1000, 3).Font.ColorIndex = 0
.Range("A2:G65535").Borders.LineStyle = xlNone
.Range("A2:G65535").Font.Underline = xlUnderlineStyleNone
If k Then
.Range("A2").Resize(k, 5) = dArr
.Range("B2").Resize(k, 4).Sort Key1:=.Range("B2")
.Range("A2").Resize(k, 7).Borders.LineStyle = xlContinuous
.Range("A2").Resize(k, 7).Borders(xlInsideHorizontal).Weight = xlHairline
For i = k + 1 To 3 Step -1
If .Range("B" & i) = .Range("B" & i - 1) Then .Range("B" & i).ClearContents
If Left(.Range("C" & i), 4) = "Nthu" Then
.Range("C" & i).Resize(, 3).Font.ColorIndex = 3
.Range("C" & i).Characters(Start:=1, Length:=5).Font.Underline = xlUnderlineStyleSingle
End If
If .Range("B" & i) <> Empty Then
With .Range("A" & i & ":G" & i).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
End With
End If
Next i
Thoitiet
.PageSetup.PrintArea = "$A$1:$G$" & k + 1
End If
End With
Application.ScreenUpdating = True
End Sub
Tôi thì không quan tâm đến chuyện 1,2,3 vòng lặp, Code đẹp hay xấu. Cái "đã" của tôi là "giải toán đố", thấy bài nào "nhức đầu" một chút là "mò mẫm, sờ sẫm, rờ rẫm" chừng nào "ra" thì thôi.File có 3 Sheet thì chắc không cần dùng tới 3 cái nút đó đâu thầy nhỉ ...
mà em cũng dốt thật thầy ạ ( Sử dụng 2 vòng lặp). Chỉ cần lồng 1 vòng lặp của thầy là được rồi. Hì hì
....................
code phê quá anh ơi! Giúp e thêm chút nữa ạ 1. nếu chữ dài quá sẽ tự mở rộng dòng -- 2. còn công thức này có thể coppy dc không anh nhỉ =IF(LEFT($C2,5)="Nthu:","",IF(SUMPRODUCT((ISNUMBER(FIND({"#","vữa"},$C2)))*1),"LM: Vữa",IF(SUMPRODUCT((ISNUMBER(FIND({"M50","M75","M100","M150","M200","M250","M300"},$C2)))*1),"LM: BT","")))File có 3 Sheet thì chắc không cần dùng tới 3 cái nút đó đâu thầy nhỉ ...
mà em cũng dốt thật thầy ạ ( Sử dụng 2 vòng lặp). Chỉ cần lồng 1 vòng lặp của thầy là được rồi. Hì hì
Mã:Public Sub GPE_EPG() Application.ScreenUpdating = False Dim sArr(), dArr(1 To 1000, 1 To 7), i As Long, j As Long, k As Long, R As Long With Sheets("List BB") sArr = .Range("B3", .Range("B3").End(xlDown)).Resize(, 7).Value R = UBound(sArr) End With For i = 1 To R For j = sArr(i, 4) To sArr(i, 6) k = k + 1: dArr(k, 1) = k dArr(k, 2) = j: dArr(k, 3) = sArr(i, 1) dArr(k, 4) = sArr(i, 2): dArr(k, 5) = sArr(i, 3) Next j k = k + 1: dArr(k, 1) = k dArr(k, 2) = sArr(i, 7): dArr(k, 3) = "Nthu: " & sArr(i, 1) dArr(k, 4) = sArr(i, 2): dArr(k, 5) = sArr(i, 3) Next i With Sheets("GPE") .Range("A2").Resize(1000, 5).ClearContents .Range("C2").Resize(1000, 3).Font.ColorIndex = 0 .Range("A2:G65535").Borders.LineStyle = xlNone .Range("A2:G65535").Font.Underline = xlUnderlineStyleNone If k Then .Range("A2").Resize(k, 5) = dArr .Range("B2").Resize(k, 4).Sort Key1:=.Range("B2") .Range("A2").Resize(k, 7).Borders.LineStyle = xlContinuous .Range("A2").Resize(k, 7).Borders(xlInsideHorizontal).Weight = xlHairline For i = k + 1 To 3 Step -1 If .Range("B" & i) = .Range("B" & i - 1) Then .Range("B" & i).ClearContents If Left(.Range("C" & i), 4) = "Nthu" Then .Range("C" & i).Resize(, 3).Font.ColorIndex = 3 .Range("C" & i).Characters(Start:=1, Length:=5).Font.Underline = xlUnderlineStyleSingle End If If .Range("B" & i) <> Empty Then With .Range("A" & i & ":G" & i).Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin End With End If Next i Thoitiet .PageSetup.PrintArea = "$A$1:$G$" & k + 1 End If End With Application.ScreenUpdating = True End Sub
- Trong VBA không hiểu tiếng Việt nên công thức trên không ra được kết quảcode phê quá anh ơi! Giúp e thêm chút nữa ạ 1. nếu chữ dài quá sẽ tự mở rộng dòng -- 2. còn công thức này có thể coppy dc không anh nhỉ =IF(LEFT($C2,5)="Nthu:","",IF(SUMPRODUCT((ISNUMBER(FIND({"#","vữa"},$C2)))*1),"LM: Vữa",IF(SUMPRODUCT((ISNUMBER(FIND({"M50","M75","M100","M150","M200","M250","M300"},$C2)))*1),"LM: BT","")))
a viêt dùm em đoạn code tự dãn dòng khi dòng dài quá, và tự co dòng nữa!- Trong VBA không hiểu tiếng Việt nên công thức trên không ra được kết quả
- Bạn xem file thử nha. Mình tạo thêm 2 mảng phụ ( Loại mẫu và Mác)
Sao hôm nay lại không đính kèm được file nhì
LinK: http://www.mediafire.com/file/4bzfbw1dx2z3ame/NhatKy1.xlsm
À vâng em thấy rồi ạ.. Thanks kiu anh nhiều! em test thử chút có ji mắc lại phiền bác ^^!Trong file có rồi đó bạnMã:.Range("A2").Resize(k, 7).Rows.AutoFit
À vâng em thấy rồi ạ.. Thanks kiu anh nhiều! em test thử chút có ji mắc lại phiền bác ^^!
With Sheets("GPE") Loaimau = .Range("M2", .Range("M2").End(xlDown)).Value
Mac = .Range("N2", .Range("N2").End(xlDown)).Value
End With
For L = 1 To UBound(Loaimau, 1)
If UCase(sArr(i, 1)) Like "*" & UCase(Loaimau(L, 1)) & "*" Then
For m = 1 To UBound(Mac, 1)
If UCase(sArr(i, 1)) Like UCase("*" & Mac(m, 1) & "*") Then
dArr(k, 6) = "LM: " & Loaimau(L, 1) & " " & Mac(m, 1)
End If
Next m
End If
Next L
Mình có thể giới hạn chiều co lại bé nhất là 16 được không anh nhỉ.Range("A2").Resize(k, 7).Rows.AutoFit
cảm ơn anh nhiều ạ! codeMã:With Sheets("GPE") Loaimau = .Range("M2", .Range("M2").End(xlDown)).Value Mac = .Range("N2", .Range("N2").End(xlDown)).Value End With
Mã:For L = 1 To UBound(Loaimau, 1) If UCase(sArr(i, 1)) Like "*" & UCase(Loaimau(L, 1)) & "*" Then For m = 1 To UBound(Mac, 1) If UCase(sArr(i, 1)) Like UCase("*" & Mac(m, 1) & "*") Then dArr(k, 6) = "LM: " & Loaimau(L, 1) & " " & Mac(m, 1) End If Next m End If Next L
như này đúng chưa a nhỉ.Range("A2").Resize(k, 7).RowHeight = 22