Bài toán lấy dữ liệu từ một sheet này sang một sheet khác:

Liên hệ QC

Bùi Thúy Thúy

Thành viên thường trực
Tham gia
2/7/18
Bài viết
289
Được thích
38
Xin các anh/chị giúp đỡ em bài toán sau ạ!
File Excel có 02 sheet:
1/ Sheet(Thau_Nhan Su):
Cột A là cột Stt
Cột B là "tên người lao động"
Cột I là "lý lịch nhân sự"
Trong cột lý lịch nhân sự mỗi dấu "+" thể hiện một ý bao gồm 3 nội dung (*******/*******/*******), mỗi nội dung được ngăn cách bởi ký tự "/" và có tối đa 5 ý tương ứng với 5 dấu "+" đầu câu trong một dòng.
2/ Em muốn lấy số liệu từ Sheet(Thau_Nhan Su) sang sheet(List_Kinh Nghiem): Lấy cả tên và số thứ tự (lấy cột A và B sheet(Thau_Nhan Su) sang cột B và D của sheet(List_Kinh Nghiem) và cột "Lý lịch nhan sự" được lấy như sau"
Cột C là tên người lao động, ứng với mỗi dòng trong cột C là 1 số thứ tự được lấy từ sheet(Thau_Nhan Su) sang sheet(List_Kinh Nghiem)
Mỗi khoảng thời gian ứng với một ý, mỗi ý có 3 nội dung.
Các ý được lấy theo chiều từ trên xuống và khi điền sang sheet(List_Kinh Nghiem) thì bắt đầu điền từ cột D cho đến tiếp sang cột bên phía phải tương ứng với các dòng
Mong các anh/chị giúp em một đoạn code để có thể giải được bài toán trên
Em xin cảm ơn.
y1.pngY2.png
 

File đính kèm

  • Tro Giup.xlsx
    52.9 KB · Đọc: 14
Lần chỉnh sửa cuối:
Trong các cột của trang 'NSu' bạn đang thiếu Mã NV duy nhất. & vì vậy mình chào thua . . . .
Nếu là mình thì trang này sẽ phải tách ra làm 2 trang
1 trang sẽ chứa những dữ liệu bất di bất dịch của đương sự như Ho Tên, Ngày Sinh, Giới tính,. . .
Trang còn lại ghi lại những biên đổi dữ liệu của các cá nhân theo thời gian
Ví dụ:

STTMã NVHo & TenNgày SinhBằng cấp. . . . .STTMaNVNgàyChức vụLương. . . .
1NBA00Nguyễn Bình An
10/20/1989​
ĐH XD1VJF00
10/20/2008​
CBKT
2PNL00Phạm Ngũ Lão
8/20/1981​
ĐH XD2VJF00
8/20/2009​
CHT CTr
3VFD00Võ Đại Dương
9/28/1982​
TC3VJF00
12/20/2010​
CBKT
4VJF00Vũ Đại
4/18/1983​
TC4VNH00
4/20/2012​
3.25​
5VNH00Vũ Nam Hải
3/10/1982​
ĐH XD5VFD00
8/20/2013​
3.87​
6VJF00
12/20/2014​
3.46​
 
Lần chỉnh sửa cuối:
Trong các cột của trang 'NSu' bạn đang thiếu Mã NV duy nhất. & vì vậy mình chào thua . . . .
Nếu là mình thì trang này sẽ phải tách ra làm 2 trang
1 trang sẽ chứa những dữ liệu bất di bất dịch của đương sự như Ho Tên, Ngày Sinh, Giới tính,. . .
Trang còn lại ghi lại những biên đổi dữ liệu của các cá nhân theo thời gian
Ví dụ:

STTMã NVHo & TenNgày SinhBằng cấp. . . . .STTMaNVNgàyChức vụLương. . . .
1NBA00Nguyễn Bình An
10/20/1989​
ĐH XD1VJF00
10/20/2008​
CBKT
2PNL00Phạm Ngũ Lão
8/20/1981​
ĐH XD2VJF00
8/20/2009​
CHT CTr
3VFD00Võ Đại Dương
9/28/1982​
TC3VJF00
12/20/2010​
CBKT
4VJF00Vũ Đại
4/18/1983​
TC4VNH00
4/20/2012​
3.25​
5VNH00Vũ Nam Hải
3/10/1982​
ĐH XD5VFD00
8/20/2013​
3.87​
6VJF00
12/20/2014​
3.46​


À vậy
Bài đã được tự động gộp:

Vâng, em làm kiểu lấy dữ liệu từ Sheet(Thau_Nhan Su) sang sheet (List_Kinh Nghiem) chủ yếu là để sau đó em dùng thêm hàm vlook để điền dữ liệu vào Sheet (17_Kinh Nghiem Chuyen Mon) Và spin dữ liệu.
Tại em không có ý tưởng nào nên làm theo cách vậy.
Thầy có cách nào giúp em để không phải tạo thêm sheet (List_Kinh Nghiem) mà có thể lấy dữ liệu trực tiếp từ Sheet(Thau_Nhan Su) sang sheet Sheet (17_Kinh Nghiem Chuyen Mon) và spin được dữ liệu đó không ạ?
Em đã thêm cột mã NV vào file sau,
Thầy cho em ý kiến và giúp em bài toán này ạ!
222.png

44444.png
 

File đính kèm

  • TG2.xlsx
    60.8 KB · Đọc: 12
Lần chỉnh sửa cuối:
Trong các cột của trang 'NSu' bạn đang thiếu Mã NV duy nhất. & vì vậy mình chào thua . . . .
Nếu là mình thì trang này sẽ phải tách ra làm 2 trang
1 trang sẽ chứa những dữ liệu bất di bất dịch của đương sự như Ho Tên, Ngày Sinh, Giới tính,. . .
Trang còn lại ghi lại những biên đổi dữ liệu của các cá nhân theo thời gian
Ví dụ:

STTMã NVHo & TenNgày SinhBằng cấp. . . . .STTMaNVNgàyChức vụLương. . . .
1NBA00Nguyễn Bình An
10/20/1989​
ĐH XD1VJF00
10/20/2008​
CBKT
2PNL00Phạm Ngũ Lão
8/20/1981​
ĐH XD2VJF00
8/20/2009​
CHT CTr
3VFD00Võ Đại Dương
9/28/1982​
TC3VJF00
12/20/2010​
CBKT
4VJF00Vũ Đại
4/18/1983​
TC4VNH00
4/20/2012​
3.25​
5VNH00Vũ Nam Hải
3/10/1982​
ĐH XD5VFD00
8/20/2013​
3.87​
6VJF00
12/20/2014​
3.46​


Thầy có nói "Nếu là mình thì trang này sẽ phải tách ra làm 2 trang" có nghĩa là chia làm 2 sheet , một sheet chứa những dữ liệu bất di bất dịch của đương sự như Ho Tên, Ngày Sinh, Giới tính,. . .Sheet còn lại biến đổi dữ liệu của các cá nhân theo thời gian đúng không ạ? Thầy cho em hướng giải quyết mới ạ!
 
Thì giống như #2 vậy; Chỉ có điều ở bảng dữ liệu bên phải phải thêm cột 'Đến ngày' nữa thì phải.
Lúc ý ta nhập liệu cũng dễ & CSDL sẽ thanh thoát hơn & việc lấy số liệu ra các báo cáo thì cũng không khó.
 
Thì giống như #2 vậy; Chỉ có điều ở bảng dữ liệu bên phải phải thêm cột 'Đến ngày' nữa thì phải.
Lúc ý ta nhập liệu cũng dễ & CSDL sẽ thanh thoát hơn & việc lấy số liệu ra các báo cáo thì cũng không khó.
Vâng, em hiểu ý thầy, em lập chủ đề mới theo hướng của thầy nhé! thầy giúp em mới nhé!
 
Vâng, em hiểu ý thầy, em lập chủ đề mới theo hướng của thầy nhé! thầy giúp em mới nhé!
Việc này là tách dữ liệu trong 1 cell thành nhiều cells theo điều kiện? (dấu "+", dấu "/")
Đâu cần phải biết mã nhân viên, họ tên... vì có bao nhiêu lấy ra bấy nhiêu.
 
Việc này là tách dữ liệu trong 1 cell thành nhiều cells theo điều kiện? (dấu "+", dấu "/")
Đâu cần phải biết mã nhân viên, họ tên... vì có bao nhiêu lấy ra bấy nhiêu.
Vâng ý em là vậy, thầy SA_DQ có hướng như vậy, thầy xem giúp em mới ạ!
Thầy cho em hướng để giải bài toán mới ạ!
 
Vâng ý em là vậy, thầy SA_DQ có hướng như vậy, thầy xem giúp em mới ạ!
Thầy cho em hướng để giải bài toán mới ạ!
Dữ liệu giả lập thì cũng "coi cho được", chứ toàn là dấu sao (*), Làm sao kiểm tra được kết quả?
PHP:
Option Explicit


Public Sub Gpe()
Dim sArr(), dArr(), I As Long, J As Long, j2 As Long, R As Long, Col As Long, Tmp, Tmp2, Txt As String
    sArr = Sheets("Thau_Nhan Su").Range("A15", Sheets("Thau_Nhan Su").Range("A10000").End(xlUp)).Resize(, 9).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 17)
For I = 1 To R
    Col = 2
    Txt = Replace(sArr(I, 9), ChrW(10), "")
    dArr(I, 1) = I
    dArr(I, 2) = sArr(I, 2)
    Tmp = Split(Txt, "+")
    For J = 0 To UBound(Tmp)
        Tmp2 = Split(Tmp(J), "/")
        For j2 = 0 To UBound(Tmp2)
            Col = Col + 1
            dArr(I, Col) = Tmp2(j2)
        Next j2
    Next J
Next I
Sheets("List_Kinh Nghiem").Range("B12").Resize(R, 17) = dArr
End Sub
 
Xin các anh/chị giúp đỡ em bài toán sau ạ!
File Excel có 02 sheet:
1/ Sheet(Thau_Nhan Su):
Cột A là cột Stt
Cột B là "tên người lao động"
Cột I là "lý lịch nhân sự"
Trong cột lý lịch nhân sự mỗi dấu "+" thể hiện một ý bao gồm 3 nội dung (*******/*******/*******), mỗi nội dung được ngăn cách bởi ký tự "/" và có tối đa 5 ý tương ứng với 5 dấu "+" đầu câu trong một dòng.
2/ Em muốn lấy số liệu từ Sheet(Thau_Nhan Su) sang sheet(List_Kinh Nghiem):
Cột C là tên người lao động, ứng với mỗi dòng trong cột C là 1 số thứ tự được lấy từ sheet(Thau_Nhan Su) sang sheet(List_Kinh Nghiem)
Mỗi khoảng thời gian ứng với một ý, mỗi ý có 3 nội dung.
Các ý được lấy theo chiều từ trên xuống và khi điền sang sheet(List_Kinh Nghiem) thì bắt đầu điền từ cột D cho đến tiếp sang cột bên phía phải tương ứng với các dòng
Mong các anh/chị giúp em một đoạn code để có thể giải được bài toán trên
Em xin cảm ơn.
View attachment 227720View attachment 227721
Không biết ngày tháng dạng gì ,nên kết quả có thể kỳ kỳ :cool:
Mã:
Sub ListkinhNghiem()
  Dim sArr(), aDanhSach(), Res(), ikey$
  Dim eRow&, eCol&, sRow&, sCol&, i&, j&, iR&
  Dim fDay, eDay, NoiDung
  With Sheets("List_Kinh Nghiem")
    eRow = .Range("C" & Rows.Count).End(xlUp).Row
    eCol = .Cells(6, Columns.Count).End(xlToLeft).Column
    If eRow < 7 Or eCol < 6 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("C7", .Cells(eRow, eCol)).Value
  End With
  With Sheets("Thau_Nhan Su")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow < 7 Then MsgBox ("Khong co du lieu"): Exit Sub
    aDanhSach = .Range("B15:B" & eRow).Value
  End With
  sRow = UBound(aDanhSach, 1)
  ReDim Res(1 To UBound(aDanhSach, 1), 1 To 1)
 
  With CreateObject("scripting.dictionary")
    For i = 1 To sRow
      ikey = aDanhSach(i, 1)
      If Len(ikey) > 0 Then .Item(ikey) = i
    Next i
    sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
    For i = 1 To sRow
      iR = .Item(sArr(i, 1))
      If iR > 0 Then
        For j = 2 To sCol Step 3
          fDay = sArr(i, j)
          eDay = sArr(i, j + 1)
          NoiDung = sArr(i, j + 2)
          If Len(fDay) > 0 And Len(eDay) > 0 And Len(NoiDung) > 0 Then
            If Len(Res(i, 1)) = 0 Then
              Res(i, 1) = "+ " & fDay & "/" & eDay & "/" & NoiDung
            Else
              Res(i, 1) = Res(i, 1) & Chr(10) & "+ " & fDay & "/" & eDay & "/" & NoiDung
            End If
          End If
        Next j
      End If
    Next i
  End With
  With Sheets("Thau_Nhan Su")
    .Range("I15").Resize(UBound(Res)) = Res
  End With
End Sub
 
Lần chỉnh sửa cuối:
Việc này là tách dữ liệu trong 1 cell thành nhiều cells theo điều kiện? (dấu "+", dấu "/")
Đâu cần phải biết mã nhân viên, họ tên... vì có bao nhiêu lấy ra bấy nhiêu.
Em có điền dữ liệu cụ thể và chạy code thầy giúp, nhưng chỉ thấy điền số TT, chưa điền nội dung từ sheet (List_Kinh nghiem) sang sheet(Thau_Nhan Su) ạ!
Thầy giúp em lấy cả số thự tự và tên từ Sheet (Thau_Nhan Su) sang sheet (List_Kinh Nghiem) được không ạ? và sau đó điền nội dung như em nêu trên.
Thầy xem giúp em ạ!
44444.png5555555.png
Bài đã được tự động gộp:

Không biết ngày tháng dạng gì ,nên kết quả có thể kỳ kỳ :cool:
Mã:
Sub ListkinhNghiem()
  Dim sArr(), aDanhSach(), Res(), ikey$
  Dim eRow&, eCol&, sRow&, sCol&, i&, j&, iR&
  Dim fDay, eDay, NoiDung
  With Sheets("List_Kinh Nghiem")
    eRow = .Range("C" & Rows.Count).End(xlUp).Row
    eCol = .Cells(6, Columns.Count).End(xlToLeft).Column
    If eRow < 7 Or eCol < 6 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("C7", .Cells(eRow, eCol)).Value
  End With
  With Sheets("Thau_Nhan Su")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow < 7 Then MsgBox ("Khong co du lieu"): Exit Sub
    aDanhSach = .Range("B15:B" & eRow).Value
  End With
  sRow = UBound(aDanhSach, 1)
  ReDim Res(1 To UBound(aDanhSach, 1), 1 To 1)

  With CreateObject("scripting.dictionary")
    For i = 1 To sRow
      ikey = aDanhSach(i, 1)
      If Len(ikey) > 0 Then .Item(ikey) = i
    Next i
    sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
    For i = 1 To sRow
      iR = .Item(sArr(i, 1))
      If iR > 0 Then
        For j = 2 To sCol Step 3
          fDay = sArr(i, j)
          eDay = sArr(i, j + 1)
          NoiDung = sArr(i, j + 2)
          If Len(fDay) > 0 And Len(eDay) > 0 And Len(NoiDung) > 0 Then
            If Len(Res(i, 1)) = 0 Then
              Res(i, 1) = "+ " & fDay & "/" & eDay & "/" & NoiDung
            Else
              Res(i, 1) = Res(i, 1) & Chr(10) & "+ " & fDay & "/" & eDay & "/" & NoiDung
            End If
          End If
        Next j
      End If
    Next i
  End With
  With Sheets("Thau_Nhan Su")
    .Range("I15").Resize(UBound(Res)) = Res
  End With
End Sub
Khi lấy chạy code dữ liệu vấn thấy điền từ sheet (Thau_Nhan Su) sang Sheet (List_Kinh Nghiem)
Anh giúp em lấy cả số thự tự và tên từ Sheet (Thau_Nhan Su) sang sheet (List_Kinh Nghiem) được không ạ? và sau đó điền nội dung như em nêu trên.
Em cám ơn anh!
 

File đính kèm

  • TG3.xlsm
    77.8 KB · Đọc: 10
Lần chỉnh sửa cuối:
Việc này là tách dữ liệu trong 1 cell thành nhiều cells theo điều kiện? (dấu "+", dấu "/")
Đâu cần phải biết mã nhân viên, họ tên... vì có bao nhiêu lấy ra bấy nhiêu.
Vấn đề là trang tính đó do đâu mà có:
1./ Do con người tạo ra, thì file đó là thứ đáng vứt đi
2./ Do phần mền đưa ra: Hãy coi lại người tạo ra phần mềm đó có ý tưởng tốt hay xấu

& cuối cùng: Riêng mình cho rằng, là tiếp tục giúp là mình cũng a dua với cái "xấu"!
 
Dữ liệu giả lập thì cũng "coi cho được", chứ toàn là dấu sao (*), Làm sao kiểm tra được kết quả?
PHP:
Option Explicit


Public Sub Gpe()
Dim sArr(), dArr(), I As Long, J As Long, j2 As Long, R As Long, Col As Long, Tmp, Tmp2, Txt As String
    sArr = Sheets("Thau_Nhan Su").Range("A15", Sheets("Thau_Nhan Su").Range("A10000").End(xlUp)).Resize(, 9).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 17)
For I = 1 To R
    Col = 2
    Txt = Replace(sArr(I, 9), ChrW(10), "")
    dArr(I, 1) = I
    dArr(I, 2) = sArr(I, 2)
    Tmp = Split(Txt, "+")
    For J = 0 To UBound(Tmp)
        Tmp2 = Split(Tmp(J), "/")
        For j2 = 0 To UBound(Tmp2)
            Col = Col + 1
            dArr(I, Col) = Tmp2(j2)
        Next j2
    Next J
Next I
Sheets("List_Kinh Nghiem").Range("B12").Resize(R, 17) = dArr
End Sub
Thầy ơi, thầy xem giúp em code em đã chạy chỉ thấy đánh số thứ tự mà chưa lấy được nội dung sang ạ!
 
Em có điền dữ liệu cụ thể và chạy code thầy giúp, nhưng chỉ thấy điền số TT, chưa điền nội dung từ sheet (List_Kinh nghiem) sang sheet(Thau_Nhan Su) ạ!
Thầy giúp em lấy cả số thự tự và tên từ Sheet (Thau_Nhan Su) sang sheet (List_Kinh Nghiem) được không ạ? và sau đó điền nội dung như em nêu trên.
Thầy xem giúp em ạ!
View attachment 227755View attachment 227756
Bài đã được tự động gộp:


Khi lấy chạy code dữ liệu vấn thấy điền từ sheet (Thau_Nhan Su) sang Sheet (List_Kinh Nghiem)
Anh giúp em lấy cả số thự tự và tên từ Sheet (Thau_Nhan Su) sang sheet (List_Kinh Nghiem) được không ạ? và sau đó điền nội dung như em nêu trên.
Em cám ơn anh!
Lãng thiệt.
Kết quả tôi gán vào từ ô B11.
Bạn đã ẩn các dòng đó sao thấy kết quả?
Các số TT lu bu là do dữ liệu của bạn, sheet Thau_Nhan Su có "MA", Bạn chọn A15, ấn Ctrl + mũi tên xuống xem nó đi tới nơi mô?
 
Lần chỉnh sửa cuối:
Em có điền dữ liệu cụ thể và chạy code thầy giúp, nhưng chỉ thấy điền số TT, chưa điền nội dung từ sheet (List_Kinh nghiem) sang sheet(Thau_Nhan Su) ạ!
Thầy giúp em lấy cả số thự tự và tên từ Sheet (Thau_Nhan Su) sang sheet (List_Kinh Nghiem) được không ạ? và sau đó điền nội dung như em nêu trên.
Thầy xem giúp em ạ!
View attachment 227755View attachment 227756
Bài đã được tự động gộp:


Khi lấy chạy code dữ liệu vấn thấy điền từ sheet (Thau_Nhan Su) sang Sheet (List_Kinh Nghiem)
Anh giúp em lấy cả số thự tự và tên từ Sheet (Thau_Nhan Su) sang sheet (List_Kinh Nghiem) được không ạ? và sau đó điền nội dung như em nêu trên.
Em cám ơn anh!
File không có dòng ẩn, dữ liệu nhập đúng chỗ không để lung tung
 
Lãng thiệt.
Kết quả tôi gán vào từ ô B11.
Bạn đã ẩn các dòng đó sao thấy kết quả?
Các số TT lu bu là do dữ liệu của bạn, sheet Thau_Nhan Su có "MA", Bạn chọn A15, ấn Ctrl + mũi tên xuống xem nó đi tới nơi mô?
Dạ! em cảm ơn thầy, em xin nhờ thầy giúp em một vấn đề nữa được không ạ?
- Thầy giúp em để trước khi chạy code thì sẽ hỏi số thứ tự cần lấy sang, ví dụ số cần lấy là (1,3,5) tương ứng với số thứ tự mà không phải lấy hết dữ liệu từ sheet( Thau_Nhan Su) sang.
Thầy giúp em nốt vẫn đè này nhé!
mau.png
 
Lần chỉnh sửa cuối:
File không có dòng ẩn, dữ liệu nhập đúng chỗ không để lung tung
Anh ơi, em nhờ anh giúp em để trước khi chạy code thì sẽ hỏi số thứ tự cần lấy sang, ví dụ số cần lấy là (1,3,5) tương ứng với số thứ tự mà không phải lấy hết dữ liệu từ sheet( Thau_Nhan Su) sang.
mau.png
 
Dạ! em cảm ơn thầy, em xin nhờ thầy giúp em một vấn đề nữa được không ạ?
- Thầy giúp em để trước khi chạy code thì sẽ hỏi số thứ tự cần lấy sang, ví dụ số cần lấy là (1,3,5) tương ứng với số thứ tự mà không phải lấy hết dữ liệu từ sheet( Thau_Nhan Su) sang.
Thầy giúp em nốt vẫn đè này nhé!
View attachment 227800
Tôi không thích (ghét) khi hỏi bằng hình ảnh, vì xem ảnh chẳng biết mấy cái yêu cầu trong các cột AD:AF trong hình nó nằm ở sheet nào, dòng nào.
Bắt người khác phải làm sao cho giống trên hình mà không biết làm vào đâu thì ... không thích (ghét) thật.
 
Tôi không thích (ghét) khi hỏi bằng hình ảnh, vì xem ảnh chẳng biết mấy cái yêu cầu trong các cột AD:AF trong hình nó nằm ở sheet nào, dòng nào.
Bắt người khác phải làm sao cho giống trên hình mà không biết làm vào đâu thì ... không thích (ghét) thật.
Vâng, hi, ý em là thầy giúp em lấy dữ liệu theo số thứ tự có 2 lựa chọn:
1/ Có thể lấy từ số nào đến số nào đó (1 đến 3 chả hạn)
2/ Hoặc là lấy dữ liệu theo số tự chọn (1,3,4,...)
Ở trên thầy giúp em là điền tất cả các số thứ tự đã có ở sheet(Thau_Nhan Su) sang Sheet(List_Kinh Nghiem).
Thầy xem giúp em nhé thầy!
Em cảm ơn Thầy!
 
Anh ơi, em nhờ anh giúp em để trước khi chạy code thì sẽ hỏi số thứ tự cần lấy sang, ví dụ số cần lấy là (1,3,5) tương ứng với số thứ tự mà không phải lấy hết dữ liệu từ sheet( Thau_Nhan Su) sang.
View attachment 227801
Không nên dùng cách nầy, dùng code bài #10 của mình, cần lấy người nào thì copy tên và dán vào cột B sau đó chạy code
 
Web KT
Back
Top Bottom