Sub này cho dữ liệu và kết quả như trong file của bạn.Em có 1 vùng dữ liệu 2 chiều cần chuyển về dạng 1 chiều như att file. Nếu dùng công thức chắc sẽ không làm được, vậy em nhờ các bác có thể dùng VBA chuyển giúp em được không ạ. Em xin cảm ơn!
Em có 1 vùng dữ liệu 2 chiều cần chuyển về dạng 1 chiều như att file. Nếu dùng công thức chắc sẽ không làm được, vậy em nhờ các bác có thể dùng VBA chuyển giúp em được không ạ. Em xin cảm ơn!
$C$3:$F$7
=SMALL(IF(data="";"";100*(ROW(data)-2)+COLUMN(data)-2);ROWS($1:1))
=INDEX(data;INT(pos/100);MOD(pos;100))
=INDEX($C$2:$F$2;MOD(pos;100))
=INDEX($B$3:$B$7;INT(pos/100))
Bác Siwtom có thể giúp tiếp em vụ này không ạ?
Em nghĩ bác hiểu được luôn ý em. ^^
Em chú thích như sau:
3 trường dữ liệu là khác nhau.
Bàng 1 Ví dụ: tương ứng giá trị L = a,
Bảng 2 tường ứng a = x, y, z ( 3 giá trị), (sắp xếp thế nào không quan trọng.)
Bảng tổng: tương ứng với bao nhiêu giá trị của a ở bảng 2 ta có bấy nhiêu giá trị L ở bảng tổng ( 3 giá trị), tương tự với các giá trị khác ở bảng 1.
Em kết bác vì công thức phía trên nên hỏi riêng ạ. ^^
- Vâng, dữ liệu của 2 có 2 cột thôi ( nhưng nếu có thêm cột nữa thì nó cũng liên kết với bàng 2 qua cột " Syb")
- Nếu dữ liệu của em nhiều quá em đặt xuống dưới nữa, hoặc đặt lệch cột sang bên phải thôi. Ví dụ từ: I:K
Thêm dòng không thể ngóm.Thành thật cảm ơn bác!
Nhưng đọc code em chả hiểu gì. Nếu là công thức chắc em hiểu mà modify được, code này nếu thêm dòng thêm cột là tắt ngóm.
Lựa chọn luôn thuộc về bạn. Không ai ép bạn.Em cố tìm hiểu bằng công thức thêm vậy.
Nếu bạn muốn thử công thức thì thử xem sao nhé (làm chơi thôi, chứ code trong trường hợp này dễ hiểu và nhanh hơn cả)Em cố tìm hiểu bằng công thức thêm vậy.
ArrCode=($B$6:$B$9)
ArrSyb1=($C$6:$C$9)
ArrSyb2=($E$6:$E$11)
Arrtex=($F$6:$F$11)
DataTab=ArrCode&TRANSPOSE(ArrSyb2&Arrtex)
IDrow=ROWS(ArrSyb1)+1-LARGE((ArrSyb1=TRANSPOSE(ArrSyb2))*(ROWS(ArrSyb1)+1-ROW(INDIRECT("1:"&ROWS(ArrSyb1)))),ROW(INDIRECT("1:"&ROWS(ArrSyb1)*ROWS(ArrSyb2))))
IDcol=MOD(LARGE((ArrSyb1=TRANSPOSE(ArrSyb2))*(TRANSPOSE(ROW(INDIRECT("1:"&ROWS(ArrSyb2))))+(ROWS(ArrSyb1)-ROW(INDIRECT("1:"&ROWS(ArrSyb1))))*10^6),ROW(INDIRECT("1:"&ROWS(ArrSyb1)*ROWS(ArrSyb2)))),10)
=MID(INDEX(DataTab,INDEX(IDrow,ROW(1:1)),INDEX(IDCol,ROW(1:1))),COLUMN(A:A),1)
Cám ơn các bác, bác tttmuahmuah em châm cứu cả buổi mà không hiều nổi. Em đành làm thêm 1 bảng trung gian rồi làm theo cách cũ của bác Siwtom
Cái chuyển mảng 2 chiều sang 1 chiều ý bác.
Bác xem trong att file nhé.
Bác lại qua giúp em vụ này nhé. ^^
http://www.giaiphapexcel.com/forum/showthread.php?93230-Dò-tìm-tổng-khoảng-giá-trị-lân-cận-liên-tục
Thank bác!
=[COLOR=#ff0000]$C$6[/COLOR]
=[COLOR=#ff0000]$G$6:$I$11[/COLOR]
=[COLOR=#ff0000]$C$6:$D$9[/COLOR]
=[COLOR=#ff0000]$E$6:$E$9[/COLOR]
=[COLOR=#ff0000]$G$6:$G$11[/COLOR]
=LOOKUP(ROW()-ROW(FirstCellBang1);[COLOR=#ff0000]$A$5:$A$8[/COLOR];ROW(sybBang1)-ROW(FirstCellBang1)+1)
=SMALL(arr;ROW()-ROW(FirstCellBang1)+1-INDEX([COLOR=#ff0000]$A$5:$A$8[/COLOR];posBang1))
=IF(sybBang2=INDEX(sybBang1;posBang1);ROW(sybBang2)-ROW(FirstCellBang1)+1;"")
=IF(COLUMN(A:A)>COLUMNS(codeBang1);INDEX(bang2;posBang2;COLUMN(A:A)-COLUMNS(codeBang1));INDEX(codeBang1;posBang1;COLUMN(A:A)))
=COUNTIF(sybBang2;[COLOR=#ff0000]$E6[/COLOR])
=SUM([COLOR=#ff0000]$B$5:$B5[/COLOR])