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 (1 người xem)

  • Thread starter Thread starter ST-Lu!
  • Ngày gửi Ngày gửi
Liên hệ QC

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

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:
Các cậu ơi, không biết có ai ghi giúp mình 1 đoạn code ví dụ như
Có 2 cột A1 và B1
Côt A1 để diền số và B1 để hiện thị thời gian tại lúc điền or thay đổi số ở cột A1 ( thời gian này chỉ và củng chỉ thay đổi nếu A1 thay đổi)
đại loại như thế này

=If(A1>0),now"")
Bấm chuột phải vào tên sheet cần dùng --> chọn view code --> copy đoạn code này vào:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 And Target.Count = 1 Then
        Target.Offset(0, 1).Value = Now
    End If
End Sub
Về lại excel gõ vào cột A xem thử nha.

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

Lưu ý: Nên xem lại cách xưng hô nghe Bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ sửa lại Code để lọc chữ và tự ̣động lọc

Chào các bạn,minh có đoạn Code muốn nhờ các bạn thêm cho hai phần nữa là:
1, lọc ̣được cả chữ,thêm điều kiện lọc ở cột mới,vídụ:cột F,H và K
2, tự động lọc,tức là khi ta nhập đủ điều kiện thì sẽ tự lọc.
Cảm ơn các bạn.
Mã:
Sub Loc()
  Sheet2.Range("A201:BK5201").ClearContents
  With HS.Range("B1").CurrentRegion
    .AutoFilter 2, ">=" & CDbl(SL.[A2]), xlAnd, "<=" & CDbl(SL.[B2])
    .SpecialCells(12).Copy: Sheet2.Range("A200").PasteSpecial 3
    .AutoFilter
  End With
  Sheet3.Range("A201:BK5201").ClearContents
  With HS.Range("B1").CurrentRegion
    .AutoFilter 2, ">=" & CDbl(SL.[C2]), xlAnd, "<=" & CDbl(SL.[C2])
    .SpecialCells(12).Copy: Sheet3.Range("A200").PasteSpecial 3
    .AutoFilter
  End With
   SL.Range("A1").Select
End Sub
 
Upvote 0
Các Bạn cho mình hỏi đoạn code này mục đích làm gì

Sheets("P.1").Select: Range("E4:F220").Select
Selection.Copy
Windows("Consolidated workdone.xls").Activate
Sheets("P.1").Select: Cells(4, 9).Select
Lcolumn = Range("IV4").End(xlToLeft).Column
Selection.Select: Cells(4, Lcolumn + 4).PasteSpecial xlPasteValues


Mình mới học nên chưa hiểu được đoạn này. Xin cảm ơn
 
Upvote 0
Sheets("P.1").Select: Range("E4:F220").Select
Selection.Copy
Windows("Consolidated workdone.xls").Activate
Sheets("P.1").Select: Cells(4, 9).Select
Lcolumn = Range("IV4").End(xlToLeft).Column
Selection.Select: Cells(4, Lcolumn + 4).PasteSpecial xlPasteValues


Mình mới học nên chưa hiểu được đoạn này. Xin cảm ơn
Code này copy E4:F220 sheet "P.1" dán giá trị tại cell hàng thứ 4 cột Lcolumn+4 sheet P.1, cửa sổ file Consolidated workdone.xls
trong đó Lcolumn là cột cuối so với cells IV4 (tương đươngcon trỏ tại IV4 và nhấn tổ hợp Ctrl mũi tên sang trái)
 
Upvote 0
Cảm ơn bạn Viethoai, mình muốn biến Lcolumn là một "Biến động" tức là trong công thức trên, giá trị được gán sẽ được copy vào một ô mà mình mong muốn (do mình có rất nhiếu file dữ liệu, mình muốn dùng một công thức nhưng các phần dữ liễu khi gộp lại không bị copy đè lên nhau mà copy vào các ô lần lượt hoặc liên tiếp - chiều dọc hoặc ngang) vậy mình sẽ phải làm thế nào ah?

Làm thế nào để mình có thể chuyển một cột thành cột cuối so với IV4 được ah (mình để con trỏ ở cột IV, rồi ấn tổ hợp Ctrl + mũi tên sang trái thì mỗi lần ra một kết quả khác nhau)

Chân thành cảm ơn bạn
 
Upvote 0
PHP:
Sheets("P.1").Select: Range("E4:F220").Select
2  Selection.Copy
Windows("Consolidated workdone.xls").Activate
4 Sheets("P.1").Select: Cells(4, 9).Select
  Lcolumn = Range("IV4").End(xlToLeft).Column
6 Selection.Select: Cells(4, Lcolumn + 4).PasteSpecial xlPasteValues
Mình chưa hiểu được đoạn này
1a: Chọn trang "P.1" ( Kích hoạt trang 'P1' này)
1B: Chọn 1 vùng từ 'E4:F220'
2 Copy vùng chọn vô bộ nhớ trung gian;
3 Kích hoạt bảng tính 'C W.xls'
4a Kích hoạt trang "P.1" (của bảng tính đang được kích hoạt)
4b kích hoạt ô ở dòng 4, cột thứ 9;
5 Cột cuối có dữ liệu của dòng 4 đượcx đem gán vô biến Loolumn
6a Chọn ô đang kích hoạt (?)
6b Dán số liệu vố vùng có ô bắt đầu có toạ độ dòng là 4, cột cách cột lưu trong biến Loolumn 4 cột về fía fải
 
Upvote 0
Giải thích dùm em đoạn code:

Em có đoạn code sau đây, mấy anh giải thích giúp em ý nghĩa của từng dòng tính từ dòng màu đỏ.
Sub Test()
Dim Rng As Range, Cll As Range
Set Rng = Sheet7.Range(Sheet7.[A3], Sheet7.[A65536].End(xlUp))
Sheet7.[B:TK].ClearContents
For Each Cll In Sheet3.[1:1].SpecialCells(2, 23)
Set Rng = Rng.Offset(, 1)
Rng.Offset(-1)(1, 1).Value = Cll
Rng.FormulaR1C1 = "=VLOOKUP(RC1,Sheet3!C" & (Cll.Column - 1) & ":C" & Cll.Column & ",2,0)"
Rng.Value = Rng.Value
Next

End Sub
 
Upvote 0
Bạn thử tự tìm hiểu xem sao, với sự trợ giúp của MsgBox

Em có đoạn code sau đây, mấy anh giải thích giúp em ý nghĩa của từng dòng tính từ dòng màu đỏ.

PHP:
Sub Test()
 Dim Rng As Range, Cll As Range:        Dim GPE As Byte

 Set Rng = Sheet7.Range(Sheet7.[A3], Sheet7.[A65536].End(xlUp))
 Sheet7.[B:TK].ClearContents
 MsgBox Rng.Address, , Rng.Parent.Name  '<=|'
 For Each Cll In Sheet3.[1:1].SpecialCells(2, 23)
    Set Rng = Rng.Offset(, 1)
    GPE = GPE + 1
    Rng.Offset(-1)(1, 1).Value = Cll
    If GPE < 3 Then
        MsgBox Rng.Offset(-1)(1, 1).Address, , GPE      '<=|'
    End If
    Rng.FormulaR1C1 = "=VLOOKUP(RC1,Sheet3!C" & (Cll.Column - 1) & ":C" & Cll.Column & ",2,0)"
9 '    Rng.Value = Rng.Value '
 Next Cll
End Sub

Chú í nhỏ: mình đã vô hiệu hoá dòng lệnh mang số 9 để chúng ta thấy nội dung của công thức mà macro vừa ghép vô
 
Upvote 0
Em chào Anh!
Anh có thể giải thích rõ hơn về ý nghĩa của các dòng trong đoạn code mà em gởi được không ah. Thanks Anh!
 
Upvote 0
PHP:
Sub Test()
1 Dim Rng As Range, Cll As Range
    
 Set Rng = Sheet7.Range(Sheet7.[A3], Sheet7.[A65536].End(xlUp)) 
3      Sheet7.[B:TK].ClearContents
  For Each Cll In Sheet3.[1:1].SpecialCells(2, 23)
'
5   Set Rng = Rng.Offset(, 1)
     Rng.Offset(-1)(1, 1).Value = Cll
7   Rng.FormulaR1C1 = "=VLOOKUP(RC1,Sheet3!C" & (Cll.Column - 1) & ":C" & Cll.Column & ",2,0)"
              Rng.Value = Rng.Value
9      Next
'
End Sub
1: Khai báo 2 biến sẽ dùng trong macro
2: Lấy vùng từ ô [A3] đến ô cuối trong cột 'A' có dữ liệu thuộc trang tính Sheet7 gán vô biến đối tượng Rng đã khai báo;
3: Xoá dữ liệu từ cột 'B' đến cột 'TK' của trang tính này
4: Thiết lập vòng lập duyệt qua các ô không chứa công thức thuộc cột '1' của trang tính Sheet3
5: Lấy các ô bên fải liền kề với các ô đang trong biến Rng gán lại vô Rng
6: Ô trên ô đầu tiên trong Rng được gán trị hiện chứa trong ô đang duyệt (bỡi vòng lặp);
7: Nhập công thức của hàm VLOOPKUP() cho các ô của Rng
8: Biến các công thức vừa nhập thành các trị số
9: Kết thúc vòng lặp duyệt các ô thỏa;


Chúc mau tấn bộ!
 
Upvote 0
Mình có một vấn đề này muốn hỏi bạn.
Mình có một bảng excel gồm 2 sheet.
Sheet 1 có cột A, B, C
Sheet 2 có cột A, B, C
bây giờ mình làm thế nào để cột Ci của sheet 2 sẽ điền vào Cột C của sheet 1.
Ví dụ: ở sheet 1 cột A2 và cột B2 = cột A3 và B3 tương ứng của sheet 2 thì ô C2 của sheet 1 sẽ bằng ô C3 của sheet 2.
Bởi vì bảng excel của mình rất nhiều dòng, lên khoảng 60000 dòng nên dùng công thức thì sẽ mất rất nhiều time để xử lý kết quả.
mình mong bạn giúp đỡ hoặc bạn có một đoạn cod nào thì giupó mình với.
Ntg82vn@gmail.com
dt:09.3452.99.98
 
Upvote 0
Mình có một vấn đề này muốn hỏi bạn.
Mình có một bảng excel gồm 2 sheet.
Sheet 1 có cột A, B, C
Sheet 2 có cột A, B, C
bây giờ mình làm thế nào để cột Ci của sheet 2 sẽ điền vào Cột C của sheet 1.
Ví dụ: ở sheet 1 cột A2 và cột B2 = cột A3 và B3 tương ứng của sheet 2 thì ô C2 của sheet 1 sẽ bằng ô C3 của sheet 2.
Bởi vì bảng excel của mình rất nhiều dòng, lên khoảng 60000 dòng nên dùng công thức thì sẽ mất rất nhiều time để xử lý kết quả.
mình mong bạn giúp đỡ hoặc bạn có một đoạn cod nào thì giupó mình với.
Ntg82vn@gmail.com
dt:09.3452.99.98
Bài của bạn đã được giải quyết tại đây rồi:
http://www.giaiphapexcel.com/forum/...chạy-(Đưa-bài-dùm-1-bạn.)&p=312050#post312050
 
Upvote 0
Quái nhỉ, mới sáng nay thấy Ndu giải đáp xong, nếu kết quả không đáp ứng được thì phải nêu lý do chứ cứ Post bài mới thế này anh em cũng không biết bạn cần gì nữa.
 
Upvote 0
Xin chào các anh chị. Em đang mới chập chững học VBA về việc lập trình kết nối Excel với Autocad. Em có một bài muốn nhờ các anh chị giúp đỡ em về viết một chương trình VBA trong Autocad vẽ tự động một hình chữ nhật ( chiều dài cạnh tùy ý), tính toán đặc trưng hình học: diện tích, mô men tĩnh với các mép mặt cắt, mô men quán tính với trục trọng tâm và bằng kết nối VBA xuất các kết quả này sang một bảng Excel.
Em xin cảm ơn sự giúp đỡ của các anh chị.
[FONT=&quot]1. [/FONT][FONT=&quot][/FONT]
 
Upvote 0
Xin chào các anh chị. Em đang mới chập chững học VBA về việc lập trình kết nối Excel với Autocad. Em có một bài muốn nhờ các anh chị giúp đỡ em về viết một chương trình VBA trong Autocad vẽ tự động một hình chữ nhật ( chiều dài cạnh tùy ý), tính toán đặc trưng hình học: diện tích, mô men tĩnh với các mép mặt cắt, mô men quán tính với trục trọng tâm và bằng kết nối VBA xuất các kết quả này sang một bảng Excel.
Em xin cảm ơn sự giúp đỡ của các anh chị.
+ vào refedel chọn Microsoft Excel xxx object library ,(xxx là phiên bản excel của bạn)
[FONT=&quot]1. [/FONT]
Bạn xem thử xem thế nào? mình làm thử cho bạn trường hợp tính diện tích.
PHP:
Public a As Double
Public b As Double
Public c As Double
Public d As Double

Public Sub btntinh_Click()
 ' KIEM TRA NHAP DU LIEU TREN FORM
Dim ctr As Control
For Each ctr In Me.Controls
    If TypeOf ctr Is TextBox Then
        If Len(ctr.Text) = 0 Then
            MsgBox " Ban hay nhap du lieu di nhe " & ctr.Name
            ctr.SetFocus
            Exit Sub
        End If
    End If
Next
' KHAI BAO LUA CHON GOC TOA DO
Dim goctd(0 To 1) As Double
Dim gt As Variant
Me.Hide
'lua chon diem bat dau ve tren AutoCad
gt = ThisDrawing.Utility.GetPoint(, "CHON DIEM GOC TOA DO LA :")
goctd(0) = gt(0)
goctd(1) = gt(1)
' KHAI BAO VA VE MAT CAT
'Khai bao toa do ve:
       Dim point(0 To 9) As Double
   Dim vemc As AcadLWPolyline
'L?y du lieu ve :

a = txta.Value
b = txtb.Value
c = txtc.Value
d = txtd.Value
  ' Toado 1
         point(0) = goctd(0): point(1) = goctd(1)
           ' Toado 2
         point(2) = point(0) + a: point(3) = point(1)
          ' Toado 3
         point(4) = point(2): point(5) = point(3) + b
                 ' Toado 4
         point(6) = point(4) - a: point(7) = point(5)
                  ' Toado 5
         point(8) = point(0): point(9) = point(1)
'Tinh dien tich chu nhat :
Dim dt As Double

Set Layer = ThisDrawing.Layers.Add("netdam")
  ThisDrawing.ActiveLayer = Layer
  Set vemc = ThisDrawing.ModelSpace.AddLightWeightPolyline(point)
End Sub

'''''''''ket noi sang excel:

 Sub CommandButton1_Click()
'''''''''
a = txta.Value
b = txtb.Value
c = txtc.Value
d = txtd.Value
dt = a * b
Me.lblkq = dt
Dim app As Excel.Application
On Error Resume Next
Set app = GetObject(, "Excel.Application")
If Err <> 0 Then
Err.Clear
Set app = CreateObject("excel.application")
End If
''''''''''''''''''''''''''''''''''''
Dim WBook As Workbook, WSheet As Worksheet
Set WBook = app.Workbooks.Add
Set WSheet = WBook.Worksheets(1)
    Range("A1").Value = c
    Range("B1").Value = d
    Range("C1").Value = dt
app.Visible = True
End Sub
'Còn các truong hợp tính Jx,Jy,... cái này chắc kỹ sư xây dựng ko khó để làm nhỉ? Cố gắng nhá.

PM:liệu có đồng môn với mình ko nhỉ?hihi
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chào các anh chị,giải thích giùm em ý nghĩa của lệnh này
=R[-1]C[10]+RC[-2]-RC[-1]
Cảm ơn nhiều,em đang cần gấp
 
Upvote 0
Bạn lấy 1 trang tính trắng &

Nhập 20 số liệu bật kỳ vô "I1:J10" & chạy macro sau để hình dung sự việc

PHP:
Option Explicit
Sub CongThuc()
 Dim Cls As Range
 For Each Cls In [K3:K5]
    Cls.FormulaR1C1 = "=R[-1]C[10]+RC[-2]-RC[-1]"
 Next Cls
End Sub
 
Upvote 0
Bạn xem thử xem thế nào? mình làm thử cho bạn trường hợp tính diện tích.
Cảm ơn anh Khoa Vũ nhiều ạ. em mới học cái này nên cũng không biết nhiều, mong anh và các anh chị trong diễn đàn giúp đỡ. Em học ĐH Giao thông năm thứ 4, chắc là cũng cùng đồng môn với anh ạ. :D
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Bạn xem thử xem thế nào? mình làm thử cho bạn trường hợp tính diện tích.
Anh ơi em đã thử làm lại bài của anh thêm phần tính mô men. Nhưng anh cho em hỏi thêm là làm sao để hiện được kết quả phần tính mô men ngay khi click ( mà ko phải nhìn sang bảng excel) như phần tính diện tích của anh. Và em hỏi thêm là sao anh lại cho phần giá trị c và d vào để làm gì ạ. Em cảm ơn anh.
Bài em sửa đây ạ: http://www.mediafire.com/?4hd0333na3vbc9t
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Anh ơi em đã thử làm lại bài của anh thêm phần tính mô men. Nhưng anh cho em hỏi thêm là làm sao để hiện được kết quả phần tính mô men ngay khi click ( mà ko phải nhìn sang bảng excel) như phần tính diện tích của anh. Và em hỏi thêm là sao anh lại cho phần giá trị c và d vào để làm gì ạ. Em cảm ơn anh.
Bài em sửa đây ạ: http://www.mediafire.com/?4hd0333na3vbc9t
Bạn xem trong file đính kèm nhé.
- Mình nghĩ bạn nên phát triển tổng quát một mặt cắt dầm bất kỳ hay hơn.
- Giá trị c,d là thừa trong file mình gửi lên ban đầu.
Pm: Mình cũng là SV trường GT ra, hơn bạn hai khóa. Chắc SV tự động hóa thiết kế cầu đường à?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh ơi em làm như thế này. Nhưng có thể làm khi mà xuất kết quả sang excel thì ở dòng trên cùng ghi các dòng chữ chú thích ( ví dụ : a,b, S, Jx, Jy) rồi kết quả hiện thị tương ứng ở dòng dưói được không ạ. Và tại sao khi xuất sang excel có khi chỉ hiển thị một bảng trống ko có giá trị ạ. Anh có tài liệu nào viết về phần này gửi cho em xin với ạ. em cảm ơn anh.
http://www.mediafire.com/?u9da230aad1lb7l
 
Lần chỉnh sửa cuối:
Upvote 0
Anh ơi em làm như thế này. Nhưng có thể làm khi mà xuất kết quả sang excel thì ở dòng trên cùng ghi các dòng chữ chú thích ( ví dụ : a,b, S, Jx, Jy) rồi kết quả hiện thị tương ứng ở dòng dưói được không ạ. Và tại sao khi xuất sang excel có khi chỉ hiển thị một bảng trống ko có giá trị ạ. Anh có tài liệu nào viết về phần này gửi cho em xin với ạ. em cảm ơn anh.
http://www.mediafire.com/?u9da230aad1lb7l
Cái này đáng lẽ bạn phải làm được các dòng hiển thị chứ nhỉ? thực chất bạn vẫn chưa hiểu sao?Bạn thay bằng đoạc code này:
PHP:
'hien thi cac lable "
    Range("A1").Value = "a"
    Range("B1").Value = "b"
    Range("C1").Value = "As"
    Range("d1").Value = "S"
    Range("e1").Value = "Jx"
     Range("f1").Value = "Jy"
'Gia tri tinh toan
    Range("A2").Value = a
    Range("B2").Value = b
    Range("C2").Value = dt
    Range("d2").Value = S
    Range("e2").Value = jx
     Range("f2").Value = jy
Còn tài liệu thì mình cũng không có đâu? mà mình nghĩ Quyển sách TDH TKCD của bộ môn TDH là đầy đủ để bạn tham khảo rồi đó, - - còn muốn hơn nữa có lẽ nên thường xuyên lên diễn đàn học hỏi không hiểu thì lên đây hỏi, và đọc thêm .
- Lý do thỉnh thoảng excel trống là do khi xuất dữ liệu lần đầu đã có một file excel rồi để không trống trước khi chạy bạn tắt cái file excel đó trước đi.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Khoa Vu à, đoạn Code sau nên viết như sau cho gọn gàng hơn:

'hien thi cac lable "
Range("A1").Value = "a"
Range("B1").Value = "b"
Range("C1").Value = "As"
Range("d1").Value = "S"
Range("e1").Value = "Jx"
Range("f1").Value = "Jy"
'
Gia tri tinh toan
Range
("A2").Value = a
Range
("B2").Value = b
Range
("C2").Value = dt
Range
("d2").Value = S
Range
("e2").Value = jx
Range
("f2").Value = jy

Viết thành:

Mã:
[A1:F1] = Array("a", "b", "As", "S", "Jx", "Jy")
[A2:F2] = Array(a, b, dt, S, jx, jy)
 
Upvote 0
Hi cả nhà,em muốn hỏi tý về excel.
Đề bài cho 1 bảng có HỌ TÊN(Học sinh)--Điểm miệng(3cột)--Điểm 15'(2cột)--điểm 1 tiết(2cột)--điểm học kỳ--Xếp loại--Học bổng
Y/C: tính học bổng:
- nếu xếp loại giỏi thì dc 240k
- nếu XL khá và có đủ điểm miệng thì dc 180k
- nếu XL TB và có đủ điểm 15', 1 tiết và ko có bài nào dưới 6 thì được 100k
- ngoài ra ko có học bổng
Mình đã thử sử dụng kết hợp hàm IF, hàm COUNTIF, hàm AND mà ko ra. Mong cả nhà chỉ giáo cho e với
 
Upvote 0
Có 2 vấn đề với câu hỏi của bạn:
1/Sai Box: Dễ bị xoá .
2/Sao không đưa file mẫu lên. Cứ nghe mô tả ù tai mà chưa chắc đúng.
 
Upvote 0
Em là thành viên mới chào mọi người.
Vừa rồi tìm đuợc code tách chuỗi của anh nde960816131 rất hay. Mình có công thức 2*3+6 tại ô A2 tại ô A3 đánh công thức valexp(a2) mình sẽ được giá trị là 12. Cho em hỏi có cách nào làm ngược lại được không tức là tại ô A3 mình có giá trị 12 tại ô A2 mình muốn lấy công thức tính của A3 là 2*3+6 . Cảm ơn
 
Upvote 0
Em là thành viên mới chào mọi người.
Vừa rồi tìm đuợc code tách chuỗi của anh nde960816131 rất hay. Mình có công thức 2*3+6 tại ô A2 tại ô A3 đánh công thức valexp(a2) mình sẽ được giá trị là 12. Cho em hỏi có cách nào làm ngược lại được không tức là tại ô A3 mình có giá trị 12 tại ô A2 mình muốn lấy công thức tính của A3 là 2*3+6 . Cảm ơn
Bạn tự suy nghĩ đi ---> Ai mà biết số 12 nó là kết quả của phép toán nào chứ
- Có thể là kết quả của 3*4
- Có thể là kết quả của 6 + 6
- Có thể là kết quả của 11 +1
- Có thể là kết quả của 10 + 2
Cả 1 rừng
 
Upvote 0
anh xem file này dùm với em copy của người khác cam ơn

Đương nhiên là có nhiều cách để có được con số 12 tuy nhiên ở đây chỉ có một công thức duy nhất được đánh trong ô A3 và làm sao để mình lấy được công thức đó và cho vào ô A2
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
anh xem file này dùm với em copy của người khác cam ơn

Đương nhiên là có nhiều cách để có được con số 12 tuy nhiên ở đây chỉ có một công thức duy nhất được đánh trong ô A3 và làm sao để mình lấy được công thức đó và cho vào ô A2
Bạn xem file đính kèm. Hàm của thành viên GPEX
Nếu muốn có dấu "=" đứng đầu tiên bạn thay dòng code cuối cùng trong file thành:
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi lỗi này là như thế nào , cách khắc phục cảm ơnuntitled.GIF
 
Upvote 0
Chào cả nhà.
Em đang làm Dự toán bí qua nên lên đây nhờ cả nhà giúp đở
1. Trong Sheest"PTVT" em chỉ copy được dữ liệu qua nhưng không thêm hàng (Vật liệu, nhân công , máy thi công được). Do dữ liệu tren 60.000 dòng nên không làm thủ công nổi.
2. trong sheest"THVT" em không biết cách thêm dòng ( (Vật liệu, nhân công , máy thi công)
Em up file lên nhờ cả nhà giúp đỡ giùm em.
Chân thành cảm ơn Cả Nhà.
 

File đính kèm

Upvote 0
Upvote 0
Chào các bạn,Mình muốn sử dụng đoạn Code sau để copy dữ liệu sau khi Filter,Nhưng không hiểu tại
sao nó không hoạt động.
Code:
Sub CopyAFilter()
Dim Rng As Range
With Sheet3
If Not .FilterMode Then
MsgBox "AutoFilter?": Exit Sub
End If
Set Rng = .AutoFilter.Range.Offset(1, 0).Resize(.AutoFilter.Range.Rows. _
Count - 1).SpecialCells(xlCellTypeVisible)
'set a range = to visible cells (excluding the header)
Rng.Copy Destination:=Sheet4.Range("A1")
End With
End Sub

* Code này của bạn SA_DQ :http://www.giaiphapexcel.com/forum/showthread.php?1278-%28-h%C6%B0%CC%83ng-ghi-che%CC%81p-v%C3%AA%CC%80-ph%C6%B0%C6%A1ng-th%C6%B0%CC%81c-SpecialCells
Nhờ các bạn xem cho mình với,Cảm ơn các bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các bạn,Mình muốn sử dụng đoạn Code sau để copy dữ liệu sau khi Filter,Nhưng không hiểu tại
sao nó không hoạt động.
Code:
Sub CopyAFilter()
Dim Rng As Range
With Sheet3
If Not .FilterMode Then
MsgBox "AutoFilter?": Exit Sub
End If
Set Rng = .AutoFilter.Range.Offset(1, 0).Resize(.AutoFilter.Range.Rows. _
Count - 1).SpecialCells(xlCellTypeVisible)
'set a range = to visible cells (excluding the header)
Rng.Copy Destination:=Sheet4.Range("A1")
End With
End Sub

* Code này của bạn SA_DQ :http://www.giaiphapexcel.com/forum/showthread.php?1278-%28-h%C6%B0%CC%83ng-ghi-che%CC%81p-v%C3%AA%CC%80-ph%C6%B0%C6%A1ng-th%C6%B0%CC%81c-SpecialCells
Nhờ các bạn xem cho mình với,Cảm ơn các bạn.
- Không hoạt động là thế nào?
- Chạy sub nhưng không có việc gì xảy ra?
- Code báo lỗi?
- Tên sheet trên file bạn có phải là Sheet3 và Sheet4 hay không (SheetCodeName)
- Bạn đã Filter tại sheet3 chưa?
vân vân và vân vân
===> Đưa file lên là mọi chuyện sẽ được giải quyết
 
Upvote 0
- Không hoạt động là thế nào?
- Chạy sub nhưng không có việc gì xảy ra?
- Code báo lỗi?
- Tên sheet trên file bạn có phải là Sheet3 và Sheet4 hay không (SheetCodeName)
- Bạn đã Filter tại sheet3 chưa?
vân vân và vân vân
===> Đưa file lên là mọi chuyện sẽ được giải quyết

Chà,Đúng như bạn ndu hướng dẫn,mình sửa Sheet2 thành Sheet4 nhưng lại không sửa trong (SheetCodeName).Cảm ơn bạn nhiều.
 
Upvote 0
Các anh chị vui lòng giải thích giúp Lamtt code vẽ khung cho bảng!

Các anh chị vui lòng giải thích giúp code vẽ khung cho bảng sau đây:

Sub DrawBorder(Rng As Range)
On Error Resume Next
With Rng
For i = 7 To IIf(Rng.Rows.Count = 1, 11, 12)
.Borders(i).LineStyle = 1
.Borders(i).Weight = IIf(i = 12, 1, 2)
Next
End With
End Sub

Cám ơn các anh, chị.

Lamtt​
 
Upvote 0
If Sh.Name <> "Trang ch" & ChrW(7911) Then
Sh.Visible = .Text = "SHOW ALL"

Anh chị cho em hỏi giờ em ko muốn tên sheet là : trang chủ nữa
Giả sử rằng tên sheet mới là : Menu hoặc Thực Đơn thì sửa tên code này ntn ạ???
Em chưa bít cách đặt tên trong VBA

Chân thành cảm ơn các anh chị !!!
 
Upvote 0
Anh chị cho em hỏi giờ em ko muốn tên sheet là : trang chủ nữa
Giả sử rằng tên sheet mới là : Menu hoặc Thực Đơn thì sửa tên code này ntn ạ???
Em chưa bít cách đặt tên trong VBA

Chân thành cảm ơn các anh chị !!!
Bạn dùng code sau thử xem sau
PHP:
Sub doiten()
Sheet1.Name = "Th" & ChrW(7921) & "c " & ChrW(273) & ChrW(417) & "n"
End Sub
 
Upvote 0
Những số 7921, 273, 417 bác lấy như thế nào ạ??? chữ CHrW là như thế nào??
Các chữ tiếng việt khác thì sao ạ???
Trong VBA không viết code bằng tiếng việt được.Để biết được các chữ đó tác dụng như thế nào bạn thử dùng hàm tự tạo của thành viên trên diễn đàn bạn sẽ hiểu.
PHP:
Function UniVba(TxtUni As String) As String
If TxtUni = "" Then
  UniVba = """"""
Else
  TxtUni = TxtUni & " "
  If AscW(Left(TxtUni, 1)) < 256 Then UniVba = """"
  For n = 1 To Len(TxtUni) - 1
    uni1 = Mid(TxtUni, n, 1)
    uni2 = AscW(Mid(TxtUni, n + 1, 1))
    If AscW(uni1) > 255 And uni2 > 255 Then
      UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & "
    ElseIf AscW(uni1) > 255 And uni2 < 256 Then
      UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & """
    ElseIf AscW(uni1) < 256 And uni2 > 255 Then
      UniVba = UniVba & uni1 & """ & "
    Else
      UniVba = UniVba & uni1
    End If
  Next
  If Right(UniVba, 4) = " & """ Then
    UniVba = Mid(UniVba, 1, Len(UniVba) - 4)
  Else
    UniVba = UniVba & """"
  End If
End If
End Function
- Cách dùng: Bạn dùng bảng mã Unicode nhé
+ Tại một cell bạn gõ (ví dụ :A1 =Giải pháp excel thật tuyệt vời !")
+ Tại cell mới bạn gọi hàm trên :( A2 =UniVba(A1))
 
Upvote 0
Những số 7921, 273, 417 bác lấy như thế nào ạ??? chữ CHrW là như thế nào??
Các chữ tiếng việt khác thì sao ạ???
ChrW là hàm chuyển mã Ascii thành ký tự có hỗ trợ Unicode.
Chữ nào ứng với số bao nhiêu thì bạn xem trong file đính kèm.
 

File đính kèm

Upvote 0
- Cách dùng: Bạn dùng bảng mã Unicode nhé
+ Tại một cell bạn gõ (ví dụ :A1 =Giải pháp excel thật tuyệt vời !")
+ Tại cell mới bạn gọi hàm trên :( A2 =UniVba(A1))
Người ta cần đặt tên sheet, nếu gõ vào cell A1 tên sheet, xong dùng hàm tham chiếu đến A1, lấy mã, xong gán vào code đặt tên sheet... Hic... vậy ta đặt tên sheet = Cell A1 cho rồi
PHP:
Sub doiten()
  Sheet1.Name = Sheet1.Range("A1").Value
End Sub
Khỏe hơn không?
 
Upvote 0
Người ta cần đặt tên sheet, nếu gõ vào cell A1 tên sheet, xong dùng hàm tham chiếu đến A1, lấy mã, xong gán vào code đặt tên sheet... Hic... vậy ta đặt tên sheet = Cell A1 cho rồi
PHP:
Sub doiten()
  Sheet1.Name = Sheet1.Range("A1").Value
End Sub
Khỏe hơn không?
Hiểu ý Sư phụ như đấy là thử nghiệm thôi mà.
 
Upvote 0
Nguyên văn bởi ndu
Người ta cần đặt tên sheet, nếu gõ vào cell A1 tên sheet, xong dùng hàm tham chiếu đến A1, lấy mã, xong gán vào code đặt tên sheet... Hic... vậy ta đặt tên sheet = Cell A1 cho rồi...
Khỏe hơn không?
Cách này khỏe ở chỗ khỏi phải chuyển đổi tốn khá nhiều thời gian, nhất là khi không có hàm hỗ trợ. Nhưng cách này có một chỗ bất tiện là phải tốn và bảo vệ một vùng trên sheet. Khỏe trước nhưng mệt sau. Không thể nói cách nào khỏe hơn. Có lẽ tùy vào trường hợp cụ thể mà ta dùng cho phù hợp.
 
Upvote 0
Giải thích giúp code chuyển data từ Access sang Excel

Tôi record macro việc chuyển dữ liệu từ Acces sang Excel được đoạn như sau:
PHP:
    With ActiveSheet.ListObjects.Add(SourceType:=0, _
    Source:=Array("OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;" _
    , _
    "Data Source=D:\BinhThuan\CuocVc.mdb;Jet OLEDB:Global Bulk Transactions=1;" _
    , _
    "Jet OLEDB:Support Complex Data=False" _
    ), Destination:=Range("$A$1")).QueryTable       'Ten cua vung muon dua vao
        .CommandType = xlCmdTable                   'Can-thiet)
        .CommandText = Array("BinhThuan_CVC")       'Ten cua Table file acess
        .SourceDataFile = "D:\folder\abc.mdb"           ' path file access
        .Refresh BackgroundQuery:=False         ' Ko co dong nay khong co du lieu   (Can thiet)
    End With

Tôi chỉnh nó chút xíu, thành cái như sau:
PHP:
Function GetData_Access(N_WB_Dest As String, N_Sh_Dest As String, N_rng_Dest As String, N_Tb_Access As String, Path_DataSource As String)
    Path_DataSource = Path_DataSource.Address
    With Workbooks(N_WB_Dest).Sheets(Name_Sh_Dest).ListObjects.Add(SourceType:=0, Source:=Array("OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;" _
    , _
    "Data Source= Path_DataSource ;Jet OLEDB:Global Bulk Transactions=1;" _
    , _
    "Jet OLEDB:Support Complex Data=False" _
    ), Destination:=Range(N_rng_Dest)).QueryTable
        .CommandType = xlCmdTable
        .CommandText = Array(N_Tb_Access)
        .SourceDataFile = Path_DataSource
        .Refresh BackgroundQuery:=False
    End With
End Function

Nếu đưa như sau thì không bị lỗi:
PHP:
"Data Source=D:\folder\abc.mdb;Jet OLEDB:Global Bulk Transactions=1;" _

nhưng nếu như vầy thì báo lỗi:
PHP:
"Data Source="D:\folder\abc.mdb";Jet OLEDB:Global Bulk Transactions=1;" _
Làm sao để biến Path_DataSource = D:\folder\abc.mdb chứ không phải "D:\folder\abc.mdb"
Rỏ ràng 2 cái khác nhau ở chổ có dấu nháy.

Nhờ mọi người đóng góp.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi record macro việc chuyển dữ liệu từ Acces sang Excel được đoạn như sau:
PHP:
    With ActiveSheet.ListObjects.Add(SourceType:=0, _
    Source:=Array("OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;" _
    , _
    "Data Source=D:\BinhThuan\CuocVc.mdb;Jet OLEDB:Global Bulk Transactions=1;" _
    , _
    "Jet OLEDB:Support Complex Data=False" _
    ), Destination:=Range("$A$1")).QueryTable       'Ten cua vung muon dua vao
        .CommandType = xlCmdTable                   'Can-thiet)
        .CommandText = Array("BinhThuan_CVC")       'Ten cua Table file acess
        .SourceDataFile = "D:\folder\abc.mdb"           ' path file access
        .Refresh BackgroundQuery:=False         ' Ko co dong nay khong co du lieu   (Can thiet)
    End With

Tôi chỉnh nó chút xíu, thành cái như sau:
PHP:
Function GetData_Access(N_WB_Dest As String, N_Sh_Dest As String, N_rng_Dest As String, N_Tb_Access As String, Path_DataSource As String)
    Path_DataSource = Path_DataSource.Address
    With Workbooks(N_WB_Dest).Sheets(Name_Sh_Dest).ListObjects.Add(SourceType:=0, Source:=Array("OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;" _
    , _
    "Data Source= Path_DataSource ;Jet OLEDB:Global Bulk Transactions=1;" _
    , _
    "Jet OLEDB:Support Complex Data=False" _
    ), Destination:=Range(N_rng_Dest)).QueryTable
        .CommandType = xlCmdTable
        .CommandText = Array(N_Tb_Access)
        .SourceDataFile = Path_DataSource
        .Refresh BackgroundQuery:=False
    End With
End Function

Nếu đưa như sau thì không bị lỗi:
PHP:
"Data Source=D:\folder\abc.mdb;Jet OLEDB:Global Bulk Transactions=1;" _

nhưng nếu như vầy thì báo lỗi:
PHP:
"Data Source="D:\folder\abc.mdb";Jet OLEDB:Global Bulk Transactions=1;" _
Làm sao để biến Path_DataSource = D:\folder\abc.mdb chứ không phải "D:\folder\abc.mdb"
Rỏ ràng 2 cái khác nhau ở chổ có dấu nháy.

Nhờ mọi người đóng góp.
Sửa thành vầy thử xem:
Mã:
"Data Source= " & Path_DataSource & ";Jet OLEDB:Global Bulk Transactions=1;"
Tiếc là tôi không có file nên không thử nghiệm được
 
Upvote 0
Sửa thành vầy thử xem:
Mã:
"Data Source= " & Path_DataSource & ";Jet OLEDB:Global Bulk Transactions=1;"
Tiếc là tôi không có file nên không thử nghiệm được
Vậy tôi gửi Anh NDU và mọi người xem thử nhé.

Cái đường dẫn anh chỉnh lại cho phù hợp nhé.

Thân.
 

File đính kèm

Upvote 0
Vậy tôi gửi Anh NDU và mọi người xem thử nhé.

Cái đường dẫn anh chỉnh lại cho phù hợp nhé.

Thân.
Thử sửa vầy xem:
PHP:
Sub GetData_Access(N_Sh_Dest As String, N_rng_Dest As String, N_Tb_Access As String, Path_DataSource As String)
    With Sheets(N_Sh_Dest).ListObjects.Add(SourceType:=0, Source:=Array("OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;" _
    , _
    "Data Source=" & Path_DataSource & ";Jet OLEDB:Global Bulk Transactions=1;" _
    , _
    "Jet OLEDB:Support Complex Data=False" _
    ), Destination:=Range(N_rng_Dest)).QueryTable
        .CommandType = xlCmdTable
        .CommandText = Array(N_Tb_Access)
        .SourceDataFile = Path_DataSource
        .Refresh BackgroundQuery:=False
    End With
End Sub
PHP:
Sub Macro3()
    Dim wb As String
    Dim sh As String, rng As String
    Dim path_ac As String, TB_Ac As String
    sh = "Sheet3"
    rng = "$A$1"
    TB_Ac = "BinhThuan_CVC"
    path_ac = "C:\Documents and Settings\TUANNA.MAINTENANCE\Desktop\CuocVc.mdb"  ' Soure Patch
    Sheets(sh).Activate
    GetData_Access sh, rng, TB_Ac, path_ac
End Sub
Tôi thấy không cần biến Wb, vì đàng nào ta cũng đang chạy code tại file hiện hành mà
 
Upvote 0
Cảm ơn anh NDU
Tôi đã làm được. Mong học hỏi nhiều.
Thân
 
Upvote 0
Nhờ các anh chị giải quyết hộ em lỗi Runtime error '9' trong đoạn code dưới đây với.

Code của Anh Thắng viết cho em để tìm phần tử trùng của nhiều mảng có điều kiện.


Sub GPE()
Dim Cll As Range, FCll As Range, iCll As Range, FirstRow As Long, Arr(), i As Long, rc As Integer, kCll As Range
Result.[C6:AC65536].ClearContents
rc = Data.[C2].CurrentRegion.Rows.Count
Set kCll = Data.Cells(2, 3).Resize(rc - 3, 27)
For Each Cll In Result.[C2:AC2]
Set FCll = kCll.Find(Cll.Value, Data.[C2], xlValues, 1)
If FCll Is Nothing Then GoTo NextCll
FirstRow = FCll.Row
i = 0
Do
Set FCll = kCll.FindNext(FCll)
If WorksheetFunction.CountIf(Data.Cells(FCll.Row + 1, 3).Resize(, 27), Cll.Offset(1)) > 0 Then
i = i + 1
ReDim Preserve Arr(1 To i)
Arr(i) = FCll.Row + 2
End If
Loop Until FCll.Row = FirstRow

For Each iCll In Data.Cells(Arr(1), 3).Resize(3, 27)
For i = 2 To UBound(Arr)
If Data.Cells(Arr(i), 3).Resize(3, 27).Find(What:=iCll.Value, LookAt:=xlWhole) Is Nothing Then
GoTo NextiCll
End If
Next
Result.Cells(65536, Cll.Column).End(xlUp).Offset(1).Value = iCll.Value
NextiCll:
Next
NextCll:
Next
End Sub


Chạy bị báo lỗi "Subcript out of range" tại dòng:

For Each iCll In Data.Cells(Arr(1), 3).Resize(3, 27)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Nhờ các anh chị giải quyết hộ em lỗi Runtime error '9' trong đoạn code dưới đây với.

Code của Anh Thắng viết cho em để tìm phần tử trùng của nhiều mảng có điều kiện.

Chạy bị báo lỗi "Subcript out of range" tại dòng:

For Each iCll In Data.Cells(Arr(1), 3).Resize(3, 27)

Bạn thử thêm On Error Resume Next xem sao!
 
Upvote 0
em gửi file đính kèm , mong các anh chị giúp đỡ

Sub test()
Dim rng As Range, lrow As Long, i As Long
Sheet2.Range("a7:k10000").Clear
Set rng = Sheet1.Range(Sheet1.[K6], Sheet1.[K7].End(xlDown)).Offset(, -10).Resize(, 11)
lrow = 6
For i = 1 To 3
With rng
.AutoFilter
.AutoFilter 11, [a5].Value
.SpecialCells(xlCellTypeVisible).Copy Sheet2.Cells(lrow + 1, 1)
.AutoFilter
End With
lrow = Sheet2.Range("D65000").End(xlUp).Row
Set rng = rng.Resize(1).Offset(rng.Rows.Count)
lrow = Sheet2.Range("D65000").End(xlUp).Row
Set rng = Sheet1.Range(Sheet1.Cells(rng.Row, 11), Sheet1.Cells(rng.Row + 1, 11).End(xlDown)).Offset(, -10).Resize(, 11)
Next i
Sheet1.[d65000].End(xlUp).Offset(-1, -3).Resize(10, 11).Copy Sheet2.Cells(lrow + 1, 1)
End Sub

để em có thể vận dụng linh hoạt code này
 

File đính kèm

Upvote 0
/-(ình như bạn cần lọc 3 vùng của trang 1 sang trang 2

Nhưng muốn công thức cọng luôn đúng bạn nên làm vầy:

(*) Ở trang tính 2 ta thiết lập 3 vùng cố định, mình giả dụ vùng 1 từ dòng 8 đến 46
V2 từ D48 đến 67 & V3 từ D69 cho tới 95 & dưới liền kề dòng 95 là dòng tổng cọng;

(*) Ta copy dữ liệu lên dòng đầu của 3 vùng đó

(*) Sau đó 3 vùng không chứa dữ liệu sẽ được code cho ẩn đi.

Làm cách này dịnh dạng các tổng con & tổng cọng vũ như cẩn;

(Các con số 46,67 & 95 là mình án chừng, còn bạn thì fải cụ thể & do thực tiển đem lại)

Chắc bạn sẽ thực hiện được tự ên & chúc thành công!

/(/ếu khó khăn bạn tham khảo macro sau:

PHP:
Option Explicit
Sub test()
 Dim Rng As Range, lRow As Long, jJ As Long, Sh As Worksheet, dRng As Range
 Dim DgD As Long, DgC As Long

Set Sh = ThisWorkbook.Worksheets("Sheet1")
Union(Range("A8:A46").Resize(, 12), Range("A48:A67").Resize(, 12), _
   Range("A69:A95").Resize(, 12)).ClearContents
DgD = 7
For jJ = 1 To 3
   DgC = Sh.Cells(DgD, 11).End(xlDown).Row
   Set Rng = Sh.Range(Sh.Cells(DgD, "A"), Sh.Cells(DgC, "K"))
   
    With Rng
      .AutoFilter
      .AutoFilter 11, [a5].Value
      lRow = Choose(jJ, 8, 48, 69)
      .SpecialCells(xlCellTypeVisible).Copy Sheet2.Cells(lRow, "A")
      .AutoFilter
    End With   
   DgD = DgC + 2
 Next jJ
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Ở sheet 2 em nên sửa đoạn mã này ntn??
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$5" Then Call test
End Sub

Em thấy báo lỗi : Call test
dòng đầu của đoạn mã màu vàng

Và hộp thoại:
Compile error
Am biguous name detected : test
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng muốn công thức cọng luôn đúng bạn nên làm vầy:

(*) Ở trang tính 2 ta thiết lập 3 vùng cố định, mình giả dụ vùng 1 từ dòng 8 đến 46
V2 từ D48 đến 67 & V3 từ D69 cho tới 95 & dưới liền kề dòng 95 là dòng tổng cọng;

(*) Ta copy dữ liệu lên dòng đầu của 3 vùng đó

(*) Sau đó 3 vùng không chứa dữ liệu sẽ được code cho ẩn đi.

Làm cách này dịnh dạng các tổng con & tổng cọng vũ như cẩn;

(Các con số 46,67 & 95 là mình án chừng, còn bạn thì fải cụ thể & do thực tiển đem lại)

Chắc bạn sẽ thực hiện được tự ên & chúc thành công!

/(/ếu khó khăn bạn tham khảo macro sau:

PHP:
Option Explicit
Sub test()
 Dim Rng As Range, lRow As Long, jJ As Long, Sh As Worksheet, dRng As Range
 Dim DgD As Long, DgC As Long

Set Sh = ThisWorkbook.Worksheets("Sheet1")
Union(Range("A8:A46").Resize(, 12), Range("A48:A67").Resize(, 12), _
   Range("A69:A95").Resize(, 12)).ClearContents
DgD = 7
For jJ = 1 To 3
   DgC = Sh.Cells(DgD, 11).End(xlDown).Row
   Set Rng = Sh.Range(Sh.Cells(DgD, "A"), Sh.Cells(DgC, "K"))
   
    With Rng
      .AutoFilter
      .AutoFilter 11, [a5].Value
      lRow = Choose(jJ, 8, 48, 69)
      .SpecialCells(xlCellTypeVisible).Copy Sheet2.Cells(lRow, "A")
      .AutoFilter
    End With   
   DgD = DgC + 2
 Next jJ
End Sub

Anh ơi, anh làm cụ thể ở file em gửi cho anh đi, em thấy rất tốt rùi nhưng có 1 chút vướng mắc
Như code của anh, với mã khách đầu tiên ở sheet 2 thì ok, nhưng bắt đầu chọn mã khách tiếp theo thì dòng đầu của mã khách đầu tiên vẫn còn, khiến cho dữ liệu bị sai
 
Upvote 0
Bạn xen trong file kèm theo
 

File đính kèm

Upvote 0
Tôi muốn ẩn dòng có điều kiện, nhưng khi lòng điều khiển vòng lặp thì nó không thực hiện được, như đoạn code sau, nhờ các bác chỉ giúp. Xin cảm ơn nhiều.

PHP:
Sub dk()
Dim i As Integer
Dim j As Integer
i = 1
j = i + 1
Do
If Range("A1").Offset(i, 0) = 0 Then 
 Range("j:10").EntireRow.Hidden = True
End If
i = i + 1
Loop Until IsEmpty(Range("A1").Offset(i, 0))
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tôi muốn ẩn dòng có điều kiện, nhưng khi lòng điều khiển vòng lặp thì nó không thực hiện được, như đoạn code sau, nhờ các bác chỉ giúp. Xin cảm ơn nhiều.

PHP:
Sub dk()
Dim i As Integer
Dim j As Integer
i = 1
j = i + 1
Do
If Range("A1").Offset(i, 0) = 0 Then 
 Range("j:10").EntireRow.Hidden = True
End If
i = i + 1
Loop Until IsEmpty(Range("A1").Offset(i, 0))
End Sub
Cụ thể điều kiện để ẩn dòng của bạn là gì?
(Xem sơ qua thì đoán code sai chổ Range("j:10")
 
Upvote 0
Cụ thể điều kiện để ẩn dòng của bạn là gì?
(Xem sơ qua thì đoán code sai chổ Range("j:10")
Cụ thể điều kiện là: Nếu A2 <>0 thì kiểm tra điều kiện A3, A3<>0 thì kiểm tra điều kiện A4, A4 = 0 thì ẩn dòng từ A4 đến A10. Còn nếu A4 <>0 thì kiểm tra tiếp tục đến A10.
 
Upvote 0
Cụ thể điều kiện là: Nếu A2 <>0 thì kiểm tra điều kiện A3, A3<>0 thì kiểm tra điều kiện A4, A4 = 0 thì ẩn dòng từ A4 đến A10. Còn nếu A4 <>0 thì kiểm tra tiếp tục đến A10.
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
 
Upvote 0
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

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

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

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
Fần dữ liệu cột 'A' sẽ có vấn đề fát sinh cần xử tiếp.

--=0 !$@!! }}}}} ||||| -+*/ -\\/.

Cái đó dễ mà bác, công thức là do chủ topic tạo thì chủ topic có cách xử lý thôi.

Nói thêm:

Bạn ấy cần phải viết công thức cho A4 như ở dưới rồi kéo xuống sẽ không xảy ra lỗi này nữa:

Công thức cho A4:
PHP:
=IF(B4="","",MAX($A$3:A3)+1)
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi một vấn đề, mỗi lần dùng lệnh macro thì không Undo được. Có cách nào có thể khắc phục được hạn chế trên không nha.
 
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
Đoạn code của bác nvson có hạn chế là: 1. khi cột cột C4 - C12 không bị rổng thì thực hiện AutoFilter thu hết dử liệu. 2. Dùng lệnh macro này nó xóa luôn nguyên dòng, không xóa dòng trong phạm vi từ A đến C
 
Upvote 0
các bác giúp em đoạn code chữ chạy trên form này khi em đưa vào vba excel thì khi chạy code vào lại excel không chỉnh sửa được
Private Sub UserForm_Activate()
Dim PauseTime
On Error Resume Next
nhan1:
PauseTime = 0.2
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop

l = Len(Chaychutrenformnghiviec.Caption)
Chaychutrenformnghiviec.Caption = Right(Chaychutrenformnghiviec.Caption, l - 1) + Left(Chaychutrenformnghiviec.Caption, 1)

GoTo nhan1

End Sub
 
Upvote 0
các bác giúp em đoạn code chữ chạy trên form này khi em đưa vào vba excel thì khi chạy code vào lại excel không chỉnh sửa được
Private Sub UserForm_Activate()
Dim PauseTime
On Error Resume Next
nhan1:
PauseTime = 0.2
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop

l = Len(Chaychutrenformnghiviec.Caption)
Chaychutrenformnghiviec.Caption = Right(Chaychutrenformnghiviec.Caption, l - 1) + Left(Chaychutrenformnghiviec.Caption, 1)

GoTo nhan1

End Sub

Bạn thử tham khảo bài này tại link dưới đây:
http://www.giaiphapexcel.com/forum/showthread.php?9802-Chữ-chạy-trên-form&p=67809#post67809
 
Upvote 0
Tôi có đoạn code sau. Có mấy chỗ không hiểu (Các dòng in đậm) mong mọi người vào chỉ giúp.

Private Sub cmdAdd_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("TONGHOP")

iRow = ws.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row

If Trim(Me.txtName.Value) = "" Then
ChangeColors
Me.txtName.SetFocus

MsgBox "VUI LONG DIEN TEN KHACH HANG", vbCritical + vbOKOnly, "TEN KHACH"

Exit Sub

Ở đoạn code trên từ ChangeColors có tác dụng gì? Từ Me có tác dụng gì trong các đoạn code?
 
Lần chỉnh sửa cuối:
Upvote 0
Ở đoạn code trên từ ChangeColors có tác dụng gì?
Bạn xem ở đâu đó có 1 thủ tục mang tên như vậy;

Từ Me có tác dụng gì trong các đoạn code?
(ó nghĩa là cho tôi, của tôi, là bản thân tôi

PHP:
Private Sub cmdAdd_Click()
Dim iRow As Long
Dim ws As Worksheet
'Khai báo như trên ws là 1 biến đối tượng, mà đã fàm là biến đối '
'tượng ta fải dùng từ khóa Set VBA mới hiểu & đòng í'
[B]Set[/B] ws = Worksheets("TONGHOP")
' Rows.Count là số hàng trên trang tính, 2 là cột "b"'
 'Dòng lệnh này có nghĩa là lấy dòng trống ngay dưới dòng có dữ liệu'
'cuối cùng của cột "B" đem gán vố biến iRow'
iRow = [B]ws.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row[/B]
'Tạm hiểu là nếu TextBox mang tên txtName của tôi là rỗng thì'
If [B]Trim(Me.txtName.Value) = "" Then[/B]
    [B]ChangeColors[/B]
  Me.txtName.SetFocus
     
  MsgBox "VUI LONG DIEN TEN KHACH HANG", vbCritical + vbOKOnly, "TEN KHACH"
  
  Exit Sub
 
Upvote 0
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
Dùng đoạn code trên để thâm nhập header làm file mỗi lần nhập khai báo header chạy rất chậm nếu trong file nhiều sheet. Có cách nào để tăng tốc cho đoạn code trên không nha
 
Upvote 0
Dùng đoạn code trên để thâm nhập header làm file mỗi lần nhập khai báo header chạy rất chậm nếu trong file nhiều sheet. Có cách nào để tăng tốc cho đoạn code trên không nha
Chậm hay nhanh là do dữ liệu thôi bạn à
===> Xem lại dữ liệu của mình nhé
 
Upvote 0
Em gửi cả file đính kèm mong các huynh tỷ giúp đỡ:
Em đang làm 1 file giống hướng dẫn của Bác Duyệt mà chưa thành công, file là chọn mã sản phẩm từ 1 bảng dữ liệu có sẵn
Tại sheet 2, cột A em chuột phải thì báo lỗi code

Các huynh tỷ tìm lỗi và sửa cho em với
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
các anh chị giúp em sửa lại pass ở đoạn code dưới đây với: ví dụ khi gõ pass 123 vào thì để nó thành dấu chấm (...)

Dim OldValue
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
OldValue = Target.Cells(1, 1)
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not IsEmpty(OldValue) And (OldValue <> Target.Cells(1, 1)) Then
If InputBox("Password:", "Yeu cau nhap Password") <> "123l" Then
Application.Undo
End If
End If
End Sub
 
Upvote 0
các anh chị giúp em sửa lại pass ở đoạn code dưới đây với: ví dụ khi gõ pass 123 vào thì để nó thành dấu chấm (...)

Dim OldValue
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
OldValue = Target.Cells(1, 1)
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not IsEmpty(OldValue) And (OldValue <> Target.Cells(1, 1)) Then
If InputBox("Password:", "Yeu cau nhap Password") <> "123l" Then
Application.Undo
End If
End If
End Sub
Nội cái chuyện xử lý dấu * trên InputBox thì code của nó còn dài gấp mấy lần code chính của bạn nữa đấy --> Có đáng không?
Vậy bạn nên tìm hướng khác, chẳng hạn thiết kế UserForm với 1 TextBox, nó có hổ trợ vụ biến pass thành dấu *
 
Upvote 0
Nhờ giúp đỡ tạo 1 nút lệnh trên Ribbon

Tôi ở Đắk LăK! Xin cả nhà giúp đỡ tạo 1 nút lệnh trên thanh công cụ
Ribbon nhằm để kiểm tra khi nhập liệu (có File kèm những thông tin liên quan). Xin cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Giải thích VBA

Anh chị nào hiểu đoạn code dưới đây làm ơn giải thích giúp em với ạ!
PHP:
Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.EnableCancelKey = xlDisabled
    On Error Resume Next
    ThisWorkbook.Activate
    Application.Calculation = xlAutomatic
    Application.ScreenUpdating = False
If Worksheets(" Sheet1").Range("NUM").Value < 7 Then
    Application.DisplayAlerts = False
    ActiveWindow.Visible = False
    ThisWorkbook.Close
    Exit Sub
    End If
    ActiveWindow.Visible = True
    Application.ScreenUpdating = False
    ThisWorkbook.Unprotect Password:=" 12345 "
    With Sheets(" Sheet1")
    .Activate
    .Range("HN32").Calculate
    .Range("HN33").Calculate
    Range("A730").Select
    End With
    If Worksheets(" Sheet1").Range("NA").Value = 0 Then
    Application.ScreenUpdating = False
    With Application
        .Calculation = xlManual
        .ScreenUpdating = False
        .EnableEvents = False
        .DisplayAlerts = False
        .StatusBar = StatusBarMsg
        .EnableCancelKey = xlErrorHandler
    End With
    For Each ThisSheet In ThisWorkbook.Sheets
    ThisSheet.Visible = True
    Next ThisSheet
    Sheets("Sheet").Visible = False
    Sheets(2).Select
    For N = 1 To 74
    ActiveWindow.SelectedSheets.Delete
    Next N
    For N = 1 To 16
    Sheets("Sheet").Copy After:=Sheets(1)
    Next N
    ThisWorkbook.Protect Password:=12345
    Dim Temp$
    Temp = Application.InputBox("'" & ActiveWorkbook.Name & "'" & " is protected. Password:", "Password")
    If Temp = "" Then
    GoTo Finally
    End If
    If Temp = "abcde" Then
    GoTo Finally
    Else
    Dim Msg, Style, Title, Help, Ctxt, Response, MyString
    Msg = ("The password you supplied is not correct. Verify that the CAPSLOCK key is off and be sure to use the correct capitalization.")
    Style = vbOKOnly + vbExclamation + vbDefaultButton1
    Title = "Microsoft Office Excel"
    Help = "DEMO.HLP"
    Ctxt = 1000
    Response = Msgbox(Msg, Style, Title, Help, Ctxt)
    End If
Finally:
    Application.ScreenUpdating = False
    Dim Path$
    Application.DisplayAlerts = False
    i = ActiveWorkbook.Path & "/" & ActiveWorkbook.Name
    ActiveWorkbook.SaveAs Filename:=i, Password:=TxtFLFilter, CreateBackup:=False
    ActiveWorkbook.ProtectSharing
    ActiveWindow.Visible = False
    ThisWorkbook.Close
    GoTo Finally
    Else
    Application.ScreenUpdating = False
    ActiveWindow.TabRatio = 0.92
    ThisWorkbook.Unprotect Password:=12345
    Application.ScreenUpdating = False
    If Worksheets(3).Range("H76").Value < 0.1 Then
    Dim Temp$
    Temp = Application.InputBox("'" & ActiveWorkbook.Name & "'" & " is protected. Password:", "Password")
    If Temp = "" Then
    Exit Sub
    End If
    If Temp = "0000" Then
    For N = 4 To 74
    Sheets(N).Activate
    ActiveSheet.Unprotect Password:=12345
    c = Sheets(3).Range("W60").Value
    r = Sheets(3).Range("X60").Value
    Range(Cells(c, 5), Cells(r, 26)).Locked = False
    Next N
    Else
    Dim Msg, Style, Title, Help, Ctxt, Response, MyString
    Msg = ("The password you supplied is not correct. Verify that the CAPSLOCK key is off and be sure to use the correct capitalization.")
    Style = vbOKOnly + vbExclamation + vbDefaultButton1
    Title = "Microsoft Office Excel"
    Help = "DEMO.HLP"
    Ctxt = 1000
    Response = Msgbox(Msg, Style, Title, Help, Ctxt)
    End If
    End If
    N = 0
    For Each Sheet In Sheets()
    N = N + 1
    Sheets(N).Activate
    Sheets(N).Visible = True
    ActiveSheet.Unprotect Password:=12345
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFormattingCells:=False, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowSorting:=True, Password:=12345
    ActiveSheet.EnableSelection = xlNoRestrictions
    With ActiveWindow
    .DisplayHeadings = False
    .DisplayOutline = False
    End With
    Next
    Application.ScreenUpdating = False
With Sheets("Sheet87")
    .Activate
    .Unprotect Password:=12345
    Range("IPMT").Copy
    Range("ps").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    .Protect Password:=12345
    Range("A730").Select
    End With
    With ActiveWindow
        .DisplayHorizontalScrollBar = True
        .DisplayVerticalScrollBar = True
        .DisplayWorkbookTabs = True
    End With
    ThisWorkbook.Sheets(" Sheet1").Visible = xlVeryHidden
    ThisWorkbook.Sheets("Sheet87").Visible = xlVeryHidden
    ThisWorkbook.Sheets("Sheet86").Visible = xlVeryHidden
    Sheets("Sheet").Visible = False
    ThisWorkbook.Protect Password:=12345
    End If
    Application.ScreenUpdating = False
With Sheets("Sheet0")
    .Activate
    Range("B1").ClearContents
    End With
    Sheets(3).Select
    Application.CommandBars("File").Controls(5).Visible = False
    Application.CommandBars("File").Controls(6).Visible = False
    Application.CommandBars("View").Controls(4).Visible = False
    Application.CommandBars("Tools").Controls(13).Visible = False
    Application.CommandBars("Tools").Controls(14).Visible = False
    Application.CommandBars("Tools").Controls(15).Visible = False
    Application.CommandBars("Tools").Controls(17).Visible = False
    ActiveWindow.DisplayWorkbookTabs = True
    Application.Calculation = xlAutomatic
    ActiveWindow.WindowState = xlMaximized
    Application.EnableEvents = True
    Application.ScreenUpdating = True
Finally:
    Application.StatusBar = ""
End Sub
 
Upvote 0
híc! chẳng lẽ không có ai hiểu để giúp em sao?...
Anh chị nào hiểu đoạn nào thì giải thích giúp em đoạn đó cũng được mà.
 
Upvote 0
híc! chẳng lẽ không có ai hiểu để giúp em sao?...
Anh chị nào hiểu đoạn nào thì giải thích giúp em đoạn đó cũng được mà.
Bạn phải đưa cả file lên thì mới giải thích được chứ, ai rảnh đâu mà giả lập từng thứ một, chẳng hạn:
- Range("Num") là cái gi?
- Range("NA") là cái gì?
Vả lại, code này chắc chắn sẽ báo lỗi tè lè, chạy được đâu mà giải thích
 
Upvote 0
Bạn phải đưa cả file lên thì mới giải thích được chứ, ai rảnh đâu mà giả lập từng thứ một, chẳng hạn:
- Range("Num") là cái gi?
- Range("NA") là cái gì?
Vả lại, code này chắc chắn sẽ báo lỗi tè lè, chạy được đâu mà giải thích
Mong thầy thứ lỗi! File nay` không thể gửi Diễn đàn chung này được vì nó là tài liệu nội bộ.
Em cũng muốn hỏi thầy
Num lấy từ đâu?
NA lấy từ đâu?
File của em chạy không vấn đề gì cả?
Hix kể ra hỏi thể này sẽ khiến mọi người giận nhưng mà biết làm thế nào được.
 
Lần chỉnh sửa cuối:
Upvote 0
Em cũng muốn hỏi thầy
Num lấy từ đâu?
NA lấy từ đâu?
Không xem file nhưng đoán nó là 1 name (vào Define name xem thử)
--------------------------
File của em chạy không vấn đề gì cả?
.
Code này mà bạn chạy được bình thường kể cũng kỳ... Có rất nhiều dòng khai báo biến trùng nhau, chẳng hạn có 2 dòng Dim Temp$, 2 dòng Dim Msg.. vân vân... nếu chạy chắc chắn sẽ báo lỗi "Duplicate declaration in current scope"
--------------------------
Ngoài ra, nếu không có file thì chẳng biết gì mà giải thích cho bạn
 
Upvote 0
Tôi ở Đắk LăK! Xin cả nhà giúp đỡ tạo 1 nút lệnh trên thanh công cụ
Ribbon nhằm để kiểm tra khi nhập liệu (có File kèm những thông tin liên quan). Xin cảm ơn
Bạn copy đoạn code sau nha, bạn chỉ cần bấm nút kiểm tra thì những mã nào nhập sai nó sẽ thông báo và tô máu vàng ở mã bị lỗi đó.
PHP:
Sub Kiemtra()
Dim i As Integer
For i = 6 To 600
If Cells(i, 10) = "D" Then
prompt = "Ma nay nhap sai"
MsgBox (prompt)
Cells(i, 4).Select
With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
    End With
End If
Next
End Sub
 

File đính kèm

Upvote 0
Status
Không mở trả lời sau này.

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

Back
Top Bottom