Nhờ mọi người trợ giúp tách dữ liệu trong excel! (1 người xem)

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

tranquansvc

Thành viên mới
Tham gia
4/11/11
Bài viết
5
Được thích
0
Chào mọi người!

Hiện tại mình đang gặp khó khăn trong việc tách các dữ liệu. Nhờ mọi người giúp đỡ!
Vấn đề như sau: Mình đang có 1 chuỗi tại ô A1: 300-1000,1001,1002,1003,301-1004,1005,302-1006
Cần tách thành:
300-1000
300-1001
300-1002
300-1003
301-1004
301-1005
302-1006
Mỗi giá trị trên dây nằm trên 1 o ô riêng biệt.
Chỉ sử dụng công thức excel thồi nhé, không dùng VBA hay các phần mềm khác.
Mọi người giúp đỡ mình nhé.
P/S: Có đến hơn 3000 dữ liệu nên không thể tách bằng tay được. hixhix.
 
Chào mọi người!

Hiện tại mình đang gặp khó khăn trong việc tách các dữ liệu. Nhờ mọi người giúp đỡ!
Vấn đề như sau: Mình đang có 1 chuỗi tại ô A1: 300-1000,1001,1002,1003,301-1004,1005,302-1006
Cần tách thành:
300-1000
300-1001
300-1002
300-1003
301-1004
301-1005
302-1006
Mỗi giá trị trên dây nằm trên 1 o ô riêng biệt.
Chỉ sử dụng công thức excel thồi nhé, không dùng VBA hay các phần mềm khác.
Mọi người giúp đỡ mình nhé.
P/S: Có đến hơn 3000 dữ liệu nên không thể tách bằng tay được. hixhix.
Bạn đưa file lên mới mong có kết quả
 
Chào mọi người!

Hiện tại mình đang gặp khó khăn trong việc tách các dữ liệu. Nhờ mọi người giúp đỡ!
Vấn đề như sau: Mình đang có 1 chuỗi tại ô A1: 300-1000,1001,1002,1003,301-1004,1005,302-1006
Cần tách thành:
300-1000
300-1001
300-1002
300-1003
301-1004
301-1005
302-1006
Mỗi giá trị trên dây nằm trên 1 o ô riêng biệt.
Chỉ sử dụng công thức excel thồi nhé, không dùng VBA hay các phần mềm khác.
Mọi người giúp đỡ mình nhé.
P/S: Có đến hơn 3000 dữ liệu nên không thể tách bằng tay được. hixhix.

Với dữ liệu có trên 3000 dòng + công thức mảng cho ô A1 --> File bị năng,
Cho hỏi dữ liệu ô A1 là bạn lấy từ đâu : -- nhập tay, hay là từ kết quả của phép tính khác
 
Cho em thử phát cả nhà nhé, 3000 dòng mà dùng công thức thì hơi nản, hì hì
PHP:
Sub Tach()
Dim i As Long, Sarr
Dim j As Long
[B2:B100].ClearContents
For i = 1 To Range("A1:A" & [A65536].End(3).Row).Rows.Count
Sarr = Split(Cells(i, 1), ",")
    For j = 0 To UBound(Sarr)
        [B65536].End(3).Offset(1).Value = Sarr(j)
   Next
Next
End Sub
 

File đính kèm

: Mình đang có 1 chuỗi tại ô A1: 300-1000,1001,1002,1003,301-1004,1005,302-1006
Cần tách thành:
300-1000
300-1001
300-1002
300-1003
301-1004
301-1005
302-1006
Mỗi giá trị trên dây nằm trên 1 o ô riêng biệt.
Cho em thử phát cả nhà nhé, 3000 dòng mà dùng công thức thì hơi nản, hì hì
PHP:
Sub Tach()
Dim i As Long, Sarr
Dim j As Long
[B2:B100].ClearContents
For i = 1 To Range("A1:A" & [A65536].End(3).Row).Rows.Count
Sarr = Split(Cells(i, 1), ",")
    For j = 0 To UBound(Sarr)
        [B65536].End(3).Offset(1).Value = Sarr(j)
   Next
Next
End Sub
Tức là : chuỗi 1-2,3,4-5 sẽ được tách thành 1-2 ;1-3 ; và 4-5 --> bạn bổ sung thêm điều kiện này vào code nhé !
 
Chào mọi người!

Mình tìm hoài mà không thấy mục để gửi file nên mọi người thông cảm dùm nhé.
Mình có một loạt dữ liệu , và 1 trong số đó có dạng như mình đã nói ( 300-1000,1001,1002,1003,301-1004,1005,302-1006).
Mình đặt dữ liệu trên ở ô A1 và cần tách thành các dữ liệu ở các ô B1 ,C1.... như sau:
Ô B1: 300-1000
Ô C1: 300-1001
Ô D1: 300-1002
Ô E1: 300-1003
Ô F1: 301-1004
Ô G1: 301-1005
Ô H1: 302-1006

D
ữ liệu đầu vào tại ô A1 nhập bằng tay (có sẵn hết rồi). Do dữ liệu này nhập không đúng nên cần tách lại toàn bộ. Số 300,301,302 trong dữ liệu là nhánh lớn, các số 1000,1001,1003... là các nhánh nhỏ. và các nhánh lớn thì có các nhánh nhỏ khác nhau.
Kiến thức hạn hẹp nên mong mọi ngừoi giúp đỡ bằng lệch excel để mình dễ làm nhé.
Cám ơn mọi người!
 
Lần chỉnh sửa cuối:
Tức là : chuỗi 1-2,3,4-5 sẽ được tách thành 1-2 ;1-3 ; và 4-5 --> bạn bổ sung thêm điều kiện này vào code nhé !
Ôi mình bị hoa mắt rồi bạn hungpecc ạ, hix hix, bạn ấy k chỉ muốn tách mà còn muốn nối giữa chừng nữa cơ, huhuhuhu
 
Chào mọi người!

Mình tìm hoài mà không thấy mục để gửi file nên. Mọi người thông cảm dùm nhé.
Mình có một loạt dữ liệu , và 1 trong số đó có dạng như mình đã nói ( 300-1000,1001,1002,1003,301-1004,1005,302-1006).
Mình đặt dữ liệu trên ở ô A1 và cân tách thành các dự liệu ở các ô B1 ,C1.... như sau:
Ô B1: 300-1000
Ô C1: 300-1001
Ô D1: 300-1002
Ô E1: 300-1003
Ô F1: 301-1004
Ô G1: 301-1005
Ô H1: 302-1006

D
ữ liệu đầu vào tại ô A1 nhập bằng tay (có sẵn hết rồi). Do dữ liệu này nhập không đúng nên cần tách lại toàn bộ. Số 300,301,302 trong dữ liệu là nhánh lớn, các số 1000,1001,1003... là các nhánh nhỏ. và các nhánh lớn thì có các nhánh nhỏ khác nhau.
Kiến thức hạn hẹp nên mong mọi ngừoi giúp đỡ bằng lệch excel để mình dễ làm nhé.
Mọi người giúp đỡ mình. Cám ơn mọi người!

Nén và up file lên cho dễ thao tác ( cứ giả lập mãi, vừa tốn thời gian, vừa tốn diện tích bài viết ), theo như bạn nói thì chưa chắc hàm excel đã dễ làm hơn code VBA đâu bạn nhé !
 
Lần chỉnh sửa cuối:
Mình gửi mọi người file dữ liệu nhé!
 

File đính kèm

Mình gửi mọi người file dữ liệu nhé!

Bài 1 bạn nói dữ liệu của bạn đến 3000 dòng, vậy mà gửi file lên cũng tiếc kiệm, chỉ gửi đúng 1 cell...
Vậy thì:
- Ai mà biết còn điều gì đặc biệt trong các cell khác hay không?
- Ai mà biết được 3000 dòng trong file của bạn đang được bố trí ra sao
- Ai mà biết sau khi tách ra xong, bạn muốn đặt kết quả vào đâu
vân... vân... nhiều thứ "ai mà biết" lắm
 
Chào mọi người!

Mình tìm hoài mà không thấy mục để gửi file nên mọi người thông cảm dùm nhé.
Mình có một loạt dữ liệu , và 1 trong số đó có dạng như mình đã nói ( 300-1000,1001,1002,1003,301-1004,1005,302-1006).
Mình đặt dữ liệu trên ở ô A1 và cần tách thành các dữ liệu ở các ô B1 ,C1.... như sau:
Ô B1: 300-1000
Ô C1: 300-1001
Ô D1: 300-1002
Ô E1: 300-1003
Ô F1: 301-1004
Ô G1: 301-1005
Ô H1: 302-1006

D
ữ liệu đầu vào tại ô A1 nhập bằng tay (có sẵn hết rồi). Do dữ liệu này nhập không đúng nên cần tách lại toàn bộ. Số 300,301,302 trong dữ liệu là nhánh lớn, các số 1000,1001,1003... là các nhánh nhỏ. và các nhánh lớn thì có các nhánh nhỏ khác nhau.
Kiến thức hạn hẹp nên mong mọi ngừoi giúp đỡ bằng lệch excel để mình dễ làm nhé.
Cám ơn mọi người!
Xem code này
PHP:
Sub tachtach()
Dim i, n, tam, kq(1 To 10000, 1 To 1)
tam = Split([C3], ",")
For i = 0 To UBound(tam)
   If InStr(tam(i), "-") Then
      n = i
      kq(i + 1, 1) = tam(i)
   Else
      kq(i + 1, 1) = Left(tam(n), InStr(tam(n), "-")) & tam(i)
   End If
Next
[D5].Resize(i, 1) = kq
End Sub
 
Lần chỉnh sửa cuối:
Thanks Quang Hải. Nhưng mình không biết sử dụng VBA. ban xem dử liệu trong file đính kèm rồi giúp minh nhé.
Bạn sửa luôn trên file mình gửi cũng được, rồi mình copy dữ liệu vào đó.

Cám ơn Quang Hải và mọi người nhé.
(Mình gửi file có khoảng ~240 dữ liệu, chắc là đủ để làm rùi, 1 phần bị ẩn đi cho dễ nhìn chú thích phía dười, mọi ng chu ý nhé)
 

File đính kèm

Thanks Quang Hải. Nhưng mình không biết sử dụng VBA. ban xem dử liệu trong file đính kèm rồi giúp minh nhé.
Bạn sửa luôn trên file mình gửi cũng được, rồi mình copy dữ liệu vào đó.

Cám ơn Quang Hải và mọi người nhé.
(Mình gửi file có khoảng ~240 dữ liệu, chắc là đủ để làm rùi, 1 phần bị ẩn đi cho dễ nhìn chú thích phía dười, mọi ng chu ý nhé)

Với bài này mà bạn đòi dùng công thức thì... ôi thôi! Chắc chết luôn!
Không biết dùng VBA thì cố mà học để dùng (học lái xe chắc không khó hơn sửa xe đâu ha)
Còn nếu bạn cứ nhất định dùng công thức thì... Ẹc... Ẹc... THUA
 
Đây là file của cty nên bạn ấy muốn giữ bí mật ấy mà. Nên chỉ đưa ra một vài dòng để mọi người góp ý thôi? Mình cũng chả hiểu VBA là cái gì nữa
 
Đây là file của cty nên bạn ấy muốn giữ bí mật ấy mà. Nên chỉ đưa ra một vài dòng để mọi người góp ý thôi? Mình cũng chả hiểu VBA là cái gì nữa

Đưa dữ liệu như bài 12 là đủ để làm rồi (tổng quát)
Như đã nói ở trên: Không biết VBA là gì thì có thể học. Không học xem như thiệt thòi ráng chịu thôi
-----------------------------------------------------
Dù tác giả có muốn làm bài này bằng VBA hay không, tôi cũng cứ đưa giải pháp lên. Tác giả không thích, có thể các bạn khác thích (nghiên cứu giải thuật)
Mã:
Function SplitSpec(ByVal rng As Range)
  Dim Arr() As String, tmpArr, Item
  Dim i As Long, lR As Long, lC As Long
  Dim tmp1 As String, tmp2 As String, sPrefix As String
  On Error Resume Next
  tmpArr = rng.Value
  ReDim Arr(1 To UBound(tmpArr, 1), 1 To 1)
  For lR = LBound(tmpArr, 1) To UBound(tmpArr, 1)
    tmp1 = CStr(tmpArr(lR, 1))
    If Len(tmp1) Then
      tmp1 = Replace(tmp1, ",", " ")
      tmp1 = WorksheetFunction.Trim(tmp1)
      Item = Split(tmp1, " ")
      If UBound(Item) >= UBound(Arr, 2) Then ReDim Preserve Arr(1 To UBound(tmpArr, 1), 1 To UBound(Item) + 1)
      For lC = 0 To UBound(Item)
        tmp2 = Trim(Item(lC))
        If Len(tmp2) Then
          If InStr(1, tmp2, "-") Then
            sPrefix = Left(tmp2, InStr(1, tmp2, "-"))
          Else
            If Len(sPrefix) Then
              tmp2 = sPrefix & tmp2
            End If
          End If
        End If
        Arr(lR, lC + 1) = tmp2
      Next
    End If
  Next
  SplitSpec = Arr
End Function
Sub Main()
  Dim rng As Range, Arr
  On Error Resume Next
  Set rng = Sheets("Data").Range("A3:A10000")
  Arr = SplitSpec(rng)
  Sheets("Data").Range("C3:C10000").Resize(, UBound(Arr, 2)).Value = Arr
End Sub
Tải file về, nhấn nút 1 phát là xong!
 

File đính kèm

Thử làm công thức cho bạn
Đặt Name:
- Tach:
Mã:
=" "&TRIM(MID(SUBSTITUTE(Sheet1!$A3,",",REPT(" ",LEN(Sheet1!$A3))),(COLUMN(Sheet1!A:A)-1)*LEN(Sheet1!$A3)+1,LEN(Sheet1!$A3)))
- sPos
Mã:
=IF(MID(","&Sheet1!$A3,ROW(INDIRECT("1:"&LEN(Sheet1!$A3)+1)),1)=",",ROW(INDIRECT("1:"&LEN(Sheet1!$A3))),"")
-ePos
Mã:
=IF(MID(Sheet1!$A3&",",ROW(INDIRECT("1:"&LEN(Sheet1!$A3)+1)),1)=",",ROW(INDIRECT("1:"&LEN(Sheet1!$A3)+1))-1,"")
Công thức:
Mã:
=IF(ISERROR(Tach*1),Tach,LEFT(B3,FIND("-",B3)-1)&"-"&Tach)
Bạn xem File:
Diễn đàn bị lỗi không enter xuống dòng được => Bực bội!
 

File đính kèm

Thử làm công thức cho bạn
Đặt Name:
- Tach:
Mã:
=" "&TRIM(MID(SUBSTITUTE(Sheet1!$A3,",",REPT(" ",LEN(Sheet1!$A3))),(COLUMN(Sheet1!A:A)-1)*LEN(Sheet1!$A3)+1,LEN(Sheet1!$A3)))
- sPos
Mã:
=IF(MID(","&Sheet1!$A3,ROW(INDIRECT("1:"&LEN(Sheet1!$A3)+1)),1)=",",ROW(INDIRECT("1:"&LEN(Sheet1!$A3))),"")
-ePos
Mã:
=IF(MID(Sheet1!$A3&",",ROW(INDIRECT("1:"&LEN(Sheet1!$A3)+1)),1)=",",ROW(INDIRECT("1:"&LEN(Sheet1!$A3)+1))-1,"")
Công thức:
Mã:
=IF(ISERROR(Tach*1),Tach,LEFT(B3,FIND("-",B3)-1)&"-"&Tach)
Bạn xem File:
Diễn đàn bị lỗi không enter xuống dòng được => Bực bội!
Hãy thử công thức với file ở bài 12 xem! Chú ý cell A159 nhé (231, 924, 928, 931, 935)
Hic... ROW(INDIREC(...)) gì gì đó mà kéo fill 3000 dòng.. để xem nó thế nào đây
 



Dù sao cũng cám ơn bác ndu96081631. Để mình thử với cách của bác xem. Có gì khó khăn các bác lại giúp nhé! >
 
Hãy thử công thức với file ở bài 12 xem! Chú ý cell A159 nhé (231, 924, 928, 931, 935)
Hic... ROW(INDIREC(...)) gì gì đó mà kéo fill 3000 dòng.. để xem nó thế nào đây
Thầy, tại dữ lieu bạn ấy đưa không chuẩn
- 1 ô bao giờ cũng bắt đầu bằng số nhánh lớn 1, sau đó là nhánh nhỏ của nhánh lớn 1 đó.
. Mà thử công thức thui thầy chứ 3000 dòng thì cũng gay quá ta.
 

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

Back
Top Bottom