Bài này đúng ra phải dùng VBA, nhưng bất chợt nghĩ ra được 1 công thứcTôi muốn tách các dòng dữ liệu họ và tên trong một ô, thành hai dòng họ và tên, như file đính kèm
nhờ GPE giúp đỡ
cám ơn trước
=EVALUATE("{""" & SUBSTITUTE(OFFSET($B$7,INT((ROWS($1:1)-1)/2),COLUMNS($A:A)-1),CHAR(10),""";""") & """}")
Thử làm "thí thí" bằng công thức, đưa vào name, dài thòn thấy ghê!Tôi muốn tách các dòng dữ liệu họ và tên trong một ô, thành hai dòng họ và tên, như file đính kèm
nhờ GPE giúp đỡ
cám ơn trước
Tôi muốn tách các dòng dữ liệu họ và tên trong một ô, thành hai dòng họ và tên, như file đính kèm
nhờ GPE giúp đỡ
cám ơn trước
------Cảm ơn Ndu và Ba tê. Rất vui vì đã học được từ các bạn nhiều điều bổ ích và còn vui hơn nếu được các bạn giải thích ý nghĩa của các công thức trong Name
Dong1:
- Columns($B:B)= 1, dùng công thức này để khi kéo copy sang phải sẽ có lần lượt là columns($B:C)=2; Columns($B)=3… làm đối số cols cho hàm Offset().
=OFFSET($A$7;$A17-1;COLUMNS($B:B)) = Offset($A$17;0;1) = giá trị trong ô B7
- Char(10) = ký tự Alt+Enter (xuống hàng trong cùng một ô).
=FIND(CHAR(10);OFFSET(Sheet1!$A$7;Sheet1!$A17-1;COLUMNS(Sheet1!$B:B)))-1 = tìm vị trí ký tự xuống hàng nằm trong chuỗi ở ô B7.
=LEFT(OFFSET(Sheet1!$A$7;Sheet1!$A17-1;COLUMNS(Sheet1!$B:B));FIND(CHAR(10);OFFSET(Sheet1!$A$7;Sheet1!$A17-1;COLUMNS(Sheet1!$B:B)))-1) = Left(B7;kết quả của hàm Find() -1) . Không lấy ký tự xuống hàng.
Tương tự: Dong2:
=MID(OFFSET(Sheet1!$A$7;Sheet1!$A18-1;COLUMNS(Sheet1!$B:B));FIND(CHAR(10);OFFSET(Sheet1!$A$7;Sheet1!$A18-1;COLUMNS(Sheet1!$B:B)))+1;100) = Mid(B7; vị trí của ký tự xuống hàng +1, 100). Số 100 này là tôi tự ý đặt ra vì nghĩ rằng không ai có tên dài hơn 100 ký tự.
3. Công thức mảng của ndu… rất tuyệt, tôi tự ngẫm nghĩ có thể tự hiểu, giải thích không nổi.
Chúc Bạn vui.
Mình xin giải thích ngắn gọn công thức trong file như sau:Chào anh Tuấn !
Ạnh có thể giải thích rõ hơn một chút về công thức này được không ạ, vì sao khi gõ công thức xong rồi nhấn tổ hợp phím ctrl+shift+enter lại báo lỗi , còn khi gõ = tách rồi nhấn ctrl+shift+enter lại Ok.
Arr =EVALUATE("{"""&SUBSTITUTE(TRIM($A2)," ",""",""")&"""}")
=INDEX(Arr,,COUNTA(Arr))
=IF(COUNTA(Arr)=1,"",INDEX(Arr,,1))
Nếu lộn xộn thế, tôi nghĩ nên dùng code VBA sẽ tốt hơn (công thức chắc là thua)Một lần nữa vẫn phải nói lời cám ơn các Bạn, đã chỉ giáo.
Trong quá trình làm còn vấn đề nữa cần mọi người giúp:
Trong bảng trước đây từ một ô chỉ có 2 tên, nếu bây giờ có nhiều tên hơn, hay xen lần ít tên hơn, thì làm thế nào?
Mong mọi người giúp ( bảng đính kèm)
Nếu tất cả các cell đều có số lượng TÊN giống nhau thì vẫn dùng công thức cũ (chỉ sửa lại đôi chút)Để đơn giản Bạn có thể giúp trường hợp nhiều tên trong một ô thôi,
Tôi có thể copy những ô đó xử lí xong đưa về
cám ơn nhé
Đây gữi bạn 2 phương án: Dùng công thức và VBACám ơn bạn
Bạn cho mình 2 phương án:
1) sửa đôi chút cho số tên trong mỗi ô đều là 6 người chẳng hạn.
2) Dùng VBA cho trường hợp chung
Mình sẽ lựa chọn cách sử dụng sau
Private Sub SplitCell(SrcRng As Range, TargetCell As Range, Sep As String)
Dim i As Long, j As Long, k As Long, Arr
With WorksheetFunction
For j = 1 To SrcRng.Columns.Count
k = 1
For i = 1 To SrcRng.Rows.Count
Arr = Split(.Trim(SrcRng(i, j)), Sep)
TargetCell(k, j).Resize(UBound(Arr) + 1).Value = .Transpose(Arr)
k = k + UBound(Arr) + 1
Next i
Next j
End With
End Sub
Private Sub Com_OK_Click()
On Error GoTo ExitSub
SplitCell Range(SrcRef), Range(TarRef), Chr(10)
ExitSub:
End Sub
Private Sub Com_Exit_Click()
Unload Me
End Sub