Lấy dữ liệu bằng vba

Liên hệ QC

tuan16

Thành viên thường trực
Tham gia
28/11/13
Bài viết
285
Được thích
18
Hiện tại em có file excell sau ạ. Các ô chứa dữ liệu đang ở các vị trí cách quãng nhau và không theo quy luật ạ. Em muốn lấy các dữ liệu như em trình bày trong file ạ. Em có dùng công thức mảng để làm được nhưng file bị nặng. Em xin nhờ các anh chị trên diễn đàn viết giúp em đoạn code để em lấy được dữ liệu như mong muốn ạ.
 

File đính kèm

  • gpe5.xlsx
    8.5 KB · Đọc: 32
Macro này sẽ thỏa iêu cầu của bạn:
PHP:
Sub LayDuLieuBangVBA()
 Dim Rng As Range, sRng As Range
 Dim Rws As Long, W As Integer, MaxNum As Integer, MinNum As Integer
 
 Set Rng = Range([B1], [B65500].End(xlUp))
 MaxNum = Application.WorksheetFunction.Max(Rng)
 MinNum = Application.WorksheetFunction.Min(Rng)
 [D4].CurrentRegion.Offset(1).Clear
 Randomize
 For W = MinNum To MaxNum
    Set sRng = Rng.Find(W, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        With [D65500].End(xlUp).Offset(1)
            .Value = W
            .Interior.ColorIndex = 34 + 9 * Rnd() \ 1
        End With
    End If
 Next W
End Sub
 
Upvote 0
Macro này sẽ thỏa iêu cầu của bạn:
PHP:
Sub LayDuLieuBangVBA()
Dim Rng As Range, sRng As Range
Dim Rws As Long, W As Integer, MaxNum As Integer, MinNum As Integer

Set Rng = Range([B1], [B65500].End(xlUp))
MaxNum = Application.WorksheetFunction.Max(Rng)
MinNum = Application.WorksheetFunction.Min(Rng)
[D4].CurrentRegion.Offset(1).Clear
Randomize
For W = MinNum To MaxNum
    Set sRng = Rng.Find(W, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        With [D65500].End(xlUp).Offset(1)
            .Value = W
            .Interior.ColorIndex = 34 + 9 * Rnd() \ 1
        End With
    End If
Next W
End Sub
Dạ em cảm ơn bác ạ
 
Upvote 0
Hiện tại em có file excell sau ạ. Các ô chứa dữ liệu đang ở các vị trí cách quãng nhau và không theo quy luật ạ. Em muốn lấy các dữ liệu như em trình bày trong file ạ. Em có dùng công thức mảng để làm được nhưng file bị nặng. Em xin nhờ các anh chị trên diễn đàn viết giúp em đoạn code để em lấy được dữ liệu như mong muốn ạ.
Cách khác:
PHP:
    Selection.SpecialCells(xlCellTypeConstants, 3).Copy Range("D4")
    Application.CutCopyMode = False
 
Lần chỉnh sửa cuối:
Upvote 0
Cách khác:
PHP:
Sub Test()
    Selection.SpecialCells(xlCellTypeConstants, 3).Copy Range("D4")
    Application.CutCopyMode = False
End Sub
Dạ em cảm ơn. Em hỏi thêm chút. Trong trường hợp dữ liệu lúc đầu và dữ liệu mong muốn ở hai sheet khác nhau thì đoạn code trên cần chỉnh sửa gì ạ. Bác chỉ giúp em với ạ
Bài đã được tự động gộp:

Macro này sẽ thỏa iêu cầu của bạn:
PHP:
Sub LayDuLieuBangVBA()
Dim Rng As Range, sRng As Range
Dim Rws As Long, W As Integer, MaxNum As Integer, MinNum As Integer

Set Rng = Range([B1], [B65500].End(xlUp))
MaxNum = Application.WorksheetFunction.Max(Rng)
MinNum = Application.WorksheetFunction.Min(Rng)
[D4].CurrentRegion.Offset(1).Clear
Randomize
For W = MinNum To MaxNum
    Set sRng = Rng.Find(W, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        With [D65500].End(xlUp).Offset(1)
            .Value = W
            .Interior.ColorIndex = 34 + 9 * Rnd() \ 1
        End With
    End If
Next W
End Sub
Dạ dữ liệu đầu vào và dữ liệu mong muốn ở 2 sheet khác nhau thì chỉnh sửa đoạn code trên sao ạ. Cái này là sai sót của em không ghi vào từ đầu. Mong bác giúp ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ em cảm ơn. Em hỏi thêm chút. Trong trường hợp dữ liệu lúc đầu và dữ liệu mong muốn ở hai sheet khác nhau thì đoạn code trên cần chỉnh sửa gì ạ. Bác chỉ giúp em với ạ
Bài đã được tự động gộp:


Dạ dữ liệu đầu vào và dữ liệu mong muốn ở 2 sheet khác nhau thì chỉnh sửa đoạn code trên sao ạ. Cái này là sai sót của em không ghi vào từ đầu. Mong bác giúp ạ
Ví dụ:
PHP:
    With Sheet1
        ' Sheet1 dau vao
        'Sheet2 la sheet dau ra
        .Select
        .Range("B4:B22").SpecialCells(xlCellTypeConstants, 3).Copy Sheet2.Range("D4")
    End With
    Application.CutCopyMode = False
 
Lần chỉnh sửa cuối:
Upvote 0
Macro này sẽ thỏa iêu cầu của bạn:
PHP:
Sub LayDuLieuBangVBA()
Dim Rng As Range, sRng As Range
Dim Rws As Long, W As Integer, MaxNum As Integer, MinNum As Integer

Set Rng = Range([B1], [B65500].End(xlUp))
MaxNum = Application.WorksheetFunction.Max(Rng)
MinNum = Application.WorksheetFunction.Min(Rng)
[D4].CurrentRegion.Offset(1).Clear
Randomize
For W = MinNum To MaxNum
    Set sRng = Rng.Find(W, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        With [D65500].End(xlUp).Offset(1)
            .Value = W
            .Interior.ColorIndex = 34 + 9 * Rnd() \ 1
        End With
    End If
Next W
End Sub
dạ sáng nay em có thử đoạn code của bác thì chưa ra kết quả như ý muốn ạ... bác xem trong trường hợp dữ liệu ban đầu và dữ liệu mong muốn ở hai sheet khác nhau thì bác sửa giúp em đoạn cođe trên với ạ . bỏ cả phần tô màu nữa với ạ
Bài đã được tự động gộp:

Dạ nhanh quá ạ. Em cảm ơn.
dạ bác ơi. kết quả không ra như mong muốn. bác xem giúp lỗi ở đâu em với ạ
 

File đính kèm

  • gpe2.xlsm
    21.5 KB · Đọc: 5
  • gpe3.xlsm
    17.5 KB · Đọc: 4
Upvote 0
(1) dạ sáng nay em có thử đoạn code của bác thì chưa ra kết quả như ý muốn ạ...
(2) bác xem trong trường hợp dữ liệu ban đầu và dữ liệu mong muốn ở hai sheet khác nhau thì bác sửa giúp em đoạn cođe trên với ạ . bỏ cả phần tô màu nữa với ạ
(1) Thiết nghĩ macro mình viết thỏa mong muốn (+) ở #1 của bạn; Bạn nói xem kết quả nào mới như mong muốn;

(2) Sau khi giải quyết (1)
 
Upvote 0
dạ sáng nay em có thử đoạn code của bác thì chưa ra kết quả như ý muốn ạ... bác xem trong trường hợp dữ liệu ban đầu và dữ liệu mong muốn ở hai sheet khác nhau thì bác sửa giúp em đoạn cođe trên với ạ . bỏ cả phần tô màu nữa với ạ
dạ bác ơi. kết quả không ra như mong muốn. bác xem giúp lỗi ở đâu em với ạ
Nếu chỉ copy Sheet1 sang Sheet2 thì chỉ vầy thôi:
Còn cái vụ tô màu theo giá trị thì phải có bảng tra.
Mã:
Sub Copy()
Sheet1.Range("B4:B5000").SpecialCells(xlCellTypeConstants, 1).Copy Sheet2.Range("D4")
End Sub
 
Upvote 0
Nếu chỉ copy Sheet1 sang Sheet2 thì chỉ vầy thôi:
Còn cái vụ tô màu theo giá trị thì phải có bảng tra.
Mã:
Sub Copy()
Sheet1.Range("B4:B5000").SpecialCells(xlCellTypeConstants, 1).Copy Sheet2.Range("D4")
End Sub
em có thử đoạn code của bác ạ.dạ đúng rồi ạ... em cảm ơn ạ
 
Upvote 0
dạ em hỏi thêm chút nữa. đoạn code trên sao không chạy được với các ký tự là chữ ạ.. ví dụ 1,5,3 em thay bằng a,c,b thì lại không được
Bạn thay:
PHP:
SpecialCells(xlCellTypeConstants, 3)
bằng:
PHP:
SpecialCells(xlCellTypeConstants, 2)
Chú ý:
+ Số 1( lấy số)
+ Số 2( lấy chữ)
+ Số 3( lấy cả chữ và số)
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử:
PHP:
   Dim a(), b(), i&, k%, LR
    With Sheets("dau vao")
        a = .Range("A8", .Range("A100000").End(3)).Resize(, 3).Value: LR = UBound(a)
    End With
    ReDim b(1 To LR, 1 To 1)
    With Sheets("dau vao")
        For i = 1 To LR
            If IsDate(a(i, 2)) <> Empty Then
                k = k + 1: b(k, 1) = a(i, 3)
            End If
        Next i
        If k Then
            With Sheets("ket qua")
                .Range("D8:D100").ClearContents
                .Range("D8").Resize(k) = b
            End With
        End If
    End With
 
Upvote 0
Bạn thử:
PHP:
   Dim a(), b(), i&, k%, LR
    With Sheets("dau vao")
        a = .Range("A8", .Range("A100000").End(3)).Resize(, 3).Value: LR = UBound(a)
    End With
    ReDim b(1 To LR, 1 To 1)
    With Sheets("dau vao")
        For i = 1 To LR
            If IsDate(a(i, 2)) <> Empty Then
                k = k + 1: b(k, 1) = a(i, 3)
            End If
        Next i
        If k Then
            With Sheets("ket qua")
                .Range("D8:D100").ClearContents
                .Range("D8").Resize(k) = b
            End With
        End If
    End With
Dạ bác giúp em có phím tắt như button để mình kích nhanh cho kết quả với ạ. Với đoạn code bác cho em không biết sử dụng như nào.
 
Upvote 0
Web KT

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

Back
Top Bottom