Chuyẻn dữ liệu từ một sheet sang nhiều sheet bằng code VBA có điều kiện khó!!! (1 người xem)

Liên hệ QC

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

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Chuyẻn dữ liệu từ một sheet sang nhiều sheet bằng code VBA có điều kiện!!!

Chào anh chị em! Mình có một nhu cầu cần sử dụng thực tế nhưng vùa là là cần sử dụng mình muốn mọi người cùng tham gia để thảo luận nhé!
Yêu cầu mình nghi rõ trong file đính kèm.
FILE CỦA MÌNH UP LÊN DO VỘI ĐÚNG RA SHEET 1A CHỖ SẢN PHẨM CHUYỂN TỚI CŨNG GỘP Ô ĐẤY NHÉ!
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn sửa tiêu đề đi: bỏ chữ "khó!!!" đi (bấm vào sửa bài của bài #1)
vì sao?, vì nó chẳng liên quan đến nội dung chính để hỏi, đó là thán từ văn nói, mà nó còn làm cho người đọc cảm giác là bạn đang thách thức người khác

Vậy nhé,
 
Upvote 0
Chào anh chị em! Mình có một nhu cầu cần sử dụng thực tế nhưng vùa là là cần sử dụng mình muốn mọi người cùng tham gia để thảo luận nhé!
Yêu cầu mình nghi rõ trong file đính kèm.

Những dòng dữ liệu có cột "Nhóm sản xuất" là rổng thì chuyển về sheet nào?
 
Upvote 0
Những dòng dữ liệu có cột "Nhóm sản xuất" là rổng thì chuyển về sheet nào?

Chờ bạn ấy sửa lại tiêu đề đã,

-----------
hỏi thêm: sao các sheet 1A, 1B, .... sao lại merged cel 7 hàng một vậy?

- bạn có suy nghĩ : nên đặt kết quả lên 1 sheet thôi, tại đây cho phép chọn nhóm và ca --> KQ list ra các dữ liệu tương ứng với nhóm và ca - hay hơn nhiều là chia nhiều sheets???
 
Lần chỉnh sửa cuối:
Upvote 0
Chờ bạn ấy sửa lại tiêu đề đã,

-----------
hỏi thêm: sao các sheet 1A, 1B, .... sao lại merged cel 7 hàng một vậy?

- bạn có suy nghĩ lên đặt kết quả lên 1 sheet thôi, tại đây cho phép chọn nhóm và ca --> KQ list ra các dữ liệu tương ứng với nhóm và ca - hay hơn nhiều là chia nhiều sheets???

Vì mục đích sử dụng! đi lập trình là làm theo yêu cầu công việc của người sử dụng mà " gớm đã sửa tiêu đề rùi nhé"
Bạn nói cũng có lý: Nhưng trong quá trình sử dụng gặp một số khó khăn: lọc băng autofilter mất nhiều thời gian quá và khi in ấn căn chỉnh rất vất và lâu. tớ muốn như vậy là tưng nhóm căn chỉnh sãn khi in mở ra là in. Tiếp tới là tớ có ý định nữa sau khi làm xong cái yêu cầu này!!!
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ không chuyể đi đâu cả anh àh!

Bài này có nhiều cách làm
Tôi dùng Advanced Filter cho đơn giản nhé:
Mã:
Sub Main()
  Dim wksDes As Worksheet, wksSrc As Worksheet
  Dim rCrit As Range, Target As Range
  Dim SheetName As String
  Set wksSrc = Worksheets("DM")
  Set rCrit = wksSrc.Range("IU1:IV2")
  rCrit.Resize(1).Value = wksSrc.Range("F3:G3").Value
  For Each wksDes In ThisWorkbook.Worksheets
    If wksDes.Name <> wksSrc.Name Then
      SheetName = wksDes.Name
      If SheetName = "1A" Or SheetName = "1B" Then
        rCrit(2, 2) = "AB"
        wksSrc.Range("IU2").ClearContents
      Else
        rCrit(2, 1) = "'=" & Left(SheetName, 1)
        rCrit(2, 2) = "'=" & Mid(SheetName, 2)
      End If
      Set Target = wksDes.Range("B7:C7")
      wksSrc.Range("D3:G10000").AdvancedFilter 2, rCrit, Target
    End If
  Next
  rCrit.Clear
End Sub
Thử code xem
 
Upvote 0
File của mình up lên do vội đúng ra sheet 1a chỗ sản phẩm chuyển tới cũng gộp ô đấy nhé!
 
Upvote 0
Vì mục đích sử dụng! đi lập trình là làm theo yêu cầu công việc của người sử dụng mà " gớm đã sửa tiêu đề rùi nhé"
Bạn nói cũng có lý: Nhưng trong quá trình sử dụng gặp một số khó khăn: lọc băng autofilter mất nhiều thời gian quá và khi in ấn căn chỉnh rất vất và lâu. tớ muốn như vậy là tưng nhóm căn chỉnh sãn khi in mở ra là in. Tiếp tới là tớ có ý định nữa sau khi làm xong cái yêu cầu này!!!
"If you like I afternoon"
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Dau, Cuoi, Vung, I, K, Mg
If ActiveSheet.Name <> "DM" Then
Dau = Left(ActiveSheet.Name, 1): Cuoi = Replace(ActiveSheet.Name, Dau, "")
With Sheets("DM")
    Vung = .Range(.[D5], .[D50000].End(xlUp)).Resize(, 4)
    ReDim Mg(1 To UBound(Vung), 1 To 3)
    For I = 1 To UBound(Vung)
        If Vung(I, 3) = Val(Dau) Then
            If InStr(Vung(I, 4), Cuoi) Then
                K = K + 1
               Mg(K, 1) = K: Mg(K, 2) = Vung(I, 1): Mg(K, 3) = Vung(I, 2)
            End If
        End If
    Next I
End With
End If
[A8:C10000].ClearContents
If K Then [A8].Resize(K, 3) = Mg
End Sub
Híc, mỗi lần cũng chỉ xem được một sheet thôi mà
Thân
 

File đính kèm

Upvote 0
Bài này có nhiều cách làm
Tôi dùng Advanced Filter cho đơn giản nhé:
Mã:
Sub Main()
  Dim wksDes As Worksheet, wksSrc As Worksheet
  Dim rCrit As Range, Target As Range
  Dim SheetName As String
  Set wksSrc = Worksheets("DM")
  Set rCrit = wksSrc.Range("IU1:IV2")
  rCrit.Resize(1).Value = wksSrc.Range("F3:G3").Value
  For Each wksDes In ThisWorkbook.Worksheets
    If wksDes.Name <> wksSrc.Name Then
      SheetName = wksDes.Name
      If SheetName = "1A" Or SheetName = "1B" Then
        rCrit(2, 2) = "AB"
        wksSrc.Range("IU2").ClearContents
      Else
        rCrit(2, 1) = "'=" & Left(SheetName, 1)
        rCrit(2, 2) = "'=" & Mid(SheetName, 2)
      End If
      Set Target = wksDes.Range("B7:C7")
      wksSrc.Range("D3:G10000").AdvancedFilter 2, rCrit, Target
    End If
  Next
  rCrit.Clear
End Sub
Thử code xem

Anh ơi sủa lại chút nữa cho em vì cái em muốn là chuyển về ô đã gộp rùi ấy. ví dụ như ảnh em đưa lên. Trên ảnh là sản phẩm của nhóm 4HC
 

File đính kèm

  • Untitled.jpg
    Untitled.jpg
    20.1 KB · Đọc: 47
Upvote 0
"If you like I afternoon"
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Dau, Cuoi, Vung, I, K, Mg
If ActiveSheet.Name <> "DM" Then
Dau = Left(ActiveSheet.Name, 1): Cuoi = Replace(ActiveSheet.Name, Dau, "")
With Sheets("DM")
    Vung = .Range(.[D5], .[D50000].End(xlUp)).Resize(, 4)
    ReDim Mg(1 To UBound(Vung), 1 To 3)
    For I = 1 To UBound(Vung)
        If Vung(I, 3) = Val(Dau) Then
            If InStr(Vung(I, 4), Cuoi) Then
                K = K + 1
               Mg(K, 1) = K: Mg(K, 2) = Vung(I, 1): Mg(K, 3) = Vung(I, 2)
            End If
        End If
    Next I
End With
End If
[A8:C10000].ClearContents
If K Then [A8].Resize(K, 3) = Mg
End Sub
Híc, mỗi lần cũng chỉ xem được một sheet thôi mà
Thân

Có thể do sheet 1A mình copy nhưng quên không gộp lại ô nên làm mọi người hiểu nhầm. Nhìn vào sheets khác đi cái mình là đưa về trong điều kiện ô đã gộp như nhóm 1B ....đó
 
Upvote 0
Anh ơi sủa lại chút nữa cho em vì cái em muốn là chuyển về ô đã gộp rùi ấy. ví dụ như ảnh em đưa lên. Trên ảnh là sản phẩm của nhóm 4HC

Cái vụ merge cell sẽ khiến bạn rắc rối dài dài. Ai BIẾT XÀI Excel sẽ chẳng làm vậy bao giờ
 
Upvote 0
Cái vụ merge cell sẽ khiến bạn rắc rối dài dài. Ai BIẾT XÀI Excel sẽ chẳng làm vậy bao giờ

Cũng vì mỗi sản phẩm sau khi chuyển qua sheet nhóm của nó, ở sản phẩm đó nó phát sinh nghiệp vụ trên 7 dòng liên quan tới sản phẩm đó mới chết anh ah
 

File đính kèm

  • Untitled1.jpg
    Untitled1.jpg
    21 KB · Đọc: 23
Lần chỉnh sửa cuối:
Upvote 0
Cái vụ merge cell sẽ khiến bạn rắc rối dài dài. Ai BIẾT XÀI Excel sẽ chẳng làm vậy bao giờ
Em thì chưa hội ngộ đủ để viết code nhưng em có ý như thế này:
+ Dữ liệu tìm được cho mỗi sheet ta không cho nghi vào sheet luôn
+ ở đây ta có 13 nhóm vậy có thể khai báo 13 mảng được không ạ?, mỗi mảng tương ứng xới 1 sheet định nghi dữ liệu
+ sau đó dùng select case , trong mỗi case ta dùng for each để điền dữ liệu vo các ô merge cell được không hả anh?
 
Upvote 0
Em thì chưa hội ngộ đủ để viết code nhưng em có ý như thế này:
+ Dữ liệu tìm được cho mỗi sheet ta không cho nghi vào sheet luôn
+ ở đây ta có 13 nhóm vậy có thể khai báo 13 mảng được không ạ?, mỗi mảng tương ứng xới 1 sheet định nghi dữ liệu
+ sau đó dùng select case , trong mỗi case ta dùng for each để điền dữ liệu vo các ô merge cell được không hả anh?

Thì bạn cứ thử đi
Tôi thì mỗi khi gặp dữ liệu không CHUẨN là không có hứng (vì chẳng ứng dụng được gì)
Ẹc... Ẹc...
 
Upvote 0
Thì bạn cứ thử đi
Tôi thì mỗi khi gặp dữ liệu không CHUẨN là không có hứng (vì chẳng ứng dụng được gì)
Ẹc... Ẹc...

Vì biểu mẫu đã liệt vào hệ thống iso của công ty, hơn nữa đó là nhu cầu công việc của một tổ chức nào đó thì mình phải làm theo chứ? "từ không chuẩn ở đây là chỗ nào hả anh?"
 
Upvote 0
Vì biểu mẫu đã liệt vào hệ thống iso của công ty, hơn nữa đó là nhu cầu công việc của một tổ chức nào đó thì mình phải làm theo chứ? từ không chuẩn ở đây là chỗ nào hả anh?
Ai làm Excel đều biết 1 CSDL chuẩn là:
- Vùng được gọi là dữ liệu phải là vùng không có bất cứ cell nào bị merge
- Vùng dữ liệu CHUẨN luôn có dòng tiêu đề ở trên cùng và tên của các tiêu đề này phải là duy nhất (không trùng), không rổng và không bị merge
- Vùng dữ liệu phải có 1 cột (Field) chứa chuổi nhận dạng, còn gọi là MÃ (ID)
- Trên mỗi cột (Field) luôn chứa 1 LOẠI DỮ LIỆU
- Mỗi dòng (record) luôn là thông tin đầy đủ của một MÃ nào đó
vân vân...
-----------------
Vậy nếu bạn nói rằng: HỆ THỐNG ISO gì gì của cty nó bắt phải làm vậy thì bạn đành... CHỊU CỰC thôi
 
Upvote 0
Ai làm Excel đều biết 1 CSDL chuẩn là:
- Vùng được gọi là dữ liệu phải là vùng không có bất cứ cell nào bị merge
- Vùng dữ liệu CHUẨN luôn có dòng tiêu đề ở trên cùng và tên của các tiêu đề này phải là duy nhất (không trùng), không rổng và không bị merge
- Vùng dữ liệu phải có 1 cột (Field) chứa chuổi nhận dạng, còn gọi là MÃ (ID)
- Trên mỗi cột (Field) luôn chứa 1 LOẠI DỮ LIỆU
- Mỗi dòng (record) luôn là thông tin đầy đủ của một MÃ nào đó
vân vân...
-----------------
Vậy nếu bạn nói rằng: HỆ THỐNG ISO gì gì của cty nó bắt phải làm vậy thì bạn đành... CHỊU CỰC thôi

Vậy em lại thêm được thế nào là chuẩn csdl: vậy là một bảng tính để trích suất csdl thì range chưa csdl đó sẽ không merge cell" >> đấy là chuẩn thôi chứ em vẫn nghĩ là vẫn làm được, không biết em nghi có sai không? thôi em cứ làm không biết đâu em lại hỏi!
 
Upvote 0
Vậy em lại thêm được thế nào là chuẩn csdl: vậy là một bảng tính để trích suất csdl thì range chưa csdl đó sẽ không merge cell" >> đấy là chuẩn thôi chứ em vẫn nghĩ là vẫn làm được, không biết em nghi có sai không? thôi em cứ làm không biết đâu em lại hỏi!

Đâu có ai nói là không làm được chứ!
Vấn đề là gặp dữ liệu tùm lum vậy thì ---> OẢI
 
Upvote 0
Đâu có ai nói là không làm được chứ!
Vấn đề là gặp dữ liệu tùm lum vậy thì ---> OẢI
Anh ơi đây là code ý tưởng của em chèn dữ liệu từ DM vào sheet đã tìm được. em giả sử không chèn dữ liệu vào sheet đã tìm được vào sheet tương ứng mà ta để nó trong một mảng. sau đó chèn như file đính kèm có được không anh???//
xin lõi lúc lưu khong để ý .XSLM mất toi mất code giờ viết lại
Mã:
Sub chenvao_mergecell()
Dim arr()
Dim ran As Range
Dim r As Integer, tongr As Integer, i As Integer
arr = Worksheets("sheet1").Range("N:N").Value
r = Worksheets("sheet1").[N6500].End(xlUp).Row
tongr = r * 7 + 7
For Each ran In Worksheets("sheet1").Range("B8:B" & tongr)
    If ran.Row Mod 7 = 1 Then
        i = i + 1
        ran.Value = arr(i, 1)
        Worksheets("sheet1").Range("A" & ran.Row).Value = i
     End If
Next
End Sub
code cho file up cùng
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh ơi đây là code ý tưởng của em chèn dữ liệu từ DM vào sheet đã tìm được. em giả sử không chèn dữ liệu vào sheet đã tìm được vào sheet tương ứng mà ta để nó trong một mảng. sau đó chèn như file đính kèm có được không anh???//
xin lõi lúc lưu khong để ý .XSLM mất toi mất code giờ viết lại
Mã:
Sub chenvao_mergecell()
Dim arr()
Dim ran As Range
Dim r As Integer, tongr As Integer, i As Integer
arr = Worksheets("sheet1").Range("N:N").Value
r = Worksheets("sheet1").[N6500].End(xlUp).Row
tongr = r * 7 + 7
For Each ran In Worksheets("sheet1").Range("B8:B" & tongr)
    If ran.Row Mod 7 = 1 Then
        i = i + 1
        ran.Value = arr(i, 1)
        Worksheets("sheet1").Range("A" & ran.Row).Value = i
     End If
Next
End Sub
code cho file up cùng
Chẳng biết mục đích sau cùng là gì, nếu chỉ gán các số ở cột N vào cột B bị Merge 7 dòng (tất cả phải cùng là 7; chỗ 7, chỗ 6, chỗ 8 dòng là tèo), thử code này xem có chạy đúng không.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long
sArr = Range([N1], [N65000].End(xlUp)).Value
ReDim dArr(1 To UBound(sArr, 1) * 7, 1 To 1)
For I = 1 To UBound(sArr, 1)
    dArr(I * 7 - 6, 1) = sArr(I, 1)
Next I
[B8].Resize(UBound(sArr, 1) * 7).Value = dArr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Chẳng biết mục đích sau cùng là gì, nếu chỉ gán các số ở cột N bào cột B bị Merge 7 dòng (tất cả phải cùng là 7; chỗ 7, chỗ 6, chỗ 8 dòng là tèo), thử code này xem có chạy đúng không.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long
sArr = Range([N1], [N65000].End(xlUp)).Value
ReDim dArr(1 To UBound(sArr, 1) * 7, 1 To 1)
For I = 1 To UBound(sArr, 1)
    dArr(I * 7 - 6, 1) = sArr(I, 1)
Next I
[B8].Resize(UBound(sArr, 1) * 7).Value = dArr
End Sub

Vâng ạ các ô merge cell cứ đều đều theo quy luật là 7 anh ạ! thank anh nhé
 
Upvote 0
"If you like I afternoon"
Mã:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Dau, Cuoi, Vung, I, K, Mg
If ActiveSheet.Name <> "DM" Then
Dau = Left(ActiveSheet.Name, 1): Cuoi = Replace(ActiveSheet.Name, Dau, "")
With Sheets("DM")
    Vung = .Range(.[D5], .[D50000].End(xlUp)).Resize(, 4)
    ReDim Mg(1 To UBound(Vung), 1 To 3)
    For I = 1 To UBound(Vung)
        If Vung(I, 3) = Val(Dau) Then
            If InStr(Vung(I, 4), Cuoi) Then
                K = K + 1
               Mg(K, 1) = K: Mg(K, 2) = Vung(I, 1): Mg(K, 3) = Vung(I, 2)
            End If
        End If
    Next I
End With
End If
[A8:C10000].ClearContents
If K Then [A8].Resize(K, 3) = Mg
End Sub
Híc, mỗi lần cũng chỉ xem được một sheet thôi mà
Thân

quả là code quá tuyệt, hôm nay mới vọc tới nó. Cảm ơn bạn nhé
 
Upvote 0

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

Back
Top Bottom