Tách các dữ liệu trong một ô nhập vào các ô khác có điều kiện

Liên hệ QC

hcl_pt

Thành viên thường trực
Tham gia
21/10/10
Bài viết
208
Được thích
11
Mình có vấn đề này mong GPE xem giúp. Mình có file exel, sheet1: Cột A là cột dữ liệu, có những thông tin về ngày, tháng, thứ và năm cùng với các số liệu khác trong một ô. Ví dụ như:
7072 Mon. Mar 18, 2013 3 7 26 37 39
Nay cần chuyển từ dữ liệu trên sang từng ô tách biệt vào bảng kết quả từ cột C như sau:
+ về thứ, tháng, ngày, năm:
- Mon. Mar 18, 2013: chuyển sang thành: thứ 2 tháng 3 ngày 18 năm 2013: số liệu này nhập vào bảng kết quả của Năm, Ngày, Tháng, Thứ tương ứng, ta có cột kết quả Năm, Ngày, Tháng, Thứ
+ về số liệu: 3 7 26 37 39 thì tách ra nhập vào cột của Ngày tháng thứ tương ứng với số dòng tương ứng: số 3 thì nhập vào dòng 7 của bảng kết quả có dữ liệu 3; số 7 thì nhập vào dòng 11 của bảng kết quả có dữ liệu 7; số 26 nhập vào dòng có dữ liệu 26; số 37 nhập vào dòng có dữ liệu 37; số 39 nhập vào dòng có dữ liệu 39.
- Mình đã làm ví dụ minh họa cho 3 ngày.
- Mong các bạn chỉ cách tách giúp và điền dữ liệu lần lượt như ví dụ minh họa trên. Xin chân thành cảm ơn!
 

File đính kèm

  • Tach_Nhap_DL_coDK.rar
    11.6 KB · Đọc: 30
Mình có vấn đề này mong GPE xem giúp. Mình có file exel, sheet1: Cột A là cột dữ liệu, có những thông tin về ngày, tháng, thứ và năm cùng với các số liệu khác trong một ô. Ví dụ như:
7072 Mon. Mar 18, 2013 3 7 26 37 39
Nay cần chuyển từ dữ liệu trên sang từng ô tách biệt vào bảng kết quả từ cột C như sau:
+ về thứ, tháng, ngày, năm:
- Mon. Mar 18, 2013: chuyển sang thành: thứ 2 tháng 3 ngày 18 năm 2013: số liệu này nhập vào bảng kết quả của Năm, Ngày, Tháng, Thứ tương ứng, ta có cột kết quả Năm, Ngày, Tháng, Thứ
+ về số liệu: 3 7 26 37 39 thì tách ra nhập vào cột của Ngày tháng thứ tương ứng với số dòng tương ứng: số 3 thì nhập vào dòng 7 của bảng kết quả có dữ liệu 3; số 7 thì nhập vào dòng 11 của bảng kết quả có dữ liệu 7; số 26 nhập vào dòng có dữ liệu 26; số 37 nhập vào dòng có dữ liệu 37; số 39 nhập vào dòng có dữ liệu 39.
- Mình đã làm ví dụ minh họa cho 3 ngày.
- Mong các bạn chỉ cách tách giúp và điền dữ liệu lần lượt như ví dụ minh họa trên. Xin chân thành cảm ơn!
Bài này chỉ có thể làm bằng VBA thôi. Nếu chuyển vào mục lập trình thì bài này giải trong 5 phút.
 
đúng là bài này nên giải bằng vba,
nhưng mình muốn thử sức với công thức, bạn xem nha
do mình sử dụng excel 2003 nên ko có iferror để bẫy lỗi, nên fải dùng iserror, nên nó dài, bạn có thể sử lại hàm này trên máy bạn
 

File đính kèm

  • Tach_Nhap_DL_coDK.rar
    16.2 KB · Đọc: 16
Lần chỉnh sửa cuối:
đúng là bài này nên giải bằng vba,
nhưng mình muốn thử sức với công thức, bạn xem nha
do mình sử dụng excel 2003 nên ko có iferror để bẫy lỗi, nên fải dùng iserror, nên nó dài, bạn có thể sử lại hàm này trên máy bạn
- Cảm ơn bạn rất nhiều.
 
Vâng! Bạn ơi, bạn có thể giúp mình bằng VBA được không ạ?

Bạn tham khảo code đơn giản này xem sao
PHP:
Sub GPE()
Dim data(), i, j, res(), tmp As String, tach, ngay As Date
data = Range([a2], [a65536].End(3)).Value
ReDim res(1 To 43, 1 To UBound(data))
With CreateObject("vbscript.regexp")
    .Global = True
    .Pattern = "\.|,"
    For i = 1 To UBound(data)
        tmp = Application.Trim(data(i, 1))
        tmp = .Replace(tmp, "")
        tach = Split(tmp, Space(1))
        ngay = tach(2) & "-" & tach(3) & "-" & tach(4)
        res(1, i) = tach(4)
        res(2, i) = tach(3)
        res(3, i) = Month(ngay)
        res(4, i) = Weekday(ngay)
        If res(4, i) = 1 Then res(4, i) = 8
        For j = 5 To 9
            res(tach(j) + 4, i) = tach(j)
        Next
    Next
End With
[d1:iv1000].ClearContents
[d1].Resize(43, i - 1) = res
End Sub
 

File đính kèm

  • Tach_Nhap_DL_coDK.rar
    12 KB · Đọc: 17
Bạn tham khảo code đơn giản này xem sao
PHP:
Sub GPE()
Dim data(), i, j, res(), tmp As String, tach, ngay As Date
data = Range([a2], [a65536].End(3)).Value
ReDim res(1 To 43, 1 To UBound(data))
With CreateObject("vbscript.regexp")
    .Global = True
    .Pattern = "\.|,"
    For i = 1 To UBound(data)
        tmp = Application.Trim(data(i, 1))
        tmp = .Replace(tmp, "")
        tach = Split(tmp, Space(1))
        ngay = tach(2) & "-" & tach(3) & "-" & tach(4)
        res(1, i) = tach(4)
        res(2, i) = tach(3)
        res(3, i) = Month(ngay)
        res(4, i) = Weekday(ngay)
        If res(4, i) = 1 Then res(4, i) = 8
        For j = 5 To 9
            res(tach(j) + 4, i) = tach(j)
        Next
    Next
End With
[d1:iv1000].ClearContents
[d1].Resize(43, i - 1) = res
End Sub
Cảm ơn Thầy rất nhiều! Tuyệt vời ạ!
 
Web KT

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

Back
Top Bottom