PDA

View Full Version : Hỏi về cách chèn dòng tự động trong excel



ghzktc
26-09-10, 08:45 PM
Cho mình hỏi, mình có bảng tính, độ dày lớp là 3(m). Chia mỗi lớp là 0,5m thì được 6 dòng
Có cách nào để khi sửa độ dày từ 3 sang 4 (m) thì bảng tính tự động chèn dòng theo không (bao gồm cả công thức)

MinhCong
27-09-10, 07:57 AM
Cho mình hỏi, mình có bảng tính, độ dày lớp là 3(m). Chia mỗi lớp là 0,5m thì được 6 dòng
Có cách nào để khi sửa độ dày từ 3 sang 4 (m) thì bảng tính tự động chèn dòng theo không (bao gồm cả công thức)
Cái này có lẽ phải dùng VBA rồi Bạn ơi. Gởi file lên ghi rõ yêu cầu sẽ có người giúp nhé!

ghzktc
29-09-10, 08:00 AM
Vậy mình gửi file lên rồi nhờ bạn giúp dùm mình nhé
Ở sheet tính lún có các ô màu đỏ, chiều dày các lớp đất (lớp 1, lớp 2, lớp 3) và chiều dày các lớp phân tố hi có liên quan với nhau
ý mình muốn nếu nhập vào chiều dày các lớp đất, rồi chiều dày lớp phân tố thì ở dưới bảng tính tự động xuất hiện thêm các dòng (số dòng bằng chiều dày lớp đất/chiều dày lớp phân tố)
riêng lớp 1 thì số dòng = (chiều dày lớp 1 - hcm)/chiều dày lớp phân tố
Nhưng nếu làm tự động chèn dòng thì công thức có theo được không vậy???
Nhờ các bạn giúp cho, mình gà quá nên không biết làm sao cả, cảm ơn.

MinhCong
29-09-10, 11:13 AM
Vậy mình gửi file lên rồi nhờ bạn giúp dùm mình nhé
Ở sheet tính lún có các ô màu đỏ, chiều dày các lớp đất (lớp 1, lớp 2, lớp 3) và chiều dày các lớp phân tố hi có liên quan với nhau
ý mình muốn nếu nhập vào chiều dày các lớp đất, rồi chiều dày lớp phân tố thì ở dưới bảng tính tự động xuất hiện thêm các dòng (số dòng bằng chiều dày lớp đất/chiều dày lớp phân tố)
riêng lớp 1 thì số dòng = (chiều dày lớp 1 - hcm)/chiều dày lớp phân tố
Nhưng nếu làm tự động chèn dòng thì công thức có theo được không vậy???
Nhờ các bạn giúp cho, mình gà quá nên không biết làm sao cả, cảm ơn.
Bạn dùng tạm cái này vậy. Không biết có đúng ý Bạn chưa?

ghzktc
29-09-10, 01:36 PM
cái này cũng gần đúng ý mình rồi, nhưng có một số vấn đề như:
Số dòng của lớp 1 = (chiều dày lớp 1 - hcm)/ chiều dày lớp phân tố
Nhưng mình kiểm tra thử thì khi nhập chiều dày lớp, hcm, và chiều dày lớp phân tố thì lớp 1 cứ bị thiếu 1 dòng
Còn lớp 2 thì thiếu 2 dòng
Lớp 3 thì nằm dưới hàng tổng cộng luôn
Vì mình không biết cách sử dụng VBA như bạn nói nên chằng biết sửa như thế nào cả, bạn giúp mình với

MinhCong
29-09-10, 01:46 PM
cái này cũng gần đúng ý mình rồi, nhưng có một số vấn đề như:
Số dòng của lớp 1 = (chiều dày lớp 1 - hcm)/ chiều dày lớp phân tố
Nhưng mình kiểm tra thử thì khi nhập chiều dày lớp, hcm, và chiều dày lớp phân tố thì lớp 1 cứ bị thiếu 1 dòng
Còn lớp 2 thì thiếu 2 dòng
Lớp 3 thì nằm dưới hàng tổng cộng luôn
Vì mình không biết cách sử dụng VBA như bạn nói nên chằng biết sửa như thế nào cả, bạn giúp mình với
Bạn xem lại file đính kèm nhé!

ghzktc
29-09-10, 03:50 PM
cảm ơn bạn minhcong đã giúp mình, nhờ bạn sửa lại dùm mình 1 chút, lớp thứ nhất số dòng =[(chiều dày lớp - hcm)/chiều dày lớp phân tố] + 1
mà cho mình hỏi, nếu làm như vậy thì công thức của các lớp sau đều là của lớp đầu tiên, phải chỉnh lại bằng tay, mình không mặc định được hả bạn

MinhCong
30-09-10, 07:22 AM
cảm ơn bạn minhcong đã giúp mình, nhờ bạn sửa lại dùm mình 1 chút, lớp thứ nhất số dòng =[(chiều dày lớp - hcm)/chiều dày lớp phân tố] + 1
mà cho mình hỏi, nếu làm như vậy thì công thức của các lớp sau đều là của lớp đầu tiên, phải chỉnh lại bằng tay, mình không mặc định được hả bạn
Cái chỗ chữ màu xanh ấy, Tôi không hiểu ý Bạn muốn nói như thế nào?


Sub Chialop()
Dim i As Long, eR As Long
Dim L1 As Long, L2 As Long, L3 As Long
Application.ScreenUpdating = False
Range("A20:M65500").Clear
If Range("B12") = 0 Then Exit Sub
L1 = Round((Range("G12") - Range("E4")) / Range("B12"), 0) + 1
L2 = Round(Range("H12") / Range("B12"), 0)
L3 = Round(Range("I12") / Range("B12"), 0)
K = L1 + L2 + L3
With Range("19:19")
If K > 2 Then .Copy .Offset.Resize(K - 1)
End With
With Range("B18")
.Value = "L" & ChrW(7899) & "p 1"
If Range("H12") <> "" Then
.Copy .Offset(L1)
.Offset(L1).Value = "L" & ChrW(7899) & "p 2"
.Offset(L1).Borders(xlEdgeTop).LineStyle = xlContinuous
End If
If Range("I12") <> "" Then
.Copy .Offset(L1 + L2)
.Offset(L1 + L2).Value = "L" & ChrW(7899) & "p 3"
.Offset(L1 + L2).Borders(xlEdgeTop).LineStyle = xlContinuous
End If
End With
eR = Range("C65536").End(xlUp).Row
With Range("B" & eR + 1 & ":L" & eR + 1)
.Font.Bold = True
.Borders(xlEdgeTop).LineStyle = xlDouble
.Borders(xlEdgeBottom).LineStyle = xlDouble
.Borders(xlEdgeLeft).LineStyle = xlDouble
.Borders(xlEdgeRight).LineStyle = xlDouble
End With
With Range("B" & eR + 1 & ":K" & eR + 1)
.Merge
.HorizontalAlignment = xlCenter
.FormulaR1C1 = "T" & ChrW(7892) & "NG C" & ChrW(7896) & "NG"
End With
With Range("L" & eR + 1)
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.FormulaR1C1 = "=SUM(R[-" & (eR - 17) & "]C:R[-1]C)"
.Offset(1).FormulaR1C1 = "=IF(R[-1]C<8,""Th" & ChrW(7887) & "a " & ChrW(273) & "k lún"",""Không th" & ChrW(7887) & "a " & ChrW(273) & "k lún"")"
.Offset(1).Font.Bold = True
.Offset(1).Font.ColorIndex = 3
End With
Application.ScreenUpdating = True
End Sub

Bạn để ý 3 dòng Tôi tô màu đỏ ở trong đoạn code trên, L1 (Lớp 1); L2 (Lớp 2); L3 (Lớp 3). Công thức như của Bạn thôi.

ghzktc
30-09-10, 09:07 AM
cảm ơn bạn, vấn đề về công thức thì mình đã hiểu vì sao rồi, do mình F4 khóa ô lại nên không nhảy thôi :D
Còn về số dòng của lớp 1 thì đã đúng rồi.
Mình cảm ơn bạn đã giúp đỡ mình, mà ô biểu tượng tạo bảng để click vào nếu khóa sheet thì có nhấn được ko bạn

MinhCong
30-09-10, 09:40 AM
cảm ơn bạn, vấn đề về công thức thì mình đã hiểu vì sao rồi, do mình F4 khóa ô lại nên không nhảy thôi :D
Còn về số dòng của lớp 1 thì đã đúng rồi.
Mình cảm ơn bạn đã giúp đỡ mình, mà ô biểu tượng tạo bảng để click vào nếu khóa sheet thì có nhấn được ko bạn
Khóa sheet thì code không chạy được đâu nhé Bạn.

ghzktc
01-10-10, 01:14 PM
vâng cảm ơn bạn, vậy nếu muốn thêm lớp đất vào, mình chỉ cần thêm dòng vào dưới đoạn code màu đỏ mà bạn đánh dấu ở trên là được đúng không bạn, ví dụ thêm 1 lớp L4

L1 = Round((Range("G12") - Range("E4")) / Range("B12"), 0) + 1
L2 = Round(Range("H12") / Range("B12"), 0)
L3 = Round(Range("I12") / Range("B12"), 0)
L4 = Round(Range("ô đặt chiều dày L4") / Range("B12"), 0)
K = L1 + L2 + L3[/CODE]

MinhCong
01-10-10, 01:37 PM
vâng cảm ơn bạn, vậy nếu muốn thêm lớp đất vào, mình chỉ cần thêm dòng vào dưới đoạn code màu đỏ mà bạn đánh dấu ở trên là được đúng không bạn, ví dụ thêm 1 lớp L4
L1 = Round((Range("G12") - Range("E4")) / Range("B12"), 0) + 1
L2 = Round(Range("H12") / Range("B12"), 0)
L3 = Round(Range("I12") / Range("B12"), 0)
L4 = Round(Range("ô đặt chiều dày L4") / Range("B12"), 0)
K = L1 + L2 + L3[/CODE]
K=L1+L2+L3+L4
Và bổ sung thêm 1 hàm IF nữa phía dưới hàm IF của lớp thứ 3


If Range("Ô đặt chiều dày L4") <> "" Then
.Copy .Offset(L1 + L2+L3)
.Offset(L1 + L2+L3).Value = "L" & ChrW(7899) & "p 4"
.Offset(L1 + L2+L3).Borders(xlEdgeTop).LineStyle = xlContinuous
End IF