Xin hỏi cách lấy dữ liệu khác rỗng từ nhiều range trong trường hợp này như thế nào?

Liên hệ QC

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Tôi có 4 Range như sau:
Rng01: A2:E5
Rng02: A7:E12
Rng03: A15:E20
Rng04: A22:E30
Trong các Rng trên thì cell xác định có rỗng hay không thuộc cột B, nếu Bi <> rỗng thì lấy Ai:Bi
Bây giờ tôi muốn lấy dữ liệu khác rỗng từ 4 range trên và dán liên tục vào Sh Data.
Với số dòng tổng cộng là tổng số dòng khác rỗng từ 4 range.
Tôi thử tìm trên GPE mà chưa hiểu lắm.
Các bạn viết hộ 1 code.
Xin cám ơn!
Tôi kèm file, hiện nay tôi đang làm là copy tòan bộ vào 1 Sh Tmp, sort và đưa vào Data, cách này không hay. Các rng trên khi lấy dữ liệu xong sẽ xóa và nhập lại.
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Tôi có 4 Range như sau:
Rng01: A2:E5; Rng02: A7:E12
Rng03: A15:E20; Rng04: A22:E30
Bây giờ tôi muốn lấy dữ liệu khác rỗng từ 4 range trên và dán liên tục vào Sh Data.
Với số dòng tổng cộng là tổng số dòng khác rỗng từ 4 range.
Tôi thử tìm trên GPE mà chưa hiểu lắm. Xin cám ơn!
Mình nghỉ, các bước giải quyết vấn đề của bạn sẽ như sau:
Gộp 4 vùng của bạn vô 1 biến sRng As Range
Tính số dòng & số cột của nó ( VD là SDong, SCot)
PHP:
 For iJ = 1 To SDong
    If WorkSheetFunction.CountBlank(sRng.Cells(iJ, 1).Resize(, SCot))= O Then
          If AddRng Is Nothing Then
                 Set AddRng = sRng.Cells( iJ,1).EntireRow
          Else
                 Set AddRng = Union(AddRng, sRng.Cells( iJ,1).EntireRow)
          End If
     End If
 Next iJ
 AddRng.Copy Detínation:= . . .
 
Upvote 0
Nếu cấu trúc dữ liệu đúng như bác mô tả thì bác có thể xài luôn công thức cho nhẹ cũng được, dùng thêm cột phụ rồi VLOOKUP.
 

File đính kèm

Upvote 0
Nếu cấu trúc dữ liệu đúng như bác mô tả thì bác có thể xài luôn công thức cho nhẹ cũng được, dùng thêm cột phụ rồi VLOOKUP.
Các Range trên là 1 phần của Form, thêm cột phụ thì thế nào, khi lấy dữ liệu vào dòng cuối của Data thì clear các range.
To: ChanhTQ@, nếu dùng for i thì ta ta dùng luôn
PHP:
For i = 1 to SoRng
For j = 1 rng.rows.count
if...
end if
next
next
Sợ chậm, còn Union và lọai trừ Cell Blank thì chưa rành. Bạn cụ thể hộ theo file.
 
Upvote 0
Nếu đúng dữ liệu như file, thì autofilter là được rồi.
Giả sử Name "Data" là vùng A1:E100
PHP:
Sub Laykhongrong()
    EndRow = Sheets("Data").Range("A65000").End(xlUp).Row + 1
    Sheets("Dulieu").Select
    Range("data").Select
    Selection.AutoFilter Field:=2, Criteria1:="<>"
    Selection.Offset(1, 0).Copy Sheets("Data").Range("A" & EndRow)
    Application.CutCopyMode = False
    Selection.AutoFilter
    'With SelectSheet
    .Range("Rng1").Clear'
    '. . .'
End Sub
 
Upvote 0
Trong file thí dụ, ThuNghi có lấy tiêu đề từng range nhỏ đâu? nguyên văn là chỉ lấy dữ liệu và dán liên tục:
Bây giờ tôi muốn lấy dữ liệu khác rỗng từ 4 range trên và dán liên tục vào Sh Data.
Với số dòng tổng cộng là tổng số dòng khác rỗng từ 4 range.
A1:E100 là giả định, còn không thì A1:R1000
Còn khi xoá range, muốn chừa tiêu đề từng range lại thì offset, resize:
Range("Rng1").offset(1,0).resize(Range("Rng1").Rows-1,).clear
(nếu range name bao gồm tiêu đề)
các Rng cách nhau có lúc 20 row sao mà AutoFilter
Thử mới biết chứ, với lại giả định là "dữ liệu đúng như file"

Theo cách đặt name trong file thì không có tiêu đề con, vậy clear thoải mái luôn.
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Sub giao()
Set rng01 = [a1:b3]
Set rng02 = [a4:b5]
Set rng03 = [a1:b5]
Set MyRng = Union(rng01, rng03)
Set MyRng = Intersect(rng01, rng03)

End Sub
Set MyRng = Union(rng01, rng03) : Hợp => chính là Rng03
Set MyRng = Intersect(rng01, rng03): Giao => chính là Rng01
Set MyRng = ?????(rng01, rng03): Giao => chính là Rng02
Bài trên tôi chỉ còn chưa hiểu về vấn đề này thôi, bạn cho lệnh vào thế ?????. Nhớ là GPE có bài của Bác Sa mà kiếm không ra, các bạn đừng bảo phải search nhé. Thú thật là tìm bài viết của chính mình còn không ra.
Xin cám ơn!
 
Upvote 0
Set MyRng = Union(rng01, rng03) : Hợp => chính là Rng03
Set MyRng = Intersect(rng01, rng03): Giao => chính là Rng01
Set MyRng = ?????(rng01, rng03): Giao => chính là Rng02

Bài trên tôi chỉ còn chưa hiểu về vấn đề này thôi, bạn cho lệnh vào thế ?????. Nhớ là GPE có bài của Bác Sa mà kiếm không ra, các bạn đừng bảo phải search nhé. Thú thật là tìm bài viết của chính mình còn không ra. Xin cám ơn!
Nếu chỉ là vấn đề Intecset() thì bấm vô chữ ký của mình;
Nhưng mình đoán rằng ThuNghi đang tìm các bài mình viết về chọn & bỏ chọn các ô trong hai vùng; chọn các ô mà hai vùng chưa chọn;
Nếu vậy, phải tìm từ khóa Utilities (hay utiliti). Mình nhớ vậy là do BNTT hay HanDung107 giới thiệu về cái này; Và mình lấy 1 vài mục trong đó làm đề tài để thử sức; cái nào được mình đưa lên;
Nếu đúng đề tài này, TuanVNVI cũng có khi còn nhớ (Hồi đó Tuan cũng có bài rất hay trong đó!)
 
Upvote 0
Nếu chỉ là vấn đề Intecset() thì bấm vô chữ ký của mình;
Nhưng mình đoán rằng ThuNghi đang tìm các bài mình viết về chọn & bỏ chọn các ô trong hai vùng; chọn các ô mà hai vùng chưa chọn;
Nếu vậy, phải tìm từ khóa Utilities (hay utiliti). Mình nhớ vậy là do BNTT hay HanDung107 giới thiệu về cái này; Và mình lấy 1 vài mục trong đó làm đề tài để thử sức; cái nào được mình đưa lên;
Nếu đúng đề tài này, TuanVNVI cũng có khi còn nhớ (Hồi đó Tuan cũng có bài rất hay trong đó!)
Em tìm thấy link này nhưng chưa cụ thể vào file được. Bác Sa giúp em nhé! Cám ơns!
http://www.giaiphapexcel.com/forum/showthread.php?t=8229&page=2
 
Upvote 0
Em tìm thấy link này nhưng chưa cụ thể vào file được. Bác Sa giúp em nhé! Cám ơns!
http://www.giaiphapexcel.com/forum/showthread.php?t=8229&page=2

Tóm lại, ThuNghi đang tìm vùng ("A4:B5") trong 1 vùng lớn hơn ("A1:B5") nhưng không thuộc vùng nhỏ hơn ("A1:B3"), phải hôn/hông?
Mình nhớ không lầm có bạn đã hỏi về việc này, và cũng mình giải theo cách thô thiển nhất, lúc đó
Tạo vòng lặp khảo sát tất tần tật các ô (Cell) của vùng lớn ;
Dùng thuộc tính Intersect(Cell, Range("A1:B3")) kiểm, sẽ có 2 trường hợp sinh ra:
* Nếu không thuộc vùng nhỏ thì dùng phương thức UNION() vô biến mới, đã khai báo;
* Nếu thuộc vùng nhỏ, thì rót ra 1 li BĐ cho 2 người: Zô,. . . !!
 
Upvote 0
Tóm lại, ThuNghi đang tìm vùng ("A4:B5") trong 1 vùng lớn hơn ("A1:B5") nhưng không thuộc vùng nhỏ hơn ("A1:B3"), phải hôn/hông?
Mình nhớ không lầm có bạn đã hỏi về việc này, và cũng mình giải theo cách thô thiển nhất, lúc đó
Tạo vòng lặp khảo sát tất tần tật các ô (Cell) của vùng lớn ;
Dùng thuộc tính Intersect(Cell, Range("A1:B3")) kiểm, sẽ có 2 trường hợp sinh ra:
* Nếu không thuộc vùng nhỏ thì dùng phương thức UNION() vô biến mới, đã khai báo;
* Nếu thuộc vùng nhỏ, thì rót ra 1 li BĐ cho 2 người: Zô,. . . !!
Không có cách nào khác for i hả Bác. Em thấy chức năng Trim cũng khá phổ biến trong các ưng dụng. Mà cái này lại không có.
 
Upvote 0
Không có cách nào khác for i hả Bác. Em thấy chức năng Trim cũng khá phổ biến trong các ưng dụng. Mà cái này lại không có.
Cách này mình mới phát giác, Hay ThuNghi thử nghiệm xem:
* Chép Vùng qua Sheets mới;
* Gán vùng nhỏ = Blank
* Dùng lệnh Goto trong VBA để đến vùng có dữ liệu trong vùng lớn.
(Không chịu trách nhiêm về dữ liệu của TN, nếu bị xóa, nha!) :-=
 
Upvote 0
Web KT

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

Back
Top Bottom