PDA

View Full Version : Trong Excel có hàm giúp chuyển số liệu theo cột sang theo hàng ko?



11tn2
06-04-2011, 09:57
Chào mọi người. Ko biết có hàm nào giúp chuyển 1 cột dữ liệu sang 1 hàng dữ liệu và ngược lại ko. Nếu có thì chỉ cho tôi biết với. Cảm ơn.

singlestarhp
06-04-2011, 10:20
Bạn copy cột(hoặc hàng đó), sau đó Click chuột phải vào vùng cần để, chọn "Paste Special", trong mục đó chọn "Transpose". Vậy là Ok

tam_giang
06-04-2011, 11:04
Không có hàm nào cả, bạn phải làm như hướng dẫn ở trên (copy, pastes special) hoặc tự viết macro làm chuyện này. Trước đây tôi có viết 1 cái, để tìm lại được tôi post lên sau.

megaownage
06-04-2011, 13:28
Tùy theo định nghĩa 'chuyển' của bạn là gì:

Nếu bạn muốn copy dữ liệu côt->dòng; dòng->cột thì không có hàm nào cả. Bắt buộc phải dùng phương pháp paste special nêu trên

Nếu bạn muốn chuyển dạng dữ liệu để thao tác thì Excel có hàm tên là Transpose(range). Đây là hàm array nên nên lúc dùng phải nhớ cách ghi hàm array

Tuy nhiên, hàm này không cho ra kết quả giống như cách copy/paste. Vì vậy bạn phải chọn lựa tùy theo muốn chuyển ra sao:

- Nếu chỉ chuyển dữ liệu 1 lần thì dùng cách copy/paste special

- Nếu muốn đám dữ liệu mới vẫn còn liên hệ với đám cũ thì dùng hàm (sau khi dùng, đám dữ liệu mới sẽ là một array, và Excel không cho phép bạn sửa từng phần tử của array)

tam_giang
06-04-2011, 16:48
Như tôi viết ở trên, tôi có 1 macro tôi viết cũng lâu lâu rồi, tìm chưa ra. Bạn thử dùng cái này xem sao. Macro này không dùng được cho 1 cột hay 1 hàng mà dùng cho cả table:

Sub macro()
Dim rngFirstSrc As Range
Dim rngLastSrc As Range
Dim intDestCol As Integer
Dim intDestRow As Integer
Dim rngCell As Range
Dim blnFirst As Boolean

'set flag for First address
blnFirst = True
'Get first cell in range
Set rngFirstSrc = ActiveCell
'find last entry in column
Set rngLastSrc = Cells(65534, ActiveCell.Column).End(xlUp)
'set first destination column
intDestCol = 1
'set first destination row
intDestRow = 1
'loop through all source cells
For Each rngCell In Range(rngFirstSrc, rngLastSrc)
'only do something if the source cell is not empty
If rngCell.Value <> "" Then
'test if there is a number in the cell, and its not the first address found
If IsNumeric(rngCell.Value) And blnFirst = False Then
'then test that it is less than 1000
If rngCell.Value < 1000 Then
'go to next row in destination
intDestRow = intDestRow + 1
'reset column counter
intDestCol = 1
End If
ElseIf IsNumeric(rngCell.Value) And rngCell.Value < 1000 Then
'change first address flag when first number <1000 found
blnFirst = False
End If
'copy cell contents
'but first see if it contains 'Tel'
If InStr(1, rngCell.Text, "Tel") = 0 Then
'if Tel is not in the text copy all the data in the cell
Worksheets("Sheet2").Cells(intDestRow, intDestCol).Value = rngCell.Value
Else
'copy the data as two items with Tel.No. in next column
Worksheets("Sheet2").Cells(intDestRow, intDestCol).Value = _
Left(rngCell.Text, InStr(1, rngCell.Text, "Tel") - 1)
'increment column counter
intDestCol = intDestCol + 1
Worksheets("Sheet2").Cells(intDestRow, intDestCol).Value = _
Right(rngCell.Text, Len(rngCell.Text) - InStr(1, rngCell.Text, "Tel") + 1)
End If
'increment column counter
intDestCol = intDestCol + 1
End If
Next rngCell
End Sub
Bạn phải thay đổi chút xíu cho phù hợp với file của bạn.

11tn2
07-04-2011, 09:36
Ừm.. Tôi dùng Paste special ngon lành rồi. Thế mà trước nay ko biết. Cảm ơn mọi người nhá.