Chuyên mục xử lý, gỡ rối code VBA

Liên hệ QC
Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,930
Code tạm vầy nha
PHP:
Sub yyy()
Dim Sh
ThisWorkbook.Unprotect "123"
For Each sh In Worksheets
   If sh.CodeName <> "Sheet6" Then
      sh.Visible = 2
   End If
Next
ThisWorkbook.Protect "123", Structure:=True
Application.DisplayAlerts = True
End Sub
OK Em Làm Được rồi cảm ơn anh rất nhiều ...nhiều lần anh giúp em...
em ở ngã tư cây xăng số 4 thuận an - bình dương ...
ok anh
 
Upvote 0
OK Em Làm Được rồi cảm ơn anh rất nhiều ...nhiều lần anh giúp em...
em ở ngã tư cây xăng số 4 thuận an - bình dương ...
ok anh
Ở sát nách nhau mà không alo uống cafe. Mình ở trạm thu phí gần cầu Phú Long
Liên lạc sdt này nha 0908 247 563
 
Lần chỉnh sửa cuối:
Upvote 0
dạ em sẽ mời anh hôn nào qua cafe vista được không anh . Em mạnh 0929.555.666
nếu thích số Vietnamobiel em sẽ tặng anh một số
code em làm lại như sau ok"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Dim Sh
ThisWorkbook.Unprotect "172100"
For Each Sh In Worksheets
If Sh.CodeName <> "Sheet6" Then
Sh.Visible = 2
End If
Next
ThisWorkbook.Protect "172100", Structure:=True
Application.DisplayAlerts = True
Me.Save
End Sub
 
Upvote 0
Nhập 2 số nguyên bất kỳ bằng inputbox.Điền vào cột A giá trị nằm giữa 2 số đó.
code trên e làm thì khi nhập 2 số dương thì đúng, 1 dương 1 âm hoặc 2 âm thì sai.Bác sửa code giúp e
Thử vầy coi sao. May rủi nhá. Mình thì kiểu nào cũng xơi được, nhưng hay trật lất.
PHP:
Sub dien()
Dim x As Double
Dim y As Double
Dim tam(), Cell, a, b
x = Val(InputBox("nhap x = "))
y = Val(InputBox("nhap y = "))
a = IIf(x > y, x, y)
b = IIf(x > y, y, x)
ReDim tam(1 To Abs(a - b) - 1, 1 To 1)
For i = 1 To UBound(tam)
   tam(i, 1) = b + i
Next
With [A1].Resize(UBound(tam))
   .Clear
   .Value = tam
   .Select
End With
For Each Cell In Selection
   If Cell.Value Mod 2 = 0 Then
      Cell.Interior.Color = vbGreen
   End If
Next Cell
End Sub
 
Upvote 0
dạ em sẽ mời anh hôn nào qua cafe vista được không anh . Em mạnh 0929.555.666
nếu thích số Vietnamobiel em sẽ tặng anh một số
code em làm lại như sau ok"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Dim Sh
ThisWorkbook.Unprotect "172100"
For Each Sh In Worksheets
If Sh.CodeName <> "Sheet6" Then
Sh.Visible = 2
End If
Next
ThisWorkbook.Protect "172100", Structure:=True
Application.DisplayAlerts = True
Me.Save
End Sub

Theo mình thì nên Sheet6.Visible=True trước khi chayj vòng lặp cho chắc ăn vì biết đâu sheet này đang ở chế độ ẩn thì lỗi code
 
Upvote 0
Em gà mờ về Code Macro không biết Code này lỗi ở đâu ạ

Em mới tập tành với lập trình VBA trong Excel nên cũng muốn phát triển các Code trên diễn đàn vào công việc của minh. Nên không biết Code này của em lỗi ở đâu mà không chạy được mong được mọi người giải thích giúp và sửa giúp ạ
- Em có một bảng tính bên Sheet2 là vùng chứa dữ liệu nhập vào tự động, ở cột thứ tự là duy nhất nhưng chẳng may khi dữ liệu nhập vào lại trùng nhau nên em muốn xóa đi một Row bị trùng đó.
- Ở Sheet1 em tạo một nút bấm và một Ô màu vàng để nhập số thứ tự hàng tương ứng vớ số thứ tự tại cột STT bên Sheet2 mà mình muốn xóa
Khi thực hiện lệnh thì nó không chạy. Hàm em viết như thế này ạ:
Mã:
Sub Xoa_Row()
Dim dong, gia_tri
gia_tri = Range("B2").Value
dong = 2
Application.ScreenUpdating = False

Do While Len(Trim(Sheets("Sheet2").Cells(dong, 1).Value)) > 0
    If Sheets("Sheet2").Cells(dong, 1).Value = gia_tri Then
    Rows(dong).Delete
    Else
    dong = dong + 1
    End If
Loop
Application.ScreenUpdating = True
    
End Sub
Mong được mọi người giúp đỡ ạ
Thanks!
http://www.fshare.vn/file/5NE6VZ2JIE/ "Em không tải được file lên mong mọi người thông cảm
 
Lần chỉnh sửa cuối:
Upvote 0
Em mới tập tành với lập trình VBA trong Excel nên cũng muốn phát triển các Code trên diễn đàn vào công việc của minh. Nên không biết Code này của em lỗi ở đâu mà không chạy được mong được mọi người giải thích giúp và sửa giúp ạ
- Em có một bảng tính bên Sheet2 là vùng chứa dữ liệu nhập vào tự động, ở cột thứ tự là duy nhất nhưng chẳng may khi dữ liệu nhập vào lại trùng nhau nên em muốn xóa đi một Row bị trùng đó.
- Ở Sheet1 em tạo một nút bấm và một Ô màu vàng để nhập số thứ tự hàng tương ứng vớ số thứ tự tại cột STT bên Sheet2 mà mình muốn xóa
Khi thực hiện lệnh thì nó không chạy. Hàm em viết như thế này ạ:
Mã:
Sub Xoa_Row()
Dim dong, gia_tri
gia_tri = Range("B2").Value
dong = 2
Application.ScreenUpdating = False

Do While Len(Trim(Sheets("Sheet2").Cells(dong, 1).Value)) > 0
    If Sheets("Sheet2").Cells(dong, 1).Value = gia_tri Then
    Rows(dong).Delete
    Else
    dong = dong + 1
    End If
Loop
Application.ScreenUpdating = True
    
End Sub
Mong được mọi người giúp đỡ ạ
Thanks!
http://www.fshare.vn/file/5NE6VZ2JIE/ "Em không tải được file lên mong mọi người thông cảm

Đọc code của bạn mình chẳng hiểu bạn muốn gì nữa. Thà bạn đưa ra yêu cầu để viết lại từ đầu còn dễ hơn.
 
Upvote 0
Em mới tập tành với lập trình VBA trong Excel nên cũng muốn phát triển các Code trên diễn đàn vào công việc của minh. Nên không biết Code này của em lỗi ở đâu mà không chạy được mong được mọi người giải thích giúp và sửa giúp ạ

cái lệnh này
Mã:
Rows(dong).delete
nó không delete dòng số 7 của sheet 2 mà là dòng số 7 của sheet1
 
Upvote 0
Vâng em cảm ơn anh yêu cầu của em là như thế này ạ em có 2 Sheet (Sheét và Sheet2)
- Sheet 2 là chứa bảng dữ liệu Gồm các cột (STT | CQL | D | H | N | M ...) và cột STT nhập từ 1 đến n tuy nhiên trong khi nhập nó lại có số trùng nhau nên em muốn xóa hàng mà nhập vào có số thứ tự trùng nhau đó.
- Sheet1 em tạo một nút bâm "Button" và nhập số vào Ô B2 tương ứng với số bên cột số thứ tự sau đo em viết hàm để tích hợp vào Button và khi em nhập số VD số 8 vào Ô B2 và nhấn vào Button thì tất cả dữ liệu tại hàng có số thứ tự là 8 bị Xóa
Đó là vấn đền em cần ạ mong được anh giúp đỡ ạ!
Thanks
 
Upvote 0
cái lệnh này
Mã:
Rows(dong).delete
nó không delete dòng số 7 của sheet 2 mà là dòng số 7 của sheet1
Vâng Code của em bị lỗi không biết là lỗi tại đâu mọi người chỉ giúp sửa code như thế nào để có thể làm được điều em đang cần ạ
Thanks
 
Upvote 0
Đọc code của bạn mình chẳng hiểu bạn muốn gì nữa. Thà bạn đưa ra yêu cầu để viết lại từ đầu còn dễ hơn.
Vâng em cảm ơn anh yêu cầu của em là như thế này ạ em có 2 Sheet (Sheét và Sheet2)
- Sheet 2 là chứa bảng dữ liệu Gồm các cột (STT | CQL | D | H | N | M ...) và cột STT nhập từ 1 đến n tuy nhiên trong khi nhập nó lại có số trùng nhau nên em muốn xóa hàng mà nhập vào có số thứ tự trùng nhau đó.
- Sheet1 em tạo một nút bâm "Button" và nhập số vào Ô B2 tương ứng với số bên cột số thứ tự sau đo em viết hàm để tích hợp vào Button và khi em nhập số VD số 8 vào Ô B2 và nhấn vào Button thì tất cả dữ liệu tại hàng có số thứ tự là 8 bị Xóa
Đó là vấn đền em cần ạ mong được anh giúp đỡ ạ!
Thanks
 
Upvote 0
Code của bạn:
PHP:
Sub Xoa_Row()
Dim dong, gia_tri
gia_tri = Range("B2").Value
dong = 2
Application.ScreenUpdating = False

Do While Len(Trim(Sheets("Sheet2").Cells(dong, 1).Value)) > 0
    If Sheets("Sheet2").Cells(dong, 1).Value = gia_tri Then
1         Rows(dong).Delete
    Else
         dong = dong + 1
    End If
Loop
Application.ScreenUpdating = True    
End Sub

Thứ nhứt: Lúc khởi chạy, macro chưa biết bạn đang ở trang/Sheet nào?
Nếu bạn chỉ có 1 trang tính thì mọi chuyện sẽ bình thường, còn không sẽ lộn tùng fèo là cái chắc!
Câu lệnh có số 1 chắc là chưa ổn! Bạn tham khảo xem câu lệnh này:

Sheets("Sheet2").Cells(dong, 1).EntireRow,delete

có khả dĩ hơn?!
 
Upvote 0
Vâng khi em khởi chạy chương trình là Sheet1 như em nói ở trên là click chuột vào Button
Code của bạn:
PHP:
Sub Xoa_Row()
Dim dong, gia_tri
gia_tri = Range("B2").Value
dong = 2
Application.ScreenUpdating = False

Do While Len(Trim(Sheets("Sheet2").Cells(dong, 1).Value)) > 0
    If Sheets("Sheet2").Cells(dong, 1).Value = gia_tri Then
1         Rows(dong).Delete
    Else
         dong = dong + 1
    End If
Loop
Application.ScreenUpdating = True    
End Sub

Thứ nhứt: Lúc khởi chạy, macro chưa biết bạn đang ở trang/Sheet nào?
Nếu bạn chỉ có 1 trang tính thì mọi chuyện sẽ bình thường, còn không sẽ lộn tùng fèo là cái chắc!
Câu lệnh có số 1 chắc là chưa ổn! Bạn tham khảo xem câu lệnh này:

Sheets("Sheet2").Cells(dong, 1).EntireRow,delete

có khả dĩ hơn?!
 
Upvote 0
Em cảm ơn HYen17 rất nhiều em sửa theo góp ý đã chạy được tuy nhiên vấn đền em muốn hỏi thêm chút nữa là
- Khi ở Cột STT ở Sheet2 có hai số trùng nhau khi ở Sheet1 em nhập số hàng muốn xóa khi chạy Button thì nó xóa cả hai hàng luôn vậy có cách nào chỉ cho nó xóa 1 hàng và để lại một hàng không ạ
Em cảm ơn nhiều!
Code của bạn:
PHP:
Sub Xoa_Row()
Dim dong, gia_tri
gia_tri = Range("B2").Value
dong = 2
Application.ScreenUpdating = False

Do While Len(Trim(Sheets("Sheet2").Cells(dong, 1).Value)) > 0
    If Sheets("Sheet2").Cells(dong, 1).Value = gia_tri Then
1         Rows(dong).Delete
    Else
         dong = dong + 1
    End If
Loop
Application.ScreenUpdating = True    
End Sub

Thứ nhứt: Lúc khởi chạy, macro chưa biết bạn đang ở trang/Sheet nào?
Nếu bạn chỉ có 1 trang tính thì mọi chuyện sẽ bình thường, còn không sẽ lộn tùng fèo là cái chắc!
Câu lệnh có số 1 chắc là chưa ổn! Bạn tham khảo xem câu lệnh này:

Sheets("Sheet2").Cells(dong, 1).EntireRow,delete

có khả dĩ hơn?!
 
Upvote 0
Điều kiện gì quái dị vậy?
1 dòng thì xoá luôn
2 dòng thì xoá 1 chừa 1
3 dòng thì xoá ??? chừa ???
 
Upvote 0
tại vì code bạn ở sheet1. bạn kêu nó là việc ở sheet 2, thì bạn phải chỉ địa chỉ cho nó biết
Mã:
Sub Xoa_Row()
Dim dong, gia_tri
gia_tri = Range("B2").Value
dong = 2
Application.ScreenUpdating = False
[COLOR=#ff0000]With Sheet2[/COLOR]
Do While Len(Trim(.Cells(dong, 1).Value)) > 0
    If .Cells(dong, 1).Value = gia_tri Then
    .Rows(dong).Delete
    Else
    dong = dong + 1
    End If
Loop
[COLOR=#ff0000]End With[/COLOR]
Application.ScreenUpdating = True
    
End Sub
ah, tôi ko đọc kỹ, bạn đã giải quyết được vấn đề này rồi
 
Lần chỉnh sửa cuối:
Upvote 0
Điều kiện gì quái dị vậy?
1 dòng thì xoá luôn
2 dòng thì xoá 1 chừa 1
3 dòng thì xoá ??? chừa ???
Vâng em cảm ơn mọi người vì hiện tại em mới chỉ nghiên cứu được có thế nếu mà như VetMini nói ở trên mà làm được như vậy thì hay quá nếu mà có > 2 Row thì xóa chỉ để lại 1 Row thôi ạ
Thanks
 
Upvote 0
Vâng em cảm ơn mọi người vì hiện tại em mới chỉ nghiên cứu được có thế nếu mà như VetMini nói ở trên mà làm được như vậy thì hay quá nếu mà có > 2 Row thì xóa chỉ để lại 1 Row thôi ạ
Thanks

Nếu chỉ có một gia_tri để xoá:

Lập một biến integer xoa = 0
Khi gặp dòng cần xoá thì xét xoa, nếu xoa = 0 thì xoá được và đổi xoa = 1
Nếu xoa = 1 thì chừa lại không xoá và đổi xoa = 2
Nếu xoá > 1 thì xoá


Nếu có nhiều gia_tri để xoá:

Làm một cái dictionary
Trước khi xoá dòng thì xét xem có khoá trong dic này hay không.
Nếu chưa có thì ghi số 0 rồi xoá
Nếu có rồi thì xét sôs
Nếu 0 thì tức là đã xoá 1 lần rồi, bây giờ nên tăng số lên 1 và chừa lại không xoá
Nếu lớn hơn 0 thì đã chừa 1 lần rồi, bây giờ cứ thẳng thừng xoá


Đại khái nguyên tắc là dùng một cái gì đó để ghi lại là đã từng xoá chưa. Nếu đã xoá 1 lần rồi thì không xoá và ghi lại đã đã chừa 1 lần. Nếu đã chừa 1 lần rồi thì không chừa nữa, thẳng tay xoá.


Cần lưu ý: yêu cầu của bài này là một yêu cầu hết sức nguy hiểm.
Chạy một lượt, các các dòng có số ứng với số đang tham chiếu bị xoá. Nếu có hơn 1 dòng thì còn chừa lại 1
Như vậy nếu lỡ tay chạy 2 lần thì mất hết chả chừa gì cả. !!!!!!!!!!!!!!
 
Lần chỉnh sửa cuối:
Upvote 0
- Sheet 2 là chứa bảng dữ liệu Gồm các cột (STT | CQL | D | H | N | M ...) và cột STT nhập từ 1 đến n tuy nhiên trong khi nhập nó lại có số trùng nhau nên em muốn xóa hàng mà nhập vào có số thứ tự trùng nhau đó.

Nếu mà có > 2 Row thì xóa chỉ để lại 1 Row thôi ạ

Bạn có thể làm bằng tay trước, sau đó ghi thành macro mà xài:

Xếp trật tự cột [STT]

Tiến hành duyệt từ dòng cuối chứa dữ liệu lên dòng 2 (Dòng 1 chứa tiêu đề trường:=[STT])

nếu ô đang duyệt trùng trị với ô trên nó thì xóa dòng đó đi.

(Nếu bạn không tự làm được thì gởi dữ liệu giả lập lên đi; Sẽ có ngay kết quả mĩ mãn!)
 
Upvote 0
Các bạn sửa giúp mình đoạn code này với:
trước code được viết với công thức chạy :
S2= Căn bậc 2(( a 2 - a 1 )^2 + (b 2 - b 1 )^2)
S3= Căn bậc 2(( a 3 - a 1 )^2 + (b 3 - b 1 )^2)
S4= Căn bậc 2(( a 4 - a 1 )^2 + (b 4 - b 1 )^2)

Các bạn sửa giúp tớ thành công thức :
S2= Căn bậc 2(( a 2 - a 1 )^2 + (b 2 - b 1 )^2 + (C 2 - C1)^2)
S3= Căn bậc 2(( a 3 - a 1 )^2 + (b 3 - b 1 )^2 + (C 3 - C1)^2)
S4= Căn bậc 2(( a 4 - a 1 )^2 + (b 4 - b 1 )^2 + (C 4 - C1)^2)


Còn các cách chạy, lặp xóa ... vẫn giữ nguyên như code cũ nhé.

Sub DoSomething()
Dim Arr, tmp, index, result, count As Long, k As Long, e As Double, r As Long, c As Long, s As Double, startCell As Range
Arr = Range("$A$13:$E$25012").Value
e = [B1]
Set startCell = Range("G13")

ReDim index(1 To 1)
ReDim result(1 To UBound(Arr, 2), 1 To 1)

k = 0
Do
k = k + 1
ReDim Preserve result(1 To UBound(Arr, 2), 1 To k)
For r = 1 To UBound(Arr, 2)
result(r, k) = Arr(1, r)
Next r
count = 0
For r = 2 To UBound(Arr)
s = Sqr((Arr(1, 2) - Arr(r, 2)) ^ 2 + (Arr(1, 3) - Arr(r, 3)) ^ 2)
If s >= e Then
count = count + 1
ReDim Preserve index(1 To count)
index(count) = r
End If
Next r
If count > 0 Then
ReDim tmp(1 To count, 1 To UBound(Arr, 2))
For r = 1 To count
For c = 1 To UBound(Arr, 2)
tmp(r, c) = Arr(index(r), c)
Next c
Next r
Arr = tmp
End If
Loop Until count = 0

ReDim Arr(1 To k, 1 To UBound(result))
For r = 1 To k
For c = 1 To UBound(Arr, 2)
Arr(r, c) = result(c, r)
Next c
Next r

startCell.Resize(k, UBound(Arr, 2)).Value = Arr
End Sub
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom