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
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



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,""),"")
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: