CODE về Tổng hợp vật tư (1 người xem)

Liên hệ QC

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

tamthat

Thành viên hoạt động
Tham gia
25/7/07
Bài viết
173
Được thích
83
Giới tính
Nam
Nghề nghiệp
Human
Tôi có 1 file gồm có sheets("PTVT") và sheets("THVT"). Mục tiêu của bài toán là từ sheets("PTVT") thành sheets("THVT"). Tuy nhiên tôi viết code thì chưa chạy ra được theo ý muốn. Ở sheets(3) là kết quả mà code chạy. Tôi chưa biết sắp xếp dữ liệu đẹp như bên sheets("THVT"). Mong các bạn chỉ giúp. Cảm ơn các bạn.
 

File đính kèm

Tôi có 1 file gồm có sheets("PTVT") và sheets("THVT"). Mục tiêu của bài toán là từ sheets("PTVT") thành sheets("THVT"). Tuy nhiên tôi viết code thì chưa chạy ra được theo ý muốn. Ở sheets(3) là kết quả mà code chạy. Tôi chưa biết sắp xếp dữ liệu đẹp như bên sheets("THVT"). Mong các bạn chỉ giúp. Cảm ơn các bạn.

Cấu trúc sheet PTVT không hợp lý, Thiếu cột nội dung công việc (có vật liệu, nhân công, máy thi công), nhưng mục đích thí không có nên chẳng biết nó sử dụng vào công việc gì?
 
Upvote 0
Cấu trúc sheet PTVT không hợp lý, Thiếu cột nội dung công việc (có vật liệu, nhân công, máy thi công), nhưng mục đích thí không có nên chẳng biết nó sử dụng vào công việc gì?
sheet THVT cũng đâu có cột nào yêu cầu phải cho biết nó sử dụng vào việc gì đâu chú ?
 
Upvote 0
Cấu trúc sheet PTVT không hợp lý, Thiếu cột nội dung công việc (có vật liệu, nhân công, máy thi công), nhưng mục đích thí không có nên chẳng biết nó sử dụng vào công việc gì?

Tôi cũng k hiểu ý bạn lắm. Tôi có đầu mục công việc rõ ràng mà bạn? Đây là lấy từ file dự toán hoàn chỉnh. Dùng để nghiệm thu thanh toán bạn nhé. File này còn được tạo ra từ phần mềm giaxaydung. Tôi muốn tìm hiểu thêm. Mong các bạn giúp về việc sắp xếp dữ liệu để được hoàn chỉnh như sheet("THVT").
 
Upvote 0
Tôi có 1 file gồm có sheets("PTVT") và sheets("THVT"). Mục tiêu của bài toán là từ sheets("PTVT") thành sheets("THVT"). Tuy nhiên tôi viết code thì chưa chạy ra được theo ý muốn. Ở sheets(3) là kết quả mà code chạy. Tôi chưa biết sắp xếp dữ liệu đẹp như bên sheets("THVT"). Mong các bạn chỉ giúp. Cảm ơn các bạn.
Có lẽ là nên lập 3 bảng kết quả, VL, NC, M.
Khi lọc thì thêm điều kiện kiểm tra kí tự đầu của cột D để đưa vào từng bảng.
Dán từng bảng xuống sheet dựa theo chỉ số dòng cuối cùng
 
Upvote 0
Tôi cũng k hiểu ý bạn lắm. Tôi có đầu mục công việc rõ ràng mà bạn? Đây là lấy từ file dự toán hoàn chỉnh. Dùng để nghiệm thu thanh toán bạn nhé. File này còn được tạo ra từ phần mềm giaxaydung. Tôi muốn tìm hiểu thêm. Mong các bạn giúp về việc sắp xếp dữ liệu để được hoàn chỉnh như sheet("THVT").
bạn biết viết code mà
tôi chỉ nói giải thuật thôi
tạo thêm 1 cột (côt F) trong mảng kết quả
lấy left(cột D)
= "V" đánh số 1
="N" đánh số 2
="M" đánh số 3
dán mảng kết quả xuống sheet
Sort theo cột mới thêm
chạy tiếp vòng lặp theo cột F
từ "" lên 1 => chèn thêm dòng để ghi tiêu đề
từ 1 lên 2 => chèn thêm 1 dòng để ghi tiêu đề
từ 2 lên 3 cũng thế
 
Upvote 0
bạn biết viết code mà tôi chỉ nói giải thuật thôitạo thêm 1 cột (côt F) trong mảng kết quả lấy left(cột D) = "V" đánh số 1="N" đánh số 2="M" đánh số 3dán mảng kết quả xuống sheetSort theo cột mới thêmchạy tiếp vòng lặp theo cột Ftừ "" lên 1 => chèn thêm dòng để ghi tiêu đềtừ 1 lên 2 => chèn thêm 1 dòng để ghi tiêu đềtừ 2 lên 3 cũng thế
Có cách nào soft trực tiếp trong mảng kết quả k hả bạn.
 
Upvote 0
sheet THVT cũng đâu có cột nào yêu cầu phải cho biết nó sử dụng vào việc gì đâu chú ?

Tôi hỏi để biết bạn ấy tự thiết kế và theo dõi bằng cái bảng ấy hay không (để biết mà góp ý cách xây dựng biểu), còn phần mềm xuất ra như vậy thì cũng bó tay với cách xây dựng của cái phần mềm đó.
 
Upvote 0
Hj. Tôi cũng là chuyên gia lắp ghép. Tôi sẽ cố đọc thêm tài liệu. Cảm ơn mọi người.
 
Upvote 0
Tôi hỏi để biết bạn ấy tự thiết kế và theo dõi bằng cái bảng ấy hay không (để biết mà góp ý cách xây dựng biểu), còn phần mềm xuất ra như vậy thì cũng bó tay với cách xây dựng của cái phần mềm đó.

Mẫu bên XD là thế rui pac ah.
 
Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tôi có 1 file gồm có sheets("PTVT") và sheets("THVT"). Mục tiêu của bài toán là từ sheets("PTVT") thành sheets("THVT"). Tuy nhiên tôi viết code thì chưa chạy ra được theo ý muốn. Ở sheets(3) là kết quả mà code chạy. Tôi chưa biết sắp xếp dữ liệu đẹp như bên sheets("THVT"). Mong các bạn chỉ giúp. Cảm ơn các bạn.

Hiểu sao làm vậy nhé, xài được xài, không thì thôi.
 

File đính kèm

Upvote 0
Tôi cũng k hiểu ý bạn lắm. Tôi có đầu mục công việc rõ ràng mà bạn? Đây là lấy từ file dự toán hoàn chỉnh. Dùng để nghiệm thu thanh toán bạn nhé. File này còn được tạo ra từ phần mềm giaxaydung. Tôi muốn tìm hiểu thêm. Mong các bạn giúp về việc sắp xếp dữ liệu để được hoàn chỉnh như sheet("THVT").
Bạn chạy thử code này. Những tiêu đề cho từng nhóm nếu cần thì điền sau
sort bằng system.collections.aray.list
Có lẽ là xem thêm ở đây về điều kiện sử dụng : http://www.giaiphapexcel.com/forum/...-CreateObject(-System-Collections-ArrayList-)
Mã:
Public Sub THVT()
Dim DL, VL, NC, MTC, Tam, r As Long, c As Long, v, n, m
Dim Dic As Object

Set Dic = CreateObject("scripting.dictionary")
DL = Sheet1.UsedRange
ReDim VL(1 To UBound(DL), 1 To 5), NC(1 To UBound(DL), 1 To 5), MTC(1 To UBound(DL), 1 To 5)

With CreateObject("System.Collections.ArrayList")
For r = 4 To UBound(DL)
If IsNull(DL(r, 4)) = False Then
If Dic.exists(DL(r, 4)) = False Then
Dic.Add DL(r, 4), Array(DL(r, 5), DL(r, 6), DL(r, 10))
.Add DL(r, 4)
Else
Tam = Dic.Item(DL(r, 4))
Tam(2) = Tam(2) + DL(r, 10)
Dic.Item(DL(r, 4)) = Tam
End If
End If
Next r
.Sort
Tam = .ToArray
End With

For c = 0 To UBound(Tam)
If Left(Tam(c), 1) = "V" Then
v = v + 1: VL(v, 1) = v
VL(v, 2) = Tam(c): VL(v, 3) = Dic.Item(Tam(c))(0)
VL(v, 4) = Dic.Item(Tam(c))(1): VL(v, 5) = Dic.Item(Tam(c))(2)
End If

If Left(Tam(c), 1) = "N" Then
n = n + 1: NC(n, 1) = n
NC(n, 2) = Tam(c): NC(n, 3) = Dic.Item(Tam(c))(0)
NC(n, 4) = Dic.Item(Tam(c))(1): NC(n, 5) = Dic.Item(Tam(c))(2)
End If

If Left(Tam(c), 1) = "M" Then
m = m + 1: MTC(m, 1) = m
MTC(m, 2) = Tam(c): MTC(m, 3) = Dic.Item(Tam(c))(0)
MTC(m, 4) = Dic.Item(Tam(c))(1): MTC(m, 5) = Dic.Item(Tam(c))(2)
End If
Next c

With Sheet3
.UsedRange.Clear
.Range("A1").Resize(v, 5) = VL
.Range("A65000").End(xlUp).Offset(3).Resize(n, 5) = NC
.Range("A65000").End(xlUp).Offset(3).Resize(m, 5) = MTC
.UsedRange.Columns.AutoFit
.UsedRange.Borders.LineStyle = 1
.Range("E1", .Range("E65000").End(xlUp)).Style = "comma"
End With
Set Dic = Nothing
End Sub
 

File đính kèm

Upvote 0
Tôi phục dần rồi ạ. Tôi đọc đc mấy cái này chắc cũng chết mất. =))

Còn muốn tính Vật liệu, nhân công, máy thi công thì sử dụng PivotTable, riêng PivotTable thì ai cũng biết sử dụng, nhưng làm thế nào để khi chạy PivotTable nó lại tự tổng hợp 3 thứ kia mới là điều phải suy nghĩ.
 
Upvote 0
Bạn chạy thử code này. Những tiêu đề cho từng nhóm nếu cần thì điền sau
sort bằng system.collections.aray.list
Có lẽ là xem thêm ở đây về điều kiện sử dụng : http://www.giaiphapexcel.com/forum/...-CreateObject(-System-Collections-ArrayList-)
Mã:
Public Sub THVT()
Dim DL, VL, NC, MTC, Tam, r As Long, c As Long, v, n, m
Dim Dic As Object

Set Dic = CreateObject("scripting.dictionary")
DL = Sheet1.UsedRange
ReDim VL(1 To UBound(DL), 1 To 5), NC(1 To UBound(DL), 1 To 5), MTC(1 To UBound(DL), 1 To 5)

With CreateObject("System.Collections.ArrayList")
For r = 4 To UBound(DL)
If IsNull(DL(r, 4)) = False Then
If Dic.exists(DL(r, 4)) = False Then
Dic.Add DL(r, 4), Array(DL(r, 5), DL(r, 6), DL(r, 10))
.Add DL(r, 4)
Else
Tam = Dic.Item(DL(r, 4))
Tam(2) = Tam(2) + DL(r, 10)
Dic.Item(DL(r, 4)) = Tam
End If
End If
Next r
.Sort
Tam = .ToArray
End With

For c = 0 To UBound(Tam)
If Left(Tam(c), 1) = "V" Then
v = v + 1: VL(v, 1) = v
VL(v, 2) = Tam(c): VL(v, 3) = Dic.Item(Tam(c))(0)
VL(v, 4) = Dic.Item(Tam(c))(1): VL(v, 5) = Dic.Item(Tam(c))(2)
End If

If Left(Tam(c), 1) = "N" Then
n = n + 1: NC(n, 1) = n
NC(n, 2) = Tam(c): NC(n, 3) = Dic.Item(Tam(c))(0)
NC(n, 4) = Dic.Item(Tam(c))(1): NC(n, 5) = Dic.Item(Tam(c))(2)
End If

If Left(Tam(c), 1) = "M" Then
m = m + 1: MTC(m, 1) = m
MTC(m, 2) = Tam(c): MTC(m, 3) = Dic.Item(Tam(c))(0)
MTC(m, 4) = Dic.Item(Tam(c))(1): MTC(m, 5) = Dic.Item(Tam(c))(2)
End If
Next c

With Sheet3
.UsedRange.Clear
.Range("A1").Resize(v, 5) = VL
.Range("A65000").End(xlUp).Offset(3).Resize(n, 5) = NC
.Range("A65000").End(xlUp).Offset(3).Resize(m, 5) = MTC
.UsedRange.Columns.AutoFit
.UsedRange.Borders.LineStyle = 1
.Range("E1", .Range("E65000").End(xlUp)).Style = "comma"
End With
Set Dic = Nothing
End Sub
Gần đúng ý mình rồi, thanks bạn, để mình nghiên cứu thêm. Hay quá...
 
Upvote 0
Web KT

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

Back
Top Bottom