votinh3290
Thành viên mới

- Tham gia
- 1/4/12
- Bài viết
- 8
- Được thích
- 2
- Nghề nghiệp
- Vô công rồi nghề
Chào các anh chị! Xin các anh chị giúp đỡ em về macro với nội dung và mục đích của macro như sau:
- Em có mộ file excel trong đó gồm có các mã định mức, trong mỗi mã định mức có các thành phần là Vật Liệu, Nhân Công và máy,...., trong mỗi thành phần này lại có nhiều thành phần nhỏ khác (được thể hiện ở cột Thành Phần Hao Phí) và được tính đơn giá cho từng thành phần nhỏ này (được thể hiện ở cột Thành Tiền), Sau đó các đơn giá nhỏ này được cộng lại ở các thành phần lớn hơn (Vật Liệu, Nhân Công, Máy). Mục đích của em là muốn ở ô Thành tiền của dòng có nội dung là "*Tổng Chi Phí Trực Tiếp" sẽ là tổng của ba ô thành tiền của các dòng "Vật Liệu, Nhân công, Máy". Em đã viết được code cho công việc trên như sau:
Sub congloc()
For i = 1 To 50000
If (Selection.Value = Range("c21").Value) Then
Selection.Select
Exit For
Else
Selection.Offset(-1).Select
End If
Next
Dim a As Range
Set a = Range(Range(Selection, Rows(ActiveCell.Row)), Range(Selection, Rows(ActiveCell.Row)).End(xlUp))
Dim b As Range
Set b = a.Cells(a.Cells.Count)
Dim f As Range
Dim c As Range
Dim d As Range
Dim e As Range
Set c = a.Find(What:=Range("c39").Value, After:=b, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Offset(0, 4)
Set d = a.Find(What:=Range("c90").Value, After:=b, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Offset(0, 4)
Set e = a.Find(What:=Range("c79").Value, After:=b, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Offset(0, 4)
Set f = a.Find(What:=Range("c70").Value, After:=b, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Offset(0, 4)
f.Select
With Selection
.Formula = "=" & c.Address(0, 0) & "+" & d.Address(0, 0) & "+" & e.Address(0, 0)
End With
Selection.Offset(-1, -4).Select
End Sub
Tuy nhiên Code trên của em chỉ làm việc tốt khi mã hiệu định mức có đầy đủ 3 thành phần là Vật Liệu, Nhân Công, Máy. Với những mã hiệu thiếu một trong ba hoặc hai trong ba thành phần thì code báo lỗi. Mục đích của em là muốn tại những mã hiệu định mức có đủ cả ba thành phần vật liệu, nhân công, máy thì sẽ cộng cả 3 thành phần tại dòng Tổng chi phí trực tiếp, còn tại những mã hiệu định mức nào thiếu thành phần thì sẽ bỏ thành phần đó ở dòng tổng chi phí trực tiếp (ví dụ: nếu tại mã hiệu định mức chỉ có hai thành phần là Nhân công và máy thì sẽ cộng hai thành phần này, bỏ thành phần là vật liệu, nếu mã hiệu định mức chỉ có Nhân công thì chỉ lấy thành phần này).
File excel ở tệp đính kèm!
Tiện đây em cũng muốn hỏi là phương thức find trong VBA để tìm dữ liệu trong một vùng xác định. Nếu kết quả là không dò tìm được dữ liệu trong vùng đó thì phương thức find sẽ báo lỗi. Có cách nào để phương thức find báo về kết quả là "không tìm được dữ liệu yêu cầu"
Mong các anh chị giúp em!!! Cảm ơn các anh chị nhiều
- Em có mộ file excel trong đó gồm có các mã định mức, trong mỗi mã định mức có các thành phần là Vật Liệu, Nhân Công và máy,...., trong mỗi thành phần này lại có nhiều thành phần nhỏ khác (được thể hiện ở cột Thành Phần Hao Phí) và được tính đơn giá cho từng thành phần nhỏ này (được thể hiện ở cột Thành Tiền), Sau đó các đơn giá nhỏ này được cộng lại ở các thành phần lớn hơn (Vật Liệu, Nhân Công, Máy). Mục đích của em là muốn ở ô Thành tiền của dòng có nội dung là "*Tổng Chi Phí Trực Tiếp" sẽ là tổng của ba ô thành tiền của các dòng "Vật Liệu, Nhân công, Máy". Em đã viết được code cho công việc trên như sau:
Sub congloc()
For i = 1 To 50000
If (Selection.Value = Range("c21").Value) Then
Selection.Select
Exit For
Else
Selection.Offset(-1).Select
End If
Next
Dim a As Range
Set a = Range(Range(Selection, Rows(ActiveCell.Row)), Range(Selection, Rows(ActiveCell.Row)).End(xlUp))
Dim b As Range
Set b = a.Cells(a.Cells.Count)
Dim f As Range
Dim c As Range
Dim d As Range
Dim e As Range
Set c = a.Find(What:=Range("c39").Value, After:=b, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Offset(0, 4)
Set d = a.Find(What:=Range("c90").Value, After:=b, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Offset(0, 4)
Set e = a.Find(What:=Range("c79").Value, After:=b, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Offset(0, 4)
Set f = a.Find(What:=Range("c70").Value, After:=b, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Offset(0, 4)
f.Select
With Selection
.Formula = "=" & c.Address(0, 0) & "+" & d.Address(0, 0) & "+" & e.Address(0, 0)
End With
Selection.Offset(-1, -4).Select
End Sub
Tuy nhiên Code trên của em chỉ làm việc tốt khi mã hiệu định mức có đầy đủ 3 thành phần là Vật Liệu, Nhân Công, Máy. Với những mã hiệu thiếu một trong ba hoặc hai trong ba thành phần thì code báo lỗi. Mục đích của em là muốn tại những mã hiệu định mức có đủ cả ba thành phần vật liệu, nhân công, máy thì sẽ cộng cả 3 thành phần tại dòng Tổng chi phí trực tiếp, còn tại những mã hiệu định mức nào thiếu thành phần thì sẽ bỏ thành phần đó ở dòng tổng chi phí trực tiếp (ví dụ: nếu tại mã hiệu định mức chỉ có hai thành phần là Nhân công và máy thì sẽ cộng hai thành phần này, bỏ thành phần là vật liệu, nếu mã hiệu định mức chỉ có Nhân công thì chỉ lấy thành phần này).
File excel ở tệp đính kèm!
Tiện đây em cũng muốn hỏi là phương thức find trong VBA để tìm dữ liệu trong một vùng xác định. Nếu kết quả là không dò tìm được dữ liệu trong vùng đó thì phương thức find sẽ báo lỗi. Có cách nào để phương thức find báo về kết quả là "không tìm được dữ liệu yêu cầu"
Mong các anh chị giúp em!!! Cảm ơn các anh chị nhiều

