Giúp chuyển công thức sau sang VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,192
Được thích
105
=IF(AND(($O8+$R8)=1.34,$F8="hanh chinh"),"A",IF(AND(($O8+$R8)=0.67,$F8="hanh chinh"),"B",IF(AND(($O8+$R8)=1.67,$F8="hanh chinh"),"B",IF(AND(($O8+$R8)=1.34,$F8="ca ngay"),"A",IF(AND(($O8+$R8)=0.67,$F8="ca ngay"),"B",IF(AND(($O8+$R8)=1.67,$F8="ca ngay"),"B",0))))))


Em muốn chuyển sang dạng case, cụ thể em đã làm như sau nhưng không thấy đúng
Tong1518 = Cells(i, 15).Value + Cells(i, 18).Value
Select Case Tong1518
Case Is = 1.34
If Cells(i, 6).Value = "Hanh chinh" Or Cells(i, 6).Value = "Ca ngay" Then
Cells(i, 28).Value = "A"
End If
Case Is = 0.67
If Cells(i, 6).Value = "Hanh chinh" Or Cells(i, 6).Value = "Ca ngay" Then
Cells(i, 28).Value = "B"
End If
Case Is = 1.67
If Cells(i, 6).Value = "Hanh chinh" Or Cells(i, 6).Value = "Ca ngay" Then
Cells(i, 28).Value = "B"
End If
Case Else: Cells(i, 28).Value = 0
End Select

Mong mọi người giải đáp giúp em.
 
=IF(AND(($O8+$R8)=1.34,$F8="hanh chinh"),"A",IF(AND(($O8+$R8)=0.67,$F8="hanh chinh"),"B",IF(AND(($O8+$R8)=1.67,$F8="hanh chinh"),"B",IF(AND(($O8+$R8)=1.34,$F8="ca ngay"),"A",IF(AND(($O8+$R8)=0.67,$F8="ca ngay"),"B",IF(AND(($O8+$R8)=1.67,$F8="ca ngay"),"B",0))))))


Em muốn chuyển sang dạng case, cụ thể em đã làm như sau nhưng không thấy đúng
Tong1518 = Cells(i, 15).Value + Cells(i, 18).Value
Select Case Tong1518
Case Is = 1.34
If Cells(i, 6).Value = "Hanh chinh" Or Cells(i, 6).Value = "Ca ngay" Then
Cells(i, 28).Value = "A"
End If
Case Is = 0.67
If Cells(i, 6).Value = "Hanh chinh" Or Cells(i, 6).Value = "Ca ngay" Then
Cells(i, 28).Value = "B"
End If
Case Is = 1.67
If Cells(i, 6).Value = "Hanh chinh" Or Cells(i, 6).Value = "Ca ngay" Then
Cells(i, 28).Value = "B"
End If
Case Else: Cells(i, 28).Value = 0
End Select

Mong mọi người giải đáp giúp em.

Bạn đưa cái file có công thức bạn muốn chuyển thành VBA lên đây.
Bạn nói code bạn không đúng, ai biết kết quả đúng là sao? Lấy cái gì để kiểm tra kết quả đúng hay sai.
 
Upvote 0
Bạn đưa cái file có công thức bạn muốn chuyển thành VBA lên đây.
Bạn nói code bạn không đúng, ai biết kết quả đúng là sao? Lấy cái gì để kiểm tra kết quả đúng hay sai.


Em Ví dụ những cái không thỏa mãn thì lệnh
Case Else: Cells(i, 28).Value = 0 sẽ chạy. Tuy nhiên có nhiều ô nó không thỏa mãn mà dòng nó trống trơn (chẳng có giá trị nào cả)
 

File đính kèm

Upvote 0
Em Ví dụ những cái không thỏa mãn thì lệnh
Case Else: Cells(i, 28).Value = 0 sẽ chạy. Tuy nhiên có nhiều ô nó không thỏa mãn mà dòng nó trống trơn (chẳng có giá trị nào cả)

Thua rồi!
Nhìn công thức ở bài #1, xem các cột trong file không biết là nó ở trong cột nào.
Trong file thì không thấy Sub hay Function nào để so sánh.
Bạn muốn làm gì, kết quả trong cột nào???
Oải quá.
 
Upvote 0
Em up lại file nhé. Anh xem giúp em. Và cho em hỏi thêm giả sử công thức sau tại cột có số thứ tự là 1
ROUND(IF(OR(F8="ca ngay",F8="hanh chinh",F8="ca1",F8="ca2")
Hiện tại em phải viết code liệt kê như sau
If Cells(i,6).value="ca ngay" or cells(i,6).value="hanh chinh" or....

Có cách nào để các giá trị cần so sánh như ca ngay, hanh chinh, ca1, ca2 mình sẽ đặt thành duy nhất một biến và khi đó viết công thức chỉ cần dùng cái biến đó thay cho việc phải viết dài dòng như trên không ạ?

Thêm nữa .value nếu em bỏ đi thì hàm vẫn chạy và có kết quả bình thường. Vậy tại sao ta vẫn phải viết .value???
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em up lại file nhé. Anh xem giúp em. Và cho em hỏi thêm giả sử công thức sau tại cột có số thứ tự là 1
ROUND(IF(OR(F8="ca ngay",F8="hanh chinh",F8="ca1",F8="ca2")
Hiện tại em phải viết code liệt kê như sau
If Cells(i,6).value="ca ngay" or cells(i,6).value="hanh chinh" or....

Có cách nào để các giá trị cần so sánh như ca ngay, hanh chinh, ca1, ca2 mình sẽ đặt thành duy nhất một biến và khi đó viết công thức chỉ cần dùng cái biến đó thay cho việc phải viết dài dòng như trên không ạ?

Thêm nữa .value nếu em bỏ đi thì hàm vẫn chạy và có kết quả bình thường. Vậy tại sao ta vẫn phải viết .value???
Công thức trong file thì bị lỗi vòng lặp. Cụ thể bạn muốn gì nêu rõ mong muốn ra. Nhìn file của bạn "sợ quá".
 
Upvote 0
Vâng cụ thể em muốn chuyển cái công thức trong ô 20 thành VBA.
Ngoài ra giải thích giúp em câu hỏi sau ạ:
Và cho em hỏi thêm giả sử công thức sau tại cột có số thứ tự là 1
ROUND(IF(OR(F8="ca ngay",F8="hanh chinh",F8="ca1",F8="ca2")
Hiện tại em phải viết code liệt kê như sau
If Cells(i,6).value="ca ngay" or cells(i,6).value="hanh chinh" or....

Có cách nào để các giá trị cần so sánh như ca ngay, hanh chinh, ca1, ca2 mình sẽ đặt thành duy nhất một biến và khi đó viết công thức chỉ cần dùng cái biến đó thay cho việc phải viết dài dòng như trên không ạ?

Thêm nữa .value nếu em bỏ đi thì hàm vẫn chạy và có kết quả bình thường. Vậy tại sao ta vẫn phải viết .value???
 
Upvote 0
Vâng cụ thể em muốn chuyển cái công thức trong ô 20 thành VBA.
Ngoài ra giải thích giúp em câu hỏi sau ạ:
Và cho em hỏi thêm giả sử công thức sau tại cột có số thứ tự là 1
ROUND(IF(OR(F8="ca ngay",F8="hanh chinh",F8="ca1",F8="ca2")
Hiện tại em phải viết code liệt kê như sau
If Cells(i,6).value="ca ngay" or cells(i,6).value="hanh chinh" or....

Có cách nào để các giá trị cần so sánh như ca ngay, hanh chinh, ca1, ca2 mình sẽ đặt thành duy nhất một biến và khi đó viết công thức chỉ cần dùng cái biến đó thay cho việc phải viết dài dòng như trên không ạ?

Thêm nữa .value nếu em bỏ đi thì hàm vẫn chạy và có kết quả bình thường. Vậy tại sao ta vẫn phải viết .value???

Bạn thử công thức này cho ô T6 rồi nói rõ kết quả có đúng không trước đã.
PHP:
=IF(OR(F6="Hanh chinh";F6="ca ngay");IF(OR(S6>=10;AND(S6=9,66;AB6="A");AND(S6=9,83;AB6="B"));0,5;0);0)
Công thức ở dòng 6 mà bạn lấy toàn ở dòng 8 là sao.
Chẳng chút gì là "kỹ lưỡng".
Khi biết chắc công thức là đúng thì mới hiểu được bạn muốn gì, rồi chuyển nó thành 1 Sub hay Function VBA.
Hoặc giải thích bằng lời: Nếu những điều kiện này thì thế này, những điều kiện này thì thế này, v.v.v...
Cố đọc công thức và code của bạn "hoa mắt" luôn.
 
Upvote 0
=IF(AND(($O8+$R8)=1.34,$F8="hanh chinh"),"A",IF(AND(($O8+$R8)=0.67,$F8="hanh chinh"),"B",IF(AND(($O8+$R8)=1.67,$F8="hanh chinh"),"B",IF(AND(($O8+$R8)=1.34,$F8="ca ngay"),"A",IF(AND(($O8+$R8)=0.67,$F8="ca ngay"),"B",IF(AND(($O8+$R8)=1.67,$F8="ca ngay"),"B",0))))))


Em muốn chuyển sang dạng case, cụ thể em đã làm như sau nhưng không thấy đúng
Tong1518 = Cells(i, 15).Value + Cells(i, 18).Value
Select Case Tong1518
Case Is = 1.34
If Cells(i, 6).Value = "Hanh chinh" Or Cells(i, 6).Value = "Ca ngay" Then
Cells(i, 28).Value = "A"
End If
Case Is = 0.67
If Cells(i, 6).Value = "Hanh chinh" Or Cells(i, 6).Value = "Ca ngay" Then
Cells(i, 28).Value = "B"
End If
Case Is = 1.67
If Cells(i, 6).Value = "Hanh chinh" Or Cells(i, 6).Value = "Ca ngay" Then
Cells(i, 28).Value = "B"
End If
Case Else: Cells(i, 28).Value = 0
End Select

Mong mọi người giải đáp giúp em.

Code trên từ căn bản đã sai 2 điểm:

1. IF nằm bên trong CASE không có nghĩa là giống như AND(...)
Theo cong thức, nếu lọt ra ngoài tất cả điều kiện thì kết quả là 0. Theo code nếu lọt ra ngoài thì kết quả không ghi.
Nếu muốn giống nhau, phải đặt dòng Cells(i, 28).Value = 0 trước khi xét mọi CASES

2. Tong1516 là kết quả của một con tính (toán cộng), đem so sanh với số có thập phân (1.34, 0.67) chưa chắc đã ra kết quả chính xác.
Cần đưa nó về dạng có thể cho sánh được. VD Application.Round(100*(Cells(i, 15).Value + Cells(i, 18).Value)), so sánh với 134
 
Upvote 0
Cảm ơn bạn nhiều đúng câu trà lời mình mong muốn. Cho mình hỏi thêm đối với công thức này
ROUND(IF(OR(F8="ca ngay",F8="hanh chinh",F8="ca1",F8="ca2")
Hiện tại em phải viết code liệt kê như sau
If Cells(i,6).value="ca ngay" or cells(i,6).value="hanh chinh" or....

Đưa công thức để dễ hình dung, có cách nào để mình không phải viết một hàm dài
If Cells(i,6).value="ca ngay" or cells(i,6).value="hanh chinh" or.... thay vào đó có kiểu khác thay cho gọn ví dụ như If Cells(i,6).value="Alll" với cái All bao gồm các giá trị Hanh chinh, ngay ngay, ca 1... không
 
Upvote 0
Cảm ơn bạn nhiều đúng câu trà lời mình mong muốn. Cho mình hỏi thêm đối với công thức này
ROUND(IF(OR(F8="ca ngay",F8="hanh chinh",F8="ca1",F8="ca2")
Hiện tại em phải viết code liệt kê như sau
If Cells(i,6).value="ca ngay" or cells(i,6).value="hanh chinh" or....

Đưa công thức để dễ hình dung, có cách nào để mình không phải viết một hàm dài
If Cells(i,6).value="ca ngay" or cells(i,6).value="hanh chinh" or.... thay vào đó có kiểu khác thay cho gọn ví dụ như If Cells(i,6).value="Alll" với cái All bao gồm các giá trị Hanh chinh, ngay ngay, ca 1... không

Bạn muốn trao đổi với ai thì bấm vào nút "Trả Lời Với Trích Dẫn" dưới bài viết của người đó.
Bạn viết kiểu đó chẳng biết bạn muốn nói với ai, câu trả lời nào là "đúng câu trả lời mình mong muốn"
 
Upvote 0
Code trên từ căn bản đã sai 2 điểm:

1. IF nằm bên trong CASE không có nghĩa là giống như AND(...)
Theo cong thức, nếu lọt ra ngoài tất cả điều kiện thì kết quả là 0. Theo code nếu lọt ra ngoài thì kết quả không ghi.
Nếu muốn giống nhau, phải đặt dòng Cells(i, 28).Value = 0 trước khi xét mọi CASES

2. Tong1516 là kết quả của một con tính (toán cộng), đem so sanh với số có thập phân (1.34, 0.67) chưa chắc đã ra kết quả chính xác.
Cần đưa nó về dạng có thể cho sánh được. VD Application.Round(100*(Cells(i, 15).Value + Cells(i, 18).Value)), so sánh với 134

Hậu đậu quá, kích vào trả lời có trích dẫn rồi mà không xem lại là kích nhầm
Cảm ơn bạn nhiều đúng câu trà lời mình mong muốn. Cho mình hỏi thêm đối với công thức này
ROUND(IF(OR(F8="ca ngay",F8="hanh chinh",F8="ca1",F8="ca2")
Hiện tại em phải viết code liệt kê như sau
If Cells(i,6).value="ca ngay" or cells(i,6).value="hanh chinh" or....

Đưa công thức để dễ hình dung, có cách nào để mình không phải viết một hàm dài
If Cells(i,6).value="ca ngay" or cells(i,6).value="hanh chinh" or.... thay vào đó có kiểu khác thay cho gọn ví dụ như If Cells(i,6).value="Alll" với cái All bao gồm các giá trị Hanh chinh, ngay ngay, ca 1... không

Cảm ơn anh Bate. Để em xây dựng lại một file mẫu rồi có gì xem giúp em nhé.
 
Upvote 0
select case Cstr(Cells(i, 6).Value)
case "ca ngay", "hanh chinh", "cai gi do"
case else
end select

hoặc là

If InStr("|ca ngay|hanh chinh|cai gi do|", "|" & Trim(Cells(i, 6).Value) & "|") Then ...
 
Upvote 0
Cho em hỏi thêm giả sử là ta có công thức sau
SUM(U24-X24-Y24-Z24)

Vậy khi viết trong VBA thì công thức như nào là nhanh nhất, hiện tại em chỉ viết được là = cells(..).value+cells(..).value...
 
Upvote 0
Cho em hỏi thêm giả sử là ta có công thức sau
SUM(U24-X24-Y24-Z24)

Vậy khi viết trong VBA thì công thức như nào là nhanh nhất, hiện tại em chỉ viết được là = cells(..).value+cells(..).value...

nếu thế này thì công thức trong excel là

=U24-X24-Y24-Z24

Và với VBA, nếu đang ở sheet hiện tại luôn, thì cần như thế này

tong=[U24]-[X24]-[Y24]-[Z24]

tong là biến chứa giá trị
 
Upvote 0
nếu thế này thì công thức trong excel là

=U24-X24-Y24-Z24

Và với VBA, nếu đang ở sheet hiện tại luôn, thì cần như thế này

tong=[U24]-[X24]-[Y24]-[Z24]

tong là biến chứa giá trị

Thế nếu U24 có thể thay đổi thành 25 26 thì sao. Hay nói cách khác xét i từ 8 đến 10 vậy cái công thức kia sẽ phải viết thế nào. Tong =[Ui-Xi... thì không thể rồi
 
Upvote 0
Set cll = Range("U24")
Tong = Application.Sum(cll, cll.Offset(0,3).Resize(1,3))
Nếu là toán trừ thì Application.Sum(cll, -Application.Sum(cll.Offset(0,3).Resize(1,3)))
 
Upvote 0
Set cll = Range("U24")
Tong = Application.Sum(cll, cll.Offset(0,3).Resize(1,3))
Nếu là toán trừ thì Application.Sum(cll, -Application.Sum(cll.Offset(0,3).Resize(1,3)))

Công thức này vẫn chưa với tới được, chắc phải ngâm cứu thêm :(. Cảm ơn bạn nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom