Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây

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

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

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


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Nói lại 1 lần nữa xem đúng ý bạn không nha: Kiểm tra từ A1 đến A10, cell nào rổng thì ẩn nguyên dòng. Đúng chứ?
Nếu đúng thế thì code quá đơn giản:
PHP:
Sub dk()
  Dim i As Long
  For i = 1 To 10
    Cells(i, 1).EntireRow.Hidden = IsEmpty(Cells(i, 1))
  Next
End Sub
Đúng rồi bạn nhưng tôi muốn dùng lệnh điều khiển vòng lặp để code thực hiện nhanh hơn, ví dụ như đến ô A4 rổng thì không kiểm tra các ô tiếp theo nữa mà ẩn tư dòng A4 đến A10 luôn. Chứ như đoạn code trên thì kiểm tra từng ô rồi cell nào rổng thì ẩn như vây file chạy rất chậm, ví dụ tôi muốn kiểm tra không những từ A1 đến A10 má đến A210 thì code sẻ thực hiện rất lâu.
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu không có dòng trống xen vào thì dùng đoạn code này thử xem :

Sub dk()
Dim i As Long
i = WorksheetFunction.CountA([A:A]) + 1
Range(Cells(i, 1), Cells(10, 1)).EntireRow.Hidden = True
End Sub
 
Upvote 0
Đúng rồi bạn nhưng tôi muốn dùng lệnh điều khiển vòng lặp để code thực hiện nhanh hơn, ví dụ như đến ô A4 rổng thì không kiểm tra các ô tiếp theo nữa mà ẩn tư dòng A4 đến A10 luôn. Chứ như đoạn code trên thì kiểm tra từng ô rồi cell nào rổng thì ẩn như vây file chạy rất chậm, ví dụ tôi muốn kiểm tra không những từ A1 đến A10 má đến A210 thì code sẻ thực hiện rất lâu.
Thích thì làm thôi:
PHP:
Sub dk()
  With Range("A65536").End(xlUp)
    If .Row < 10 Then Range(.Offset(1), [A10]).EntireRow.Hidden = True
  End With
End Sub
Khỏi vòng lập luôn
 
Upvote 0
Thích thì làm thôi:
PHP:
Sub dk()
  With Range("A65536").End(xlUp)
    If .Row < 10 Then Range(.Offset(1), [A10]).EntireRow.Hidden = True
  End With
End Sub
Khỏi vòng lập luôn
Anh làm như thế này thì dòng 1 luôn luôn hiện mặc dù có thể nó không có dữ liệu.
Chắc file tác giả gửi lên chỉ là giả lập. Nếu trên file thực tế thì có thể làm như thế này:
PHP:
Sub dk()
[A1:A10].SpecialCells(4).EntireRow.Hidden = True
End Sub
 
Upvote 0
Anh làm như thế này thì dòng 1 luôn luôn hiện mặc dù có thể nó không có dữ liệu.
Chắc file tác giả gửi lên chỉ là giả lập. Nếu trên file thực tế thì có thể làm như thế này:
PHP:
Sub dk()
[A1:A10].SpecialCells(4).EntireRow.Hidden = True
End Sub
Lúc đầu tôi cũng định dùng SpecialCells nhưng sau nghĩ lại thấy không ổn... Một file mới tinh, chỉ nhập đến dòng thứ 5 thì SpecialCells sẽ không hoạt động
Còn nếu file thật sự không có tí dữ liệu nào thì dù có ẩn hay không cũng không có phân biệt gì
 
Upvote 0
Xin nhờ các bác viết code để nhập từ userform vào Header và Footer cho tất cả các sheet. Em mới nhập môn nên còn lơ ngơ xin các bác chỉ giúp
 
Lần chỉnh sửa cuối:
Upvote 0
Xin nhờ các bác viết code để nhập từ userform vào Header và Footer cho tất cả các sheet. Em mới nhập môn nên còn lơ ngơ xin các bác chỉ giúp
PHP:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
PHP:
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub CommandButton1_Click()    
Sheets("Sheet1").Activate    
With ActiveSheet.PageSetup        
       .LeftHeader = "&8&U" & TextBox1    
End With    
Sheets("Sheet2").Activate   
 With ActiveSheet.PageSetup        
.LeftHeader = "&8&U" & TextBox1    
End With
Sheets("Sheet3").Activate    
With ActiveSheet.PageSetup        
.LeftHeader = "&8&U" & TextBox1    
End With
End Sub
Tôi có viết các bác xem nhờ các bác chỉ giúp sao cho nó gọn hơn được không, vì file của tôi tạo rất nhiều sheet viết như trên thi code dài dòng quá.
 

File đính kèm

  • Book4.rar
    23.5 KB · Đọc: 20
Upvote 0
PHP:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
PHP:
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub CommandButton1_Click()    
Sheets("Sheet1").Activate    
With ActiveSheet.PageSetup        
       .LeftHeader = "&8&U" & TextBox1    
End With    
Sheets("Sheet2").Activate   
 With ActiveSheet.PageSetup        
.LeftHeader = "&8&U" & TextBox1    
End With
Sheets("Sheet3").Activate    
With ActiveSheet.PageSetup        
.LeftHeader = "&8&U" & TextBox1    
End With
End Sub
Tôi có viết các bác xem nhờ các bác chỉ giúp sao cho nó gọn hơn được không, vì file của tôi tạo rất nhiều sheet viết như trên thi code dài dòng quá.
Code này tôi sẽ rút gọn thành:
PHP:
Private Sub CommandButton1_Click()
  Dim Sh As Worksheet
  For Each Sh In ThisWorkbook.Worksheets
    Sh.PageSetup.LeftHeader = "&8&U" & TextBox1.Text
  Next
End Sub
 
Upvote 0
PHP:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
PHP:
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub CommandButton1_Click()    
Sheets("Sheet1").Activate    
With ActiveSheet.PageSetup        
       .LeftHeader = "&8&U" & TextBox1    
End With    
Sheets("Sheet2").Activate   
 With ActiveSheet.PageSetup        
.LeftHeader = "&8&U" & TextBox1    
End With
Sheets("Sheet3").Activate    
With ActiveSheet.PageSetup        
.LeftHeader = "&8&U" & TextBox1    
End With
End Sub
Tôi có viết các bác xem nhờ các bác chỉ giúp sao cho nó gọn hơn được không, vì file của tôi tạo rất nhiều sheet viết như trên thi code dài dòng quá.
Nếu Header giống nhau hết thì làm bằng tay cho rồi. Cũng đâu có lâu, code chi cho mệt.
 
Upvote 0
PHP:
Sub dk()
If Range("X1") = 1 Then 
   ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D1"  
  Sheets("D1").Visible = True 
   Sheets("D2").Visible = FASE   
 Sheets("D3").Visible = FASE  
  Sheets("D4").Visible = FASE   
 Sheets("D5").Visible = FASE   
 Sheets("D6").Visible = FASE  
  Sheets("D7").Visible = FASE
End If
If Range("X1") = 2 Then  
  ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D2"  
  Sheets("D1").Visible = FASE  
  Sheets("D2").Visible = True  
  Sheets("D3").Visible = FASE 
   Sheets("D4").Visible = FASE  
  Sheets("D5").Visible = FASE  
  Sheets("D6").Visible = FASE 
   Sheets("D7").Visible = FASE
End If
If Range("X1") = 3 Then 
   ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D3" 
   Sheets("D1").Visible = FASE  
  Sheets("D2").Visible = FASE  
  Sheets("D3").Visible = True   
 Sheets("D4").Visible = FASE  
  Sheets("D5").Visible = FASE   
 Sheets("D6").Visible = FASE  
  Sheets("D7").Visible = FASE
End If
If Range("X1") = 4 Then  
  ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D4"  
  Sheets("D1").Visible = FASE  
  Sheets("D2").Visible = FASE  
  Sheets("D3").Visible = FASE 
   Sheets("D4").Visible = True   
 Sheets("D5").Visible = FASE    
Sheets("D6").Visible = FASE   
 Sheets("D7").Visible = FASE
End If
If Range("X1") = 5 Then 
   ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D5"  
  Sheets("D1").Visible = FASE  
 Sheets("D2").Visible = FASE  
 Sheets("D3").Visible = FASE   
 Sheets("D4").Visible = FASE 
   Sheets("D5").Visible = True  
  Sheets("D6").Visible = FASE  
  Sheets("D7").Visible = FASE
End If
If Range("X1") = 6 Then 
   ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D6" 
   Sheets("D1").Visible = FASE  
  Sheets("D2").Visible = FASE  
  Sheets("D3").Visible = FASE  
  Sheets("D4").Visible = FASE  
  Sheets("D5").Visible = FASE   
 Sheets("D6").Visible = True  
  Sheets("D7").Visible = FASE
End If
If Range("X1") = 7 Then 
   ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D7"    
Sheets("D1").Visible = FASE   
 Sheets("D2").Visible = FASE  
  Sheets("D3").Visible = FASE   
 Sheets("D4").Visible = FASE 
   Sheets("D5").Visible = FASE   
 Sheets("D6").Visible = FASE    
Sheets("D7").Visible = True
End If
End Sub
Các bác xem giùm em đoạn code trên góp ý cho em với, nó dài dòng lôi thôi quá. Cảm ơn các bác nhiều.
 

File đính kèm

  • Book2.rar
    18.3 KB · Đọc: 22
Upvote 0
PHP:
Sub dk()
If Range("X1") = 1 Then 
   ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D1"  
  Sheets("D1").Visible = True 
   Sheets("D2").Visible = FASE   
 Sheets("D3").Visible = FASE  
  Sheets("D4").Visible = FASE   
 Sheets("D5").Visible = FASE   
 Sheets("D6").Visible = FASE  
  Sheets("D7").Visible = FASE
End If
If Range("X1") = 2 Then  
  ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D2"  
  Sheets("D1").Visible = FASE  
  Sheets("D2").Visible = True  
  Sheets("D3").Visible = FASE 
   Sheets("D4").Visible = FASE  
  Sheets("D5").Visible = FASE  
  Sheets("D6").Visible = FASE 
   Sheets("D7").Visible = FASE
End If
If Range("X1") = 3 Then 
   ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D3" 
   Sheets("D1").Visible = FASE  
  Sheets("D2").Visible = FASE  
  Sheets("D3").Visible = True   
 Sheets("D4").Visible = FASE  
  Sheets("D5").Visible = FASE   
 Sheets("D6").Visible = FASE  
  Sheets("D7").Visible = FASE
End If
If Range("X1") = 4 Then  
  ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D4"  
  Sheets("D1").Visible = FASE  
  Sheets("D2").Visible = FASE  
  Sheets("D3").Visible = FASE 
   Sheets("D4").Visible = True   
 Sheets("D5").Visible = FASE    
Sheets("D6").Visible = FASE   
 Sheets("D7").Visible = FASE
End If
If Range("X1") = 5 Then 
   ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D5"  
  Sheets("D1").Visible = FASE  
 Sheets("D2").Visible = FASE  
 Sheets("D3").Visible = FASE   
 Sheets("D4").Visible = FASE 
   Sheets("D5").Visible = True  
  Sheets("D6").Visible = FASE  
  Sheets("D7").Visible = FASE
End If
If Range("X1") = 6 Then 
   ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D6" 
   Sheets("D1").Visible = FASE  
  Sheets("D2").Visible = FASE  
  Sheets("D3").Visible = FASE  
  Sheets("D4").Visible = FASE  
  Sheets("D5").Visible = FASE   
 Sheets("D6").Visible = True  
  Sheets("D7").Visible = FASE
End If
If Range("X1") = 7 Then 
   ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D7"    
Sheets("D1").Visible = FASE   
 Sheets("D2").Visible = FASE  
  Sheets("D3").Visible = FASE   
 Sheets("D4").Visible = FASE 
   Sheets("D5").Visible = FASE   
 Sheets("D6").Visible = FASE    
Sheets("D7").Visible = True
End If
End Sub
Các bác xem giùm em đoạn code trên góp ý cho em với, nó dài dòng lôi thôi quá. Cảm ơn các bác nhiều.
Nếu như theo code trên mình có thể sửa như thế này. Bạn kiểm tra thử giúp nhé (mình chưa test thử)
PHP:
Sub Macro1()
ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D" & Range("X1").Value
For i = 1 To 7
   If i = Range("X1").Value Then
     Sheets("D" & i).Visible = True
   Else
     Sheets("D" & i).Visible = FASE
   End If
Next
End Sub
 
Upvote 0
Các bác xem giùm em đoạn code trên góp ý cho em với, nó dài dòng lôi thôi quá. Cảm ơn các bác nhiều.
Rút gọn lại thành:
Mã:
Sub Macro1()
  Dim Sh As Worksheet, Criteria As String
  On Error Resume Next
  For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "menu" And Sh.Visible = -1 Then Sh.Visible = 0
  Next
  With Sheets("menu").DropDowns("Drop Down 1")
    Criteria = .List(.Value)
    .Parent.Range("$C$3:$D$13").AutoFilter 1, Criteria
  End With
  Sheets(Criteria).Visible = -1
End Sub
Không cần cell phụ X1
Cải tiến thêm 1 chút nữa, thậm chí không cần bất cứ cell phụ, cột phụ nào
 
Upvote 0
Rút gọn lại thành:
Mã:
Sub Macro1()
  Dim Sh As Worksheet, Criteria As String
  On Error Resume Next
  For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "menu" And Sh.Visible = -1 Then Sh.Visible = 0
  Next
  With Sheets("menu").DropDowns("Drop Down 1")
    Criteria = .List(.Value)
    .Parent.Range("$C$3:$D$13").AutoFilter 1, Criteria
  End With
  Sheets(Criteria).Visible = -1
End Sub
Không cần cell phụ X1
Cải tiến thêm 1 chút nữa, thậm chí không cần bất cứ cell phụ, cột phụ nào
Cảm ơn huynh nhiều!!!!!!!!!!!
 
Upvote 0
Nếu như theo code trên mình có thể sửa như thế này. Bạn kiểm tra thử giúp nhé (mình chưa test thử)
PHP:
Sub Macro1()
ActiveSheet.Range("$C$3:$D$13").AutoFilter Field:=1, Criteria1:="D" & Range("X1").Value
For i = 1 To 7
   If i = Range("X1").Value Then
     Sheets("D" & i).Visible = True
   Else
     Sheets("D" & i).Visible = FASE
   End If
Next
End Sub
Code của huynh text rồi chạy ok, nhưng có một hạn chế là tên sheet không chạy theo số thì làm sao ví dụ tên sheet là D100, D150, H200x200
 
Upvote 0
Code của huynh text rồi chạy ok, nhưng có một hạn chế là tên sheet không chạy theo số thì làm sao ví dụ tên sheet là D100, D150, H200x200

Cái này hơi bắt bí người ta à nha! Nếu sheet có tên tùm lum thì tùy biến mà làm thôi, hoặc quay lại code của bạn ban đầu í!

Nhưng thiết nghĩ khi đã lập trình thì không những đặt tên cho sheet mà còn phải sắp xếp dữ liệu sao cho logic và theo ý đồ của mình mới có thể đạt hiệu quả cao nhất.
 
Upvote 0
Xin nhờ các bác chỉ giúp đoạn code sau. Nhờ các bác rút gọn lại đoạn code cho em với, em chỉ mới biết macro nên chủ yếu dùng ghi macro rồi thêm hàm điều kiện ah. Cảm ơn các bác nhiều.
PHP:
Sub Macro1()
If Range("C4") = 0 Then
    Range("A4:C4").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C5") = 0 Then
    Range("A5:C5").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C6") = 0 Then
    Range("A6:C6").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C7") = 0 Then
    Range("A7:C7").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C8") = 0 Then
    Range("A8:C8").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C9") = 0 Then
    Range("A10:C10").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C10") = 0 Then
    Range("A10:C10").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C11") = 0 Then
    Range("A11:C11").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C12") = 0 Then
    Range("A12:C12").Select
    Selection.Delete Shift:=xlUp
End If
End Sub
 

File đính kèm

  • VD.rar
    12.5 KB · Đọc: 17
Upvote 0
Bạn thử chiêm nghiệm cái ni

PHP:
Option Explicit
Sub GPE()
 Dim Cls As Range, dRng As Range
 For Each Cls In Range("C4:C10")
   If Cls.Value = 0 Or Cls.Value = "" Then
      If dRng Is Nothing Then
         Set dRng = Cls.Offset(, -1).Resize(, 2)
      Else
         Set dRng = Union(dRng, Cls.Offset(, -1).Resize(, 2))
      End If
   End If
 Next Cls
 If Not dRng Is Nothing Then
   dRng.Delete
   Range("A" & ([b65500].End(xlUp).Row + 1) & ":A" & [a65500].End(xlUp).Row).ClearContents
 End If
End Sub
 
Upvote 0
Xin nhờ các bác chỉ giúp đoạn code sau. Nhờ các bác rút gọn lại đoạn code cho em với, em chỉ mới biết macro nên chủ yếu dùng ghi macro rồi thêm hàm điều kiện ah. Cảm ơn các bác nhiều.
PHP:
Sub Macro1()
If Range("C4") = 0 Then
    Range("A4:C4").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C5") = 0 Then
    Range("A5:C5").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C6") = 0 Then
    Range("A6:C6").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C7") = 0 Then
    Range("A7:C7").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C8") = 0 Then
    Range("A8:C8").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C9") = 0 Then
    Range("A10:C10").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C10") = 0 Then
    Range("A10:C10").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C11") = 0 Then
    Range("A11:C11").Select
    Selection.Delete Shift:=xlUp
End If
If Range("C12") = 0 Then
    Range("A12:C12").Select
    Selection.Delete Shift:=xlUp
End If
End Sub

Code của bạn chỉ cần làm như vầy thôi:

PHP:
Sub test()
  Dim i As Long
  For i = 12 To 4 Step -1
    If Sheet1.Range("C" & i).Value = 0 Then Sheet1.Range("A" & i, "C" & i).Delete 2
  Next
End Sub
 
Upvote 0
Bạn thử làm theo cách sau:
Vào VBA (chỗ Marco1 của bạn), thêm đoạn code sau:
Mã:
Sub Delete_rows_Empty()
    'Bạn thay đổi điều kiện lọc trong đoạn code trên (phần chữ màu đỏ - nếu cần)
    ActiveSheet.Range("$A$3:$C$12").AutoFilter Field:=3, Criteria1:=[COLOR=#ff0000]"="
[/COLOR]    Range("A6:C12").Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.ShowAllData
    Range("C5").Select
End Sub

Gán marco trên cho nút lệnh "Xoa" của bạn,
Bạn thử nhấn nút "Xoá" xem sao!
 
Upvote 0
Sau khi chạy code của NVSon & ếch xanh thì. . .

Fần dữ liệu cột 'A' sẽ có vấn đề fát sinh cần xử tiếp.

--=0 !$@!! }}}}} ||||| -+*/ -\\/.
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom