Nhờ giúp em viết code VBA tính cột thành tiền và link đơn giá (1 người xem)

Liên hệ QC

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

sondaubac

Thành viên hoạt động
Tham gia
14/10/08
Bài viết
168
Được thích
30
Nhờ các thầy, các anh trên GPE giúp em viết 1 đoạn code VBA để link công thức như sau:

Em đã tính toán ra kết quả, nhưng cứ ngồi link bằng tay thấy bất tiện quá, mong mọi người viết dùm em 1 đoạn CODE để tính các nội dung sau:

1/ Tính cột thành tiền dựa vào:
Định mức * Đơn giá
Riêng vật liệu khác và máy khác thì tính bằng % của thành tiền các loại vật liệu ở trên

2/ Link kết quả của đơn giá từng hạng mục

Em xin chân thành cảm ơn!
 

File đính kèm

Lần chỉnh sửa cuối:
À quên cái % vật liệu khác liên quan đến mã hiệu dự toán :D
Mình đã update file excel cụ thể rồi đó bạn. Bạn có cách nào viết CODE ra cột thành tiền để mình đỡ mất công link bằng tay không?
1/ Vướng nhất là do cái thằng vật liệu khác với máy khác ở đâu chọc vô đó.
2/ Tính xong lại phải tính tổng tiền của Vật liệu riêng, nhân công riêng và MÁY riêng. Mình toàn làm tay chán quá rồi, muốn giành thời gian cho gia đình nhiều hơn :(
 
Upvote 0
Mình đã update file excel cụ thể rồi đó bạn. Bạn có cách nào viết CODE ra cột thành tiền để mình đỡ mất công link bằng tay không?
1/ Vướng nhất là do cái thằng vật liệu khác với máy khác ở đâu chọc vô đó.
2/ Tính xong lại phải tính tổng tiền của Vật liệu riêng, nhân công riêng và MÁY riêng. Mình toàn làm tay chán quá rồi, muốn giành thời gian cho gia đình nhiều hơn :(
Bạn chịu khó chờ thêm nhé. Mới đây ai viết code kịp cho bạn đâu, phải suy nghĩ nữa chứ. Bạn PacificPR hỏi là cũng đang tìm cách viết code giúp bạn đó. Thân chào bạn!
 
Upvote 0
Bạn diễn tả mục đích của cái file đi, đọc vô nhứt mắt quá.
 
Upvote 0
Mình đã update file excel cụ thể rồi đó bạn. Bạn có cách nào viết CODE ra cột thành tiền để mình đỡ mất công link bằng tay không?
1/ Vướng nhất là do cái thằng vật liệu khác với máy khác ở đâu chọc vô đó.
2/ Tính xong lại phải tính tổng tiền của Vật liệu riêng, nhân công riêng và MÁY riêng. Mình toàn làm tay chán quá rồi, muốn giành thời gian cho gia đình nhiều hơn :(
Bạn xem thử file xem có đúng không nha
 

File đính kèm

Upvote 0
Bạn xem thử file xem có đúng không nha
Bạn hiểu ý của mình rồi tuy nhiên khi mình thực hiện phép tính toán khác bằng cách thay đổi đầu mục công việc thì chưa xử lý được chỗ này:
1/ Khi nhiều đầu mục công việc và mỗi đầu mục công việc nó lại thay đổi thì bị sai ở phần tổng cộng thành tiền VẬT LIỆU, NHÂN CÔNG, MÁY THI CÔNG
2/ Cột thành tiền ở mục VẬT LIỆU KHÁC chưa xử lý được mà nó vẫn đem định mức nhân đơn giá để ra thành tiền (dù cột đơn giá không có thì nó vẫn tính ra theo số ở cột định mức)
Cụ thể khi mình thay đổi thế này thì CODE không còn đúng nữa
 

File đính kèm

Upvote 0
Bạn diễn tả mục đích của cái file đi, đọc vô nhứt mắt quá.
Mục đích của mình là tính thành tiền của hạng mục công việc, 1 công việc thì bao gồm các loại chi phí VẬT LIỆU, NHÂN CÔNG, MÁY THI CÔNG. Trong đó:
1/ Chi phí VẬT LIỆU: bao gồm CHI PHÍ CHO CÁC LOẠI VẬT LIỆU và VẬT LIỆU KHÁC (cột thành tiền tính bằng % của thành tiền các loại vật liệu chính). Sau đó tính thành tiền tổng cộng phần VẬT LIỆU
2/ Chi phí NHÂN CÔNG thì gồm các loại nhân công và cũng tính tổng thành tiền các loại nhân công đó. Sau đó tính thành tiền tổng cộng phần NHÂN CÔNG
3/ Chi phí MÁY THI CÔNG: bao gồm CHI PHÍ CHO CÁC LOẠI MÁY dùng để thi công và MÁY KHÁC (cột thành tiền tính bằng % của thành tiền các loại MÁY chính). Sau đó tính thành tiền tổng cộng phần MÁY THI CÔNG
4/ Sau khi tính toán được hết các chi phí trên thì tính TỔNG THÀNH TIỀN của hạng mục công việc đó.
5/ Tính tổng THÀNH TIỀN của toàn bộ CÔNG TRÌNH (chỉ bao gồm các chi phí VẬT LIỆU, NHÂN CÔNG, MÁY THI CÔNG)
 
Upvote 0
Bạn hiểu ý của mình rồi tuy nhiên khi mình thực hiện phép tính toán khác bằng cách thay đổi đầu mục công việc thì chưa xử lý được chỗ này:
1/ Khi nhiều đầu mục công việc và mỗi đầu mục công việc nó lại thay đổi thì bị sai ở phần tổng cộng thành tiền VẬT LIỆU, NHÂN CÔNG, MÁY THI CÔNG
2/ Cột thành tiền ở mục VẬT LIỆU KHÁC chưa xử lý được mà nó vẫn đem định mức nhân đơn giá để ra thành tiền (dù cột đơn giá không có thì nó vẫn tính ra theo số ở cột định mức)
Cụ thể khi mình thay đổi thế này thì CODE không còn đúng nữa
Bạn kiểm tra lại xem có sai gì nữa không
 

File đính kèm

Upvote 0
Nhờ các thầy, các anh trên GPE giúp em viết 1 đoạn code VBA để link công thức như sau:

Em đã tính toán ra kết quả, nhưng cứ ngồi link bằng tay thấy bất tiện quá, mong mọi người viết dùm em 1 đoạn CODE để tính các nội dung sau:

1/ Tính cột thành tiền dựa vào:
Định mức * Đơn giá
Riêng vật liệu khác và máy khác thì tính bằng % của thành tiền các loại vật liệu ở trên

2/ Link kết quả của đơn giá từng hạng mục

Em xin chân thành cảm ơn!
Em xem thử được chưa?
 

File đính kèm

Upvote 0
Vậy bạn sửa lỗi cho hoàn thiện File luôn đi bạn thân mến. :D
Cái ấy thì Record Macro lấy công thức thay cái cũ đi là xong bạn à
Mã:
.
........................................ o O o .........................................
 If sArr(I, 1) = Empty And sArr(I, 4) <> Empty Then dArr(K, 8) = "=IF(RC[-2]<>"""",PRODUCT(RC[-3]:RC[-1]),"""")"
......................................... o O o .........................................
 
Upvote 0
Cái ấy thì Record Macro lấy công thức thay cái cũ đi là xong bạn à
Mã:
.
........................................ o O o .........................................
 If sArr(I, 1) = Empty And sArr(I, 4) <> Empty Then dArr(K, 8) = "=IF(RC[-2]<>"""",PRODUCT(RC[-3]:RC[-1]),"""")"
......................................... o O o .........................................
Code hay công thức mình cũng đều "dốt đặc cán mai" lắm bạn. Hi. Sao chép câu nói của thành viên trên diễn đàn mà giờ không nhớ tên. :p
 
Upvote 0
Cái ấy thì Record Macro lấy công thức thay cái cũ đi là xong bạn à
Mã:
.
........................................ o O o .........................................
 If sArr(I, 1) = Empty And sArr(I, 4) <> Empty Then dArr(K, 8) = "=IF(RC[-2]<>"""",PRODUCT(RC[-3]:RC[-1]),"""")"
......................................... o O o .........................................
Giờ mới rảnh để xem lại bài viết của bạn đây! Mình rất cảm ơn sự nhiệt tình của bạn. Có vướng mắc trong CODE mình sẽ hỏi bạn thêm nhé. Bạn có thể diễn giải cách bạn thực hiện trong CODE để mình rõ hơn được không? Vì mình thấy có tới 02 Module
1/ Module 1: Gồm 3 thủ tục TÌM ĐƠN GIÁ, TÍNH TIỀN và LẤY DỰ TOÁN
2/ Module 2: Là 1 thủ tục MACRO để xác định ô hoạt động
Mình còn gà mờ về VBA quá nên rất mong được sự hướng dẫn của bạn
Phần đơn giá là nó sẽ tự link từ sheet Giá sang, mình muốn đổi cho nó thành hàm index thì có thể sửa trong CODE được không?
Còn nữa:
3/ Nếu mình chèn dòng hoặc delete dòng thì CODE còn đúng nữa hay không? :(
4/ khi LINK đơn giá của từng hạng mục sang sheet DỰ TOÁN thì có thể tạo cho nó thành LINK được không bạn?
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn bấm F8 duyệt qua các dòng lệnh xem nó hoạt động thế nào. Đây là cách của mình học VBA đấy bạn
À em quên câu hỏi thư 2.
+ Nếu dùng hàm trong dư toàn thì coi như là mình làm thủ công rồi
+ Vì cái link cell nên code em làm hơi dài. Nếu lấy Value thì code ngắn lại 1 khúc và dễ làm hơn :D
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn bấm F8 duyệt qua các dòng lệnh xem nó hoạt động thế nào. Đây là cách của mình học VBA đấy bạn
À em quên câu hỏi thư 2.
+ Nếu dùng hàm trong dư toàn thì coi như là mình làm thủ công rồi
+ Vì cái link cell nên code em làm hơi dài. Nếu lấy Value thì code ngắn lại 1 khúc và dễ làm hơn :D
Có thể xem qua File này giúp mình với được không bạn?
 

File đính kèm

Upvote 0
Noá bị làm sao vậy. Sáng mai mình xem thử. Bây giờ đang dùng đt chỉ tán gẫu
được thôi ...:D
Ví dụ như bây giờ mình tạo sẵn 1 cơ sở dữ liệu căn cứ vào các mã hiệu và cứ thế là nhập mã hiệu vào cột mã hiệu là nó sẽ tự chạy ra số thứ tự, tên hạng mục công việc, định mức có được không nhỉ.
Xem qua cái này giúp mình với nha bạn, bạn tốt quá.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Ví dụ như bây giờ mình tạo sẵn 1 cơ sở dữ liệu căn cứ vào các mã hiệu và cứ thế là nhập mã hiệu vào cột mã hiệu là nó sẽ tự chạy ra số thứ tự, tên hạng mục công việc, định mức có được không nhỉ.
Xem qua cái này giúp mình với nha bạn, bạn tốt quá.
Mình thấy anh @HieuCD đang xem bài rồi. Bạn sẽ có cách tối ưu cho bài toán này thôi.
 
Upvote 0
Bạn bấm F8 duyệt qua các dòng lệnh xem nó hoạt động thế nào. Đây là cách của mình học VBA đấy bạn
À em quên câu hỏi thư 2.
+ Nếu dùng hàm trong dư toàn thì coi như là mình làm thủ công rồi
+ Vì cái link cell nên code em làm hơi dài. Nếu lấy Value thì code ngắn lại 1 khúc và dễ làm hơn :D
Hi, nhờ bạn mình mới biết thêm được cái F8. Từ nào giờ di chuyển chuột để dò không à, mỏi mắt và tốn công sức nữa. Cám ơn bạn nhiều nghe.:p
 
Upvote 0
Đây là File mà mình muốn hoàn thành dựa vào những câu hỏi trước đó mà mình đã đặt ra.
1/ Từ bảng DATA có thể căn cứ vào cột MÃ SỐ để xuất kết quả sang Sheet PhantichVT trước rồi sau đó xuất kết quả sang sheet Dongia chitiet được không ? (File Hoi Code VBA 8)
2/ Có 1 file mẫu của đàn anh đi trước đã gửi cho mình tham khảo như mong muốn mà mình đã nói ở mục 1 nhưng không biết làm cách nào để tải lên cả.
 

File đính kèm

Upvote 0
Upvote 0
Mình thấy anh @HieuCD đang xem bài rồi. Bạn sẽ có cách tối ưu cho bài toán này thôi.
Mình cảm ơn bạn đã hỗ trợ giúp đỡ mình nhé!

Bạn có thể chỉ cho mình biết tại sao trong quá trình lập VBA bạn tạo ra 2 Module :

Module 1: Gồm 3 thủ tục Tìm Đơn Giá, Tính Tiền, Lấy Dự toán

Module 2: Gồm 1 Macro (Cái này để làm gì vậy?)

Và bạn đã làm cách nào để tổng hợp 2 Module được và chạy đồng loạt được vậy. Mình hỏi nhiều quá bạn thông cảm cho mình nhé
 
Upvote 0
Mình cảm ơn bạn đã hỗ trợ giúp đỡ mình nhé!

Bạn có thể chỉ cho mình biết tại sao trong quá trình lập VBA bạn tạo ra 2 Module :

Module 1: Gồm 3 thủ tục Tìm Đơn Giá, Tính Tiền, Lấy Dự toán

Module 2: Gồm 1 Macro (Cái này để làm gì vậy?)

Và bạn đã làm cách nào để tổng hợp 2 Module được và chạy đồng loạt được vậy. Mình hỏi nhiều quá bạn thông cảm cho mình nhé
Bạn xem cái file này thử xem
Cách thực hiện:
*) Cập nhật đơn giá: Tại Sheets("1. Gia") nhập đơn giá thực tế xong ---> Click nút Cập nhật đơn giá
*) Nhập mã hiệu tại sheets("3. Du toan ")
- Click vào cột B hiện Form chọn mã hiệu
- Nhập khối lượng
----------- Xong -----------------
 

File đính kèm

Upvote 0
Bạn xem cái file này thử xem
Cách thực hiện:
*) Cập nhật đơn giá: Tại Sheets("1. Gia") nhập đơn giá thực tế xong ---> Click nút Cập nhật đơn giá
*) Nhập mã hiệu tại sheets("3. Du toan ")
- Click vào cột B hiện Form chọn mã hiệu
- Nhập khối lượng
----------- Xong -----------------
Bạn ơi, lúc click vào cột B bên dự toán để chọn mã hiệu thì nó báo là Run time Error '1004':
 
Upvote 0
Về cơ bản thì chỉ cần thay đổi dữ liệu trong Sheet DATA và đơn giá thì sẽ chạy được đúng không bạn. Mình thì bị lỗi này. Hay là do Excel của mình chỉ là 2010 nên bị lỗi nhỉ.
Nó báo là "Unable to set the LineStyle property of the Borders class".
 

File đính kèm

  • error.jpg
    error.jpg
    114.3 KB · Đọc: 12
Lần chỉnh sửa cuối:
Upvote 0
Đây là tổng thể mong muốn của mình

1/ Bước 1: Tạo 1 số hạng mục công việc với định mức sẵn có ở sheet DATA

2/ Bước 2: Vào sheet KHỐI LƯỢNG nhập mã hiệu để nhập dữ liệu đầu vào gồm: mã hiệu, tên hạng mục, ĐVT và Khối lượng

3/ Bước 3: Làm việc với Sheet PHÂN TÍCH VẬT TƯ để đưa dữ liệu của từng hạng mục công việc từ DATA sang. Bên PHÂN TÍCH VẬT TƯ thì chỉ cần thể hiện định mức và khối lượng hao phí cho toàn công trình (không tính cho vật liệu khác và máy khác), không cần thể hiện đơn giá và thành tiền.

4/ Bước 4: Căn cứ vào phân tích vật tư để tính toán công trình gồm bao nhiêu loại vật tư và Cập nhật đơn giá thực tế và tự link số liệu vào ĐƠN GIÁ CHI TIẾT

5/ Bước 5: Qua sheet DỰ TOÁN xuất kết quả đơn giá và thành tiền cho toàn bộ công trình

Rất mong nhận được sự hỗ trợ của các thầy và các bạn. Cảm ơn mọi người đã quan tâm giúp đỡ!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đây là tổng thể mong muốn của mình

1/ Bước 1: Tạo 1 số hạng mục công việc với định mức sẵn có ở sheet DATA

2/ Bước 2: Vào sheet KHỐI LƯỢNG nhập mã hiệu để nhập dữ liệu đầu vào gồm: mã hiệu, tên hạng mục, ĐVT và Khối lượng

3/ Bước 3: Làm việc với Sheet PHÂN TÍCH VẬT TƯ để đưa dữ liệu của từng hạng mục công việc từ DATA sang. Bên PHÂN TÍCH VẬT TƯ thì chỉ cần thể hiện định mức và khối lượng hao phí cho toàn công trình (không tính cho vật liệu khác và máy khác), không cần thể hiện đơn giá và thành tiền.

4/ Bước 4: Căn cứ vào phân tích vật tư để tính toán công trình gồm bao nhiêu loại vật tư và Cập nhật đơn giá thực tế và tự link số liệu vào ĐƠN GIÁ CHI TIẾT

5/ Bước 5: Qua sheet DỰ TOÁN xuất kết quả đơn giá và thành tiền cho toàn bộ công trình

Rất mong nhận được sự hỗ trợ của các thầy và các bạn. Cảm ơn mọi người đã quan tâm giúp đỡ!
Quan trọng là Bác muốn làm gì vậy. Tách vật tư cho công trình hay làm gì ... Bác nói ở trên em không hiểu
 
Upvote 0
Quan trọng là Bác muốn làm gì vậy. Tách vật tư cho công trình hay làm gì ... Bác nói ở trên em không hiểu
Là lập 1 dự toán đơn giản, căn cứ vào dữ liệu đầu vào ở Sheet DATA.
1/ Bước đầu tiên là mình sẽ lập trong DATA bao nhiêu hạng mục công việc
2/ Sau đó sang sheet KHỐI LƯỢNG nhập mã hiệu để nhập dữ liệu đầu vào của công trình lựa chọn : mã hiệu, tên hạng mục, ĐVT và Khối lượng từ sheet DATA
3/ Bước 3: PHÂN TÍCH VẬT TƯ
4/ Tổng hợp vật tư (Bổ sung thêm bước này)
5/ Tính Đơn giá chi tiết của từng hạng mục công việc của toàn công trình
6/ Xuất kết quả sheet DỰ TOÁN
 
Upvote 0
Là lập 1 dự toán đơn giản, căn cứ vào dữ liệu đầu vào ở Sheet DATA.
1/ Bước đầu tiên là mình sẽ lập trong DATA bao nhiêu hạng mục công việc
2/ Sau đó sang sheet KHỐI LƯỢNG nhập mã hiệu để nhập dữ liệu đầu vào của công trình lựa chọn : mã hiệu, tên hạng mục, ĐVT và Khối lượng từ sheet DATA
3/ Bước 3: PHÂN TÍCH VẬT TƯ
4/ Tổng hợp vật tư (Bổ sung thêm bước này)
5/ Tính Đơn giá chi tiết của từng hạng m
Vậy thì dùng phần mềm Dự toán cho nó nhanh. Lập lại làm gì cho nó đau đầu ra Bác.
 
Upvote 0
Không, phần mềm dự toán mình có rồi, tuy nhiên khi chưa đáp ứng được yêu cầu của mình. Nên toàn phải copy ra và làm thủ công những việc đó đó bạn. Bởi vì các hạng mục của mình là phải tự lập ra, không theo định mức của nhà nước mà
 
Upvote 0
Không, phần mềm dự toán mình có rồi, tuy nhiên khi chưa đáp ứng được yêu cầu của mình. Nên toàn phải copy ra và làm thủ công những việc đó đó bạn. Bởi vì các hạng mục của mình là phải tự lập ra, không theo định mức của nhà nước mà
Vậy à. Để khi nào em rảnh thử xem. Em mấy lần mò mày cái này nhưng nhức đầu quá nên thôi :D
 
Upvote 0
Vậy à. Để khi nào em rảnh thử xem. Em mấy lần mò mày cái này nhưng nhức đầu quá nên thôi :D
Vậy làm từng bước được không PacificPR, vừa làm vừa hướng dẫn mình cách viết CODE với. Còn yêu cầu về cách làm thì mình nắm rõ.
Mình sẽ lập từng bước, bắt đầu từ Bước số 1
Bước 1: là tạo định mức trong DATA (Có thể thay đổi nội dung bằng cách chèn thêm dòng), cái này coi như mình đã tạo ra rồi. Có lẽ phải chèn thêm dòng để tính riêng 2 loại mã hiệu.
1/ Một là: Mã hiệu công việc
2/ Hai là: Mã hiệu vật tư (gồm mã của Vật tư, Nhân Công, Máy)
Sau đó tạo 1 Form nhập dữ liệu đầu vào ở Sheet KHỐI LƯỢNG để lấy mã hiệu, đơn vị và nhập khối lượng.
 
Upvote 0
Bước 1: Làm theo mẫu này nha bạn. Tạo 1 Form để nhập dữ liệu đầu vào bằng cách:

1/ chọn mã hiệu để tự hiện ra STT, tên hạng mục, ĐVT (DATA List lấy ở sheet DATA)
2/ Rồi nhập vào cột E: Khối lượng của hạng mục công việc đó
(Mình mới update để rõ hơn)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình chỉnh sửa lại File rồi, Nhờ Pacific giúp đỡ viết dùm mình 1 đoạn CODE nhỏ link chỗ này với
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình chỉnh sửa lại File rồi, Nhờ Pacific giúp đỡ viết dùm mình 1 đoạn CODE nhỏ link chỗ này với
Bác chạy thử Code này xem
PHP:
Sub Dongia_VL_NC_MTC()
    Dim sArr, dArr(), I As Long, Ihm As Long, Er As Long
    Dim VL As String, NC As String, MTC As String, Ivl As Long, Inc As Long, Im As Long
With Sheets("DGCT")
    VL = .Range("K6"): NC = .Range("L6"): MTC = .Range("M6")
    sArr = .Range("A7:A" & .Range("C65535").End(3).Row).Resize(, 10).Value
    ReDim dArr(1 To UBound(sArr), 1 To 3)
    For I = 1 To UBound(sArr)
        If sArr(I, 2) = Empty Then
            If sArr(I, 4) = VL Then Ivl = I + 6
            If sArr(I, 4) = NC Then Inc = I + 6
            If sArr(I, 4) = MTC Then Im = I + 6
        End If
        If sArr(I, 2) <> Empty Then Ihm = I
        If Ivl Then
            dArr(Ihm, 1) = "=" & .Range("J" & Ivl).Address:            Ivl = 0
        End If
        If Inc Then
            dArr(Ihm, 2) = "=" & .Range("J" & Inc).Address:            Inc = 0
        End If
        If Im Then
            dArr(Ihm, 3) = "=" & .Range("J" & Im).Address:            Im = 0
        End If
    Next I
    Er = .Range("D65535").End(3).Row
    .Range("K7:M" & Er + 1).ClearContents
    .Range("K7").Resize(I - 1, 3) = dArr
End With
End Sub
 
Upvote 0
Bác chạy thử Code này xem
PHP:
Sub Dongia_VL_NC_MTC()
    Dim sArr, dArr(), I As Long, Ihm As Long, Er As Long
    Dim VL As String, NC As String, MTC As String, Ivl As Long, Inc As Long, Im As Long
With Sheets("DGCT")
    VL = .Range("K6"): NC = .Range("L6"): MTC = .Range("M6")
    sArr = .Range("A7:A" & .Range("C65535").End(3).Row).Resize(, 10).Value
    ReDim dArr(1 To UBound(sArr), 1 To 3)
    For I = 1 To UBound(sArr)
        If sArr(I, 2) = Empty Then
            If sArr(I, 4) = VL Then Ivl = I + 6
            If sArr(I, 4) = NC Then Inc = I + 6
            If sArr(I, 4) = MTC Then Im = I + 6
        End If
        If sArr(I, 2) <> Empty Then Ihm = I
        If Ivl Then
            dArr(Ihm, 1) = "=" & .Range("J" & Ivl).Address:            Ivl = 0
        End If
        If Inc Then
            dArr(Ihm, 2) = "=" & .Range("J" & Inc).Address:            Inc = 0
        End If
        If Im Then
            dArr(Ihm, 3) = "=" & .Range("J" & Im).Address:            Im = 0
        End If
    Next I
    Er = .Range("D65535").End(3).Row
    .Range("K7:M" & Er + 1).ClearContents
    .Range("K7").Resize(I - 1, 3) = dArr
End With
End Sub
Cảm ơn bạn nhé! Bạn có thể giải thích thêm thuật toán trong đoạn CODE được không? Giúp mình với
 
Upvote 0
Hình thù nó như thế nào?
Trong bài đó Sơn bảo viết code tính cho cái vùng màu vàng thì code mình tính cho vùng màu vàng rồi đó.
Nhưng mà khi xóa dữ liệu đi thì nó tính không được a ơi. Em đang cố hoàn thiện mấy thứ rồi sẽ up lên, cho mọi người test thử :)
 
Upvote 0
Cảm ơn bạn nhé! Bạn có thể giải thích thêm thuật toán trong đoạn CODE được không? Giúp mình với
Cái này có thuật toán gì đâu anh. Nó chỉ như thế này thôi
PHP:
Sub Dongia_VL_NC_MTC()
    Dim sArr, dArr(), I As Long, Ihm As Long, Er As Long
    Dim VL As String, NC As String, MTC As String, Ivl As Long, Inc As Long, Im As Long
With Sheets("DGCT")
    VL = .Range("K6"): NC = .Range("L6"): MTC = .Range("M6")
    sArr = .Range("A7:A" & .Range("C65535").End(3).Row).Resize(, 10).Value  ' Tạo 1 mảng sArr
    ReDim dArr(1 To UBound(sArr), 1 To 3)              ' Khai báo mảng dArr có số hàng bằng hàng mảng sArr, số cột bằng  3
    For I = 1 To UBound(sArr)                         ' Chạy từ hàng 1 đến hàng cuối của mảng sArr
        If sArr(I, 2) = Empty Then                        ' Khi ô cột B không có giá trị
            If sArr(I, 4) = VL Then Ivl = I + 6          ' Nếu dòng nào của cột D ="a.) Vật liệu"  thì ghi lại 1 cái Ivl =I hàng đó
            If sArr(I, 4) = NC Then Inc = I + 6        ' Nếu dòng nào của cột D  ="b.) Nhân công"  thì ghi lại 1 cái Inc =I hàng đó
            If sArr(I, 4) = MTC Then Im = I + 6       ' Nếu dòng nào của cột D ="c.) Máy thi công"  thì ghi lại 1 cái Im=I hàng đó
        End If
        If sArr(I, 2) <> Empty Then Ihm = I          ' Nếu dòng nào có dữ liệu thì ghi lại Ihm=I
        If Ivl Then
            dArr(Ihm, 1) = "=" & .Range("J" & Ivl).Address:            Ivl = 0
' Khi có Ivl gán vào mảng dArr với vị trí là Ihm và cột là 1, sau đó gán lại Ivl=0 (trả lại ban đầu)
        End If
        If Inc Then
            dArr(Ihm, 2) = "=" & .Range("J" & Inc).Address:            Inc = 0
' Khi có Inc gán vào mảng dArr với vị trí là Ihm và cột là 2, sau đó gán lại Inc=0 (trả lại ban đầu)
        End If
        If Im Then
            dArr(Ihm, 3) = "=" & .Range("J" & Im).Address:            Im = 0
' Khi có Im gán vào mảng dArr với vị trí là Ihm và cột là 3, sau đó gán lại Im=0 (trả lại ban đầu)
        End If
    Next I
    Er = .Range("D65535").End(3).Row     'Xác định dòng cuối có dữ liệu của cột D
    .Range("K7:M" & Er + 1).ClearContents   'Xóa dữ liệu cũ từ K7 đến M có dữ liệu
    .Range("K7").Resize(I - 1, 3) = dArr      'Gán dữ liệu xuống bảng tính
End With
End Sub
 
Upvote 0
Em sửa lại theo gợi ý của anh @befaint :D
Mã:
Sub Dongia_VL_NC_MTC()
    Dim sArr, dArr(), I As Long, Ihm As Long, Er As Long
    Dim VL As String, NC As String, MTC As String, Ivl As Long, Inc As Long, Im As Long
With Sheets("DGCT")
    VL = .Range("K6"): NC = .Range("L6"): MTC = .Range("M6")
    Er = .Range("C65535").End(3).Row
    If Er < 7 Then GoTo Thoat
    sArr = .Range("A7:A" & Er).Resize(, 10).Value
    ReDim dArr(1 To UBound(sArr), 1 To 3)

    For I = 1 To UBound(sArr)
        If sArr(I, 2) = Empty Then
            If sArr(I, 4) = VL Then Ivl = I + 6
            If sArr(I, 4) = NC Then Inc = I + 6
            If sArr(I, 4) = MTC Then Im = I + 6
        End If
        If sArr(I, 2) <> Empty Then Ihm = I
        If Ivl Then
            dArr(Ihm, 1) = "=" & .Range("J" & Ivl).Address: Ivl = 0
        End If
        If Inc Then
            dArr(Ihm, 2) = "=" & .Range("J" & Inc).Address: Inc = 0
        End If
        If Im Then
            dArr(Ihm, 3) = "=" & .Range("J" & Im).Address: Im = 0
        End If
   
    Next I
    Er = .Range("D65535").End(3).Row
    .Range("K7:M" & Er + 1).ClearContents
    .Range("K7").Resize(I - 1, 3) = dArr
End With
Thoat:
End Sub
 
Upvote 0
Cảm ơn mọi người đã giúp đỡ. Mình còn vướng phần tạo Form nhập dữ liệu đầu vào nữa, mong mọi người giúp đỡ thêm chỗ này với
 

File đính kèm

  • Form Data List Box.xls
    Form Data List Box.xls
    142 KB · Đọc: 14
  • Du lieu DATA LISTBOX.jpg
    Du lieu DATA LISTBOX.jpg
    223.4 KB · Đọc: 17
  • Tao Form lua chon.jpg
    Tao Form lua chon.jpg
    163.9 KB · Đọc: 15
Upvote 0

File đính kèm

Upvote 0
Cái phần tìm kiếm nhanh Bác tự làm nha
ôi cảm ơn bạn nhé, tuyệt vời quá.
Nhờ sự giúp đỡ của mọi người đặc biệt là bạn Pacific mình đã làm được điều mà mình mong muốn. Tuy nhiên nhìn vào CODE của em vẫn còn rối rắm và chưa gọn gàng. Rất mong mọi người hỗ trợ tinh giản và gộp các CODE lại cho ngắn gọn hơn hoặc là sửa lại CODE cho hợp lý
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Sao đến phần định dạng kẻ khung mình làm lúc thì được, lúc thì lại báo lỗi "unable to set the linestyle property of the border class"

Mình làm CODE như thế này bị báo lỗi khi áp dụng đối với sheet1 còn các sheet khác thì lâu lâu mới bị, còn không thì dùng bình thường????? Lạ quá
Mã:
Sub Dinh_Dang()

    Dim ir As Integer
    Dim ic As Integer
 
    ir = 6                                                                      ' Dòng đầu tiên chứa dữ liệu cần định dạng
    ic = Range("C65536").End(xlUp).Row        ' Dòng cuối cùng chứa dữ liệu cần định dạng
 
    Range("A" & ir, "L" & ic).Select
    Selection.HorizontalAlignment = xlCenter     'canh giữa cho đều theo cột
   
    Selection.Borders(xlInsideVertical).LineStyle = xlContinuous        ' Kẻ dòng đứng
    Selection.Borders(xlInsideHorizontal).LineStyle = xlDot             ' Kẻ dòng ngang
    Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous              ' Kẻ khung trái
    Selection.Borders(xlEdgeTop).LineStyle = xlContinuous               ' Kẻ khung trên
    Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous            ' Kẻ khung dưới
    Selection.Borders(xlEdgeRight).LineStyle = xlContinuous             ' Kẻ khung phải
 
 
 
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom