Chuyển đổi dữ liệu từ hàng sang cột (6 người xem)

Liên hệ QC

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

Mr Dolphy

Thành viên mới
Tham gia
12/1/18
Bài viết
25
Được thích
5
Giới tính
Nam
Chào các anh chị,
Em không phải dân chuyên lắm về Excel nèn trong công việc đang gặp phải chút vấn đề cần sự trợ giúp của mọi người.

Trong file đính kèm là em có 1 bảng dữ liệu cho trước, với số hàng có thể nhiều hơn tùy theo dữ liệu. Mục đích là từ bảng dữ liệu đó tách ra thành 2 cột và thêm số hàng cho đủ với hệ số bên trong từng ô như trong bảng kết quả mong muốn em làm bằng tay, ít thì còn làm được chứ nhiều quá làm không xuể và sai sót nữa.

Em có thử dùng lệnh Copy và Paste Special (chọn Tranpose) nhưng ko được. Ví dụ: 2400x2 thì nó chỉ hiện 1 hàng chứ không hiển thị được 2 hàng 2400.

Mong các anh chị giúp đỡ, cám ơn mọi người ạ ^^
 

File đính kèm

Chào các anh chị,
Em không phải dân chuyên lắm về Excel nèn trong công việc đang gặp phải chút vấn đề cần sự trợ giúp của mọi người.

Trong file đính kèm là em có 1 bảng dữ liệu cho trước, với số hàng có thể nhiều hơn tùy theo dữ liệu. Mục đích là từ bảng dữ liệu đó tách ra thành 2 cột và thêm số hàng cho đủ với hệ số bên trong từng ô như trong bảng kết quả mong muốn em làm bằng tay, ít thì còn làm được chứ nhiều quá làm không xuể và sai sót nữa.

Em có thử dùng lệnh Copy và Paste Special (chọn Tranpose) nhưng ko được. Ví dụ: 2400x2 thì nó chỉ hiện 1 hàng chứ không hiển thị được 2 hàng 2400.

Mong các anh chị giúp đỡ, cám ơn mọi người ạ ^^
Dùng VBA cho dể
Mã:
Sub GPE()

  Dim sArr(), Res()

  Dim i As Long, k As Long, n As Long, m As Long

  Dim j As Byte, j1 As Byte, j2 As Byte

  sArr = Range("A4:F" & Range("A65500").End(xlUp).Row).Value

  n = 2 * UBound(sArr) * UBound(sArr, 2)

TroLai:

  k = 0

  ReDim Res(1 To n, 1 To 2)

  On Error Resume Next

  For i = 1 To UBound(sArr)

    k = k + 1

    Res(k, 1) = sArr(i, 1)

    For j = 2 To 5

      tmp = Application.Trim(sArr(i, j))

      If Len(tmp) Then

        j1 = InStr(tmp, "x")

        j2 = InStr(tmp, "(")

        If j1 > 0 And j2 > j1 Then

          For m = 1 To CLng(Mid(tmp, j1 + 1, j2 - j1 - 2))

            k = k + 1

            Res(k, 1) = Mid(tmp, 1, j1 - 1)

            Res(k, 2) = Mid(tmp, j2 + 1, Len(tmp) - j2 - 1)

          Next m

        End If

      End If

    Next j

    k = k + 1

    Res(k, 1) = sArr(i, 6)

    If Err > 0 Then

      n = n * 2

      On Error GoTo 0

      GoTo TroLai

    End If

  Next i

  i = Range("H65500").End(xlUp).Row

  If i > 2 Then Range("H3:I" & i).ClearContents

  Range("H3").Resize(k, 2) = Res

End Sub
 

File đính kèm

Chào các anh chị,
Em không phải dân chuyên lắm về Excel nèn trong công việc đang gặp phải chút vấn đề cần sự trợ giúp của mọi người.

Trong file đính kèm là em có 1 bảng dữ liệu cho trước, với số hàng có thể nhiều hơn tùy theo dữ liệu. Mục đích là từ bảng dữ liệu đó tách ra thành 2 cột và thêm số hàng cho đủ với hệ số bên trong từng ô như trong bảng kết quả mong muốn em làm bằng tay, ít thì còn làm được chứ nhiều quá làm không xuể và sai sót nữa.

Em có thử dùng lệnh Copy và Paste Special (chọn Tranpose) nhưng ko được. Ví dụ: 2400x2 thì nó chỉ hiện 1 hàng chứ không hiển thị được 2 hàng 2400.

Mong các anh chị giúp đỡ, cám ơn mọi người ạ ^^
Bạn thử code này xem:
PHP:
Sub a()
Dim rng As Range, cell As Range, i As Long, j As Long, m As Long
Set rng = Range("A4:F" & [A100000].End(xlUp).Row)
[l1:m100000].ClearContents
With CreateObject("vbscript.regexp")
    .Pattern = "(\d+)x(\d+)\s?\((.*)\).*$"
        For Each cell In rng
            If .test(cell) Then
                For m = 1 To Val(.Replace(cell, "$2"))
                    [l100000].End(xlUp).Offset(1) = .Replace(cell, "$1")
                    [l100000].End(xlUp).Offset(, 1) = .Replace(cell, "$3")
                Next m
            ElseIf Len(cell) Then [l100000].End(xlUp).Offset(1) = cell
            End If
        Next
End With
End Sub
 
Lần chỉnh sửa cuối:
Cám ơn các anh chị đã tận tình giúp đỡ, đúng ý em rồi, mọi người thật tuyệt ^^
 

File đính kèm

Cám ơn anh nhưng a hiểu chưa hết ý em rồi, chuyển qua sheet khác nhưng vẫn còn 2400x2, em cần là thành 2 hàng 2400 chứ ko phải là 1 hàng 2400x2 ^^
Tôi thấy cách làm của bạn không khoa học và không trực quan.
1/ Sao chép dữ liệu xuống không có logic (lúc thì sao chép 1, lúc thì 2, lúc thì 3).
2/ Lúc thì sao chép cột B, lúc thì sao chép cột C (nó không có quy luật gì cả).
3/ Nên làm trực quan thì sẽ dễ dò và dễ kiểm tra hơn (bằng cách nhập trực tiếp vào Cell của sheet 1 (muốn mấy lần thì Fill ngang).
4/ Các loại A, B, C nên gán tương ứng với loại dữ liệu (chứ không ai làm theo kiểu Kết quả mong muốn của bạn).

Làm theo kiểu bạn là chuyện ngược đời.

Không hiểu mục đích của bạn là thế nào, còn giải pháp của tôi là thế này:
Làm cái gì đó thì nên nghĩ đến chuyện ứng biến, linh hoạt, có thể trích lọc danh sách để in từng loại hoặc tổng hợp nhanh chóng hay xuất danh sách hàng loạt theo từng loại.
 
Cám ơn anh đã góp ý, em xin giải thích cho anh hiểu rõ:
1. Dữ liệu là em dùng từ 1 macro tối ưu cắt thanh, ví dụ chiều dài cố định 1 thanh là 5800mm, mà mỗi lần cắt thì kích thước khác nhau nên có khi là 2 ô hoặc 3 ô... không theo quy luật logic nào.
2. A,B,C là số thứ tự của thanh mà macro đặt tên theo thứ tự nên đến hơn 30 thanh nó chuyển sang AA, AB, AC chẳng hạn... Em chưa biết chuyển sang số thế nào nhưng chắc mò mẫm xíu là đc ^^.
3. Cấu trúc của nó dạng như vầy:
Ô 1: stt thanh
Ô 2,3...: tùy theo kích thước cắt mà có nhiều ô, nếu giống nhau thì x2 x3...
Ô cuối cùng: là đoạn thừa còn lại sau khi cắt.
Mỗi hàng sẽ là 1 thanh nhôm A, B, .C..
Nên cái em cần là dàn trải kích thước từ dữ liệu thành dạng cột là ok.

Vì em không chuyên về excel nên phải góp nhặt các macro tìm đc theo mục đích nên mọi người thông cảm. Mấy giải pháp phía trên là ổn nhưng nếu số thanh cắt trong 1 hàng lớn thì phải chỉnh lại số trong macroo, cái này thì em có thể làm đc.
Cám ơn anh và mọi người
 
Chào các anh chị,
Em không phải dân chuyên lắm về Excel nèn trong công việc đang gặp phải chút vấn đề cần sự trợ giúp của mọi người.

Trong file đính kèm là em có 1 bảng dữ liệu cho trước, với số hàng có thể nhiều hơn tùy theo dữ liệu. Mục đích là từ bảng dữ liệu đó tách ra thành 2 cột và thêm số hàng cho đủ với hệ số bên trong từng ô như trong bảng kết quả mong muốn em làm bằng tay, ít thì còn làm được chứ nhiều quá làm không xuể và sai sót nữa.

Em có thử dùng lệnh Copy và Paste Special (chọn Tranpose) nhưng ko được. Ví dụ: 2400x2 thì nó chỉ hiện 1 hàng chứ không hiển thị được 2 hàng 2400.

Mong các anh chị giúp đỡ, cám ơn mọi người ạ ^^
Tôi thắc mắc không biết với 2 bảng dữ liệu này thì chúng ta làm được gì sau đó. Bởi cả 2 bảng (trước và sau) đều không chuẩn
Việc chuyển một CSDL chưa chuẩn thành một CSDL chuẩn là yêu cầu hợp lý. Trong khi trường hợp của bạn, chuyển tới chuyển lui, kết quả vẫn không chuẩn thì tôi thật sự không hiểu nỗi việc chuyển đổi này có tác dụng gì?
 
Cám ơn anh đã góp ý, em xin giải thích cho anh hiểu rõ:
1. Dữ liệu là em dùng từ 1 macro tối ưu cắt thanh, ví dụ chiều dài cố định 1 thanh là 5800mm, mà mỗi lần cắt thì kích thước khác nhau nên có khi là 2 ô hoặc 3 ô... không theo quy luật logic nào.
2. A,B,C là số thứ tự của thanh mà macro đặt tên theo thứ tự nên đến hơn 30 thanh nó chuyển sang AA, AB, AC chẳng hạn... Em chưa biết chuyển sang số thế nào nhưng chắc mò mẫm xíu là đc ^^.
3. Cấu trúc của nó dạng như vầy:
Ô 1: stt thanh
Ô 2,3...: tùy theo kích thước cắt mà có nhiều ô, nếu giống nhau thì x2 x3...
Ô cuối cùng: là đoạn thừa còn lại sau khi cắt.
Mỗi hàng sẽ là 1 thanh nhôm A, B, .C..
Nên cái em cần là dàn trải kích thước từ dữ liệu thành dạng cột là ok.

Vì em không chuyên về excel nên phải góp nhặt các macro tìm đc theo mục đích nên mọi người thông cảm. Mấy giải pháp phía trên là ổn nhưng nếu số thanh cắt trong 1 hàng lớn thì phải chỉnh lại số trong macroo, cái này thì em có thể làm đc.
Cám ơn anh và mọi người
Góp ý cho bạn:
1/ Nên Thêm 1 SheetForm để nhập liệu theo chiều dọc thì sẽ rất dễ dàng (chọn loại và gõ số thanh) nhấn nút lưu vào sheet1.
2/ Sau khi nhập liệu, Cột A Sheet1 sẽ là loại A, B, C, cột B sẽ là (2400x2 (K/bao VKS2) nhập Cái gì 2, Cái gì 3, ...v..v....Cái gì cuối cùng theo chiều dọc (muốn 100 Cái gì nhập liệu cũng sẽ dễ dàng hơn), cột C nhập số thanh tùy ý (10, 100 thanh ...v..v....).
3/ Sang sheet 2 nó sẽ tách số thanh dựa vào con số ở cột C.
4/ Muốn tạo ra cái bảng của bạn tại sheet1, của bài 1 dùng PivotTable nó sẽ tổng hợp theo chủng lại, kích cỡ, số thanh.
 
Lần chỉnh sửa cuối:
Tôi thắc mắc không biết với 2 bảng dữ liệu này thì chúng ta làm được gì sau đó. Bởi cả 2 bảng (trước và sau) đều không chuẩn
Việc chuyển một CSDL chưa chuẩn thành một CSDL chuẩn là yêu cầu hợp lý. Trong khi trường hợp của bạn, chuyển tới chuyển lui, kết quả vẫn không chuẩn thì tôi thật sự không hiểu nỗi việc chuyển đổi này có tác dụng gì?

Hic, như em đã nói ở trên, vì công việc nên em tự mày mò áp dụng Excel để giải quyết vấn đề tính toán, em không phải dân chuyên Excel nên áp dụng nhiều macro tìm được trên Internet với nhiều mục đích khác nhau. Bảng dữ liệu đầu tiên là do 1 macro tối ưu nó đưa ra như vậy, em nhờ mọi người giúp bóc tách nó ra dạng cột thành bảng dữ liệu 2 với cột 1 là số liệu kích thước và cột 2 là tên của thanh cần cắt tương ứng với số liệu đó. Từ cột đó em lại copy đem đi dán vào bảng dữ liệu để em xử lý việc in nhãn hàng loạt.

Nếu em viết được Macro ngay từ đầu em đã xuất hẳn sang dạng cột cho đỡ mất thêm công đoạn chuyển đổi này, có gì sai sót mọi người bỏ qua giúp ^^
Bài đã được tự động gộp:

Góp ý cho bạn:
1/ Nên Thêm 1 SheetForm để nhập liệu theo chiều dọc thì sẽ rất dễ dàng (chọn loại và gõ số thanh) nhấn nút lưu vào sheet1.
2/ Sau khi nhập liệu, Cột A Sheet1 sẽ là loại A, B, C, cột B sẽ là (2400x2 (K/bao VKS2) nhập Cái gì 2, Cái gì 3, ...v..v....Cái gì cuối cùng theo chiều dọc (muốn 100 Cái gì nhập liệu cũng sẽ dễ dàng hơn), cột C nhập số thanh tùy ý (10, 100 thanh ...v..v....).
3/ Sang sheet 2 nó sẽ tách số thanh dựa vào con số ở cột C.
4/ Muốn tạo ra cái bảng của bạn tại sheet1, của bài 1 dùng PivotTable nó sẽ tổng hợp theo chủng lại, kích cỡ, số thanh.

1/ Cám ơn anh góp ý, em rất là thích ý tưởng tạo sheet này của anh, mấy bạn giúp giải quyết phía trên là đúng ý em rồi, có điều em lỡ đưa ví dụ có mấy cột nên phải sửa lại Macro 1 xíu (cũng hơi căng vì cũng ko rành lắm mà ráng mò, hix) vì có 1 vài trường hợp nó nhiều cột hơn thì macro chạy hơi sai sai.

2/ Em không nhập liệu bằng tay, macro tối ưu nó đưa ra cái bảng là em dán vô, tùy theo kích thước mà số cột ít hay nhiều và hiếm khi đồng nhất số cột theo từng hàng nên phần em đang nhờ mọi người là giúp chuyển đổi lại từ dạng hàng thành dạng cột theo dạng liệt kê. Cấu trúc chung của 1 hàng là ô đầu tiên sẽ là tên theo thứ tự ABC của thanh, ô thứ 2 là bắt đầu dữ liệu kích thước cùng hệ số x1 x2 x3... + tên diễn giải của thanh cắt đó trong ngoặc đơn. Rồi tiếp theo các ô 3, 4,5... tùy loại, ô cuối cùng là ô chỉ có 1 con số kích thước duy nhất, ko tên ko hệ số.

Vấn đề là chỉ đọc theo hàng rồi liệt kê theo hàng dọc xuống dưới, ô đầu tiên cột 1 là tên thứ tự thanh ABC, ô thứ 2 cột 1 là kích thước và ô bên cạnh bên phải là tên diễn giải, nếu có hệ số x1 x2 x3... thì lặp lại như vậy cho đến ô cuối cùng là 1 con số kích thước duy nhất, thế là hết 1 hàng, xuống đọc hàng tiếp theo lại y như vậy cho đến hết số hàng.

Nếu anh hiểu ý em có thể giúp em đổi lại như vậy trong file mẫu anh làm giúp em, sheet 1 chứa dữ liệu, sheet 2 liệt kê ra theo hàng dọc, gặp hệ số là lặp lại vậy thôi.

Có vẻ mọi người đi quá xa hay em diễn đạt mọi người không thể hiểu nổi nhỉ, hic
 
Lần chỉnh sửa cuối:
.............................................................
Vấn đề là chỉ đọc theo hàng rồi liệt kê theo hàng dọc xuống dưới, ô đầu tiên cột 1 là tên thứ tự thanh ABC, ô thứ 2 cột 1 là kích thước và ô bên cạnh bên phải là tên diễn giải, nếu có hệ số x1 x2 x3... thì lặp lại như vậy cho đến ô cuối cùng là 1 con số kích thước duy nhất, thế là hết 1 hàng, xuống đọc hàng tiếp theo lại y như vậy cho đến hết số hàng.

Nếu anh hiểu ý em có thể giúp em đổi lại như vậy trong file mẫu anh làm giúp em, sheet 1 chứa dữ liệu, sheet 2 liệt kê ra theo hàng dọc, gặp hệ số là lặp lại vậy thôi.

Có vẻ mọi người đi quá xa hay em diễn đạt mọi người không thể hiểu nổi nhỉ, hic
Góp ý cho bạn:
Đến bài viết này thì cái ý tưởng của bạn coi như bị phá sản hoàn toàn, nói chung phải làm lại cái mới hoàn toàn như tôi đã góp ý ở bài 10. Vì vậy, bạn nên mở Topic mới với tiêu đề là "Dùng SheetForm nhập liệu, theo dõi và gán nhãn thanh sắt".

Nếu làm mới lại thì có các phần như sau:
1/ Về phần nhập liệu có 2 sheet (SheetForm dùng nhập liệu và sheet theo dõi), tại sheet theo dõi thì bạn có thể tổng hợp được theo tên khách hàng, theo số lượng, từng loại thanh sắt, cách làm thì tương tự như File trong Topic sau:
https://www.giaiphapexcel.com/diendan/threads/theo-dõi-và-truy-vấn-đơn-thuốc-nơi-phòng-khám-bệnh.126073/

2/ Về phần gán nhãn, in nhãn thì thêm 1 sheet gọi là in nhãn. Khi ở SheetForm nhập liệu thì dữ liệu được lưu đồng thời vào sheet theo dõi và sheet in nhãn, khi cần in nhãn từ đâu đến đâu thì vào sheet này để in, nó tương tự như hình mẫu dưới đây (vừa có tên nhãn, vừa có hình thanh sắt mẫu lấy trong Folder ra).

A_H2.JPG
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom