Xóa dữ liệu theo điều kiện ? (1 người xem)

Liên hệ QC

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

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,895
Được thích
1,219
Xin chào các bạn,
Oanh đang vướng mắc 2 trường hợp nêu trong file đính kèm.
Rất mong các bạn giúp đỡ.
 

File đính kèm

1.Lấy phần ngày tháng năm của tên foder đưa vào ô A3 như dữ liệu mẫu:
2. Xóa toàn bộ các dòng có dữ liệu tại Cot4(cộtE) vùng màu vàng trong cot4 khi trùng tháng và năm với ô A3 hoặc tên thư mục
(1) Folder được chỉ định đường dẫn hay theo lựa chọn của người dùng?
Ngày/tháng/năm trong tên folder đó được viết (format) như nào?
(Dấu hiệu nhận biết là ngày tháng năm?)

(2) Xóa dòng ở đây được hiểu như nào?
row().delete hay clear contents
 
Upvote 0
(1) Folder được chỉ định đường dẫn hay theo lựa chọn của người dùng?
Ngày/tháng/năm trong tên folder đó được viết (format) như nào?
(Dấu hiệu nhận biết là ngày tháng năm?)

(2) Xóa dòng ở đây được hiểu như nào?
row().delete hay clear contents

Chào befaint, cảm ơn bạn nhiều đã quan tâm đến bài viết này:

1. Folder "Thang 01-2017" để không có qui định .../Thang 01-2017
Ngày/tháng/năm của tên folder có 7 ký tự cuối: "01-2017" là tháng-năm
2. Xóa dòng theo kiểu chỉ xóa dữ liệu (lear contents) bạn ạ.

Rất mong bạn và mọi người xem giúp.
 
Upvote 0
Chào befaint, cảm ơn bạn nhiều đã quan tâm đến bài viết này:

1. Folder "Thang 01-2017" để không có qui định .../Thang 01-2017
Ngày/tháng/năm của tên folder có 7 ký tự cuối: "01-2017" là tháng-năm
2. Xóa dòng theo kiểu chỉ xóa dữ liệu (lear contents) bạn ạ.

Rất mong bạn và mọi người xem giúp.

Mã:
Sub Main()
Dim nFoLder As String, d As Variant, tmp As Variant, z As Long, dd As Variant, r As Long, m As Long
nFoLder = GetFolder("")
If nFoLder = "" Then Exit Sub
Sheet1.Range("A3") = Right(Mid(nFoLder, InStrRev(nFoLder, "\") + 1), 7)
d = Sheet1.Range("A3")
If TypeName(d) = "Date" Then
    m = WorksheetFunction.EoMonth(d, 0)
    d = CLng(d)
    With Sheet1
        z = .Range("E" & .Rows.Count).End(xlUp).Row
        If z < 5 Then Exit Sub
        tmp = .Range("E5:E" & z).Value2
        For r = 1 To UBound(tmp, 1)
            dd = tmp(r, 1)
            If IsNumeric(dd) Then
                dd = CLng(dd)
                If dd >= d And dd <= m Then
                    .Rows(r + 4).ClearContents
                End If
            End If
        Next r
    End With
End If
End Sub
'-------------------------------------------------
Function GetFolder(strPath As String) As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
    .Title = "Select a Folder"
    .AllowMultiSelect = False
    .InitialFileName = strPath
    If .Show <> -1 Then GoTo NextCode
    sItem = .SelectedItems(1)
End With
NextCode:
GetFolder = sItem
Set fldr = Nothing
End Function
 
Upvote 0
Mã:
Sub Main()
Dim nFoLder As String, d As Variant, tmp As Variant, z As Long, dd As Variant, r As Long, m As Long
nFoLder = GetFolder("")
If nFoLder = "" Then Exit Sub
Sheet1.Range("A3") = Right(Mid(nFoLder, InStrRev(nFoLder, "\") + 1), 7)
d = Sheet1.Range("A3")
If TypeName(d) = "Date" Then
    m = WorksheetFunction.EoMonth(d, 0)
    d = CLng(d)
    With Sheet1
        z = .Range("E" & .Rows.Count).End(xlUp).Row
        If z < 5 Then Exit Sub
        tmp = .Range("E5:E" & z).Value2
        For r = 1 To UBound(tmp, 1)
            dd = tmp(r, 1)
            If IsNumeric(dd) Then
                dd = CLng(dd)
                If dd >= d And dd <= m Then
                    .Rows(r + 4).ClearContents
                End If
            End If
        Next r
    End With
End If
End Sub
'-------------------------------------------------
Function GetFolder(strPath As String) As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
    .Title = "Select a Folder"
    .AllowMultiSelect = False
    .InitialFileName = strPath
    If .Show <> -1 Then GoTo NextCode
    sItem = .SelectedItems(1)
End With
NextCode:
GetFolder = sItem
Set fldr = Nothing
End Function

Xin chào bạn befaint,
Code của bạn đúng ý Oanh Thơ rồi, cảm ơn bạn rất nhiều.

Bạn cho thêm có thể bỏ phần tìm tìm kiếm lựa chọn thư mục không ạ.
Vì file chạy của Oanh Thơ muốn lấy trực tiếp tên của thư mục chứa nó phần màu đỏ (.../Thang 01-2017/Xoatheothang.xlsm) đỡ mất công tìm kiếm lựa chọn đường dẫn bạn ạ.

Mục đích của bài toán này là:
Hàng ngày Oanh Thơ muốn update dữ liệu trong tháng và sau mỗi lần update phải xóa hết dữ liệu từ đầu tháng đến giờ để update lại từ đầu tháng đến ngày mới nhất.
nhưng vì trong bảng dữ liệu còn rất nhiều các dữ liệu không cùng tháng vì vậy cần phải lựa chọn theo tháng để xóa.

Xin lỗi bạn gửi bài đã mấy hôm mà hnay mới vào diễn đàn được.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn cho thêm có thể bỏ phần tìm tìm kiếm lựa chọn thư mục không ạ.
Vì file chạy của Oanh Thơ muốn lấy trực tiếp tên của thư mục chứa nó phần màu đỏ (.../Thang 01-2017/Xoatheothang.xlsm) đỡ mất công tìm kiếm lựa chọn đường dẫn bạn ạ.

Tại sao khi hỏi thì không nêu?
(1) Folder được chỉ định đường dẫn hay theo lựa chọn của người dùng?
Muốn lấy folder chứa chính file excel đang xử lý?
 
Upvote 0
Mục đích của bài toán này là:
Hàng ngày Oanh Thơ muốn update dữ liệu trong tháng và sau mỗi lần update phải xóa hết dữ liệu từ đầu tháng đến giờ để update lại từ đầu tháng đến ngày mới nhất.
nhưng vì trong bảng dữ liệu còn rất nhiều các dữ liệu không cùng tháng vì vậy cần phải lựa chọn theo tháng để xóa.

Nếu vậy thì nhập luôn ngày đầu tiên của tháng đó vào [A3] cho rồi...

[A3]=01/01/2017 (format là date)

rồi xóa:
Mã:
Function GetFolder()
'Và
nFoLder = GetFolder("")
If nFoLder = "" Then Exit Sub
Sheet1.Range("A3") = Right(Mid(nFoLder, InStrRev(nFoLder, "\") + 1), 7)
 
Upvote 0
Đúng rồi ạ,
hi xin lỗi bạn Oanh Thơ kiến thức chuyên môn kém nên không biết nêu thế nào để bạn hiểu :)
 
Upvote 0
Nếu vậy thì nhập luôn ngày đầu tiên của tháng đó vào [A3] cho rồi...

[A3]=01/01/2017 (format là date)

rồi xóa:
Mã:
Function GetFolder()
'Và
nFoLder = GetFolder("")
If nFoLder = "" Then Exit Sub
Sheet1.Range("A3") = Right(Mid(nFoLder, InStrRev(nFoLder, "\") + 1), 7)

Xin chào befaint
Cảm ơn bạn đã thông tin lại ạ.
Mới đầu Oanh Thơ cũng có ý định nhập luôn vào ô A3 rồi a, nhưng nghĩ có thể dùng code để tránh trường hợp nhầm lẫn hoặc quên lên nhân tiện hỏi luôn mục này bạn ạ. :-=
 
Upvote 0
Xin chào befaint
Cảm ơn bạn đã thông tin lại ạ.
Mới đầu Oanh Thơ cũng có ý định nhập luôn vào ô A3 rồi a, nhưng nghĩ có thể dùng code để tránh trường hợp nhầm lẫn hoặc quên lên nhân tiện hỏi luôn mục này bạn ạ. :-=

Thay cả bài #4 bằng đoạn sau:
Mã:
Sub Main()
Dim nFoLder As String, d As Variant, tmp As Variant, z As Long, dd As Variant, r As Long, m As Long
nFoLder = ThisWorkbook.Path
Sheet1.Range("A3") = Right(Mid(nFoLder, InStrRev(nFoLder, "\") + 1), 7)
d = Sheet1.Range("A3")
If TypeName(d) = "Date" Then
    m = WorksheetFunction.EoMonth(d, 0)
    d = CLng(d)
    With Sheet1
        z = .Range("E" & .Rows.Count).End(xlUp).Row
        If z < 5 Then Exit Sub
        tmp = .Range("E5:E" & z).Value2
        For r = 1 To UBound(tmp, 1)
            dd = tmp(r, 1)
            If IsNumeric(dd) Then
                dd = CLng(dd)
                If dd >= d And dd <= m Then
                    .Rows(r + 4).ClearContents
                End If
            End If
        Next r
    End With
End If
End Sub
 
Upvote 0
Thay cả bài #4 bằng đoạn sau:
Mã:
Sub Main()
Dim nFoLder As String, d As Variant, tmp As Variant, z As Long, dd As Variant, r As Long, m As Long
nFoLder = ThisWorkbook.Path
Sheet1.Range("A3") = Right(Mid(nFoLder, InStrRev(nFoLder, "\") + 1), 7)
d = Sheet1.Range("A3")
If TypeName(d) = "Date" Then
    m = WorksheetFunction.EoMonth(d, 0)
    d = CLng(d)
    With Sheet1
        z = .Range("E" & .Rows.Count).End(xlUp).Row
        If z < 5 Then Exit Sub
        tmp = .Range("E5:E" & z).Value2
        For r = 1 To UBound(tmp, 1)
            dd = tmp(r, 1)
            If IsNumeric(dd) Then
                dd = CLng(dd)
                If dd >= d And dd <= m Then
                    .Rows(r + 4).ClearContents
                End If
            End If
        Next r
    End With
End If
End Sub

Xin chào befaint,
Code trên OK rồi, cảm ơn bạn nhiều.
Nhân chủ đề này bạn và mọi người cho oanh thơ hỏi thêm:
Oanh Thơ muốn xóa đi toàn bộ dữ liệu 6 tháng trở về trước dựa theo ngày tháng tại ô A3 thì code sẽ như thế nào ạ.
Ví dụ:
[A3]=01/01/2017 (format là date) thì dữ liệu cần xóa là: =EOMONTH(A3,-6) => từ ngày 31/07/2016 trở về trước.
 
Upvote 0
Xin chào befaint,
Code trên OK rồi, cảm ơn bạn nhiều.
Nhân chủ đề này bạn và mọi người cho oanh thơ hỏi thêm:
Oanh Thơ muốn xóa đi toàn bộ dữ liệu 6 tháng trở về trước dựa theo ngày tháng tại ô A3 thì code sẽ như thế nào ạ.
Ví dụ:
[A3]=01/01/2017 (format là date) thì dữ liệu cần xóa là: =EOMONTH(A3,-6) => từ ngày 31/07/2016 trở về trước.

(1) "Nhân chủ đề này bạn và mọi người cho oanh thơ hỏi thêm:" = "Ah, mà cho hỏi thêm nếu..."

Cần hỏi thêm gì thì cứ hỏi, không cần "hoa mỹ". Không phải ai cũng thích điều đó.

(2)
Mã:
Sub Main()
Application.ScreenUpdating = False
Dim nFoLder As String, d As Variant, tmp As Variant, z As Long, dd As Variant, r As Long, m As Long
nFoLder = ThisWorkbook.Path
Sheet1.Range("A3") = Right(Mid(nFoLder, InStrRev(nFoLder, "\") + 1), 7)
d = Sheet1.Range("A3")
If TypeName(d) = "Date" Then
    m = WorksheetFunction.EoMonth(d, -6) 'Mốc thời gian thứ nhất = m
    d = CLng(d)                          'Mốc thời gian thức hai = d
    With Sheet1
        z = .Range("E" & .Rows.Count).End(xlUp).Row
        If z < 5 Then Exit Sub
        tmp = .Range("E5:E" & z).Value2
        For r = 1 To UBound(tmp, 1)
            dd = tmp(r, 1)
            If IsNumeric(dd) Then
                dd = CLng(dd)           'Thời gian cần đối chiếu = dd
                If dd > m And dd < d Then     'Nếu dd nằm trong khoảng thời gian từ min(m,d)=m tới max(m,d)=d thì:
                    .Rows(r + 4).ClearContents
                End If
            End If
        Next r
    End With
End If
Application.ScreenUpdating = True
End Sub
 
Upvote 0
(1) "Nhân chủ đề này bạn và mọi người cho oanh thơ hỏi thêm:" = "Ah, mà cho hỏi thêm nếu..."

Cần hỏi thêm gì thì cứ hỏi, không cần "hoa mỹ". Không phải ai cũng thích điều đó.

(2)
Mã:
Sub Main()
Application.ScreenUpdating = False
Dim nFoLder As String, d As Variant, tmp As Variant, z As Long, dd As Variant, r As Long, m As Long
nFoLder = ThisWorkbook.Path
Sheet1.Range("A3") = Right(Mid(nFoLder, InStrRev(nFoLder, "\") + 1), 7)
d = Sheet1.Range("A3")
If TypeName(d) = "Date" Then
    m = WorksheetFunction.EoMonth(d, -6) 'Mốc thời gian thứ nhất = m
    d = CLng(d)                          'Mốc thời gian thức hai = d
    With Sheet1
        z = .Range("E" & .Rows.Count).End(xlUp).Row
        If z < 5 Then Exit Sub
        tmp = .Range("E5:E" & z).Value2
        For r = 1 To UBound(tmp, 1)
            dd = tmp(r, 1)
            If IsNumeric(dd) Then
                dd = CLng(dd)           'Thời gian cần đối chiếu = dd
                If dd > m And dd < d Then     'Nếu dd nằm trong khoảng thời gian từ min(m,d)=m tới max(m,d)=d thì:
                    .Rows(r + 4).ClearContents
                End If
            End If
        Next r
    End With
End If
Application.ScreenUpdating = True
End Sub

:-=:-=:-=:-=:-=:-=:-=:-=:-=:-=:-=:-=
Trân thành cảm bạn rất nhiều !!
 
Upvote 0
Xóa dữ liệu theo ngày ?

Xin chào các bạn,
Các bạn giúp tôi 1 đoạn code: xóa các dòng dữ liệu tính từ 1 thời điểm cho sẵn trở về trước theo file đính kèm này với ạ.
 

File đính kèm

Upvote 0
Xin chào các bạn,
Các bạn giúp tôi 1 đoạn code: xóa các dòng dữ liệu tính từ 1 thời điểm cho sẵn trở về trước theo file đính kèm này với ạ.

(1) Code: Siêu chậm
Mã:
Sub Main()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim d As Variant, tmp As Variant, z As Long, dd As Variant, r As Long
d = Sheet2.Range("D2")
If TypeName(d) = "Date" Then
    d = CLng(d)
    With Sheet1
        z = .Range("M" & .Rows.Count).End(xlUp).Row
        If z < 5 Then Exit Sub
        tmp = .Range("M5:M" & z).Value2: z = UBound(tmp, 1)
        For r = z To 1 Step -1
            dd = tmp(r, 1)
            If IsNumeric(dd) Then
                dd = CLng(dd)
                If dd < d Then
                    .Rows(r + 4).Delete
                End If
            End If
        Next r
    End With
End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

(2) Thao tác: Siêu nhanh
- Tại sheet1, Date filters cột M, điều kiện: Before 01/09/2016. OK
- Chọn vùng dữ liệu vừa lọc được (chọn cả row), nhấn alt ; nhấn tiếp ctrl -
- Hủy lọc. Kết thúc.
 
Lần chỉnh sửa cuối:
Upvote 0
(1) Code: Siêu chậm
Mã:
Sub Main()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim d As Variant, tmp As Variant, z As Long, dd As Variant, r As Long
d = Sheet2.Range("D2")
If TypeName(d) = "Date" Then
    d = CLng(d)
    With Sheet1
        z = .Range("M" & .Rows.Count).End(xlUp).Row
        If z < 5 Then Exit Sub
        tmp = .Range("M5:M" & z).Value2: z = UBound(tmp, 1)
        For r = z To 1 Step -1
            dd = tmp(r, 1)
            If IsNumeric(dd) Then
                dd = CLng(dd)
                If dd < d Then
                    .Rows(r + 4).Delete
                End If
            End If
        Next r
    End With
End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

(2) Thao tác: Siêu nhanh
- Tại sheet1, Date filters cột M, điều kiện: Before 01/09/2016. OK
- Chọn vùng dữ liệu vừa lọc được (chọn cả row), nhấn alt ; nhấn tiếp ctrl -
- Hủy lọc. Kết thúc.

Cảm ơn befaint
1.Đúng là siêu chậm (T_T), hic chạy mãi không thấy kết quả,thảo nào khi chạy các code trên cũng chậm như vậy.
có cách nào khác để giải quyết nhanh bằng code không bạn.

Ah, xin cảm ơn bạn đã giúp đỡ cho tôi trong chủ đề này nhé:
https://www.giaiphapexcel.com/forum/showthread.php?122780-Di-chuyển-đến-vùng-theo-điều-kiện
Híc xem code mà không hiểu gì để cả @@! :-=
 
Upvote 0
Cảm ơn befaint
1.Đúng là siêu chậm (T_T), hic chạy mãi không thấy kết quả,thảo nào khi chạy các code trên cũng chậm như vậy.
có cách nào khác để giải quyết nhanh bằng code không bạn.

Code nhanh đây (bài trước thì yêu cầu xóa dữ liệu, bài này lại cần xóa dòng...)
Mã:
Sub Mainn()
Application.ScreenUpdating = False
Dim d As Variant, tmp As Variant, z As Long, dd As Variant, r As Long
Dim KQ() As Variant, c As Long, k As Long, j As Long
d = Sheet2.Range("D2")
If TypeName(d) = "Date" Then
    d = CLng(d)
    With Sheet1
        z = .Range("M" & .Rows.Count).End(xlUp).Row
        If z < 5 Then Exit Sub
        tmp = .Range("B5:BI" & z).Value2: z = UBound(tmp, 1): c = UBound(tmp, 2)
        ReDim KQ(1 To z, 1 To c)
        For r = 1 To z
            dd = tmp(r, 12)
            If IsNumeric(dd) Then
                dd = CLng(dd)
                If dd >= d Then
                    j = j + 1
                    For k = 1 To c
                        KQ(j, k) = tmp(r, k)
                    Next k
                End If
            End If
        Next r
        If j Then
            .Range("B5").Resize(z, c).ClearContents
            .Range("B5").Resize(j, c) = KQ
        End If
    End With
End If
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Code nhanh đây (bài trước thì yêu cầu xóa dữ liệu, bài này lại cần xóa dòng...)
Mã:
Sub Mainn()
Application.ScreenUpdating = False
Dim d As Variant, tmp As Variant, z As Long, dd As Variant, r As Long
Dim KQ() As Variant, c As Long, k As Long, j As Long
d = Sheet2.Range("D2")
If TypeName(d) = "Date" Then
    d = CLng(d)
    With Sheet1
        z = .Range("M" & .Rows.Count).End(xlUp).Row
        If z < 5 Then Exit Sub
        tmp = .Range("B5:BI" & z).Value2: z = UBound(tmp, 1): c = UBound(tmp, 2)
        ReDim KQ(1 To z, 1 To c)
        For r = 1 To z
            dd = tmp(r, 12)
            If IsNumeric(dd) Then
                dd = CLng(dd)
                If dd >= d Then
                    j = j + 1
                    For k = 1 To c
                        KQ(j, k) = tmp(r, k)
                    Next k
                End If
            End If
        Next r
        If j Then
            .Range("B5").Resize(z, c).ClearContents
            .Range("B5").Resize(j, c) = KQ
        End If
    End With
End If
Application.ScreenUpdating = True
End Sub

Tuyệt vời quá befaint ơi,hình như không cần xóa dòng mà tự dồn dữ liệu lên trên ah bạn.
Code nhanh nhanh thật.
 
Upvote 0
nếu bạn còn thích và vẫn thích xóa dòng
Mã:
Sub DeleteRows()
  Dim DK, tmp, Drng As Range, Rng As Range, i As Long
  DK = Sheet2.Range("D2").Value
  If Not TypeName(DK) = "Date" Then Exit Sub
  DK = CLng(DK)
  i = Sheet1.Range("M" & Sheet1.Rows.Count).End(xlUp).Row
  If i < 5 Then Exit Sub
  Set Drng = Sheet1.Range("M5:M" & i)
  For i = 1 To Drng.Rows.Count
    tmp = Drng(i, 1).Value
    If TypeName(tmp) = "Date" Then
      If CLng(tmp) < DK Then
        If Rng Is Nothing Then
          Set Rng = Drng(i, 1)
        Else
          Set Rng = Union(Rng, Drng(i, 1))
        End If
      End If
    End If
  Next i
  If Not Rng Is Nothing Then Rng.EntireRow.Delete
End Sub
 
Upvote 0
nếu bạn còn thích và vẫn thích xóa dòng
Mã:
Sub DeleteRows()
  Dim DK, tmp, Drng As Range, Rng As Range, i As Long
  DK = Sheet2.Range("D2").Value
  If Not TypeName(DK) = "Date" Then Exit Sub
  DK = CLng(DK)
  i = Sheet1.Range("M" & Sheet1.Rows.Count).End(xlUp).Row
  If i < 5 Then Exit Sub
  Set Drng = Sheet1.Range("M5:M" & i)
  For i = 1 To Drng.Rows.Count
    tmp = Drng(i, 1).Value
    If TypeName(tmp) = "Date" Then
      If CLng(tmp) < DK Then
        If Rng Is Nothing Then
          Set Rng = Drng(i, 1)
        Else
          Set Rng = Union(Rng, Drng(i, 1))
        End If
      End If
    End If
  Next i
  If Not Rng Is Nothing Then Rng.EntireRow.Delete
End Sub

Chào HieuCD,
Thích,tôi thích code của bạn. Code của bạn chạy nhanh nhanh không thua kém gì code ở bài 17.
Cảm ơn bạn đã cho tôi thêm 1 sự lựa chọn.
Có lẽ trong trường hợp này tôi chọn giải pháp không xóa dòng, cách của bạn tôi sẽ ứng dụng trong trường hợp khác ạ.
Tôi không muốn xóa dòng là vì có công thức liên kết đến dòng 200,000 :-= nếu cứ xóa dần dần như vậy thì sau khi xóa dòng công thức sẽ trừ đi số dòng đã bị xóa thì đến 1 lúc nào đó trong quá trình xóa dữ liệu và cập nhật dữ liệu mới cứ liên tục như vậy thì công thức sẽ bị sai

Xin hỏi bạn: có cách nào để xử lý được vấn đề xóa dòng mà công thức luôn tham chiếu đến dòng cuối của bảng dữ liệu được không ạ?

Tôi đã nghĩ đến trường hợp đặt name:
Giả sử tôi đặt name cho vùng B5:B100000, sau khi xóa 30,000 dòng thì name cũng sẽ thay đổi thành B5:B70000
Sau khi tôi copy 1 dữ liệu mới 10,000 nữa đưa vào thì tôi muốn name phải tự thay đổi thành B5:B80000 dòng.
Nhờ bạn code cho thêm vấn đề tự cập nhật name đến vùng dữ liệu cuối cùng này với ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom