Tách dữ liệu 1 cột thành nhiều cột (1 người xem)

Liên hệ QC

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

wuchengcai

Thành viên chính thức
Tham gia
22/6/10
Bài viết
87
Được thích
15
Mình đang có một nguồn dữ liệu Việt-Hán file Word. Hiện nay mình muốn chuyển toàn bộ dữ liệu từ file Word này sang Excel với cấu trúc là:
Cột A: Nghĩa tiếng Việt
Cột B: Nghĩa tiếng Hoa
Vì dữ liệu rất nhiều (khoảng 30000 từ vựng) nên không thể làm thủ công. Hôm nay mạn phép xin các bác cao thủ ra tay giúm mình xử lý dữ liệu này với.

Thanks!**~**
 

File đính kèm

Tại B1:
Mã:
=MID('Chua tach'!A1,MATCH(2,1/(CODE(MID('Chua tach'!A1,ROW(INDIRECT("1:"&LEN('Chua tach'!A1))),1))<>CODE(MID('Chua tach'!A1&"ộ",ROW(INDIRECT("2:"&LEN('Chua tach'!A1)+1)),1))))+1,255)
Kết thúc bằng Ctrl-shift-enter
A1:
Mã:
=SUBSTITUTE('Chua tach'!A1,B1,"")
 
Tại B1:
Mã:
=MID('Chua tach'!A1,MATCH(2,1/(CODE(MID('Chua tach'!A1,ROW(INDIRECT("1:"&LEN('Chua tach'!A1))),1))<>CODE(MID('Chua tach'!A1&"ộ",ROW(INDIRECT("2:"&LEN('Chua tach'!A1)+1)),1))))+1,255)
Kết thúc bằng Ctrl-shift-enter
A1:
Mã:
=SUBSTITUTE('Chua tach'!A1,B1,"")
30000 dòng dữ liệu đấy bebo à ---> Mảng có mà chết luôn
 
Cảm ơn các bạn đã nhiệt tình giúp đỡ. Mình đã làm theo cách của bạn bebo021999 nhưng không được, vì nếu tách dữ liệu với cấu trúc từ vựng phức tạp thì không được.
VD:
Đau khớp 关节痛
Dầu lạc 花生油
Gió biển海风
Giờ cao điểm交通拥挤时间
Gói bưu kiện邮包
Gội đầu bằng dầu gội油洗
Gọi điện thoại 打电话
Gối dựa靠枕
Gương 镜子
Hạ buồm下帆
Hạ cánh bắt buộc强迫降落
Hóa chất độc hại有毒化学品
Hoa chuối美人蕉
Hội kế hoạch hoá gia dình越南家庭计划协会
Người nhập cảnh trái phép未获授权进境者,擅自入境者 --> Từ này có 2 nghĩa tiếng Hoa
Thuyết tương đối相对论
Tỉ giá mới nhất最新牌价
Văn kiện文件
Ván lướt sóng滑水
Vân mịn细纹
Ván nạo tuyết扫雪板
Vặn người扭身


Ý tưởng của mình là viết 1 Macro để tự động tách nghĩa tiếng Việt vào cột A, nghĩa tiếng Hoa vào cột B. Nhưng mình thì mù tịt về Lập trình nên nhờ các bạn ra tay giùm.
 
Cảm ơn các bạn đã nhiệt tình giúp đỡ. Mình đã làm theo cách của bạn bebo021999 nhưng không được, vì nếu tách dữ liệu với cấu trúc từ vựng phức tạp thì không được.
VD:
Đau khớp 关节痛
Dầu lạc 花生油
Gió biển海风
Giờ cao điểm交通拥挤时间
Gói bưu kiện邮包
Gội đầu bằng dầu gội油洗
Gọi điện thoại 打电话
Gối dựa靠枕
Gương 镜子
Hạ buồm下帆
Hạ cánh bắt buộc强迫降落
Hóa chất độc hại有毒化学品
Hoa chuối美人蕉
Hội kế hoạch hoá gia dình越南家庭计划协会
Người nhập cảnh trái phép未获授权进境者,擅自入境者 --> Từ này có 2 nghĩa tiếng Hoa
Thuyết tương đối相对论
Tỉ giá mới nhất最新牌价
Văn kiện文件
Ván lướt sóng滑水
Vân mịn细纹
Ván nạo tuyết扫雪板
Vặn người扭身


Ý tưởng của mình là viết 1 Macro để tự động tách nghĩa tiếng Việt vào cột A, nghĩa tiếng Hoa vào cột B. Nhưng mình thì mù tịt về Lập trình nên nhờ các bạn ra tay giùm.
Với bài này, dùng code tách dữ liệu không khó & tốc độ nhanh thôi nhưng bạn phải đưa hết tất cả các dạng dữ liệu của bạn lên đi. Phải biết hết các dạng mới viết được chứ thế này viết xong chắc chắc sẽ sửa tới sửa lui nữa
Thân
 
Vì mình mới chỉnh xong khoảng 8000 từ, nên mình gởi cho bạn xem qua, toàn bộ cấu trúc từ vựng đều nằm trong file đính kèm.
http://www.mediafire.com/?b84xu7jxwvwdvlk
Mục đích cuối cùng của việc tách cột dữ liệu này là mình sẽ dùng nó build thành dữ liệu cho Babylon. Mình chỉ bí ở khâu này thôi, khâu này ok rồi thì quá trình build dữ liệu cho Babylon sẽ hoàn tất.

Thanks!
 
Vì mình mới chỉnh xong khoảng 8000 từ, nên mình gởi cho bạn xem qua, toàn bộ cấu trúc từ vựng đều nằm trong file đính kèm.
http://www.mediafire.com/?b84xu7jxwvwdvlk
Mục đích cuối cùng của việc tách cột dữ liệu này là mình sẽ dùng nó build thành dữ liệu cho Babylon. Mình chỉ bí ở khâu này thôi, khâu này ok rồi thì quá trình build dữ liệu cho Babylon sẽ hoàn tất.

Thanks!
Làm cho bạn đây (dùng code VBA nhé)
code như sau:
PHP:
Function VCSeparateArray(ByVal SrcRng As Range)
  Dim sArray, Arr(), lR As Long, tmp As String
  On Error Resume Next
  sArray = SrcRng.Resize(, 1).Value
  If TypeName(sArray) <> "Variant()" Then
    VCSeparateArray = VCSeparate(sArray)
  Else
    ReDim Arr(1 To UBound(sArray, 1), 1 To 2)
    For lR = 1 To UBound(sArray, 1)
      If CStr(sArray(lR, 1)) <> "" Then
        tmp = CStr(sArray(lR, 1)) & " "
        Arr(lR, 1) = VCSeparate(tmp)(1)
        Arr(lR, 2) = VCSeparate(tmp)(2)
      End If
    Next
    VCSeparateArray = Arr
  End If
End Function
PHP:
Function VCSeparate(ByVal Text As String)
  Dim Arr(), lCp As Long, tmp As String, sCh As String, lCode As Long
  On Error Resume Next
  ReDim Arr(1 To 2)
  tmp = Text
  Do
    lCp = lCp + 1
    sCh = Mid(tmp, lCp, 1)
    lCode = AscW(sCh)
  Loop Until (sCh <> " " And (lCode < 1 Or (lCode > 432 And lCode < 7840) Or lCode > 7929)) Or lCp = Len(tmp)
  Arr(1) = Trim(Left(tmp, lCp - 1))
  Arr(2) = Trim(Mid(tmp, lCp, Len(tmp)))
  VCSeparate = Arr
End Function
Và cuối cùng là code chính
PHP:
Sub Main()
  Dim SrcRng As Range, Arr, TG As Double
  On Error Resume Next
  TG = Timer
  Set SrcRng = Sheet1.Range("A1:A30000")
  Arr = VCSeparateArray(SrcRng)
  Sheet2.Range("A1:B30000").Value = Arr
  MsgBox Timer - TG
End Sub
Mở file đính kèm và nhấn nút "Run code" ---> Kiểm tra lại kết quả
(dữ liệu cở 50000 dòng sẽ cho kết quả trong vòng 1s)
-------------------------
Ngoài ra bạn còn 2 cách dùng khác bằng cách gõ công thức trực tiếp lên bảng tính
- Cách 2:
Tại sheet Data, quét chọn 2 cell B1:C1, gõ vào thanh Formula công thức =VCSeparate(A1), bấm Ctrl + Shift + Enter rồi kéo fill xuống
- Cách 3
Tại sheet Data, quét chọn B1:C7869,gõ vào thanh Formula công thức =VCSeparateArray(A1:A7869), bấm Ctrl + Shift + Enter
 

File đính kèm

Lần chỉnh sửa cuối:
Mình làm được rồi. Chân thành cảm ơn bạn rất...rất nhiều.
 
Web KT

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

Back
Top Bottom