Hỏi cách chuyển dữ liệu ngang sang dọc (1 người xem)

Liên hệ QC

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

matran25251325

Thành viên tiêu biểu
Tham gia
13/1/11
Bài viết
424
Được thích
39
Trong sheet1 em có dữ liệu kiểu hàng ngang, nay em hỏi có thể viết code nào chuyển sang thành dữ liệu hàng dọc như sheet2 được không? Mong các anh chi, thầy cô giúp.
 

File đính kèm

Trong sheet1 em có dữ liệu kiểu hàng ngang, nay em hỏi có thể viết code nào chuyển sang thành dữ liệu hàng dọc như sheet2 được không? Mong các anh chi, thầy cô giúp.
Đề phòng trường hợp các mã lặp lại, mình sử dụng cột phụ để tham chiếu. Vùng bôi vàng trong sheet Ngang là vùng công thức lấy giá trị truy tìm từ sheet Doc.
 
Upvote 0
Cảm ơn bac mạnh Linh đã nhiệt tình giúp đỡ, nhưng yêu cầu của em là ngược lại. Dữ liệu hàng ngang là có sẵn, giờ em muốn chuyển sang Dọc.
 
Upvote 0
Trong sheet1 em có dữ liệu kiểu hàng ngang, nay em hỏi có thể viết code nào chuyển sang thành dữ liệu hàng dọc như sheet2 được không? Mong các anh chi, thầy cô giúp.
Bỏ bớt mấy cái Merge Cells lu bu đị.
Bạn xem file này thử coi sao, Click vào hình "tiểu sư phụ" 1 cái
 

File đính kèm

Upvote 0
Bác Bate hình như cũng là dân xây dựng thì phải? Bác sửa lại giúp em vấn đề này với:
+ Nếu sheet1 em xóa bớt dữ liệu 2 hàng thì bên sheet GPE không xóa dữ liệu và cập nhập lại.
+ Sao em không thấy thủ tục để hiện công thức tính ở sheet GPE nhỉ.
 
Lần chỉnh sửa cuối:
Upvote 0
Em có sửa tí code nhằm thêm điều kiện khoảng trống nhưng bị thừa đi phần tô đỏ. Mong bác chỉnh giúp em tí và hiển thị công thức các phép tính bên sheet GPE luôn ạ.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bác Bate hình như cũng là dân xây dựng thì phải? Bác sửa lại giúp em vấn đề này với:
+ Nếu sheet1 em xóa bớt dữ liệu 2 hàng thì bên sheet GPE không xóa dữ liệu và cập nhập lại.
+ Sao em không thấy thủ tục để hiện công thức tính ở sheet GPE nhỉ.
Công thức ở sheet1, code chỉ lấy số liệu qua sheet GPE thôi, đâu có đem công thức qua
 
Upvote 0
Em mới úp lại file bài 6, bác xem chỉnh giùm em tí code. Hic hàng chi không thấy có công thức, vậy có cách nào thể hiện các phép tính không bác.
 
Upvote 0
Em mới úp lại file bài 6, bác xem chỉnh giùm em tí code. Hic hàng chi không thấy có công thức, vậy có cách nào thể hiện các phép tính không bác.
Muốn có công thức sang luôn thì code dài thoòng luôn:
[GPECODE=vb]Public Sub GPE()
Dim sArr(), tArr(), dArr(), I As Long, J As Long, K As Long, TieuDe()
With Sheet1
sArr = .Range(.[A10], .[A65536].End(xlUp)).Resize(, 18).Value
TieuDe = .[A8:R8].Value
End With
ReDim dArr(1 To UBound(sArr, 1) * 10, 1 To 6)
tArr = Sheets("GPE").[A5:I5].Value
For I = 1 To UBound(sArr, 1)
If sArr(I, 3) = "" Then
K = K + 1
dArr(K, 1) = sArr(I, 1): dArr(K, 2) = sArr(I, 2)
Else
K = K + 1
dArr(K, 1) = sArr(I, 1)
dArr(K, 2) = sArr(I, 2)
dArr(K, 3) = sArr(I, 3)
For J = 4 To 6
K = K + 1
dArr(K, 2) = TieuDe(1, J)
dArr(K, 4) = sArr(I, J)
dArr(K, 5) = sArr(I, J + 3)
dArr(K, 6) = "=RC[-2]*RC[-1]"
Next J
K = K + 1
dArr(K, 2) = TieuDe(1, 13)
dArr(K, 6) = "=SUM(R[-3]C:R[-1]C)*2%"
K = K + 1
dArr(K, 2) = TieuDe(1, 14)
dArr(K, 6) = "=SUM(R[-4]C:R[-1]C)"
K = K + 1
dArr(K, 2) = TieuDe(1, 15)
dArr(K, 6) = "=R[-1]C * 5.5%"
K = K + 1
dArr(K, 2) = TieuDe(1, 16)
dArr(K, 6) = "=R[-2]C + R[-1]C"
K = K + 1
dArr(K, 2) = TieuDe(1, 17)
dArr(K, 6) = "=R[-1]C * 5.5%"
K = K + 1
dArr(K, 2) = TieuDe(1, 18)
dArr(K, 6) = "=R[-2]C + R[-1]C"
End If
Next I
Sheets("GPE").[A8:F10000].ClearContents
Sheets("GPE").[A8:F10000].Borders.LineStyle = xlNone
With Sheets("GPE").[A8].Resize(K, 6)
.Value = dArr
.Borders.LineStyle = xlContinuous
End With
End Sub[/GPECODE]
 
Upvote 0
Muốn có công thức sang luôn thì code dài thoòng luôn:
[GPECODE=vb]Public Sub GPE()
Dim sArr(), tArr(), dArr(), I As Long, J As Long, K As Long, TieuDe()
With Sheet1
sArr = .Range(.[A10], .[A65536].End(xlUp)).Resize(, 18).Value
TieuDe = .[A8:R8].Value
End With
ReDim dArr(1 To UBound(sArr, 1) * 10, 1 To 6)
tArr = Sheets("GPE").[A5:I5].Value
For I = 1 To UBound(sArr, 1)
If sArr(I, 3) = "" Then
K = K + 1
dArr(K, 1) = sArr(I, 1): dArr(K, 2) = sArr(I, 2)
Else
K = K + 1
dArr(K, 1) = sArr(I, 1)
dArr(K, 2) = sArr(I, 2)
dArr(K, 3) = sArr(I, 3)
For J = 4 To 6
K = K + 1
dArr(K, 2) = TieuDe(1, J)
dArr(K, 4) = sArr(I, J)
dArr(K, 5) = sArr(I, J + 3)
dArr(K, 6) = "=RC[-2]*RC[-1]"
Next J
K = K + 1
dArr(K, 2) = TieuDe(1, 13)
dArr(K, 6) = "=SUM(R[-3]C:R[-1]C)*2%"
K = K + 1
dArr(K, 2) = TieuDe(1, 14)
dArr(K, 6) = "=SUM(R[-4]C:R[-1]C)"
K = K + 1
dArr(K, 2) = TieuDe(1, 15)
dArr(K, 6) = "=R[-1]C * 5.5%"
K = K + 1
dArr(K, 2) = TieuDe(1, 16)
dArr(K, 6) = "=R[-2]C + R[-1]C"
K = K + 1
dArr(K, 2) = TieuDe(1, 17)
dArr(K, 6) = "=R[-1]C * 5.5%"
K = K + 1
dArr(K, 2) = TieuDe(1, 18)
dArr(K, 6) = "=R[-2]C + R[-1]C"
End If
Next I
Sheets("GPE").[A8:F10000].ClearContents
Sheets("GPE").[A8:F10000].Borders.LineStyle = xlNone
With Sheets("GPE").[A8].Resize(K, 6)
.Value = dArr
.Borders.LineStyle = xlContinuous
End With
End Sub[/GPECODE]
Code thì oke rồi bác, nhưng về mặt công thức ở đoạn này thì chưa đúng với tỉnh em lắm:
K = K + 1
dArr(K, 2) = TieuDe(1, 15)
dArr(K, 6) = "=R[-1]C * 5.5%"
Phần công thức (phần màu xanh) đúng với nơi em thì phải là: Nếu mã hiệu là AB.11 hoặc AB.13 thì (C) = Thành tiền Nhân Công x 51%; Ngoài 2 trường hợp trên thì (C) = (T) x 5.5% (đại loại như là Nếu mã hiệu là AB.11 hoặc AB.13 thì = R[-4]C * 51%; trường hợp còn lại = R[-1]C * 5.5% ; Không biết bác BaTe có cách nào để sửa công thức thành như vậy không?
 
Upvote 0
Không cần code đâu các bác ơi! Dùng hàm vẫn được mà, tính cơ động cao hơn!!
Chịu khó lập hàm cho 6 cell đầu, sau đó fillter theo vật liệu, nhân công, máy rồi copy paste xuống, cũng nhanh thôi!!! Các mã hiệu và tên công việc cũng dùng hàm cho chính xác.
 
Upvote 0
Qua một hồi suy nghĩ em thấy khó có thể sửa công thức như bài 10 em nói được, nên chắc mong bác Ba Tê sửa giùm em code bài 6 bỏ khoảng dư thừa là được rồi bác. Đợi hồi âm của bác vậy.
 
Upvote 0
Không cần code đâu các bác ơi! Dùng hàm vẫn được mà, tính cơ động cao hơn!!
Chịu khó lập hàm cho 6 cell đầu, sau đó fillter theo vật liệu, nhân công, máy rồi copy paste xuống, cũng nhanh thôi!!! Các mã hiệu và tên công việc cũng dùng hàm cho chính xác.
Cảm ơn bác manh_linh rất nhiều, em thấy dùng hàm và code thì độ chính xác như nhau thôi, nhưng nếu dữ liệu ít thì không nói, nhưng khi dữ liệu lên 40 đên 50 dòng thì dùng hàm phải copy và pas vậy cũng hơi lâu và thực sự nhìn rối cả mắt. Cái này theo suy nghĩ của em thôi chứ thực sự cũng cảm ơn bác rất nhiệt tình.
 
Upvote 0
Cảm ơn bác manh_linh rất nhiều, em thấy dùng hàm và code thì độ chính xác như nhau thôi, nhưng nếu dữ liệu ít thì không nói, nhưng khi dữ liệu lên 40 đên 50 dòng thì dùng hàm phải copy và pas vậy cũng hơi lâu và thực sự nhìn rối cả mắt. Cái này theo suy nghĩ của em thôi chứ thực sự cũng cảm ơn bác rất nhiệt tình.
Nhanh hay chậm do kỹ năng thôi bạn ơi!! Code thường có tính cố hữu, nghĩa là một đoạn code thường chỉ dùng cho 1 kiểu kết cấu dữ liệu. Dùng hàm tính linh động cao hơn, và ưu điểm nhất là khi dữ liệu nguồn của bạn thay đổi, bạn không cần làm gì nữa, nếu dùng code bạn phải chạy lại code, mà quên béng cái là tỏi rồi!!! 40-50 dòng chứ 1000 dòng thì mình cũng chỉ mất không đến 1 phút là copy và paste xong hết dữ liệu!!
 
Upvote 0
Nhanh hay chậm do kỹ năng thôi bạn ơi!! Code thường có tính cố hữu, nghĩa là một đoạn code thường chỉ dùng cho 1 kiểu kết cấu dữ liệu. Dùng hàm tính linh động cao hơn, và ưu điểm nhất là khi dữ liệu nguồn của bạn thay đổi, bạn không cần làm gì nữa, nếu dùng code bạn phải chạy lại code, mà quên béng cái là tỏi rồi!!! 40-50 dòng chứ 1000 dòng thì mình cũng chỉ mất không đến 1 phút là copy và paste xong hết dữ liệu!!
Vì ý em là chuyển dữ liệu ngang sang dọc, nên em cũng sẽ tham khảo 2 cách Hàm của bác và Code của bác BaTe. Cái nào nhanh và tiện hơn thì em sẽ ứng dụng. Thank bác
 
Upvote 0
Như bài 9 bác viết đã khắc phục thừa hàng và bổ sung công thức. Vậy nếu em muốn khắc phục lỗi thừa hàng khi chạy code và chỉ lấy giá trị bên sheet1 thì em phải sửa lại thế nào
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom