FUN FUN
Thành viên mới
- Tham gia
- 18/11/07
- Bài viết
- 32
- Được thích
- 9
Bạn đã biết VBA, nghiên cứu về "Scripting.Dictionary" xem sao.Mình có 01 file cập nhật mã tiểu mục và loại tiền thuế theo file đính kèm, mong các bạn hỗ trợ cập nhật bằng VBA (Mình đã dùng vlookup trên excel, nhưng mình thấy khá bất tiện và nặng file).
Chân thành cảm ơn.
Bạn vào đây đọc xem có được không.Cảm ơn bạn, để mình tra google
Hi2, chưa hiểu gì cả, để nghiên cứu đã. Cảm ơn bạn nhìuLâu lâu buồn tay, code làm dáng:
Sub t()
Dim rgBT As Range, rgKQ As Range ' ranges bảng tra và bảng kết quả
Dim soDongBT As Long, soDongKQ As Long
Dim aBT, aKQ, aDM ' mảng bảng tra, bảng kết quả, và cột danh mục
Dim i As Long, tim As Long ' vị trí hàng tra theo bảng tra
Set rgBT = Worksheets("Data_TieuMuc_CDTK").Range("B6") ' xác định ô bắt đầu của các ranges
Set rgKQ = Worksheets("SC_331_333").Range("N11")
soDongBT = rgBT.CurrentRegion.Rows.Count
soDongKQ = rgKQ.CurrentRegion.Rows.Count
aBT = rgBT.Resize(soDongBT, 3).Value ' copy range vào mảng để làm việc cho nhanh
aKQ = rgKQ.Resize(soDongKQ, 4).Value
aDM = Application.Transpose(rgBT.Resize(soDongBT, 1).Value)
For i = 1 To soDongKQ ' bắt đầu tra
tim = Application.Match(aKQ(i, 1), aDM, 0)
If Not IsError(tim) Then
aKQ(i, 2) = aBT(tim, 2)
aKQ(i, 4) = aBT(tim, 3)
End If
Next i
rgKQ.Resize(UBound(aKQ), UBound(aKQ, 2)).Value = aKQ
End Sub
Code kiểu lười nó vậy. Nếu dữ liệu nhiều thì phải sắp xếp bảng tra để dùng kỹ thuật tra nhị phân.
Thêm code:
- cộng thêm 1 vào số dòng của bảng tra (mục đích là để lấy thêm môt dòng trống).
- copy bảng tra vào aKQ (save trạng thái trước khi sắp xếp)
- sort bảng tra
- copy vào aBT và aDM (bảng tra bây giờ có dòng đầu là trống (để tránh lỗi khi tra nhị phân)
- copy aKQ trở lại bảng tra (trả về trạng thái ban đầu)
Sửa code tra:
tim = Application.Match(aKQ(i, 1), aDM, True) ' tra theo gần đúng (nhị phân)
If aKQ(i, 1) = aDM(tim) Then ' kiểm lại xem có tìm đúng?
Kỹ thuật tra nhị phân nhanh gấp bội kỹ thuật tra trâu bò. Dữ liệu càng nhiều càng hiệu quả.
Cảm ơn bạnBạn vào đây đọc xem có được không.
Bài 11. Dictionary
Bài 11. Dictionary (Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA) Dictionary (Dic) là một phần trong thư viện Microsoft Scripting Runtime (scrrun.dll), cho phép lưu trữ và truy xuất số lượng lớn Item theo Key duy nhất tương ứng. 1. Khai báo 1.1. Kiểu khai báo sớm (Có...www.giaiphapexcel.com
Ý mình là giảm thiểu việc sử dụng công thức trong bảng tính và mình đang suy nghĩ việc lập ra mảng dữ liệu, tìm kiếm theo phần tử trong mảng.Lạ đời. Hàm VLookup là căn bản của Excel lại bị chê là "bất tiện".
Đã sợ "bất tiện" thì đít sần làm cái gì. Bài này nếu viết VBA thì cứ việc cóp lại hàm VLookup.
Hi2 là cái quái gì vậy?Hi2, ...
Vậy mà cũng bày đặt suy nghĩ (bớt nghĩ bằng tiếng lóng, tiếng Tây có lẽ dễ thấm hơn)....
Ý mình là giảm thiểu việc sử dụng công thức trong bảng tính và mình đang suy nghĩ việc lập ra mảng dữ liệu, tìm kiếm theo phần tử trong mảng.
Mình mới tập về VBA, chưa nắm bắt được nhiều về cách viết code. Code bạn viết mình dịch chưa hiểu được hết nội dung, nên việc mình nghĩ và việc mình hiểu nó cũng ko ăn nhập vào nhau được. Mình tham gia GPE từ 2007 nhưng cũng ít tương tác nhóm do năng lực yếu, vẫn tính là thành viên mới.Hi2 là cái quái gì vậy?
Đang hỏi bài thì dùng ngôn ngữ sao cho cả hai bên đều dễ hiểu. Bày đặt kiểu cọ tiếng lóng tiếng liếc chỉ tốn thì giờ mà chả thực hành thêm được cái gì.
Vậy mà cũng bày đặt suy nghĩ (bớt nghĩ bằng tiếng lóng, tiếng Tây có lẽ dễ thấm hơn).
Code ở bài #6 trên là chính xác dùng giair thuật "lập ra mảng", và "tìm kiếm theo phần tử trong mảng". Ràng ràng trước mắt chả chịu nhìn.
Sau 3h thì mình nắm được sơ sơ và làm code chạy được trên bảng dữ liệu của mình (tại cột N của SC_331_333 có một số ô trống, có một số ô có mã số khác nên tìm kiếm trong bảng dữ liệu Data_TieuMuc_CDTK không có làm code dừng lại). Sau khi chạy, code ghi ngược lại cột N của SC_331_333 chuyển số dạng text sang dạng number làm việc bấm tìm kiếm lại không được. Mình sẽ tiếp tục tìm hiểu để học và làm tốt hơn. Cảm ơn.Hi2 là cái quái gì vậy?
Đang hỏi bài thì dùng ngôn ngữ sao cho cả hai bên đều dễ hiểu. Bày đặt kiểu cọ tiếng lóng tiếng liếc chỉ tốn thì giờ mà chả thực hành thêm được cái gì.
Vậy mà cũng bày đặt suy nghĩ (bớt nghĩ bằng tiếng lóng, tiếng Tây có lẽ dễ thấm hơn).
Code ở bài #6 trên là chính xác dùng giair thuật "lập ra mảng", và "tìm kiếm theo phần tử trong mảng". Ràng ràng trước mắt chả chịu nhìn.
3h tức là 3 giờ sáng?Sau 3h ...