Giúp đỡ Code tính: Vật liệu, Nhân công, Máy thi công trong bảng Phân tích vật tư (1 người xem)

Liên hệ QC

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

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
725
Được thích
97
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Em có bảng phân tích vật tư trong dự toán, nhờ anh chị viết code giúp em tính vật liệu, nhân công, máy thi công từ bảng phân tích và đơn giá có sẵn. Cám ơn anh chị nhiều
 

File đính kèm

Em có bảng phân tích vật tư trong dự toán, nhờ anh chị viết code giúp em tính vật liệu, nhân công, máy thi công từ bảng phân tích và đơn giá có sẵn. Cám ơn anh chị nhiều

Đây là một bài tập hay công việc đang làm?
Tôi thấy dạng bài hỏi tính VL,NC,MTC này trên GPE không dưới 10 bài.
Nếu là công việc chuyên môn của ngành thì chắc phải có phần mềm của ngành chứ.
Nếu là bài tập thì ... hic!
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, Tem As String, Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
sArr = [K5:N5].Value
For J = 1 To 4
    Dic.Add sArr(1, J), J
Next J
sArr = Range([D7], [D65536].End(xlUp)).Offset(, -1).Resize(, 7).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 4)
For I = 1 To UBound(sArr, 1) - 1
    If sArr(I, 1) <> Empty Then
        dArr(I, 1) = sArr(I, 1)
        For J = I + 1 To UBound(sArr, 1)
            If sArr(J, 1) = Empty Then
                K = K + 1
                Tem = sArr(J, 2)
                If Dic.Exists(Tem) Then dArr(I, Dic.Item(Tem)) = sArr(J, 7)
            Else
                I = I + K: K = 0
                Exit For
            End If
        Next J
    End If
Next I
[K7].Resize(UBound(sArr, 1), 4) = dArr
Set Dic = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bác ơi sao em insert module copy vào Module1 rồi save file với định dạng .xlsm mà khi đánh "=gpe(B7:I7)" mà không dc, bác chỉ cho em với.

Cái GPE trên là Sub chứ không phải Function.
1. Đối với Sub không thể dùng =SUB(...) được
2. Đối với Function, không thể thay đổi dứ liệu trên bảng tính được.

Nếu bạn muốn dùng code trên thì phải chạy nó như một Macro. Nếu bạn muốn function thì phải sủa code trên lại.
 
Upvote 0
Các bác ơi gíup em với! Sao em insert module copy vào Module1 rồi save file với định dạng .xlsm. Đóng Excel rồi mở file vừa lưu với định dạng .xlsm, click chuột chọn View/Macros/View Macros, hiện ra của sổ Macro rồi click vao Run thì chỉ có cột "Mã CV" là hiển thị kết quả còn cột VL, NC, MTC không hiển thị.

Bạn có quan sát kỹ các ô L5:N5 trong sheet không?
Nó phải được copy đúng y như các ký tự có trong cột D
HicHic.jpg
 
Upvote 0
Hi, em làm dc rồi, cám ơn bác nhiều nhé!
Bác cho em hỏi làm thế nào tạo dc nút GPE vậy?

Không biết làm sao mà nói. Tạm thời làm như vầy đi
Vẽ thí một cái hình vuông hay tròn, méo gì đó , chuột phải, chon Assign Macro - Chọn tên Sub - OK.
Từ từ tìm hiểu cách tạo mấy cái Button sau vậy.
 
Upvote 0
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, Tem As String, Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
sArr = [K5:N5].Value
For J = 1 To 4
    Dic.Add sArr(1, J), J
Next J
sArr = Range([D7], [D65536].End(xlUp)).Offset(, -1).Resize(, 7).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 4)
For I = 1 To UBound(sArr, 1) - 1
    If sArr(I, 1) <> Empty Then
        dArr(I, 1) = sArr(I, 1)
        For J = I + 1 To UBound(sArr, 1)
            If sArr(J, 1) = Empty Then
                K = K + 1
                Tem = sArr(J, 2)
                If Dic.Exists(Tem) Then dArr(I, Dic.Item(Tem)) = sArr(J, 7)
            Else
                I = I + K: K = 0
                Exit For
            End If
        Next J
    End If
Next I
[K7].Resize(UBound(sArr, 1), 4) = dArr
Set Dic = Nothing
End Sub

Các bác ơi, giúp em với, nếu file của em như thế này thì Code sửa như thế nào? Cảm ơn các bác nhiều!

Thì sửa "tanh bành luôn" chứ thế nào.
1/ Dữ liệu các cột, dòng, khác trước
2/ Các cột kết quả khác trước
3/ Các mục lọc cũng khác, lúc thì "Vật liệu", lúc thì "a.) Vật liệu": 2 cái này khác nhau chứ, nội chuyện chữ hoa chữ thường cũng khác nhau rồi, dư 1 dấu cách cũng khác nhau.... , đâu phải muốn nhập sao cũng được.
Viết code mà gặp mấy cái luxubu không đáng có thì "oải" lắm.
4/ Bạn nhập lại cho đúng kiểu muốn có trong
K6=a.) Vật liệu
L6=b.) Nhân công
M6=c.) Máy thi công
Thằng nào trong cột D mà không giống mấy thằng nầy thì nhập lại cho đúng.
5/ Sau khi làm xong bước 4 thì Thay Sub cũ bằng cái này
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, Tem As String, Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
sArr = [K6:M6].Value
For J = 1 To 3
    Dic.Add sArr(1, J), J
Next J
sArr = Range([D8], [D65536].End(xlUp)).Offset(, -2).Resize(, 8).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 4)
For I = 1 To UBound(sArr, 1) - 1
    If sArr(I, 1) <> Empty Then
        dArr(I, 1) = "ke"
        For J = I + 1 To UBound(sArr, 1)
            If sArr(J, 1) = Empty Then
                K = K + 1
                Tem = sArr(J, 3)
                If Dic.Exists(Tem) Then dArr(I, Dic.Item(Tem) + 1) = sArr(J, 8)
            Else
                I = I + K: K = 0
                Exit For
            End If
        Next J
    End If
Next I
[J8].Resize(UBound(sArr, 1), 4) = dArr
Set Dic = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bài của anh rất hay. Nhưng em vẫn chưa hiểu hết ý nghĩa của từng dòng mã code. Em mong anh làm thêm phần ghi chú từng cho bọn em tham khảo tư duy của anh với. Chân thành cảm ơn anh
 
Upvote 0
Dạ Chào anh BaTe
Liên quan tới vấn đề tính phân tích vật tư. EM cũng đang tìm cách để phân tích vật tư cho công việc của em được nhanh chóng và em đã tìm và mò vào đc đến đây. Mong anh chỉ giáo em việc này với a.
Chả là em có cái file để phân tích vật tư theo khối lượng của từng đầu việc như trong file
Mà công việc cần làm là tính cả 1 sheet 1000 công tác như thế rất mất thơi gian
Nhờ anh có cách nào điền hết tất cả các mục còn lại với công thức như trong file em đính kèm chỉ với 1 nút bấm ( và trong mỗi ô phải thể hiện công thức tính toán trong ô). E cám ơn anh nhiều rất mong anh giúp đỡ
 

File đính kèm

Upvote 0
Dạ Chào anh BaTe
Liên quan tới vấn đề tính phân tích vật tư. EM cũng đang tìm cách để phân tích vật tư cho công việc của em được nhanh chóng và em đã tìm và mò vào đc đến đây. Mong anh chỉ giáo em việc này với a.
Chả là em có cái file để phân tích vật tư theo khối lượng của từng đầu việc như trong file
Mà công việc cần làm là tính cả 1 sheet 1000 công tác như thế rất mất thơi gian
Nhờ anh có cách nào điền hết tất cả các mục còn lại với công thức như trong file em đính kèm chỉ với 1 nút bấm ( và trong mỗi ô phải thể hiện công thức tính toán trong ô). E cám ơn anh nhiều rất mong anh giúp đỡ

Làm gì mà cuống lên, gửi bài tùm lum.
http://www.giaiphapexcel.com/forum/...úp-code-Bảng-Phân-tích-VT&p=753058#post753058
http://www.giaiphapexcel.com/forum/...hối-lượng-vật-tư-hạng-mục&p=753056#post753056
 
Upvote 0
Dạ vâng hihi em cuống quá vì công việc được giao gấp quá. Em làm bằng tay tất cả các hạng mục gần 3000 công tác em làm ko híc. NHờ anh làm giùm em cái nút Tính để bấm cho chạy với được ko a
 
Upvote 0
Dạ vâng hihi em cuống quá vì công việc được giao gấp quá. Em làm bằng tay tất cả các hạng mục gần 3000 công tác em làm ko híc. NHờ anh làm giùm em cái nút Tính để bấm cho chạy với được ko a
Chỉ dùng code khi bạn thật sự hiểu về code, không là kết quả tùm lum hết cả.
File của bạn cần chi code. Công thức tại G3=VLOOKUP(MAX($A$3:$A3);$A$3:G3;COLUMN();0)*$E4*(1+$F4). Filter Blank cột A rồi copy paste cho toàn bảng.
Lưu ý: Chắc cú thì đánh số thứ tự lại cho toàn bộ cột A bằng công thức Max()+1. Đặt công thức bằng cách filter Nonblank cột A. Phút mốt à!!
 
Lần chỉnh sửa cuối:
Upvote 0
Chỉ dùng code khi bạn thật sự hiểu về code, không là kết quả tùm lum hết cả.
File của bạn cần chi code. Công thức tại G3=VLOOKUP(MAX($A$3:$A3);$A$3:G3;COLUMN();0)*$E4*(1+$F4). Filter Blank cột A rồi copy paste cho toàn bảng.
Lưu ý: Chắc cú thì đánh số thứ tự lại cho toàn bộ cột A bằng công thức Max()+1. Đặt công thức bằng cách filter Nonblank cột A. Phút mốt à!!
Bài trên vi phạm nội quy vì gửi nhiều bài cùng một nội dung ở nhiều nơi. Bạn xem bài #10 ở trên.
Bài vi phạm nội quy thì không nên trả lời tiếp!
 
Upvote 0
Web KT

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

Back
Top Bottom