Copy mảng từ vị trí này sang vị trí khác bằng hàm (3 người xem)

Liên hệ QC

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

hoasimmautim

Thành viên mới
Tham gia
25/6/15
Bài viết
8
Được thích
2
Chào anh chị ạ

Anh chị vui lòng cho em hỏi chút xíu về tạo mảng và copy mảng, viết bằng VBA, phần này em mới tìm hiểu nhưng vẫn cần thêm nhiều thời gian mới viết được ạ

1/ Đầu vào em có mảng giá trị bất kỳ (ký tự hoặc số): 5 dòng và 5 cột
2/ kết quả xuất đúng giá trị của mảng : 5 dòng và 5 cột
Điều kiện: Viết bằng hàm, ở 1 cell bất kỳ trên sheet em gọi hàm đó ra thì xuất được kết quả như mong muốn

( Ở đây em đã viết bằng vòng lặp for chạy rồi, nhưng còn nhược điểm đầu ra bị fit chết vị trí, nên em mong muốn cải tiến dùng hàm lập trình, với mong muốn muốn cho xuất hiện ở ô nào bất kỳ thì sẽ gọi hàm từ ô đó sẽ cho kết quả !, tự đặt tên hàm bất kỳ )

Nhờ các anh chị suy nghĩ giúp em ạ

Chúc cả nhà vui vẻ
 
Mình đã thử các bước này trên file của bạn:

(1) Viết hàm người dùng, có nội dung sau:
PHP:
Option Explicit
Function DiChuyenDL(Rng As Range)
 Dim Arr()
 
 Arr() = Rng.Value
 DiChuyenDL = Arr()
End Function

Sau đó tiến hành chép số liệu từ vùng [A1:L10] đến ô [A3760:L..]
Sau đó tô chọn vùng [AA1:AL4000]
Nhập cú fáp hàm vô thanh công thức =DiChuyenDL(A1:L4010)
Kết thúc bỡi tổ hợp dành cho hàm mảng thì cho kết quả (bạn đoán xem nó sẽ như thế nào?)
Tốc độ thì không sao
Cái bất tiện là lúc cần fải dùng chuộc chọn vùng cho hàm mảng hạ thổ!

Những mong có cái để bạn tránh, khỏi vô vết xe đỗ mà thôi!
 
Upvote 0
Hi ANh SA_DQ,

Nhờ anh giúp trọn code đầy đủ giùm em với, trong HD của anh, em nhận thấy hơi hơi khó hiểu chút

Em cảm ơn anh ạ
 
Upvote 0
Mình đã thử các bước này trên file của bạn:

(1) Viết hàm người dùng, có nội dung sau:
PHP:
Option Explicit
Function DiChuyenDL(Rng As Range)
 Dim Arr()
 
 Arr() = Rng.Value
 DiChuyenDL = Arr()
End Function

Sau đó tiến hành chép số liệu từ vùng [A1:L10] đến ô [A3760:L..]
Sau đó tô chọn vùng [AA1:AL4000]
Nhập cú fáp hàm vô thanh công thức =DiChuyenDL(A1:L4010)
Kết thúc bỡi tổ hợp dành cho hàm mảng thì cho kết quả (bạn đoán xem nó sẽ như thế nào?)
Tốc độ thì không sao
Cái bất tiện là lúc cần fải dùng chuộc chọn vùng cho hàm mảng hạ thổ!

Những mong có cái để bạn tránh, khỏi vô vết xe đỗ mà thôi!
Theo em nghĩ, như thế này gọn hơn và dễ thực hiện hơn:

Mã:
Function DiChuyenDL(ByVal Rng As Range)
    DiChuyenDL = Rng.Value
End Function

Và như thế, nó tránh được ngay cả khi chọn chỉ 1 ô duy nhất, với việc sử dụng mảng thì nó sẽ bị lỗi.
 
Upvote 0
Hi anh SA_DQ,
Em thử cách của anh hướng dẫn nhưng vẫn chưa chạy được ạ, anh giúp em code đầy đủ luôn chứ ạ
Em cảm ơn anh thật nhiều :D
 
Upvote 0
Hi Anhchuot0106

Em đã làm nhưng sao vẫn chưa được, hoặc anh đã thao tác của bài A Nghĩa #23, cho em đầy đủ luôn nhé, tiếc chi 1 tẹo đó nhỉ

Cảm ơn anh ạ
 
Upvote 0
Hi Anhchuot0106

Em đã làm nhưng sao vẫn chưa được, hoặc anh đã thao tác của bài A Nghĩa #23, cho em đầy đủ luôn nhé, tiếc chi 1 tẹo đó nhỉ

Cảm ơn anh ạ
Ở bài #21 Bác Sa_DQ đã viết rất rõ cách dùng hàm mà bạn không chịu đọc kĩ gì cả, hàm anh Nghĩa cách dùng cũng tương tự thôi.
Kết thúc bỡi tổ hợp dành cho hàm mảng thì cho kết quả (bạn đoán xem nó sẽ như thế nào?)
Tốc độ thì không sao
Cái bất tiện là lúc cần fải dùng chuột chọn vùng cho hàm mảng hạ thổ!
 
Upvote 0
File này mình làm sẽ copy range 5x5 sang vị trí mới. Để copy A1:E5 sang G1:K5, tại ô G1 gõ công thức =MOVERANGE(A1).
 

File đính kèm

Upvote 0
File này mình làm sẽ copy range 5x5 sang vị trí mới. Để copy A1:E5 sang G1:K5, tại ô G1 gõ công thức =MOVERANGE(A1).

Khi làm con toán khác thì sub chuyển mảng sẽ bị lỗi vì các ranges nó cần làm việc là nothing.
Cần xét xem chúng có nothing hay không.

Tuy nhiên, nếu làm việc theo kiểu chuyền lệnh (delegate) như thế này thì nên tạo thẻ chuyền (token) cho nó rõ rệt. Hàm bắt đầu ghi một thẻ token, sub/hàm làm việc xét token, tuỳ theo trị mà biết ai cần mình làm gì.
 
Upvote 0
Web KT

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

Back
Top Bottom