Xử lý số liệu

Liên hệ QC

linhdtl

Thành viên mới
Tham gia
11/4/20
Bài viết
9
Được thích
2
Em là sinh viên, đang làm nghiên cứu cần xử lý bảng số liệu. Em không biết nhiều về excel nên nhờ anh chị giúp đỡ em với ạ!
File của em có cột dữ liệu tên là "code". Mỗi 1 mã code cần nhân lên thành 8 hàng (các dữ liệu về year, exit, size, pro, im_ex, hhi, hori thì để trống cũng đc ạ). Có một số mã code đã đủ 8 hàng, nhưng một số mã thì chưa đủ. Có gần 30.000 mã nên em không tự insert thêm hàng bằng tay thủ công được ạ, mà em tìm cách trên mạng cũng không biết phải tìm kiểu gì. Mong anh chị giúp đỡ em ạ!
 

File đính kèm

  • số liệu.xlsx
    1.7 MB · Đọc: 16
Em là sinh viên, đang làm nghiên cứu cần xử lý bảng số liệu. Em không biết nhiều về excel nên nhờ anh chị giúp đỡ em với ạ!
File của em có cột dữ liệu tên là "code". Mỗi 1 mã code cần nhân lên thành 8 hàng (các dữ liệu về year, exit, size, pro, im_ex, hhi, hori thì để trống cũng đc ạ). Có một số mã code đã đủ 8 hàng, nhưng một số mã thì chưa đủ. Có gần 30.000 mã nên em không tự insert thêm hàng bằng tay thủ công được ạ, mà em tìm cách trên mạng cũng không biết phải tìm kiểu gì. Mong anh chị giúp đỡ em ạ!
Tức là 1 mã code nhân bản lên 8 hàng nữa phải không, nhân thừa có sao không bạn?
anh chị ơi giúp em với ạ!!!!!!!!!!!!!
 
Bài này xài công thức là không tưởng vì kết quả đến đến gần 6.1 vạn dòng ( & với máy cà tèng của mình tiêu tốn cỡ 21 Gy)
PHP:
Sub NhanBanThanh8Dong()
 Dim Arr(), sArr()
 Dim J As Long, W As Long, Col As Byte, Rw As Byte, Z As Long, Dem As Integer, Tmr As Double
 
 Sheets("CSDL").Select:                                     Tmr = Timer()
 sArr() = [B2].CurrentRegion.Offset(1).Value
 [N2].CurrentRegion.Offset(1).ClearContents
 With Sheets("GPE")
    Arr() = .[A2].CurrentRegion.Offset(1).Value
    ReDim dArr(1 To 8 * UBound(Arr()), 1 To 10)
 End With
 For Z = 1 To UBound(Arr())
    For J = 1 To UBound(sArr())
        If Arr(Z, 1) = sArr(J, 2) Then
            Dem = Dem + 1:          W = W + 1
            For Col = 1 To 10
                dArr(W, Col) = sArr(Z, Col)
            Next Col
        End If
    Next J
    If Dem < 8 Then
        For Rw = Dem + 1 To 8
            W = W + 1:                      dArr(W, 1) = "A" & CStr(Rw)
            dArr(W, 2) = Arr(Z, 1)
        Next Rw
    End If
    Dem = 0
 Next Z
 [M2].Resize(W, 10).Value = dArr():         [L2].Value = Timer() - Tmr
End Sub
 

File đính kèm

  • GPE.rar
    3.9 MB · Đọc: 5
Em là sinh viên, đang làm nghiên cứu cần xử lý bảng số liệu. Em không biết nhiều về excel nên nhờ anh chị giúp đỡ em với ạ!
File của em có cột dữ liệu tên là "code". Mỗi 1 mã code cần nhân lên thành 8 hàng (các dữ liệu về year, exit, size, pro, im_ex, hhi, hori thì để trống cũng đc ạ). Có một số mã code đã đủ 8 hàng, nhưng một số mã thì chưa đủ. Có gần 30.000 mã nên em không tự insert thêm hàng bằng tay thủ công được ạ, mà em tìm cách trên mạng cũng không biết phải tìm kiểu gì. Mong anh chị giúp đỡ em ạ!
Góp ý cho bạn:
1/ Tiêu đề bài viết không được rõ nghĩa và chưa phù hợp với nội dung. Bạn nên sửa Tiêu đề bài viết là "Giúp Insert số dòng theo mong muốn".
2/ Tôi thấy mã code 100101932 và năm sinh là gống nhau và lặp lại 8 lần rồi, nay bạn lại muốn Insert mỗi Cell thêm 8 dòng nữ thì thấy kỳ cục quá.
3/ Bạn nên nêu rõ ý định Insert số dòng theo mong muốn để làm gì thì cần cụ thể, rõ ràng hơn để các thành viên góp ý hoặc đưa ra giải pháp khác phù hợp hơn.
 
Lần chỉnh sửa cuối:
Góp ý cho bạn:
1/ Tiêu đề bài viết không được rõ nghĩa và chưa phù hợp với nội dung. Bạn nên sửa Tiêu đề bài viết là "Giúp Insert số dòng theo mong muốn".
2/ Tôi thấy mã code 100101932 và năm sinh là gống nhau và lặp lại 8 lần rồi, nay bạn lại muốn Insert mỗi Cell thêm 8 dòng nữ thì thấy kỳ cục quá.
3/ Bạn nên nêu rõ ý định Insert số dòng theo mong muốn để làm gì thì cần cụ thể, rõ ràng hơn để các thành viên góp ý hoặc đưa ra giải pháp khác phù hợp hơn.
1/ Em không biết dùng từ thế nào mới đúng trong excel về vấn đề em gặp phải nên mới gọi là xử lý số liệu.
2/ Chỉ có 1 số mã (ví dụ như 100101932) mới lặp lại đủ 8 lần thôi ạ, còn nhiều mã khác mới chỉ lặp lại đc 2-3 lần. Nên em nhờ anh chị giúp em insert thêm dòng cho những mã còn thiếu sao cho đủ 8 dòng mỗi mã ạ.
3/ Em cần insert sao cho mỗi mã đủ 8 dòng là đc ạ. Còn những cột khác cứ để trống, k cần có dữ liệu gì cả. Em chạy nghiên cứu khóa học nên cần phải x8 lên thôi chứ em k biết phải giải thích rõ mục đích x8 để làm gì như thế nào đc.
 
Em cần insert sao cho mỗi mã đủ 8 dòng là đc ạ.
Sao lưu dữ liệu trước khi chạy code
PHP:
Public Sub Insert_rows()
Dim i&, ii&, J&, k&, lr&, c&, n&
Dim a, b
lr = Range("B" & Rows.Count).End(xlUp).Row
a = Range("A2:j" & lr + 1).Value
lr = UBound(a, 1) - 1
c = UBound(a, 2)
ReDim b(1 To lr * 8, 1 To c)
For i = 1 To lr
    k = k + 1
    n = n + 1
    For J = 1 To c
        b(k, J) = a(i, J)
    Next
    If a(i, 2) <> a(i + 1, 2) Then
        If n < 8 Then
            For ii = n + 1 To 8
                k = k + 1
                b(k, 2) = a(i, 2)
            Next
        End If
        n = 0
    End If
Next
Range("A2").Resize(k, c) = b
End Sub
 
Lần chỉnh sửa cuối:
Bài này xài công thức là không tưởng vì kết quả đến đến gần 6.1 vạn dòng ( & với máy cà tèng của mình tiêu tốn cỡ 21 Gy)
PHP:
Sub NhanBanThanh8Dong()
Dim Arr(), sArr()
Dim J As Long, W As Long, Col As Byte, Rw As Byte, Z As Long, Dem As Integer, Tmr As Double

Sheets("CSDL").Select:                                     Tmr = Timer()
sArr() = [B2].CurrentRegion.Offset(1).Value
[N2].CurrentRegion.Offset(1).ClearContents
With Sheets("GPE")
    Arr() = .[A2].CurrentRegion.Offset(1).Value
    ReDim dArr(1 To 8 * UBound(Arr()), 1 To 10)
End With
For Z = 1 To UBound(Arr())
    For J = 1 To UBound(sArr())
        If Arr(Z, 1) = sArr(J, 2) Then
            Dem = Dem + 1:          W = W + 1
            For Col = 1 To 10
                dArr(W, Col) = sArr(Z, Col)
            Next Col
        End If
    Next J
    If Dem < 8 Then
        For Rw = Dem + 1 To 8
            W = W + 1:                      dArr(W, 1) = "A" & CStr(Rw)
            dArr(W, 2) = Arr(Z, 1)
        Next Rw
    End If
    Dem = 0
Next Z
[M2].Resize(W, 10).Value = dArr():         [L2].Value = Timer() - Tmr
End Sub

sao em copy vào xong run nó toàn hiện thế này là sao ạ????
 

File đính kèm

  • Capture.JPG
    Capture.JPG
    73.3 KB · Đọc: 10
1/ Em không biết dùng từ thế nào mới đúng trong excel về vấn đề em gặp phải nên mới gọi là xử lý số liệu.
2/ Chỉ có 1 số mã (ví dụ như 100101932) mới lặp lại đủ 8 lần thôi ạ, còn nhiều mã khác mới chỉ lặp lại đc 2-3 lần. Nên em nhờ anh chị giúp em insert thêm dòng cho những mã còn thiếu sao cho đủ 8 dòng mỗi mã ạ.
3/ Em cần insert sao cho mỗi mã đủ 8 dòng là đc ạ. Còn những cột khác cứ để trống, k cần có dữ liệu gì cả. Em chạy nghiên cứu khóa học nên cần phải x8 lên thôi chứ em k biết phải giải thích rõ mục đích x8 để làm gì như thế nào đc.
Nếu vậy thì tôi góp ý thêm thế này:
1/ Theo tôi thì không nhất thiết phải Insert thêm cho đủ 8 dòng, vì có trường hợp mình cần sử dụng đến 9, 10 dòng và đôi khi cần sử dụng chỉ 5, 6 dòng (thùy theo công việc).
2/ Ta tạm gọi Sheet1 là sheet Data (dùng chứa dữ liệu ban đầu).
3/ Thêm 1 Sheet dùng lọc mã code nào cần xử lý dữ liệu từ sheet Data sang ta muốn thêm bớt bao nhiêu dòng hoặc sửa đổi cái gì đó là tùy ý.
4/ Thêm 1 Sheet Theo dõi: Khi lọc mã code và xử lý dữ liệu xong thì ta lưu vào sheet này.

Tóm lại: Với những vấn đề tôi nêu thì bạn muốn thêm bớt bao nhiêu dòng là tùy ý mà không phụ thuộc vào việc Insert số dòng trống để sẳn.
 
Sao lưu dữ liệu trước khi chạy code
PHP:
Public Sub Insert_rows()
Dim i&, ii&, J&, k&, lr&, c&, n&
Dim a, b
lr = Range("B" & Rows.Count).End(xlUp).Row
a = Range("A2:j" & lr + 1).Value
lr = UBound(a, 1) - 1
c = UBound(a, 2)
ReDim b(1 To lr * 8, 1 To c)
For i = 1 To lr
    k = k + 1
    n = n + 1
    For J = 1 To c
        b(k, J) = a(i, J)
    Next
    If a(i, 2) <> a(i + 1, 2) Then
        If n < 8 Then
            For ii = n + 1 To 8
                k = k + 1
                b(k, 2) = a(i, 2)
            Next
        End If
        n = 0
    End If
Next
Range("A2").Resize(k, c) = b
End Sub
em cảm ơn anh ạ!!!
Bài đã được tự động gộp:

Nếu vậy thì tôi góp ý thêm thế này:
1/ Theo tôi thì không nhất thiết phải Insert thêm cho đủ 8 dòng, vì có trường hợp mình cần sử dụng đến 9, 10 dòng và đôi khi cần sử dụng chỉ 5, 6 dòng (thùy theo công việc).
2/ Ta tạm gọi Sheet1 là sheet Data (dùng chứa dữ liệu ban đầu).
3/ Thêm 1 Sheet dùng lọc mã code nào cần xử lý dữ liệu từ sheet Data sang ta muốn thêm bớt bao nhiêu dòng hoặc sửa đổi cái gì đó là tùy ý.
4/ Thêm 1 Sheet Theo dõi: Khi lọc mã code và xử lý dữ liệu xong thì ta lưu vào sheet này.

Tóm lại: Với những vấn đề tôi nêu thì bạn muốn thêm bớt bao nhiêu dòng là tùy ý mà không phụ thuộc vào việc Insert số dòng trống để sẳn.
em cảm ơn ạ! Em đã xử lý được vấn đề rồi ạ!
 
Sao lưu dữ liệu trước khi chạy code
PHP:
Public Sub Insert_rows()
Dim i&, ii&, J&, k&, lr&, c&, n&
Dim a, b
lr = Range("B" & Rows.Count).End(xlUp).Row
a = Range("A2:j" & lr + 1).Value
lr = UBound(a, 1) - 1
c = UBound(a, 2)
ReDim b(1 To lr * 8, 1 To c)
For i = 1 To lr
    k = k + 1
    n = n + 1
    For J = 1 To c
        b(k, J) = a(i, J)
    Next
    If a(i, 2) <> a(i + 1, 2) Then
        If n < 8 Then
            For ii = n + 1 To 8
                k = k + 1
                b(k, 2) = a(i, 2)
            Next
        End If
        n = 0
    End If
Next
Range("A2").Resize(k, c) = b
End Sub
Em dùng cách này của anh x8 dòng được rồi ạ. Nhưng em vừa có thêm vấn đề nữa là ở cột t, giá trị sẽ chạy từ 1-8 cho mỗi mã code. Anh giúp em điền những dữ liệu còn thiếu ở cột t với ạ! (giữ nguyên những dữ liệu đã có, chỉ thêm những số còn thiếu thôi ạ, sao cho ở mỗi mã code, cột t có giá trị từ 1-8)
Bài đã được tự động gộp:

Em dùng cách này của anh x8 dòng được rồi ạ. Nhưng em vừa có thêm vấn đề nữa là ở cột t, giá trị sẽ chạy từ 1-8 cho mỗi mã code. Anh giúp em điền những dữ liệu còn thiếu ở cột t với ạ! (giữ nguyên những dữ liệu đã có, chỉ thêm những số còn thiếu thôi ạ, sao cho ở mỗi mã code, cột t có giá trị từ 1-8)
em cảm ơn mọi người đã giúp đỡ và em đã x8 dòng lên được rồi ạ!. Nhưng em có vấn đề khác nữa, anh chị nào giúp em với ạ!!!!!!!!!!!
Bài đã được tự động gộp:

Nó báo lỗi ở dòng lệnh nào vậy? (Dòng lệnh nào được tô vàng?)
em x8 lên được rồi ạ. Nhưng em vừa có thêm vấn đề nữa là ở cột t, giá trị sẽ chạy từ 1-8 cho mỗi mã code. Anh giúp em điền những dữ liệu còn thiếu ở cột t với ạ! (giữ nguyên những số đã có, chỉ thêm những số còn thiếu thôi ạ, sao cho ở mỗi mã code, cột t có giá trị từ 1-8). Anh giúp em với ạ!!!
 

File đính kèm

  • số liệu.xlsx
    2.1 MB · Đọc: 2
  • số liệu.xlsx
    2.1 MB · Đọc: 0
Lần chỉnh sửa cuối:
Thử lại
PHP:
Public Sub Insert_rows()
Dim i, ii, J, k, lr, c, n
Dim a, b
lr = Range("B" & Rows.Count).End(xlUp).Row
a = Range("A2:j" & lr + 1).Value
lr = UBound(a, 1) - 1
c = UBound(a, 2)
ReDim b(1 To lr * 8, 1 To c)
For i = 1 To lr
    k = k + 1
    n = n + 1
    b(k, 1) = n
    For J = 2 To c
        b(k, J) = a(i, J)
    Next
    If a(i, 2) <> a(i + 1, 2) Then
        If n < 8 Then
            For ii = n + 1 To 8
                k = k + 1
                n = n + 1
                b(k, 1) = n
                b(k, 2) = a(i, 2)
            Next
        End If
        n = 0
    End If
Next
Range("A2").Resize(k, c) = b
End Sub
 
Thử lại
PHP:
Public Sub Insert_rows()
Dim i, ii, J, k, lr, c, n
Dim a, b
lr = Range("B" & Rows.Count).End(xlUp).Row
a = Range("A2:j" & lr + 1).Value
lr = UBound(a, 1) - 1
c = UBound(a, 2)
ReDim b(1 To lr * 8, 1 To c)
For i = 1 To lr
    k = k + 1
    n = n + 1
    b(k, 1) = n
    For J = 2 To c
        b(k, J) = a(i, J)
    Next
    If a(i, 2) <> a(i + 1, 2) Then
        If n < 8 Then
            For ii = n + 1 To 8
                k = k + 1
                n = n + 1
                b(k, 1) = n
                b(k, 2) = a(i, 2)
            Next
        End If
        n = 0
    End If
Next
Range("A2").Resize(k, c) = b
End Sub
không được rồi ạ. Số ở cột t bị sai rồi ạ. Nó bị lặp lại ạ!
 

File đính kèm

  • số liệu.xlsx
    2.2 MB · Đọc: 1
em xóa hết thay bằng code mới nó ra kêt quả như vậy đấy ạ!
 
Web KT
Back
Top Bottom