Hỏi về rút gọn code trong tính lặp (2 người xem)

  • Thread starter Thread starter nad582
  • Ngày gửi Ngày gửi
Liên hệ QC

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

nad582

Thành viên thường trực
Tham gia
7/6/11
Bài viết
317
Được thích
48
CHÀO CÁC BẠN TRONG GPE! MÌNH CÓ DỌN CODE TÍNH LẬP NHƯ SAU:

'tính lập
Dim k As Integer
k = 15
Do While Cells(k, "B") <> ""
'lần 1
If Cells(k, "Q") = "!!" Then
Cells(k, "N") = Cells(9, "G")
Else
Cells(k, "N") = Cells(k, "Q")
End If
'lần 2
If Cells(k, "Q") = "!!" Then
Cells(k, "N") = Cells(9, "G")
Else
Cells(k, "N") = Cells(k, "Q")
End If
'lần 3
If Cells(k, "Q") = "!!" Then
Cells(k, "N") = Cells(9, "G")
Else
Cells(k, "N") = Cells(k, "Q")
End If
'lần 4
If Cells(k, "Q") = "!!" Then
Cells(k, "N") = Cells(9, "G")
Else
Cells(k, "N") = Cells(k, "Q")
End If
'lần 5
If Cells(k, "Q") = "!!" Then
Cells(k, "N") = Cells(9, "G")
Else
Cells(k, "N") = Cells(k, "Q")
End If
k = k + 1
Loop

VẬY CHO MÌNH HỎI LÀM SAU ĐỂ GỢP CODE LẠI MÀ NÓ VẪN CHẠY 5 LẦN....
XIN CÁC BẠN HIỆU CHỈNH DÙM MÌNH...XIN CẢM ƠN RẤT NHIỀU...
 
CHÀO CÁC BẠN TRONG GPE! MÌNH CÓ DỌN CODE TÍNH LẬP NHƯ SAU:

'tính lập
Dim k As Integer
k = 15
Do While Cells(k, "B") <> ""
'lần 1
If Cells(k, "Q") = "!!" Then
Cells(k, "N") = Cells(9, "G")
Else
Cells(k, "N") = Cells(k, "Q")
End If
'lần 2
If Cells(k, "Q") = "!!" Then
Cells(k, "N") = Cells(9, "G")
Else
Cells(k, "N") = Cells(k, "Q")
End If
'lần 3
If Cells(k, "Q") = "!!" Then
Cells(k, "N") = Cells(9, "G")
Else
Cells(k, "N") = Cells(k, "Q")
End If
'lần 4
If Cells(k, "Q") = "!!" Then
Cells(k, "N") = Cells(9, "G")
Else
Cells(k, "N") = Cells(k, "Q")
End If
'lần 5
If Cells(k, "Q") = "!!" Then
Cells(k, "N") = Cells(9, "G")
Else
Cells(k, "N") = Cells(k, "Q")
End If
k = k + 1
Loop

VẬY CHO MÌNH HỎI LÀM SAU ĐỂ GỢP CODE LẠI MÀ NÓ VẪN CHẠY 5 LẦN....
XIN CÁC BẠN HIỆU CHỈNH DÙM MÌNH...XIN CẢM ƠN RẤT NHIỀU...

Chẳng biết bạn làm gì với vòng lặp này, chứ Do While Cells(k, "B") <> "" với thủ tục lặp bên trong chẳng thấy sự ràng buộc nào thì nó chạy tới tết công gô chưa chắc đã ngừng lại! Muốn gì thì đưa file thật lên đi.

Nếu chỉ lặp 5 vòng thì sao bạn không dùng For ... Next cho chắc ăn?

Mã:
Sub test()
    Dim i As Integer, k As Integer
    k = 15
    For i = 1 To [COLOR=#ff0000][B]6[/B][/COLOR]
        If Cells(k, "Q") = "!!" Then
            Cells(k, "N") = Cells(9, "G")
        Else
            Cells(k, "N") = Cells(k, "Q")
        End If
        k = k + 1
    Next
End Sub

Không biết nên đặt 6 hay là 5 nữa, tùy bạn vậy!
 
Upvote 0
Người ta lặp theo biến k từ 15 đến khi hết dữ liệu.
Còn 5 lần là tác giả muốn nói 5 lần If
 
Upvote 0
Ủa, Sư phụ không nhìn thấy 5 lần If đều giống nhau à? Nếu có khác thì nói gì nữa!

Thì người ta muốn lặp "cụm" IF 5 lần (con số 5 này "tình cờ" khớp với 5 "cum" IF???): lần đầu để làm được việc, còn 4 lần sau chạy để tiêu lượng điện nước, xăng dầu cho nó hết để rửa bồn mà. Không có ai tham gia vì thế. Không phải cứ người khác có nhu cầu là mình lao vào. Phải có "lý do chính đáng" cho những kiểu thao tác "không giống ai".
Nghĩa có thể lý ... thôi không quan trọng lý gì, nhưng Nghĩa cho là người ta muốn thực hiện cả "cum" DO 5 lần cũng được. Nhưng trong ruột nó có 5 "cum" IF y hệt nhau mà có thực hiện cả thì kết quả cũng như là chỉ thực hiện 1. Nghĩa không thấy 5 cái IF này nó thế nào ấy sao?

Biết đâu người ta thực sự muốn code như thế nhưng cần rút gọn kiểu - đoán do có 5 lần, GỘP CODE

Mã:
Do ...
    For index = 1 to 5
        If Cells(k, "Q") = "!!" Then
            Cells(k, "N") = Cells(9, "G")
        Else
            Cells(k, "N") = Cells(k, "Q")
        End If
    Next
...
Loop
 
Upvote 0
Ủa, Sư phụ không nhìn thấy 5 lần If đều giống nhau à? Nếu có khác thì nói gì nữa!
Chính cái 5 lần If giống nhau nên mới cần rút gọn.

Ghi chú:
Tác giả ghi chú lần 1, lần 2, lần 3, ... cho các lần If, rất rõ ràng.

Còn việc lặp vô tận như Nghĩa nói

Chẳng biết bạn làm gì với vòng lặp này, chứ Do While Cells(k, "B") <> "" với thủ tục lặp bên trong chẳng thấy sự ràng buộc nào thì nó chạy tới tết công gô chưa chắc đã ngừng lại!

thì không xảy ra vì Do While Cells(k, "B") <> "" với k ban đầu bằng 15 sau đó tăng 1 sau mỗi lần lặp Do. Có khi nào dữ liệu cột B vô tận đâu mà lặp vô tận. Trừ khi k = 1.048.576 mà B1048576 vẫn <> "", thì mới lỗi ở vòng lặp tiếp theo mà thôi. (lỗi Subscript out of Range)
 
Lần chỉnh sửa cuối:
Upvote 0
Chẳng biết bạn làm gì với vòng lặp này, chứ Do While Cells(k, "B") <> "" với thủ tục lặp bên trong chẳng thấy sự ràng buộc nào thì nó chạy tới tết công gô chưa chắc đã ngừng lại! Muốn gì thì đưa file thật lên đi.

Nếu chỉ lặp 5 vòng thì sao bạn không dùng For ... Next cho chắc ăn?

Mã:
Sub test()
    Dim i As Integer, k As Integer
    k = 15
    For i = 1 To [COLOR=#ff0000][B]6[/B][/COLOR]
        If Cells(k, "Q") = "!!" Then
            Cells(k, "N") = Cells(9, "G")
        Else
            Cells(k, "N") = Cells(k, "Q")
        End If
        k = k + 1
    Next
End Sub

Không biết nên đặt 6 hay là 5 nữa, tùy bạn vậy!
Cảm ơn các bài của các anh đã góp ý, em giải thích một chút là: do bài toán của em có tính lập nhiều lần, nghĩa là trong quá trình tính toán nếu các ô trong cột "N" bắt đầu từ ô "N15" có ô nào xuất hiện dấu "!!" thì ô đó bằng ô "G9", nếu các ô trong cột "N" không xuất hiện dấu "!!" thì các ô trong cột "N" bằng các ô trong cột "Q" tương ứng..
(vì trong tính toán, khi thực hiện vòng lập từ 1 đến 3 lần có thể các ô trong cột "N" không bằng các ô trong cột "Q" nên em thực hiên "5 lần if")...nếu có thể mong các anh hiệu chỉnh dùm em...thực hiện vòng lập:khi nào các ô trong cột "N" bằng các ô trong cột "Q" thì dừng lại...(do file của em nó nặng quá ko đính kèm đc)
em chân thành cảm ơn rất nhiều....
 
Upvote 0
Cảm ơn các bài của các anh đã góp ý, em giải thích một chút là: do bài toán của em có tính lập nhiều lần, nghĩa là trong quá trình tính toán nếu các ô trong cột "N" bắt đầu từ ô "N15" có ô nào xuất hiện dấu "!!" thì ô đó bằng ô "G9", nếu các ô trong cột "N" không xuất hiện dấu "!!" thì các ô trong cột "N" bằng các ô trong cột "Q" tương ứng..
(vì trong tính toán, khi thực hiện vòng lập từ 1 đến 3 lần có thể các ô trong cột "N" không bằng các ô trong cột "Q" nên em thực hiên "5 lần if")...nếu có thể mong các anh hiệu chỉnh dùm em...thực hiện vòng lập:khi nào các ô trong cột "N" bằng các ô trong cột "Q" thì dừng lại...(do file của em nó nặng quá ko đính kèm đc)
em chân thành cảm ơn rất nhiều....
Cũng vòng lặp đó, nhưng chỉ 1 if là đủ. Nhưng như chỗ tô đỏ thì phải xét

If Cells(k, "N") = "!!" Then

Chứ sao lại xét Q?
 
Lần chỉnh sửa cuối:
Upvote 0
Cũng vòng lặp đó, nhưng chỉ 1 if là đủ. Nhưng như chỗ tô đỏ thì phải xét

If Cells(k, "N") = "!!" Then

Chứ sao lại xét Q?
ẹc ẹc! sory anh....e bị nhầm một tý, e đính chính lại một chút: cột "N" là số nhập bằng tay, cột "Q" là cột chứa công thức. nếu các ô trong cột "Q" bắt đầu từ ô "Q15" có ô nào xuất hiện dấu "!!" thì ô đó bằng ô "G9", nếu các ô trong cột "Q" không xuất hiện dấu "!!" thì các ô trong cột "N" bằng các ô trong cột "Q" tương ứng..
(vì trong tính toán, khi thực hiện vòng lập từ 1 đến 3 lần có thể các ô trong cột "N" không bằng các ô trong cột "Q")..xin
hiệu chỉnh vòng lập: khi nào các ô trong cột "N" bằng các ô trong cột "Q" thì dừng lại.trong câu hỏi có gì không hiểu xin các anh chỉ dùm, em sẽ bổ sung thêm....chân thành cảm ơn nhiều...
 
Upvote 0
ẹc ẹc! sory anh....e bị nhầm một tý, e đính chính lại một chút: cột "N" là số nhập bằng tay, cột "Q" là cột chứa công thức. nếu các ô trong cột "Q" bắt đầu từ ô "Q15" có ô nào xuất hiện dấu "!!" thì ô đó bằng ô "G9", nếu các ô trong cột "Q" không xuất hiện dấu "!!" thì các ô trong cột "N" bằng các ô trong cột "Q" tương ứng..
(vì trong tính toán, khi thực hiện vòng lập từ 1 đến 3 lần có thể các ô trong cột "N" không bằng các ô trong cột "Q")..xin
hiệu chỉnh vòng lập: khi nào các ô trong cột "N" bằng các ô trong cột "Q" thì dừng lại.trong câu hỏi có gì không hiểu xin các anh chỉ dùm, em sẽ bổ sung thêm....chân thành cảm ơn nhiều...
Bạn đưa cái file lên đi, cứ phải để tưởng voi tưởng tượng thì chẳng biết phải làm thế nào cho hợp lý cả!
 
Upvote 0
bạn đưa cái file lên đi, cứ phải để tưởng voi tưởng tượng thì chẳng biết phải làm thế nào cho hợp lý cả!
câu hỏi 1:
cảm ơn anh, em gui file đính kèm cho các anh hiệu chỉnh lại....vì file nhiều dữ liệu quá nên em rút gọn bớt, các anh xem file rồi hiệu chỉnh lại dùm em chân thành cảm ơn...
.......................................................
câu hỏi 2:
Còn một vấn đề em muốn hỏi luôn,cũng trong file đính kèm, tại sheet "rutgon" trong bảng dữ liệu em có hàng trống, vậy nhờ các anh giúp em viết cái code nếu dòng nào trống thì xóa dòng đó hoặc dồn dữ liệu lên....
 
Upvote 0
câu hỏi 1:
cảm ơn anh, em gui file đính kèm cho các anh hiệu chỉnh lại....vì file nhiều dữ liệu quá nên em rút gọn bớt, các anh xem file rồi hiệu chỉnh lại dùm em chân thành cảm ơn...

Cái khó lớn nhất trong bài này là: Đọc mãi (cả xem file) cũng không hiểu muốn làm cái gì
 
Upvote 0
Cái khó lớn nhất trong bài này là: Đọc mãi (cả xem file) cũng không hiểu muốn làm cái gì
Chào A "ndu96081631" câu hỏi 1, e có nêu ở bài #1 rồi đó, e trình bày lại thế này....trong sheet tinhtoan em có đoạn code tính lập nhờ anh rút gọn lại dùm em vì e sử dụng nhiều lần "if quá", và nếu có thể anh thực hiện vòng lập giúp em: là khi nào các ô trong cột "N" bằng các ô trong cột "Q" thì dừng lại...Chân thành cảm ơn....
 
Upvote 0
Chào A "ndu96081631" câu hỏi 1, e có nêu ở bài #1 rồi đó, e trình bày lại thế này....trong sheet tinhtoan em có đoạn code tính lập nhờ anh rút gọn lại dùm em vì e sử dụng nhiều lần "if quá", và nếu có thể anh thực hiện vòng lập giúp em: là khi nào các ô trong cột "N" bằng các ô trong cột "Q" thì dừng lại...Chân thành cảm ơn....

Thôi thì bạn nói rõ luôn bạn muốn làm điều gì trong file đi cho dễ hình dung. Việc rút gọn code không khó khăn gì (các cao thủ đã làm cả rồi). Vấn đề là mấy cái IF của bạn nó... vô lý quá
Nói chung là tôi không thích làm bất cứ việc gì mà không hiểu nó (làm không suy nghĩ)
 
Upvote 0
Thôi thì bạn nói rõ luôn bạn muốn làm điều gì trong file đi cho dễ hình dung. Việc rút gọn code không khó khăn gì (các cao thủ đã làm cả rồi). Vấn đề là mấy cái IF của bạn nó... vô lý quá
Nói chung là tôi không thích làm bất cứ việc gì mà không hiểu nó (làm không suy nghĩ)
ok, bỏ qua mấy cái if trong bài...tình hình là vầy:
-Tại sheet "tinhtoan"; ở cột "N" và cột "Q" (cột "N" chứa các số nhập bằng thủ công, cột "Q" chứa công thức).
-Như vậy khi bấm vào nút "tính lập", nếu các ô cột "Q" xuất hiện dấu "!!" thì các ô cột "N" tưng ứng bằng ô "G9"; ngược lại, các ô cột "Q" không xuất hiện dấu "!!" thì các ô cột "N" tương ứng sẽ bằng các ô cột "Q" (trong quá trình tính lập thì các ô cột "N" lập đến khi nào bằng các ô cột "Q" thì không lập nữa)
Trong diễn giải có chỗ nào ko rõ, các anh nêu ra e sẽ giải thích thêm...Chân thành cảm ơn...
 
Upvote 0
ok, bỏ qua mấy cái if trong bài...tình hình là vầy:
-Tại sheet "tinhtoan"; ở cột "N" và cột "Q" (cột "N" chứa các số nhập bằng thủ công, cột "Q" chứa công thức).
-Như vậy khi bấm vào nút "tính lập", nếu các ô cột "Q" xuất hiện dấu "!!" thì các ô cột "N" tưng ứng bằng ô "G9"; ngược lại, các ô cột "Q" không xuất hiện dấu "!!" thì các ô cột "N" tương ứng sẽ bằng các ô cột "Q" (.
Phân tích phát biểu màu đỏ của bạn
Mã:
If Cột Q có dấu "!!" then
  Cột N = G9
Else
  [COLOR=#0000cd]Cột N = Cột Q[/COLOR]
End If
Đúng không?
Vậy sao bạn lại nói
trong quá trình tính lập thì các ô cột "N" lập đến khi nào bằng các ô cột "Q" thì không lập nữa
.
Có cái gì gọi là LẬP ở đây chứ? Ngay sau câu lệnh ELSE (của IF) thì cột N đã = cột Q rồi còn gì
 
Upvote 0
Phân tích phát biểu màu đỏ của bạn
Mã:
If Cột Q có dấu "!!" then
  Cột N = G9
Else
  [COLOR=#0000cd]Cột N = Cột Q[/COLOR]
End If
Đúng không?
Vậy sao bạn lại nói

Có cái gì gọi là LẬP ở đây chứ? Ngay sau câu lệnh ELSE (của IF) thì cột N đã = cột Q rồi còn gì
nhưng có trường hợp nếu như sử dụng 1, 2 hay 3 lần thì cột "N" chưa bằng cột "Q" nên trong bài của em mói sử dụng đến 5 lần if đó....
Ghi chú: nếu như e sử dụng code của a trọng nghĩa ở bài #2 thì cột "N" không bằng cột "Q", mà chỉ thực hiện có 6 dòng...còn nếu em sử dụng code ở bài #11 thì cột "N" bằng cột "Q", nên em hỏi rút gọn code e lại dùm và còn cách khác hay không?
 
Lần chỉnh sửa cuối:
Upvote 0
nhưng có trường hợp nếu như sử dụng 1, 2 hay 3 lần thì cột "N" chưa bằng cột "Q" nên trong bài của em mói sử dụng đến 5 lần if đó....
Ghi chú: nếu như e sử dụng code của a trọng nghĩa ở bài #2 thì cột "N" không bằng cột "Q", mà chỉ thực hiện có 6 dòng...còn nếu em sử dụng code ở bài #11 thì cột "N" bằng cột "Q", nên em hỏi rút gọn code e lại dùm và còn cách khác hay không?
Có nhiều hàng cho chạy mãi nó cũng không bao giờ bằng nhau giữa cột N và cột Q. Phải chăng là do công thức làm tròn số??
 
Upvote 0
Có nhiều hàng cho chạy mãi nó cũng không bao giờ bằng nhau giữa cột N và cột Q. Phải chăng là do công thức làm tròn số??
cảm ơn các anh rất nhiều, có lẽ em đã tìm ra đáp án cho mình rồi....
Các anh có thể giúp em câu hỏi thứ 2 trong bài #11 được không, chân thành cảm ơn....
 
Upvote 0
cảm ơn các anh rất nhiều, có lẽ em đã tìm ra đáp án cho mình rồi....
Các anh có thể giúp em câu hỏi thứ 2 trong bài #11 được không, chân thành cảm ơn....
Bài của bạn có 2 ô không bao giờ bằng nhau, đó là N25 N42

Code của bạn có lẽ chỉ như thế này:

Mã:
Private Sub CommandButton1_Click()

    Dim i As Integer, k As Integer
    
    k = 15
    
    Do While Cells(k, "B") <> ""
    
        For i = 1 To 20
            If Cells(k, "Q") = "!!" Then
                Cells(k, "N") = Cells(9, "G")
            Else
                Cells(k, "N") = Cells(k, "Q")
            End If
            If Cells(k, "N") = Cells(k, "Q") Then Exit For
        Next
        
        k = k + 1
        
    Loop
    
End Sub

Cho 20 là vậy, chứ thực tế nếu nó bằng thì lặp không quá 5 lần đâu, còn không thì lặp suốt đời cũng không ra, cho nên cho cao khoảng 20 lần là vậy.
 
Upvote 0
cảm ơn các anh rất nhiều, có lẽ em đã tìm ra đáp án cho mình rồi....
.

VẬY đáp án thế nào, bạn thử post lên đây, xem sao , e rằng có thể chưa chuẩn

---------
câu hỏi 1 của bạn, hoá ra là tính thử đúng dần có chi đâu mà bạn mô tả thật rắc rối (vì k post file lên --> ng ta không thể thấy quan hệ Q và N là có công thức, ở đây cell N là giá trị giả thiết ---- tính 1 chập để ra giá trị thực tại Q ---> cần so sánh 2 giá trị này để sao bằng nhau là STOP.

Vậy thì 5 lần như bạn nhận xét đó là số 5 chủ quan và có thể đúng với số liệu hiện thời còn chưa chắc đúng với số liệu khác
??????
 
Upvote 0
Các anh có thể giúp em câu hỏi thứ 2 trong bài #11 được không, chân thành cảm ơn....

Mã:
Private Sub CommandButton1_Click()
    Dim MyCell As Range, r As Long
[COLOR=#0000ff]    ''Neu so dong du kien hon 100 thi dat hon r > 100[/COLOR]
    For r = 100 To 15 Step -1
        Set MyCell = Range("A" & r)
        If MyCell.Interior.ColorIndex <> xlNone Then[COLOR=#0000ff] ''Neu co fill color thi dung if nay, con khong thi bo[/COLOR]
            If MyCell = "" Then
                MyCell.Resize(, 12).Delete 2
            End If
        End If
    Next
End Sub
 
Upvote 0
câu 2 thì đơn giản lém, gắn code này cho cái nút bạn đang đặt tại sheet đó là được

PHP:
Private Sub CommandButton1_Click()
    Range(Cells(15, "A"), Cells(Cells.Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
 
Upvote 0
Mã:
Private Sub CommandButton1_Click()
    Dim MyCell As Range, r As Long
[COLOR=#0000ff]    ''Neu so dong du kien hon 100 thi dat hon r > 100[/COLOR]
    For r = 100 To 15 Step -1
        Set MyCell = Range("A" & r)
        If MyCell.Interior.ColorIndex <> xlNone Then[COLOR=#0000ff] ''Neu co fill color thi dung if nay, con khong thi bo[/COLOR]
            If MyCell = "" Then
                MyCell.Resize(, 12).Delete 2
            End If
        End If
    Next
End Sub
CẢM ƠN ANH, SAO E THAY ĐỔI r >100 THÌ NÓ BÁO LỖI?View attachment 113188
MÀ NẾU SỐ DÒNG LÊN ĐẾN MẤY NGÀY (>4000 ) THÌ NÓ XÓA HƠI BỊ LÂU, ANH CÓ CÁCH NÀO XÓA NHANH HƠN KHÔNG Ạ!!!
 
Lần chỉnh sửa cuối:
Upvote 0
CẢM ƠN ANH, SAO E THAY ĐỔI r >100 THÌ NÓ BÁO LỖI?View attachment 113188
MÀ NẾU SỐ DÒNG LÊN ĐẾN MẤY NGÀY (>4000 ) THÌ NÓ XÓA HƠI BỊ LÂU, ANH CÓ CÁCH NÀO XÓA NHANH HƠN KHÔNG Ạ!!!

kiểu này bạn nên tìm hiểu lại cơ bản về VBA
ví như thiếu cơ bản về vòng lặp FOR

ở đây bạn phải hiểu là ví dụ số dòng bạn ước lượng tối đa là >4000 thì bạn phải đặt là

For r=4100 To .........

ví dụ thế

------------

Nên dùng code bài #23 của tôi cho nhanh, và đã tự động dò dòng cuối (căn cứ cột A)
 
Upvote 0
kiểu này bạn nên tìm hiểu lại cơ bản về VBA
ví như thiếu cơ bản về vòng lặp FOR

ở đây bạn phải hiểu là ví dụ số dòng bạn ước lượng tối đa là >4000 thì bạn phải đặt là

For r=4100 To .........

ví dụ thế

------------

Nên dùng code bài #23 của tôi cho nhanh, và đã tự động dò dòng cuối (căn cứ cột A)
VẬY MUỐN XÓA CÁC DÒNG TRỐNG CÓ CHỨA borders thì sao hả anh?
 
Upvote 0
Nếu em sử dụng đoạn code này:
................
Dim data(), Result(1 To 65000, 1 To 20), i, j, x
data = Range([A15], [A65536].End(3)).Resize(, 20).FormulaR1C1
For i = 1 To UBound(data)
If data(i, 1) <> "" Then
x = x + 1
For j = 1 To 20
Result(x, j) = data(i, j)
Next
End If
Next
Range([A15], [A65536].End(3)).Resize(, 20).ClearContents
[A15].Resize(x, 20) = Result
Range("A15").Select
.....
mà khi nó dồn lên thì em muốn xóa các hàng trống chứa "Boreders" thì phải hiệu chỉnh thế nào hả anh?
.......
 
Upvote 0
VẬY MUỐN XÓA CÁC DÒNG TRỐNG CÓ CHỨA borders thì sao hả anh?

rắc rối nhỉ, tại sao lại border thừa???

nếu thế thì dùng code này
PHP:
Private Sub CommandButton1_Click()
    Range(Cells(15, "A"), Cells(Cells.Rows.Count, "A").End(xlUp).Offset(100)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

với 100 là số dòng bạn ước lượng phần border thường là thừa (nếu lớn hơn thì thay đổi con số này)
 
Upvote 0
Nếu em sử dụng đoạn code này:
................
Dim data(), Result(1 To 65000, 1 To 20), i, j, x
data = Range([A15], [A65536].End(3)).Resize(, 20).FormulaR1C1
For i = 1 To UBound(data)
If data(i, 1) <> "" Then
x = x + 1
For j = 1 To 20
Result(x, j) = data(i, j)
Next
End If
Next
Range([A15], [A65536].End(3)).Resize(, 20).ClearContents
[A15].Resize(x, 20) = Result
Range("A15").Select
.....
mà khi nó dồn lên thì em muốn xóa các hàng trống chứa "Boreders" thì phải hiệu chỉnh thế nào hả anh?
.......

không hiểu đoạn code của bạn,

ở đây chỉ cần xoá cả dòng của các dòng trống - không chi phức tạp vậy

và code trên của tôi căn cứ vào file bạn up lên , thế thôi

hãy dùng code bài #28 mới để xoá cả border thừa (thực là xoá thêm 100 dòng trống phía dưới - nếu có border thì dĩ nhiên cũng bị xoá lun)
 
Upvote 0
He he. Tôi cứ tưởng thời gian vừa qua bạn đi công tác xa. Hóa ra "lên núi" luyện công?
Bạn vẫn khỏe chứ?

Có gì luyện đâu bác ơi, cám ơn bác, hiện vẫn khỏe.

Khi vui khi buồn thì ghé qua GPE chút thôi (như câu Khách qua đường của bác), còn bình thường thì lại ngẫu hứng và còn nhiều việc khác để làm, vì suy cho cùng thì : mình giúp được bao nhiêu thì giúp, chứ sức người sao xuể việc non sông -- tai to còn đầy ng hưởng máy lạnh kìa để ng cày cuốc cứ cày cuốc, kẻ phán thì cứ phán cứ hô hào....

-----------------
trở lại topic này,

câu 1 - ng hỏi không thấy post đáp án vậy nhỉ,
thôi đành đưa ra cách thức vậy

PHP:
Private Sub CommandButton1_Click()
    Dim k As Integer, n As Long
    k = 15
    Do While Cells(k, "B") <> ""
        n = 0
        Do
            If Cells(k, "Q") = "!!" Then
                Cells(k, "N") = Cells(9, "G")
            Else
                Cells(k, "N") = Cells(k, "Q")
            End If
            n = n + 1
        Loop Until Abs(Cells(k, "Q") - Cells(k, "N")) <= 0.00001 Or n >= 1000
        
        If Not (Abs(Cells(k, "Q") - Cells(k, "N")) <= 0.00001) Then
            '''Thong bao / hay to mau Cells truong hop Q N khong the bang nhau sau khi so lan tinh 1000 lan
            '''  thi code dat tai day
        End If
        k = k + 1
    Loop
End Sub

0.00001 chính = 1E-05 là sai số chấp nhận <---- đây là điều cơ bản khi chúng ta xử lý số trong máy tính khi so sánh số ngang bằng thì phải chấp nhận sai số

n >= 1000 <---- 1000 là số vòng lặp tôi đa, nếu tính 1000 lần rui mà vẫn không thỏa mãn thì thoát ra khỏi lặp
 
Lần chỉnh sửa cuối:
Upvote 0
CẢM ƠN ANH, SAO E THAY ĐỔI r >100 THÌ NÓ BÁO LỖI?
MÀ NẾU SỐ DÒNG LÊN ĐẾN MẤY NGÀY (>4000 ) THÌ NÓ XÓA HƠI BỊ LÂU, ANH CÓ CÁCH NÀO XÓA NHANH HƠN KHÔNG Ạ!!!
Ặc ặc! Tôi nói số lơn hơn đấy mà! Ớn ăn bạn thiệt, vậy là bạn chưa biết tí gì về vòng lặp, nếu biết bạn đã không bị lỗi như thế.

Tôi đặt sẳn 100 ví là đến hàng thứ 100, nếu là 10000 dòng thì bạn đặt For r = 10000 To 15 Step -1

Số 15 là bắt đầu dòng, số 10000 là số dòng cuối cùng. Chỉ có dùng dấu bằng (=) trong vòng lặp For ... Next thôi nha bạn!

câu 2 thì đơn giản lém, gắn code này cho cái nút bạn đang đặt tại sheet đó là được

PHP:
Private Sub CommandButton1_Click()
    Range(Cells(15, "A"), Cells(Cells.Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Vì nhìn vào cái hình mẫu ta thấy có một số hàng phía dưới, mặc dù không có dữ liệu nhưng có tô màu, hình mẫu triệt tiêu phía dưới luôn, nên không dùng xlUp được.

Vã lại, trong trường hợp 1 bên để bảng biểu, một bên người ta làm những thứ khác thì nếu EntireRow.Delete, có nghĩa là xóa phăng 1 hàng thì dữ liệu ở 2 bên bảng biểu đó sẽ đi toong theo luôn, nên phải cẩn thận trước khi dùng kiểu này.
 
Lần chỉnh sửa cuối:
Upvote 0
rắc rối nhỉ, tại sao lại border thừa???

nếu thế thì dùng code này
Mã:
Private Sub CommandButton1_Click()
    Range(Cells(15, "A"), Cells(Cells.Rows.Count, "A").End(xlUp)[COLOR=#ff0000][B].Offset(100)[/B][/COLOR]).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

với 100 là số dòng bạn ước lượng phần border thường là thừa (nếu lớn hơn thì thay đổi con số này)

Với không có .Offset(100) thì Code chạy khi có các hàng rỗng thì OK, khi đã xóa hết, lỡ tay bấm thêm lần nữa sẽ bị lỗi No cells were found (1004). Còn nếu có .Offset(100) bấm lần đầu nó triệt tiêu các hàng rỗng, bấm lần thứ 2 trở đi, nó luôn luôn xóa 100 dòng phía dưới, vậy có nên dùng nó không nhỉ?
 
Upvote 0
Với không có .Offset(100) thì Code chạy khi có các hàng rỗng thì OK, khi đã xóa hết, lỡ tay bấm thêm lần nữa sẽ bị lỗi No cells were found (1004). Còn nếu có .Offset(100) bấm lần đầu nó triệt tiêu các hàng rỗng, bấm lần thứ 2 trở đi, nó luôn luôn xóa 100 dòng phía dưới, vậy có nên dùng nó không nhỉ?

Tuỳ mục đích người sử dụng thui



- Đã bấm xoá rùi, đã có kết quả , còn bấm xoá nữa làm chi???

- trường hợp có offset(100) --> có bấm nữa thì xoá 100 dòng không có gì, kiểu như giơ tay chém gió ấy mà chẳng ảnh hưởng gì cả - có chi phải lo lắng, tại sao không dùng

và đã khuyến cáo
(thực là xoá thêm 100 dòng trống phía dưới - nếu có border thì dĩ nhiên cũng bị xoá lun)

- hơn nữa ở đây ta chỉ đưa ra giải pháp / công cụ còn dùng như thế nào / dùng khi nào thì người dùng phải quyết định thui phù hợp với hoàn cảnh tình thế cụ thể - kiểu như chọn thuốc và uống thuốc đủ liều vậy ah
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom