Hỏi về cách chuyển đổi dữ liệu (từ chiều dọc thành chiều ngang) (1 người xem)

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

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

KUMI

Bụi phấn
Tham gia
17/1/12
Bài viết
564
Được thích
571
Xin chào các Thầy Cô & Anh Chị trong GPE!
Em có một bài toán và câu hỏi đã để trong file đính kèm.
Thầy Cô & ANh CHị xem có cách nào không giúp em với ạ!
Em xin cảm ơn!
 

File đính kèm

Xin chào các Thầy Cô & Anh Chị trong GPE!
Em có một bài toán và câu hỏi đã để trong file đính kèm.
Thầy Cô & ANh CHị xem có cách nào không giúp em với ạ!
Em xin cảm ơn!

Có hàm =TRANSPOSE(D16:D21) kết thúc Ctrl+Shift+Enter
nhưng cái đối số của hàm làm thế nào để linh hoạt và Copy công thức xuống thì mình chưa tính ra
mình định kết hợp với Offset vào thêm nữa
 

File đính kèm

Upvote 0
Có hàm =TRANSPOSE(D16:D21) kết thúc Ctrl+Shift+Enter
nhưng cái đối số của hàm làm thế nào để linh hoạt và Copy công thức xuống thì mình chưa tính ra
mình định kết hợp với Offset vào thêm nữa
Cảm ơn Anh đã quan tâm và giúp đỡ.
Ôi nhưng mà nếu dùng hàm kiểu này thì cũng tương đối vất vả không kém gì thủ công Anh nhỉ..hihi.
--------------
Thầy cô & Anh Chị xem còn cách nào không ạ giúp em với nhe' !!Tks!!
 
Upvote 0
Cảm ơn Anh đã quan tâm và giúp đỡ.
Ôi nhưng mà nếu dùng hàm kiểu này thì cũng tương đối vất vả không kém gì thủ công Anh nhỉ..hihi.
--------------
Thầy cô & Anh Chị xem còn cách nào không ạ giúp em với nhe' !!Tks!!

Dùng VBA thử xem:
Mã:
Sub Test()
  Dim aSrc, arr()
  Dim lR As Long, lC As Long, i As Long
  aSrc = Sheet1.Range("C16:D50").Value
  ReDim arr(1 To UBound(aSrc, 1), 1 To 1)
  On Error Resume Next
  For i = 1 To UBound(aSrc, 1)
    If aSrc(i, 1) = "x" Then
      lR = lR + 1
      lC = 0
    End If
    If lR Then
      lC = lC + 1
      If lC > UBound(arr, 2) Then ReDim Preserve arr(1 To UBound(aSrc, 1), 1 To lC)
      arr(lR, lC) = aSrc(i, 2)
    End If
  Next
  Sheet1.Range("I16").Resize(lR, UBound(arr, 2)).Value = arr
End Sub
 
Upvote 0
Thật sự mà nói thì...mỗi lần Thầy xuất hiện là Em có cảm giác rất yên tâm.
Trước mắt với code trên của thầy cho file kèm là không chê vào đâu được.
Nếu trong quá trình vận dụng có chỗ nào vướng mắc phiền Thầy và Anh Chị giúp đỡ thêm nhé!
Cảm ơn Thầy,Cảm ơn GPE!
 
Upvote 0
Xin chào các Thầy Cô & Anh Chị trong GPE!
Em có một bài toán và câu hỏi đã để trong file đính kèm.
Thầy Cô & ANh CHị xem có cách nào không giúp em với ạ!
Em xin cảm ơn!

ndu chơi code thì tôi thử chơi công thức. Nếu dữ liệu không nhiều thì bạn tham khảo công thức sau. Chỉ để tham khảo thôi chứ VBA là "đặc sản" rồi.
-------------
Vì vùng dữ liệu thực có thể khác hoặc thay đổi theo năm tháng nên tôi đặt thành name data để khi thay đổi thì chỉ sửa một chỗ.
Đặt name data:
Mã:
=$D$16:$D$46

Đặt name arr:
Mã:
=IF((OFFSET(data;;-1;ROWS(data)+1;1)="x")+ (ROW(INDIRECT("$1:$"&ROWS(data)+1))=ROWS(data)+1)>0;ROW(INDIRECT("$1:$"&ROWS(data)+1));"")

công thức cho ô ở góc trái bên trên:
Mã:
=IF(ROWS($1:1)>COUNTA(OFFSET(data;;-1));"";IF(COLUMNS($A:A)>SMALL(arr;ROWS($1:1)+1)-SMALL(arr;ROWS($1:1));"";INDEX(data;SMALL(arr;ROWS($1:1))+COLUMNS($A:A)-1)))

Kéo sang phải và xuống dưới khi nào mỏi tay thì thôi.
Nhiều khi lười hoặc để ngắn gọn ta không phục vụ lỗi khi vượt khỏi vùng kết quả thì kéo tới khi gặp lỗi thì dừng. Ở đây bạn có thể kéo mệt nghỉ.
 
Lần chỉnh sửa cuối:
Upvote 0
Hix! @@!Cảm ơn Thầy! 2 Thầy thật đúng với cái danh hiệu "Người Ngoài Hành Tinh" rồi,Con nhìn cái Hàm của Thầy siwtom cũng "Mù Cang Trải" chẳng khác gì code của Thầy NDU ... :v
Đúng là Con thích dùng hàm có sẵn hơn vì nó rất dễ vận dụng.
Nhưng xem ra cũng tùy từng trường hợp nào là nên dùng Hàm hay dùng VBA ạ. Nếu dùng hàm mà file ì ạch thì con sẽ xài code, hehe..
------------
Bài viết nào mà được sự quan tâm và sự đóng góp nhiệt tình của 2 Thầy thì thật là quý giá! ^_^
Cảm ơn GPE!
 
Upvote 0
dhn46 cũng góp vui với topic 1 công thức
Đặt trỏ chuột tại I16 đặt Name
1/ cArea
Mã:
=SUMPRODUCT((GPE!$I$15:$CC15<>"")*1)+SUMPRODUCT((GPE!$H16:H16<>"")*1)
2/ Công thức tại I16
Mã:
=IF(cArea>=COUNTIF($D$16:$D$47,"<>"),"",IF(COUNTIF(OFFSET($C$16,,,cArea+1,1),"x")>ROW(1:1),"",OFFSET($D$16,cArea,0)))
Kéo mỏi tay thì thôi!
 
Upvote 0
dhn46 cũng góp vui với topic 1 công thức
Đặt trỏ chuột tại I16 đặt Name
1/ cArea
Mã:
=SUMPRODUCT((GPE!$I$15:$CC15<>"")*1)+SUMPRODUCT((GPE!$H16:H16<>"")*1)
2/ Công thức tại I16
Mã:
=IF(cArea>=COUNTIF($D$16:$D$47,"<>"),"",IF(COUNTIF(OFFSET($C$16,,,cArea+1,1),"x")>ROW(1:1),"",OFFSET($D$16,cArea,0)))
Kéo mỏi tay thì thôi!

Code hay lắm nên có kéo mỏi tay cũng vẫn thích.
Kiểu này tôi phải update liên tục thông tin thôi. Từ xưa tới nay nghe thiên hạ đồn thổi rằng có vị nào đó ở Biên Hòa có mỗi 1 đĩa món "trí khôn" thì vị gắp hết không thèm nhìn ai. Hóa ra là trong khi vị đó đi ói thì có một vị khác ở Hải Phòng thừa cơ gắp lia lịa. He he he.
 
Upvote 0
Code hay lắm nên có kéo mỏi tay cũng vẫn thích.
Kiểu này tôi phải update liên tục thông tin thôi. Từ xưa tới nay nghe thiên hạ đồn thổi rằng có vị nào đó ở Biên Hòa có mỗi 1 đĩa món "trí khôn" thì vị gắp hết không thèm nhìn ai. Hóa ra là trong khi vị đó đi ói thì có một vị khác ở Hải Phòng thừa cơ gắp lia lịa. He he he.

Có 1 đĩa "Pivot" mời khắp tứ phương, nhưng anh siwtom chê ...
 
Upvote 0
Có 1 đĩa "Pivot" mời khắp tứ phương, nhưng anh siwtom chê ...

Anh nói thế là không đúng đâu. Không phải là tôi chê ...

Từ khoảng 1 năm nay tôi mới nghiên cứu Excel - trước đó chả làm gì cần tới Excel cả, bây giờ cũng không cần - nên cứ từ từ lần lượt. Tôi vào GPE chỉ vì "từ bỏ" box Toán trên YH&Đ. Mà đã vào rồi thì phải tìm hiểu. Về công thức, code thì dễ rồi vì là lập trình. Ai đã từng lập trình trong 1 ngôn ngữ nào đó thì sẽ học lập trình trong ngôn ngữ khác rất nhanh. Vì lập trình chẳng qua là "tư duy --> tìm ra thuật toán --> code theo thuật toán đã tìm được trong ngôn ngữ cụ thể". Tư duy và thuật toán không phụ thuộc vào ngôn ngữ lập trình. Nếu đã quen lập trình trong ngôn ngữ nào đó thì ắt quen tư duy, quen thuật toán. Mà về code thì các ngôn ngữ có những cấu trúc dữ liệu giống nhau, có những cấu trúc ngôn ngữ như nhau. Về cú pháp có thể hơi khác trong mỗi ngôn ngữ nhưng IF, vòng lặp, select case ... thì ở đâu triết lý cũng như nhau. Vậy thì chỉ cần làm quen với cú pháp. ndu cứ không tin là tôi mới biết Excel - nghe nói thì từ lâu rồi - hơn 1 năm. Nhưng nói cho cùng thì đã quen tư duy, quen tìm thuật toán và hiểu được các cấu trúc cơ bản trong lập trình thì việc chuyển sang ngôn ngữ khác rất nhanh.
Pivot thì lúc nào có hứng tôi sẽ nghiên cứu sâu.
Còn một cái nữa: tôi không thích "thi thố" nên không tham gia. Nếu là mang vấn đề ra để chia sẻ, mọi người cùng tham gia, tuy có ganh đua về cách giải quyết nhưng nó khác với cuộc thi khi có "ban giám khảo" cho điểm, lựa chọn, có phần thưởng. Mà một khi tôi không tham gia thì mọi "đòn" đánh vào lòng hiếu thắng không có tác dụng gì với tôi.
 
Upvote 0
Còn một cái nữa: tôi không thích "thi thố" nên không tham gia. Nếu là mang vấn đề ra để chia sẻ, mọi người cùng tham gia, tuy có ganh đua về cách giải quyết nhưng nó khác với cuộc thi khi có "ban giám khảo" cho điểm, lựa chọn, có phần thưởng. Mà một khi tôi không tham gia thì mọi "đòn" đánh vào lòng hiếu thắng không có tác dụng gì với tôi.

Thật ra nhân câu chuyện anh nói vui nên tôi góp vui thêm 1 tiếng.Ý của tôi không phải là khích tướng hay "đánh 1 đòn vào lòng hiếu thắng". Anh có hiếu thắng đâu mà "đánh".
Vấn đề chỉ là tôi đọc bài nhiều, nên biết ai giỏi cái gì, chuyên cái gì, và không chuyên cái gì. Ai đã biết gì, đang nghiên cứu gì và cái gì chưa nghiên cứu. Đâu chỉ 1 topic thi thố kia, rất nhiều topic liên quan Pivot anh đâu có tham gia, nên nói chọc anh cho vui.

Nói thêm:

Cỡ như Hai Lúa nghiên cứu chuyên về ADO, mở 1 topic hướng dẫn ADO, 1 topic bài tập ADO, lẫy lừng như thế mà tôi cũng liệt kê vào danh sách để chọc về Pivot, cùng với cả ndu. Còn anh siwtom, anh viết những đoạn code mà tôi đọc xong phải ngỡ ngàng, có đoạn đọc xong lặng lẽ nhấn cám ơn rồi để dành nghiên cứu sau, ... Thì đâu thể "chọt" anh cho vui về VBA được, phải tìm chỗ khác chứ lỵ.
 
Upvote 0
Thêm 1 cách có dùng cột phụ:

Cột phụ phải có ít nhất 1 dòng trống bên trên. Ở đây là cột H, bắt đầu từ H22, H21 phải trống:

H22=IFERROR(MATCH("*";OFFSET($C$16:$C$46;H21;0);0)+H21;ROWS($C$16:$C$46))

Kéo xuống mỏi tay thì thôi

Dữ liệu kết quả:

I22 =IF(COLUMNS($A:A)-1+$H22<$H23;OFFSET($D$15;COLUMNS($A:A)-1+$H22;0);"")

Cũng kéo xuống và qua phải mỏi tay thì thôi.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thêm một cách khác, lần này không đặt tên cho vùng dữ liệu

Chọn ô I16 rồi đặt 2 name

Mã:
[B][COLOR=#ff0000]arr[/COLOR][/B]
=IF(ROW($1:$31)=31;31;IF($C$16:$C$46="x";ROW($1:$31)-1;""))

[B][COLOR=#ff0000]currPos[/COLOR][/B]
=SMALL(arr;ROWS($1:1))+COLUMNS($A:A)

Công thức cho I16
Mã:
=IF(ROWS($1:1)>COUNT(arr)-1;"";IF(currPos>SMALL(arr;ROWS($1:2));"";OFFSET($D$16;currPos-1;0)))

Tất nhiên như thường lệ thì kéo xuống tới khi mỏi tay. Chưa mỏi tay thì chưa "cho về".
 
Upvote 0
Đổi cách trên 1 xíu, cũng dùng cột phụ H

H22 =IFERROR(MATCH("*";OFFSET($C$16:$C$46;H21;0);0)+H21;ROWS($C$16:$C$46)+1)

Kéo xuống đến khi mỏi tay

I22 =IFERROR(INDEX(OFFSET($D$15;$H22;;$H23-$H22;);COLUMNS($A:A);1);"")

Kéo ngang mỏi tay thì ngưng, kéo xuống tới khi thấy "chết tiệt" thì ngưng.
 
Upvote 0
mỗi lần các sư phụ ra tay là em phải mất thời gian mà hại não +-+-+-+ Đúng là kiến thức vô bờ vô bến thật, không biết bao giờ mới đạt 1/10 trình độ các sự phụ đây nữa !
 
Upvote 0
Hix.../v\ỏi Tay WWa'a' ... huhuhu... :( ..các Thầy tha cho con.. ^_^

ndu chơi code thì tôi thử chơi công thức...
Kéo sang phải và xuống dưới khi nào mỏi tay thì thôi... Ở đây bạn có thể kéo mệt nghỉ.

dhn46 cũng góp vui với topic 1 công thức
...
Kéo mỏi tay thì thôi!

Thêm 1 cách có dùng cột phụ:
...
Cũng kéo xuống và qua phải mỏi tay thì thôi.

Thêm một cách khác, lần này không đặt tên cho vùng dữ liệu
...
Tất nhiên như thường lệ thì kéo xuống tới khi mỏi tay. Chưa mỏi tay thì chưa "cho về".

Đổi cách trên 1 xíu, cũng dùng cột phụ H
........
Kéo ngang mỏi tay thì ngưng, kéo xuống tới khi thấy "chết tiệt" thì ngưng.

----------------------
@@-+*/!$@!!**~**@@

Cười không mà muốn Chết mất thôi... Kumi không những được các Thầy tận tình chỉ bảo cho kiến thức mà còn được 1 trận cười vang cả nhà.. bé con đang ngủ phải giật mình tỉnh giấc.. :) :v

Phải chốt hạ rằng 1 sự thật không thể chối cãi được: "Cánh Mày Râu" rất thích mỏi tay
hohoho... nhưng mà các Thầy nhớ là chỉ được ở nhà thôi nhé... chứ ở đâu đó thì KUMI e là cánh Chị Em phụ nữ sẽ cho cánh Mày Râu => khóc bằng tiếng IRắc đấy.. khà khà!
-----------
Đổi cách trên 1 xíu, cũng dùng cột phụ H
........
Kéo ngang mỏi tay thì ngưng, kéo xuống tới khi thấy "chết tiệt" thì ngưng.
Con đã nghe cái danh hiệu "Chết Tiệt"của Thầy từ lâu hình như là cái bài nào đó nói về bắt lỗi chính tả của Thầy thì phải..
Nhưng con không muốn nhìn thấy "Chết Tiệt" đâu mà muốn nhìn thấy khổng tử "P.T.Mỹ" thôi ạ!^^
-----------
dhn46 cũng góp vui với topic 1 công thức
...
Kéo mỏi tay thì thôi!

Anh Trai giờ cũng Cơ Bắp phết! Tiến bộ trông thấy! Cố lên Anh!!! (^_-)!
--------
Nói thêm:
Cỡ như Hai Lúa nghiên cứu chuyên về ADO, mở 1 topic hướng dẫn ADO, 1 topic bài tập ADO, lẫy lừng như thế ...
Anh Hai xem thế nào để Thầy nhắc đến Tên và nêu cả những chiến tích lững lẫy ra mà vẫn chưa chịu xuất hiện nhỉ... -=09=
Anh có thể đi 1 đường quyền ADO hay DAO gì đó để những ai muốn quan tâm về ADO hay DAO gì đó tìm hiểu thêm được không ạ!Em thì xin hàng vì chưa đủ công lực để lĩnh hội.. nguyện xin làm chân kèn trống để cổ vũ...
:blowup::blowup::blowup::blowup: %$$ :clap2::clap2::clap2:
__________________
XIN CẢM ƠN GPE!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom