em nhờ các bác về vòng lặp trong excel

Liên hệ QC

nguyenkhoadung98

Thành viên mới
Tham gia
11/9/09
Bài viết
15
Được thích
0
chào các bác e lại hỏi các bác thêm 1 câu nữa, là thế này ạ. e nhờ các bác tìm 1 hàm có chức năng như sau: biết rằng giá trị ở cột 2 được tính dựa trên cột 1 nếu ở cột 2 có giá trị nào lớn hơn 5% thì tự động tăng giá trị tương ứng của cột 1 lên 1 cấp đến khi nào giá trị tương ứng ở cột 2 nhỏ hơn 5% thì dừng ví dụ H4(cột 2) đang bằng 28.27% (tương ứng với F4 =3.5)> 5% thì tăng giá trị tương ứng ở cột 1 (F4) lên thành 4( tăng theo bảng cho sẵn (bảng 1)) khi đó H4 bằng 25.06% vẫn >5% tiếp tục tăng F4 lên thành 5.5 ……. Đến khi nào H4 nhỏ hơn 5% thì thôi, e gửi kèm file e cảm ơn các bác.
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn có thể chuyển file đính kèm về dạng *.xls và gửi lại lên không?
 
chào các bác e lại hỏi các bác thêm 1 câu nữa, là thế này ạ. e nhờ các bác tìm 1 hàm có chức năng như sau: biết rằng giá trị ở cột 2 được tính dựa trên cột 1 nếu ở cột 2 có giá trị nào lớn hơn 5% thì tự động tăng giá trị tương ứng của cột 1 lên 1 cấp đến khi nào giá trị tương ứng ở cột 2 nhỏ hơn 5% thì dừng ví dụ H14(cột 2) đang bằng 30.20% > 5% thì tăng giá trị tương ứng ở cột 1 (F14) lên thành 120( tăng theo bảng cho sẵn (bảng 1) khi đó H14 bằng 35.53% vẫn >5% tiếp tục tăng F14 lên thành 150 ……. Đến khi nào H14 nhỏ hơn 5% thì thôi, e gửi kèm file e cảm ơn các bác.
H14 đang là 30.20% rồi thành 35.53%, như vậy là càng ngày càng tăng, vậy biết đến khi nào nó mới nhỏ hơn 5% đây vậy trời.
 
Được rồi. Để mình làm thử xem sao?
 
Bài toán của bạn thực sự là khó hiểu, mình chỉ hiểu như thế này nếu tổn thất điện áp ở (cột2)>5%, thì mình sẽ tra ngược lại tiết diện dây ở bảng 1 sao cho với tiết diện dây đó thì tổn thất điện áp ở (cột 2) của bảng 2 sẽ <5%, nên mình làm như thế này. Bạn xem có đúng ý bạn không?
 

File đính kèm

Lần chỉnh sửa cuối:
Với bài toán này, chúng ta phải viết 1 đoạn code với nội dung như sau: Đầu tiên xem kết quả ở cột 2, nếu kết quả lớn hơn 5%, sẽ dò tìm cột 1 trong bảng và lấy giá trị kế tiếp thay vào giá trị cột 1. Xem kết quả cột 2 nếu vẫn lớn hơn 5% thì làm tiếp cho đến khi <=5% thì xét tiếp dòng kế tiếp, cho đến dòng cuối cùng. Bạn sẽ dùng các hàm trong VBA như Find, Address, Do Until ... Loop, v.v...

Bạn tự nghiên cứu và làm tiếp nhé.
 
Đơn giản vầy thôi:
Tăng bao nhiêu lần cũng nhằm mục đích đạt mức tổn thất < 5% thì ngưng, vậy tại sao không lấy ngay 1 mức mà tổn hao lớn nhất mà nhỏ hơn 5%? Mà phải tăng từng lần cho khốn khổ.
Bảng 1 cho thêm 1 cột tổn hao lý thuyết cho từng cỡ dây, sẽ thấy ngay mức tổn hao giảm dần, tìm mức nhỏ hơn 5% đầu tiên, là 4,48%, tương ứng tiết diện dây là 22 mm²

Vậy công thức cho cột tiết diện thay thế là:

=IF(I3>5%; 22; G3)

hoặc đơn giản hơn: = MAX(G3;22)
 

File đính kèm

Lần chỉnh sửa cuối:
Bài toán của bạn thực sự là khó hiểu, mình chỉ hiểu như thế này nếu tổn thất điện áp ở (cột2)>5%, thì mình sẽ tra ngược lại tiết diện dây ở bảng 1 sao cho với tiết diện dây đó thì tổn thất điện áp ở (cột 2) của bảng 2 sẽ <5%, nên mình làm như thế này. Bạn xem có đúng ý bạn không?

về nội dung đúng là thế bác ạ,nhưng mà cái hàm của cột 2 ấy là 1 hàm với các giá trị ở các cột khác (ở bản e gửi kia e cứ lấy đại 1 hàm để cho các bác dễ hiểu, ko ngờ lại gây hiểu lầm thành thật xin lỗi các bác) và mà e muốn là giá trị sau khi tính của cột 2 (đã nhỏ hơn 5%) sẽ được viết luôn thay thế giá trị cũ (>5%) và cột tiết diện dây (cột 1) cũng được thay thế bằng giá trị sau khi đã chọn ở bảng 1, e cảm ơn bác. e đã sửa lại đẻ gửi các bác, với bản này bác cứ làm sao cho cột 2 <5% như bác nói là đc ạ. cảm ơn lần nữa

@ solomon2211: e ko bit VBA bác ạ, hic nhờ các các
 

File đính kèm

Đơn giản vầy thôi:
Tăng bao nhiêu lần cũng nhằm mục đích đạt mức tổn thất < 5% thì ngưng, vậy tại sao không lấy ngay 1 mức mà tổn hao lớn nhất mà nhỏ hơn 5%? Mà phải tăng từng lần cho khốn khổ.
Bảng 1 cho thêm 1 cột tổn hao lý thuyết cho từng cỡ dây, sẽ thấy ngay mức tổn hao giảm dần, tìm mức nhỏ hơn 5% đầu tiên, là 4,48%, tương ứng tiết diện dây là 22 mm²

Vậy công thức cho cột tiết diện thay thế là:

=IF(I3>5%; 22; G3)

hoặc đơn giản hơn: = MAX(G3;22)

huhu e xin lỗi bác(tại e làm bác hiểu nhầm), cái hàm ở cột tổn thất ấy nó ko chỉ phụ thuộc vào mỗi tiết diện mà còn 1 vài biến nữa do đó nó không phải như bác làm ạ,trong file e up lên e lại wen mất cho nó là hằng số e xin phéo up lại (ờ bài trên file là nguyenkhoadung98 đấy ạ mong bác giúp đỡ.
 
về nội dung đúng là thế bác ạ,nhưng mà cái hàm của cột 2 ấy là 1 hàm với các giá trị ở các cột khác (ở bản e gửi kia e cứ lấy đại 1 hàm để cho các bác dễ hiểu, ko ngờ lại gây hiểu lầm thành thật xin lỗi các bác) và mà e muốn là giá trị sau khi tính của cột 2 (đã nhỏ hơn 5%) sẽ được viết luôn thay thế giá trị cũ (>5%) và cột tiết diện dây (cột 1) cũng được thay thế bằng giá trị sau khi đã chọn ở bảng 1, e cảm ơn bác. e đã sửa lại đẻ gửi các bác, với bản này bác cứ làm sao cho cột 2 <5% như bác nói là đc ạ. cảm ơn lần nữa

@ solomon2211: e ko bit VBA bác ạ, hic nhờ các các
Xem thử xem nhé. Những dòng lỗi là những dòng không có tiết diện dây nào thỏa điều kiện tổn thất điện áp <=5%.
 

File đính kèm

Lúc đầu định viết ngay hàm mảng người dùng, nhưng chưa thể nuốt nổi, Bạn xài tạm mảco

Hướng dẫn sử dùng:
(*) Đã gán tổ hợp fím cho macro, đó là {CTRL}+{SHIFT}+T
(*) Để hiện 4 kết quả của dòng bất kỳ nào, ta chọn ô của dòng đó trên cột 'F' (trrang tính 'S0' ) & bấm tổ hợp fím nêu trên
(Xem thêm trong file đính kèm)
(*) Nếu muốn viết hàm người dùng thì chờ thêm. . . (không biết bao lâu mới xong)

PHP:
Option Explicit:           Option Base 1
Sub TonThat()
 Dim BangTra As Range, Clls As Range, aRng As Range
 Const HSTai As Double = 1 / 0.38 / 0.8 / 1.73
 Const HSTonThat As Double = 1.73 * 0.01 / 380
 Dim TonHao As Double
 
 Set aRng = Selection
 Set BangTra = Range("A3:B33")
 For Each Clls In BangTra.Cells(1, 1).Resize(BangTra.Rows.Count)
 
   TonHao = HSTonThat * Clls.Offset(, 1).Value * aRng.Offset(, -1).Value _
      * aRng.Offset(, -2).Value * HSTai
   If TonHao < 0.05 Then
      With aRng
         .Value = Clls.Value:                   .Offset(, 2).Value = TonHao
         .Offset(, 1) = aRng.Offset(, -2).Value * HSTai
         .Offset(, 3) = Clls.Offset(, 1):       Exit For
      End With
   End If
 Next Clls
End Sub
 

File đính kèm

Và đây là hàm mảng người dùng:

PHP:
Option Explicit:           Option Base 1
Function TonThatDien(BangTra As Range, Tai As Long, ChieuDai As Long)
 ReDim MDL(1, 4)
 Dim eRw As Long, jJ As Long
 Const HSTai As Double = 1 / 0.38 / 0.8
 Const HSTonThat As Double = 0.01 / 380
 
 eRw = BangTra.Rows.Count
 For jJ = 1 To eRw
   MDL(1, 3) = HSTonThat * BangTra.Cells(jJ, 2).Value * ChieuDai * Tai * HSTai
   If MDL(1, 3) < 0.05 Then
      MDL(1, 1) = BangTra.Cells(jJ, 1):         MDL(1, 2) = Tai * HSTai / 1.73
      MDL(1, 4) = BangTra.Cells(jJ, 2):         Exit For
   End If
 Next jJ
 TonThatDien = MDL
End Function

Hướng dẫn sử dụng trước khi xài:


(Theo trang tính của 'S0' của bài trên liền kề)

(+) Chép hàm vô cửa sổ VBE;

(+) Để hàm cho ta kết quả tại 'F14:I14' ta dùng chuột tô chọn vùng này (kích hoạt);

(+) Bấm chuột lên thanh công thức & nhập cú pháp hàm như sau:

=TonThatDien(BangTra,D14,E14)

(BangTra là tên chúng ta đã gán trước cho vùng 'A3:B35')

(+) Kết thúc bằng tổ hợp 3 fím xài cho hàm mảng.

Chúc thành công!

 
Cái cú pháp này hơi kỳ kỳ :-=
Sao, Có gì chưa ổn ư?!?

Bạn nêu rõ tí xem sao!

(Nhớ là tại trang tính 'S0' mà mình đã đề nghị đó nha)

Chúc vui!

(SPAM chút, xin MOD/SMOD nhập vô bài của HuuThang_BD giúp. & Cảm ơn nhiều)

600.
 
Sao, Có gì chưa ổn ư?!?

Bạn nêu rõ tí xem sao!

(Nhớ là tại trang tính 'S0' mà mình đã đề nghị đó nha)

Chúc vui!

(SPAM chút, xin MOD/SMOD nhập vô bài của HuuThang_BD giúp. & Cảm ơn nhiều)

600.
À. Thì ra là cú pháp cho trang tính đó thôi. Tại vì trước giờ em cứ nghĩ cú pháp của công thức phải nói chung cho tất cả các trường hợp mà bác lại chỉ đinh một địa chỉ cụ thể nên thấy là lạ :-=
 
Xem thử xem nhé. Những dòng lỗi là những dòng không có tiết diện dây nào thỏa điều kiện tổn thất điện áp <=5%.

e cảm ơn bác, e cứ tưởng là bác viết bằng hàm excel bình thường thì e có thể về để áp dụng vào bảng tính của e ạ, nhưng mà bác viết bằng VBA làm e mù tịt chả biết biến đổi thế nào cho nó vào bảng của e ( e thử mãi mà nó ko được) e post luôn cái bảng nguyên gốc của e để nhờ bác ạ, xin lỗi bác vì đã phiền bác nhiều, ở file này 2 cột e bôi màu vàng tương ứng với 2 cột của bảng trước mà bác tính hộ e đấy ạ.
 

File đính kèm

e cảm ơn bác, e cứ tưởng là bác viết bằng hàm excel bình thường thì e có thể về để áp dụng vào bảng tính của e ạ, nhưng mà bác viết bằng VBA làm e mù tịt chả biết biến đổi thế nào cho nó vào bảng của e ( e thử mãi mà nó ko được) e post luôn cái bảng nguyên gốc của e để nhờ bác ạ, xin lỗi bác vì đã phiền bác nhiều, ở file này 2 cột e bôi màu vàng tương ứng với 2 cột của bảng trước mà bác tính hộ e đấy ạ.
Tôi dùng công thức chứ làm gì có VBA ở đây.
Đây là file của bạn đã được lập công thức.
 

File đính kèm

Web KT

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

Back
Top Bottom