- Tham gia
- 8/10/21
- Bài viết
- 10
- Được thích
- -1
(1) Chúc mừng bạn nhiều nha!(2) Số 5 đó minh họa thôi bạn. Mình chỉ muốn đơn giản từ dòng 1 đến dòng 1000 chẳng hạn. Thì cứ 5 dòng chèn 2 dòng trống
(1) Cảm ơn mọi người mình đã làm xong !
Số 5 đó minh họa thôi bạn. Mình chỉ muốn đơn giản từ dòng 1 đến dòng 1000 chẳng hạn. Thì cứ 5 dòng chèn 2 dòng trốngBạn phải trãi qua các bước sau:
1./ Đưa cột A:A có dữ liệu vô tham biến
2./ Tìm những ô có chứa con số '5'
3./ Ô tìm thấy ta chọn 2 dòng & thêm dòng thôi
Chúc bạn thành công!
51, 52, 53, 54 đều chứa số '5'.Bạn phải trãi qua các bước sau:
1./ Đưa cột A:A có dữ liệu vô tham biến
2./ Tìm những ô có chứa con số '5'
3./ Ô tìm thấy ta chọn 2 dòng & thêm dòng thôi
Chúc bạn thành công!
Ban thử code này coi. Nhớ ấn 1 lần thôi nhéSố 5 đó minh họa thôi bạn. Mình chỉ muốn đơn giản từ dòng 1 đến dòng 1000 chẳng hạn. Thì cứ 5 dòng chèn 2 dòng trống
View attachment 267681
Bài đã được tự động gộp:
Cảm ơn mọi người mình đã làm xong !
Sub Insert_Dong()
Dim i&, iR&, jI&
With ActiveSheet
iR = ActiveSheet.Range("A" & Rows.Count).End(3).Row
j = -2
For i = 1 To iR Step 5
j = j + 7
.Rows(j + 1).Insert xlDown, xlFormatFromLeftOrAbove
.Rows(j + 2).Insert xlDown, xlFormatFromLeftOrAbove
Next
End With
End Sub
Ban thử code này coi. Nhớ ấn 1 lần thôi nhé
Mã:Sub Insert_Dong() Dim i&, iR&, jI& With ActiveSheet iR = ActiveSheet.Range("A" & Rows.Count).End(3).Row j = -2 For i = 1 To iR Step 5 j = j + 7 .Rows(j + 1).Insert xlDown, xlFormatFromLeftOrAbove .Rows(j + 2).Insert xlDown, xlFormatFromLeftOrAbove Next End With End Sub
Ok ok. Haha. Ghi nhận. Em xin ghi nhậnTôi chỉ ngược lại bạn luôn nè
Sub Test()
Dim i As Long
For i = 10001 To 5 Step -5
Rows(i).Resize(2).Insert
Next i
End Sub
Chỉ tiếp. Nếu muốn không ảnh hưởng công thức, dữ liệu vùng xung quanh. vì sự ảnh hưởng khi ta chèn dòngOk ok. Haha. Ghi nhận. Em xin ghi nhận
Sub test()
Dim i As Long
For i = 10001 To 5 Step -5
Cells(i, 1).Resize(2).Insert xlShiftDown
Next i
End Sub
(1) Chúc mừng bạn nhiều nha!(2) Số 5 đó minh họa thôi bạn. Mình chỉ muốn đơn giản từ dòng 1 đến dòng 1000 chẳng hạn. Thì cứ 5 dòng chèn 2 dòng trống
(1) Cảm ơn mọi người mình đã làm xong !
Code này hơi bị dỏm ở chỗ là for i = 1001 nếu nó là 2000 hay 3000 phải sửa lại àChỉ tiếp. Nếu muốn không ảnh hưởng công thức, dữ liệu vùng xung quanh. vì sự ảnh hưởng khi ta chèn dòng
Mã:Sub test() Dim i As Long For i = 10001 To 5 Step -5 Cells(i, 1).Resize(2).Insert xlShiftDown Next i End Sub
Con có biết gì đâu. Anh ấy chỉ lại là tốt rồi. Cái nào hay. Thì còn chắt lọc để học cũng được mà chúĐã nói là 'người quen' mờ. Trước khi code phải coi chừng bị chê hàng dỏm.
Thớt là dân chuyên Xê Cọng Cọng. Cho nên chỉ thích những code gọn nhẹ.Con có biết gì đâu. Anh ấy chỉ lại là tốt rồi. Cái nào hay. Thì còn chắt lọc để học cũng được mà chú
Cũng đề bài này mà nâng cấp 1 chút.VD chèn số dòng trống (bằng Input box) sau số dòng( bằng Input box). VD mình nhập 4, rồi 6: tức là chèn 4 dòng trống sau 6 dòng..........kiểu như vậy thì code thế nào các huynh.
Sub ThemDongTheoYeuCau()
Dim SoDgThem As Byte, KC As Integer, Rws As Long, Col As Integer
Dim J As Long, W As Long, Hg As Integer, Cot As Integer
Rws = [B2].CurrentRegion.Rows.Count
Col = [B2].CurrentRegion.Columns.Count
SoDgThem = InputBox("Sô Dòng Thêm:", "GPE.COM", 3)
KC = InputBox("Khoang Cách Dòng:", "GPE.COM", 7)
If SoDgThem < 3 Or SoDgThem > 6 Then SoDgThem = 3
If KC < 7 Or KC > 9 Then KC = 7
ReDim Arr(1 To 9 * Rws, 1 To Col)
For J = 2 To Rws Step KC
For Hg = 1 To KC
W = W + 1
For Cot = 1 To Col
Arr(W, Cot) = Cells(J + Hg - 1, Cot).Value
Next Cot
Next Hg
W = W + SoDgThem
Next J
Cells(2, Col + 2).Resize(W, Col).Value = Arr()
End Sub
Hơi ngạo nghễ nha em. trình độ còn Non và xanh lắm em trai. Ví dụ dữ liệu như thế này thì cứ 5 dòng cách 2 dòng có được không? Cần tìm kiểu kỳ trước khi phát biểu nha em.Code này hơi bị dỏm ở chỗ là for i = 1001 nếu nó là 2000 hay 3000 phải sửa lại à
Cho bác code này nè, ngon lành hơn nhiều
Sub chen_dong_trong()
Dim ar(), i As Integer, k As Integer, kq(), j As Integer
ar = Range("A1").CurrentRegion.Value
ReDim kq(1 To UBound(ar) + (Int(UBound(ar) / 5) + 1) * 2, 1 To UBound(ar, 2))
For i = 1 To UBound(ar)
k = k + 1
For j = 1 To UBound(ar, 2)
kq(k, j) = ar(i, j)
Next
If i Mod 5 = 0 Then k = k + 2
Next
Range("A1").Resize(UBound(kq), UBound(kq, 2)) = kq
End Sub
Em biết lỗi rồi, em chỉ là hạt cát trong sa mạc, giọt nước giữa đại dương mênh mông thôi........Xin kính cẩn nghiêng mình đứng nép 1 bên để lắng nghe và học hỏi.Hơi ngạo nghễ nha em. trình độ còn Non và xanh lắm em trai. Ví dụ dữ liệu như thế này thì cứ 5 dòng cách 2 dòng có được không? Cần tìm kiểu kỳ trước khi phát biểu nha em.
View attachment 267688
Nick VetBikini đó đã bị Bank Nick 1 tháng rồi. Vì tội Hỗn láo với nhiều thành viên. bạn không nên trách nick đó làm gì. Riêng mình thì bài viết của Thành viên VetBikini mình coi như rác đổ đi. Nên không bao giờ quan tâm câu trả lời của thành viên nàyCon có biết gì đâu. Anh ấy chỉ lại là tốt rồi. Cái nào hay. Thì còn chắt lọc để học cũng được mà chú
....Xin kính cẩn nghiêng mình đứng nép 1 bên để lắng nghe và học hỏi.
Đói với dân đòi lấy tiền 200 đô Mỹ một tiết dạy Xê Cọng Cọng thì bạn nghĩ là bạn có thể học phơ-ri à?.... Thì còn chắt lọc để học cũng được mà chú
Em biết lỗi rồi, em chỉ là hạt cát trong sa mạc, giọt nước giữa đại dương mênh mông thôi........Xin kính cẩn nghiêng mình đứng nép 1 bên để lắng nghe và học hỏi.
Đói với dân đòi lấy tiền 200 đô Mỹ một tiết dạy Xê Cọng Cọng thì bạn nghĩ là bạn có thể học phơ-ri à?
Theo tôi thì cái đáng học ở bài này là: làm sao nhìn bài #1 hì biết ngay là 'người quen'?
Làm được điều này, bạn học được kỹ năng thống kê và phỏng đoán theo dạng 'pattern recognition'
Gợi ý: pattern số 1 là cứ khoảng 1 tháng thì đăng ký 1 cái tên mới. Đăng bài hỏi, nhưng cái bổn tánh hung hăng không chừa cho nên chỉ mọt thời gian ngắn là gây hết mọt số đông. Dẫu không bị ban của ban đỏ thì cũng bị bà con GPE tẩy chay. Tên ấy hết công dụng, trở lại 'pattern' đăng tên mới.
Thành viên đã từng bị ban Nick 1 tháng vì tội hỗn Láo. Già rồi mà Láo. Bị ban nick 1 tháng chưa chừa cái tật nói nhiều à.Đói với dân đòi lấy tiền 200 đô Mỹ một tiết dạy Xê Cọng Cọng thì bạn nghĩ là bạn có thể học phơ-ri à?
Theo tôi thì cái đáng học ở bài này là: làm sao nhìn bài #1 hì biết ngay là 'người quen'?
Làm được điều này, bạn học được kỹ năng thống kê và phỏng đoán theo dạng 'pattern recognition'
Gợi ý: pattern số 1 là cứ khoảng 1 tháng thì đăng ký 1 cái tên mới. Đăng bài hỏi, nhưng cái bổn tánh hung hăng không chừa cho nên chỉ mọt thời gian ngắn là gây hết mọt số đông. Dẫu không bị ban của ban đỏ thì cũng bị bà con GPE tẩy chay. Tên ấy hết công dụng, trở lại 'pattern' đăng tên mới.
Bạn thử code này nhé!Cũng đề bài này mà nâng cấp 1 chút.VD chèn số dòng trống (bằng Input box) sau số dòng( bằng Input box). VD mình nhập 4, rồi 6: tức là chèn 4 dòng trống sau 6 dòng..........kiểu như vậy thì code thế nào các huynh.
Function InsertBlankRows(SourceRange As Range, EachRows As Integer, NumAddBlankRows As Integer) As Variant
'SourceRange: Vung du lieu goc
'EachRows: Tan suat thuc hien chen dong trang
'NumAddBlankRows: So dong trang chen them tung lan
Dim sArr(), Res()
Dim I As Long, K As Long, J As Long
'Kiem tra bao dam Vung du lieu goc chi co 1 cot
If SourceRange.Columns.Count > 1 Then Exit Function
'Kiem tra bao dam cac dieu kien la so nguyen lon hon 0
If EachRows < 1 Or NumAddBlankRows < 1 Then Exit Function
'Gan Vung du lieu goc sang mang
sArr() = SourceRange
'Xac dinh kich thuoc mang ket qua
ReDim Res(1 To UBound(sArr, 1) + Int(UBound(sArr, 1) / EachRows) * NumAddBlankRows, 1 To 1)
'Chay vong lap qua tung phan tu cua Mang du lieu goc
For I = 1 To UBound(sArr, 1)
K = K + 1
Res(K, 1) = sArr(I, 1)
'Truong hop chi so cua phan tu chia het cho Tan suat dong
If I Mod EachRows = 0 Then
K = K + NumAddBlankRows
End If
Next I
InsertBlankRows = Res
End Function
Cách tính số dòng của bạn nhiều dòng quá.Bạn thử code này nhé!
'Chay vong lap qua tung phan tu cua Mang du lieu goc
For I = 1 To UBound(sArr, 1)
K = K + 1
Res(K, 1) = sArr(I, 1)
'Truong hop chi so cua phan tu chia het cho Tan suat dong
If I Mod EachRows = 0 Then
K = K + NumAddBlankRows
End If
Next I
Ngày | Doanh Thu | Ngày | Doanh Thu | ||||||||||||||
3/13/2021 | 80 | 3/13/2021 | 80 | ||||||||||||||
3/13/2021 | 75 | 3/13/2021 | 75 | ||||||||||||||
3/13/2021 | 90.5 | |==>> | 3/13/2021 | 90.5 | |||||||||||||
3/13/2021 | 102 | Tổng | 245.5 | ||||||||||||||
3/14/2021 | 79.6 | ||||||||||||||||
3/14/2021 | 84.7 | |==>> | 3/14/2021 | 79.6 | |||||||||||||
3/15/2021 | 101.2 | 3/14/2021 | 84.7 | ||||||||||||||
3/15/2021 | 94.5 | Tổng | 164.3 | ||||||||||||||
3/15/2021 | 79.5 | |==>> | |||||||||||||||
3/15/2021 | 101.2 | ||||||||||||||||
3/15/2021 | 94.5 | ||||||||||||||||
|==>> | 3/15/2021 | 79.5 | |||||||||||||||
Tổng | 275.2 | ||||||||||||||||
Tổng công: | 685 |
Làm sao mà bác thấy được "người quen" chỉ bằng cách đọc bài #1 được bác nhỉ? Gợi ý pattern ấy tôi chưa tiếp thu được....
Theo tôi thì cái đáng học ở bài này là: làm sao nhìn bài #1 hì biết ngay là 'người quen'?
Làm được điều này, bạn học được kỹ năng thống kê và phỏng đoán theo dạng 'pattern recognition'
Gợi ý: pattern số 1 là cứ khoảng 1 tháng thì đăng ký 1 cái tên mới. Đăng bài hỏi, nhưng cái bổn tánh hung hăng không chừa cho nên chỉ mọt thời gian ngắn là gây hết mọt số đông. Dẫu không bị ban của ban đỏ thì cũng bị bà con GPE tẩy chay. Tên ấy hết công dụng, trở lại 'pattern' đăng tên mới.
Em cám ơn bác chỉ ra điểm thiếu sót.@VanThinh3001: Bạn có công đoạn kiểm tra số cột dữ liệu (DL) & cho rằng số cột lớn hơn 1 thì nghỉ chơi;
Mình cho rằng như vậy là bạn giải bài toán không có trong thực tiển.
Mình cho là người ta phải thêm 1 hay vài dòng trắng là để thêm công thức hay số liệu tính tổng hay trung bình của các đoạn/nhóm kết quả.
(Tất nhiên từ 'người ta' ở đây không bao hàm tác giả của chủ bài đăng!)
Từ đề bài của #1, ta có thể nêu ra dòng họ các bài này như sau:
#C++: Tính tổng doanh thu từng ngày sau khi đã thêm 2 dòng trắng của mỗi 1 ngày bán hàng:
Ngày Doanh Thu Ngày Doanh Thu 3/13/2021 80 3/13/2021 80 3/13/2021 75 3/13/2021 75 3/13/2021 90.5|==>> 3/13/2021 90.5 3/13/2021 102Tổng 245.5 3/14/2021 79.6 3/14/2021 84.7|==>> 3/14/2021 79.6 3/15/2021 101.2 3/14/2021 84.7 3/15/2021 94.5Tổng 164.3 3/15/2021 79.5|==>> 3/15/2021 101.2 3/15/2021 94.5|==>> 3/15/2021 79.5Tổng 275.2Tổng công: 685
Function InsertBlankRows(SourceRange As Range, EachRows As Integer, NumAddBlankRows As Integer) As Variant
'SourceRange: Vung du lieu goc
'EachRows: Tan suat thuc hien chen dong trang
'NumAddBlankRows: So dong trang chen them tung lan
Dim sArr(), Res()
Dim I As Long, K As Long, J As Long
'Kiem tra bao dam cac dieu kien la so nguyen lon hon 0
If EachRows < 1 Or NumAddBlankRows < 1 Then Exit Function
'Gan Vung du lieu goc sang mang
sArr() = SourceRange
'Xac dinh kich thuoc mang ket qua
ReDim Res(1 To UBound(sArr, 1) + Int(UBound(sArr, 1) / EachRows) * NumAddBlankRows, 1 To UBound(sArr, 2))
'Chay vong lap qua tung phan tu cua Mang du lieu goc
For I = 1 To UBound(sArr, 1)
K = K + 1
For J = 1 To UBound(sArr, 2)
Res(K, J) = sArr(I, J)
Next J
'Truong hop chi so cua phan tu chia het cho Tan suat dong
If I Mod EachRows = 0 Then
K = K + NumAddBlankRows
End If
Next I
InsertBlankRows = Res
End Function
Em cám ơn bác ạ.Cách tính số dòng của bạn nhiều dòng quá.
K = I + ((I - 1) \ EachRows) * NumAddBlankRows
Code trên thành ra:
For I = 1 To UBound(sArr, 1)
Res(I + ((I - 1) \ EachRows) * NumAddBlankRows, 1) = sArr(I, 1)
Next I
Hay nhỉ bác nhiều cái rút gọn được nhiều công đoạn tính số vòng lặp mà giờ em mới biết là số thứ tự bị lẻ trong mảng nó tự làm tròn.Mà em không hiểu sao nó lại như thế này là sao nhỉ bác.Cách tính số dòng của bạn nhiều dòng quá.
K = I + ((I - 1) \ EachRows) * NumAddBlankRows
Code trên thành ra:
For I = 1 To UBound(sArr, 1)
Res(I + ((I - 1) \ EachRows) * NumAddBlankRows, 1) = sArr(I, 1)
Next I
Vì chỉ số của mảng phải là số nguyên cho nên nếu biểu thức tính chỉ số ở dạng số thập phân thì VBA tự ép kiểu thành số nguyên.Hay nhỉ bác nhiều cái rút gọn được nhiều công đoạn tính số vòng lặp mà giờ em mới biết là số thứ tự bị lẻ trong mảng nó tự làm tròn.Mà em không hiểu sao nó lại như thế này là sao nhỉ bác.
Vâng em cảm ơn.Vì chỉ số của mảng phải là số nguyên cho nên nếu biểu thức tính chỉ số ở dạng số thập phân thì VBA tự ép kiểu thành số nguyên.
Con toán chia trong máy tính ít khi ra tròn số như ta tính tay. Vì vậy phép ép kiểu có thể ép 3,50000001 thành 4 và 4,49999999 thành 4 luôn. Muốn chắc điều này, bạn phải làm một dãy test khoảng vài trăm số.
Để tránh sự bất ngờ vì VBA ép kiểu, người lập trình có kinh nghiệm luôn tự quyết định làm tròn số lẻ trong con toán chia số nguyên.
Bạn phân tích kỹ biểu thức tôi viết ở bài #22 sẽ thấy con toán chia tôi dùng \ tức là chia 2 số nguyên, không lấy thập phân (nếu dùng / thì có thập phân). VBA không cần ép kiểu trong biểu thức này.
Trong lập trình cổ điển, cách tự kiểm soát làm tròn là dùng hàm FIX.
Muốn làm tròn xuống thì FIX(x). Muốn làm tròn lên thì FIX(x + SIGN(x)*0.5)