Chuyển tổ hợp công thức excel sang macro (1 người xem)

  • Thread starter Thread starter Chaytui
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Chaytui

Thành viên mới
Tham gia
27/12/07
Bài viết
12
Được thích
1
Hình như chức năng đính kèm file gặp vấn đề. Đây là link download file ạ.
http://ubuntuone.com/186P4z8eaSI4XTaHQV4o7T

Thưa các bác.

Em phải xử lý lượng dữ liệu quá lớn, dùng công thức excel thấy đuối +-+-+-++-+-+-++-+-+-+ nên mạo muội khuân lên đây nhờ các bác chuyển sang VBA cho tiện ạ. File đính kèm gồm có hai file được trình bày ở dưới. Em phải tách chúng làm 2 file nhằm giảm bớt dung lượng, tiện cho việc thao tác. Khi viết macro nhờ các bác chỉ làm trong 1 file cho tiện thôi ạ.

Trong 2 file đính kèm, dữ liệu gốc cần xử lý nằm trong vùng E8:F484. Em nhờ các bác tạo giúp một hộp nhập đầu vào vùng cần xử lý dữ liệu riêng. Chẳng hạn nếu em chỉ muốn xử lý dữ liệu ở vùng E8:F100 thì em chỉ cần nhập E8:F100, macro sẽ chỉ xử lý dữ liệu vùng đó...

Em xin chân thành cám ơn các bác đã ra tay giúp đỡ.

========================================================

A. File GPEPrepare có 5 sheet, công việc tuần tự như sau:

========================================================

1.sheet max:
- dữ liệu sẵn có ở vùng E8:E484.

- paste công thức sau vào ô H8, rồi copy công thức ở ô H8 dán vào vung H8:RP484

=IF($A8>H$1,IF($E8>MAX(H7:H$8),$E8,""),"")

- Mục đích là tách được các chuỗi tăng theo chiều từ trên xuống dưới trong cột dữ liệu cho trước

2. sheet min:
- dữ liệu sẵn có ở vùng F8:F484
- paste công thức sau vào ô H8, rồi copy công thức ở ô H8 vào vùng H8:RP484

=IF($A8>H$1,IF($A8=H$1+1,$F8,IF($F8<MIN(H7:H$8),$F8,"")),"")

- Mục đích là tách được các chuỗi giảm theo chiều từ trên xuống dưới ở cột dữ liệu cho trước

3. sheet maxFill
- paste công thức sau vào ô H8, rồi copy công thức ở ô H8 để dán vào vùng H8:RP484

=IF(max.$A8>max.H$1, IF(AND(ISBLANK(max.H8)=1,ISBLANK(min.H8)=1)=0, IF(ISBLANK(max.H8)=1,MAX(max.H7:max.H$8),max.H8),""),"")

1 số ví dụ để minh họa ý nghĩa của công thức trên:

- max.H20 và min.H20 đều trống thì maxFill.20 cũng để trống.
- max.H21 trống trong khi min.H21 thì không, do vậy maxFill.H21 = max(max.H20:maxH$8)

4. Sheet minFill
- paste công thức sau vào ô H8, rồi copy công thức ở ô H8 đem dán vào vùng H8:RP484


=IF(min.$A8>min.H$1,IF(AND(ISBLANK(max.H8)=1,ISBLANK(min.H8)=1)=0,IF(ISBLANK(min.H8)=1,MIN(min.H7:min.H$8),min.H8),""),"")

1 số ví dụ để minh họa ý nghĩa của công thức trên:

- Do min.H10 trống, max.H10 có dữ liệu, do vậy minFill.H10 =min (min.H9:min.H$8). Tương tự với các ô minFill.H11, minFill.H12, minFill.H13, minFill.H14 …
- max.H18 và min.H18 đều trống, do vậy minFill.H18 để trống

5. Sheet cc
- Copy vào H8, rồi copy công thức ở ô H8 đem dán vào vùng H8:RP484

=IF(AND(ISBLANK(maxFill.H8)=1,ISBLANK(minFill.H8)=1)=0,CONCATENATE(maxFill.H8,",",minFill.H8),"")

- Đây là ghép các giá trị ở maxFill và minFill.

Ví dụ: maxFill.H15 và minFill.H15 đều trống nên cc.H15 cũng để trống. Ở giữa các giá trị ghép có dấu “,” để ngăn cách.

=====================================================

B. File GPEdon du lieu có 3 sheet. Cụ thể như sau:

=====================================================

1. Sheet cc
Các giá trị của sheet này được copy từ sheet cc của file GPEPrepare

2. Sheet loaiOtrong
copy công thức sau rồi dán vào H8. =IF(ROWS(cc.$A$1:cc.$RP1)>COUNT(IF(cc.H$8:cc.H$484<>"",ROW(cc.$A$1:cc.$RP$484))),"",INDEX(cc.H$8:cc.H$484,SMALL(IF(cc.H$8:cc.H$484<>"",ROW(cc.$A$1:cc.$RP$484),""),ROWS(cc.$A$1:cc.$RP1))))
giữa ctrl + shift roi di chuột toàn vùng H8:RP484

mục đích loại bỏ các ô trống ở các cột dữ liệu trong vùng cc.H8:RP484

3. Sheet transpose
Dữ liệu ở vùng loaiOtrong.H8:RP484 được copy paste sang vùng transpose.H8:RP484, chỉ paste giá trị, không paste công thức, paste theo kiểu transpose
 
Lần chỉnh sửa cuối:
Hic các bác ra tay giúp em code vba với. Em làm bằng tay cứ nhầm lẫn liên tục :(

Merci các bác!
 
Upvote 0
Thường những bài diễn giải dài dòng là những bài khó hiểu. Tìm mãi cũng không thấy file đính kèm ở đâu cả.
 
Upvote 0
Hic các bác ra tay giúp em code vba với. Em làm bằng tay cứ nhầm lẫn liên tục :(

Merci các bác!
Hihi, thật tình mình cóc có dám đọc hết bài của bạn, mới đọc có tý tẹo muốn............tỉnh luôn ( phí 5 chai bia của mình rồi, huhu), tạm thời làm trước một em :max, nếu đúng thì từ từ làm tiếp
Ở sheet 1, phang dzô đầu con "meo meo" một cái, xuất hiện bảng, chọn vùng muốn " làm cái quái gì thấy mà ghê í " ( thí dụ [E8:E100] ) xong rồi thì "Èn En En Én Tơ"
Híc. "Dzái Trời" làm trật
Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hihi, thật tình mình cóc có dám đọc hết bài của bạn, mới đọc có tý tẹo muốn............tỉnh luôn ( phí 5 chai bia của mình rồi, huhu), tạm thời làm trước một em :max, nếu đúng thì từ từ làm tiếp
Ở sheet 1, phang dzô đầu con "meo meo" một cái, xuất hiện bảng, chọn vùng muốn " làm cái quái gì thấy mà ghê í " ( thí dụ [E8:E100] ) xong rồi thì "Èn En En Én Tơ"
Híc. "Dzái Trời" làm trật
Thân

Ui, bác đỉnh thế :D. Cảm ơn bác nhiều, mời bác tiếp tục ra tay ạ :)

// Phải tối ngày kia em lại mới ngồi trước máy tính được, nên chắc sẽ chậm phản hồi, mong các bác lượng thứ và tiếp tục giúp đỡ em ạ. Cảm ơn các bác nhiều :)
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom