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 (3 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ám ơn các bác nhưng vẫn còn có vấn đề. Trong một số Sheet, ô A1 định dạng sẵn kiểu text vì vậy khi chạy code này thì tại những ô đó sẽ không ra kết quả mà sẽ ghi toàn bộ nội dung công thức ra.
Theo em nghĩ, các bác viết lại giùm là định dạng lại toàn bộ ô A1 trên toàn bộ các sheet về dạng chung là General rồi mới chạy công thức.
Cám ơn!
 
Upvote 0
Cám ơn các bác nhưng vẫn còn có vấn đề. Trong một số Sheet, ô A1 định dạng sẵn kiểu text vì vậy khi chạy code này thì tại những ô đó sẽ không ra kết quả mà sẽ ghi toàn bộ nội dung công thức ra.
Theo em nghĩ, các bác viết lại giùm là định dạng lại toàn bộ ô A1 trên toàn bộ các sheet về dạng chung là General rồi mới chạy công thức.
Cám ơn!
Nếu bạn làm bằng tay việc định dạng này (trên toàn bộ sheet) mà không có vấn đề thì cứ Record macro là ra
Chẳng hạn:
PHP:
Sub Test()
  Sheets.Select
  Sheet1.Range("A1").Activate
  With Selection
    .NumberFormat = "General"
    .Value = "=CELL(""filename"",RC)"
  End With
  Sheet1.Select
End Sub
 
Upvote 0
Không biết hỏi có bị ngố không nhưng e thắc mắc xin chỉ em nha. code (PHP code) là gì vậy mấy anh chị. em thấy mấy anh chị sử dụng code để thuận tiện trong excel hay quá.thế e muốn học để biết nó thì học về phần nào ạ
 
Upvote 0
Không biết hỏi có bị ngố không nhưng e thắc mắc xin chỉ em nha. code (PHP code) là gì vậy mấy anh chị. em thấy mấy anh chị sử dụng code để thuận tiện trong excel hay quá.thế e muốn học để biết nó thì học về phần nào ạ
Đó là cách để người ta "đóng khung" mấy chổ quan trọng cho bạn dể nhìn ấy mà, nó chẳng liên quan gì đến Excel cả
Ví dụ:
- Khi tôi viết code thế này:
Sub Test()
''Code here
End Sub
Xong, tôi dùng chuột bôi đen 3 dòng code trên rồi bấm nút php sẽ được thế này:
PHP:
Sub Test()
 ''Code here
End Sub

Xem hình minh họa

attachment.php




(Đương nhiên trong quá trình soạn thảo bài viết, bạn phải bấm nút "Đổi Sang Khung Lớn" mới thấy được nút này)
 

File đính kèm

  • untitled.JPG
    untitled.JPG
    42.2 KB · Đọc: 105
Upvote 0
nhờ các anh chị giải thích giùm đoạn code

"If UCase(n.Name) = UCase(Nname) Then" trong đó n.Name và Nname khác nhau như thế nào ?

Được trích ra từ một hàm
PHP:
Function RangeNameExists(Nname) As Boolean
'   Kiem tra xem ten co ton tai hay khong
'   Neu ton tai thi tra ve TRUE
    Dim n As Name
    RangeNameExists = False
    For Each n In ActiveWorkbook.Names
        If UCase(n.Name) = UCase(Nname) Then
            RangeNameExists = True
            Exit Function
        End If
    Next n
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
nhờ các anh chị giải thích giùm đoạn code

"If UCase(n.Name) = UCase(Nname) Then" trong đó n.Name và Nname khác nhau như thế nào ?

Được trích ra từ một hàm

Function RangeNameExists(Nname) As Boolean
' Kiem tra xem ten co ton tai hay khong
' Neu ton tai thi tra ve TRUE
Dim n As Name
RangeNameExists = False
For Each n In ActiveWorkbook.Names
If UCase(n.Name) = UCase(Nname) Then
RangeNameExists = True
Exit Function
End If
Next n
End Function
Nname là tên name mà bạn sẽ gõ vào hàm
n là tên của biến trong code
Đúng ra chỉ cần so sánh If n.Name = Nname Then nhưng người ta thêm UCase vào để nó không phân biệt HOA thường, ví dụ name là ndu, bạn gõ vào hàm là NDU nó vẫn hiểu đấy chính là 1
Mà code kiểm tra name thì đâu cần dài thế nhỉ? Tôi nghĩ không cần dùng For vẫn được đấy
 
Upvote 0
Đó là cách để người ta "đóng khung" mấy chổ quan trọng cho bạn dể nhìn ấy mà, nó chẳng liên quan gì đến Excel cả
Ví dụ:
- Khi tôi viết code thế này:
Sub Test()
''Code here
End Sub
Xong, tôi dùng chuột bôi đen 3 dòng code trên rồi bấm nút php sẽ được thế này:
PHP:
Sub Test()
 ''Code here
End Sub

Xem hình minh họa

attachment.php




(Đương nhiên trong quá trình soạn thảo bài viết, bạn phải bấm nút "Đổi Sang Khung Lớn" mới thấy được nút này)
ý mình hỏi là tại sao mình biết mà tạo ra code như thế được đó bạn.tại sao không liên quan đến excel nhỉ. mình thấy nhiều người hỏi để giải thích các đọan code lắm mà
 
Upvote 0
ý mình hỏi là tại sao mình biết mà tạo ra code như thế được đó bạn.tại sao không liên quan đến excel nhỉ. mình thấy nhiều người hỏi để giải thích các đọan code lắm mà
Tại vì bạn đang hỏi PHP code ---> Đây là cách trang trí trên web nên đâu có liên quan gì đến Excel
Còn như bạn muốn nói đến "nội dung" trong PHP code ấy thì: Mở file nào đó có code, bấm Alt + F11 sẽ nhìn thấy ngay!
 
Upvote 0
à tại mình hỏi chưa rõ.đúng là nội dung code.nhưng làm sao mình biết mà soạn nội dung code cho đúng vậy.muốn học về nó phải bắt đầu từ đâu.tại mình thấy trong wed giaiphap cua mình hỏi nhiều về nó mà mình không biết phải học từ đâu đó.
 
Upvote 0
Xin anh giải thích đoạn code thành tiền dịch ra sát nghĩa

Vd: 3006001 thì công thức sẽ hiện : Ba triệu không trăm lẻ sáu ngàn lẻ một đồng.
Tôi muốn thể hiện đầy đủ đơn vị hàng trăm: ba triệu không trăm lẻ sáu ngàn không trăm lẻ một đồng.

Kèm theo link : http://www.mediafire.com/?zkz2ti4ymmw

Xin chỉ giúp tôi.Cảm ơn hoặc gởi địa chỉ mail : nguyenanhhung1982@gmail.com
 
Upvote 0
à tại mình hỏi chưa rõ.đúng là nội dung code.nhưng làm sao mình biết mà soạn nội dung code cho đúng vậy.muốn học về nó phải bắt đầu từ đâu.tại mình thấy trong wed giaiphap cua mình hỏi nhiều về nó mà mình không biết phải học từ đâu đó.
Ah... làm sao biết uh? Thì học thôi... Học tại đây:
Chập chững đến VBA!
Kiến thức cơ bản về Visual Basic for Applications (VBA)
 
Upvote 0
Vd: 3006001 thì tôi muốn thể hiện đầy đủ đơn vị hàng trăm: ba triệu không trăm lẻ sáu ngàn không trăm lẻ một đồng. Kèm theo link : http://www.mediafire.com/?zkz2ti4ymmw
Xin chỉ giúp tôi.Cảm ơn hoặc gởi địa chỉ mail : nguyenanhhung1982@gmail.com
Sao bạn không đăng tại đây hàm dịch số thành chữ có trong file;
Đưa đường dẫn cũng sẽ có người ngại xem (như mình đây, khà, khà,. . . --=0 :-= --=0 ! )
 
Upvote 0
thành tiền dịch sát nghĩa

PHP:
   3.009.001,00 
   Ba trieäu khoâng traêm leû chín ngaøn moät ñoàng chaün  
   Ba trieäu khoâng traêm leû chín ngaøn khoâng traêm leû moät ñoàng chaün  
  [CENTER][CENTER] caùc anh chò chæ em ñoaïn maõ TH 2 laø coù khoâng traêm leû moät ñoàng chaün.Em laøm hoaøi maø khoâng ra Xin chæ giaùo [/CENTER][/CENTER]
   Public Function vnd(howmuch) 
   Dim ketqua, sotien, nhom, chu, dich, s1, s2, s3 As String 
   Dim l, j, vitri As Double 
   Dim hang, doc, dem 
   If howmuch = 0 Then 
       ketqua = "Khoâng ñoàng" 
   Else 
   If Abs(howmuch) >= 1E+15 Then 
   ketqua = "Soá gì maø to theá 1 trieäu tyû khoâng ñuû xaøi haû, nhaäp laïi !" 
   Else 
   If howmuch < 0 Then 
   ketqua = "Tröø" & Space(1) 
   Else 
   ketqua = Space(0) 
   End If 
   sotien = Format(Abs(howmuch), "##############0.00") 
   sotien = Right(Space(15) & sotien, 18) 
   hang = Array("None", "traêm", "möôi", "gì ñoù") 
   doc = Array("None", "ngaøn tyû", "tyû", "trieäu", "ngaøn", "ñoàng", "chaün") 
   dem = Array("None", "moät", "hai", "ba", "boán", "naêm", "saùu", "baûy", "taùm", "chín") 
   For l = 1 To 6 
       nhom = Mid(sotien, l * 3 - 2, 3) 
       If nhom <> Space(3) Then 
           Select Case nhom 
               Case "000" 
                   If l = 5 Then 
                       chu = "ñoàng" & Space(1) 
                   Else 
                       chu = Space(0) 
                   End If 
               Case ".00" 
                   chu = "chaün" 
               Case Else 
                   s1 = Left(nhom, 1) 
                   s2 = Mid(nhom, 2, 1) 
                   s3 = Right(nhom, 1) 
                   chu = Space(0) 
                   hang(3) = doc(l) 
                   For j = 1 To 3 
                       dich = Space(0) 
                       S = Val(Mid(nhom, j, 1)) 
                       If S > 0 Then 
                           dich = dem(S) & Space(1) & hang(j) & Space(1) 
                       End If 
                       Select Case j 
                           Case 2 And S = 1 
                               dich = "möôøi" & Space(1) 
                           Case 3 And S = 0 And nhom <> Space(2) & "0" 
                               dich = hang(j) & Space(1) 
                       Case 3 And S = 5 And s2 <> Space(1) And s2 <> "0" 
                               dich = "l" & Mid(dich, 2) 
                           Case 2 And S = 0 And s3 <> "0" 
                               If (s1 >= "1" And s1 <= "9") Or (s1 = "0" And l = 4) Then 
                                   dich = "khoâng traêm leû" & Space(1) 
                               End If 
                           End Select 
                           chu = chu & dich 
                      Next j 
                   End Select 
                   vitri = InStr(1, chu, "möôi moät", 1) 
                   If vitri > 0 Then Mid(chu, vitri, 9) = "möôi moát" 
                   ketqua = ketqua & chu 
               End If 
           Next l 
       End If 
   End If 
   vnd = UCase(Left(ketqua, 1)) & Mid(ketqua, 2) 
   End Function
 
Upvote 0
Run & Call hoặc chỉ cần ghi tên sub khác nhau ở đâu?

Hiện tại em mới nghịch nên không thấy sự khác nhau ví dụ:
1. Call test1
2. run test1

3. Test1

CHẳng nhẽ excel vô cớ lại thừa như trên sao? em nghĩ phải có một nguyên nhân nào đó?

XIn chỉ giáo
 
Upvote 0
Code Find chính xác từ cần tìm ?

Chào các bạn ! Nhờ các bạn giúp tôi Code Find chính xác từ cần tìm

Ví dụ: 1 ô có từ Chính, 1 ô khác có từ Trung Chính. Để tìm chính xác ô có từ Chính thì trong hộp Find and Replace phải đánh dấu kiểm vào mục Match entire cell contents (như file đính kèm). Nhưng do Macro không ghi lại được thao tác này nên tôi không biết viết code như thế nào ? Rất mong được sự giúp đỡ của các bạn !
 

File đính kèm

Upvote 0
Đó là xlWhole

PHP:
Sub GPE_Macro()
    Cells.Find(What:="Chính", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
End Sub
 
Upvote 0
Chào các bạn! Mình có 1 vấn đề nhờ forum chỉ giúp như sau:
- Mình quản lý canteen và lên lịch nấu ăn cho từng ngày vì thế có ngày ăn chay trong tháng nên mình muốn chuyển đổi thứ ngày tháng năm DL ra AL để tiện theo dõi và lên thực đơn.
ex: Sat 09/01/2010 (DL) --> T7 25/11 (AL).
Mong được sự hồi âm sớm của các bạn!
Tks.
 
Upvote 0
Xin mấy sư huynh chỉ giúp giùm code để tính tuần thứ mấy trong năm khi ta nhập vào một ngày tháng năm bất kỳ nào đó. Ví du: khi nhập vào ngày 08/01/2010 thì nó tính ra là tuần số 2 trong năm 2010.
Sư huynh nào biết, xin chỉ giùm. Cảm ơn nhiều.

Còn đây là hàm tính tuần mà bạn Lê Văn Duyệt đã viết nhưng tôi kiểm tra năm 2010 thì không đúng với hàm weeknum trong excel. Xin mấy bác chỉ giùm:
Function WEEKNR(InputDate As Long) As Integer Dim A As Integer, B As Integer, C As Long, D As Integer WEEKNR = 0 If InputDate < 1 Then Exit Function A = Weekday(InputDate, vbSunday) B = Year(InputDate + ((8 - A) Mod 7) - 3) C = DateSerial(B, 1, 1) D = (Weekday(C, vbSunday) + 1) Mod 7 WEEKNR = Int((InputDate - C - 3 + D) / 7) + 1 End Function
 
Upvote 0
Xin mấy sư huynh chỉ giúp giùm code để tính tuần thứ mấy trong năm khi ta nhập vào một ngày tháng năm bất kỳ nào đó. Ví du: khi nhập vào ngày 08/01/2010 thì nó tính ra là tuần số 2 trong năm 2010.
Sư huynh nào biết, xin chỉ giùm. Cảm ơn nhiều.

Còn đây là hàm tính tuần mà bạn Lê Văn Duyệt đã viết nhưng tôi kiểm tra năm 2010 thì không đúng với hàm weeknum trong excel. Xin mấy bác chỉ giùm:
Function WEEKNR(InputDate As Long) As Integer Dim A As Integer, B As Integer, C As Long, D As Integer WEEKNR = 0 If InputDate < 1 Then Exit Function A = Weekday(InputDate, vbSunday) B = Year(InputDate + ((8 - A) Mod 7) - 3) C = DateSerial(B, 1, 1) D = (Weekday(C, vbSunday) + 1) Mod 7 WEEKNR = Int((InputDate - C - 3 + D) / 7) + 1 End Function
Bạn thử code này xem:
PHP:
Function WeekNumUDF(DateValue As Date, Optional TypeValue As Byte = 1) As Long
  Dim FirstDay As Date
  If TypeValue > 0 And TypeValue < 3 Then
    FirstDay = DateSerial(Year(DateValue), 1, 1)
    WeekNumUDF = Int((DateValue - FirstDay - Weekday(DateValue - (2 - TypeValue) * 6, 2) + 8) / 7) - (Weekday(FirstDay) <> TypeValue)
  End If
End Function
Cú pháp
=WeekNumUDF(Ngày, kiểu)
Trong đó:
- Ngày là ngày tháng năm nào đó
- Kiểu = 1 nếu tính chủ nhật là đầu tuần và = 2 nếu tính thứ 2 là đầu tuần
--------------------
Xem file đính kèm (trong đó có cả phương pháp dùng công thức cho bạn tham khảo)
 

File đính kèm

Upvote 0
Em lên diễn đàn thấy code tạo mục lục như sau:
Private Sub Worksheet_Activate()
Dim wSheet As
Worksheet
Dim lCount
As
Long
lCount
=
1

With Me
.Columns(1).
ClearContents
.Cells(1, 1) =
"INDEX"
End With

For
Each wSheet In Worksheets
If wSheet.Name <> Me.
Name Then
lCount
= lCount +
1
With wSheet
.Range("A1").Name = "Start" & wSheet.
Index
.Hyperlinks.Add Anchor:=.Range("A1"), Address:="", SubAddress:=
_
"Index", TextToDisplay:=
"Back to Index"
End With
Me
.Hyperlinks.Add Anchor:=Me.Cells(lCount, 1), Address:="", SubAddress:=
_
"Start" & wSheet.Index, TextToDisplay:=wSheet.
Name
End
If
Next wSheet
End Sub

Nhưng khỗ nỗi khi áp dụng vào file của em có vấn đề như sau:

- Ở ô A1 của mỗi sheet có từ " Back to Index" nhưng bấm vào không quay trở lại sheet Index
- Trong các sheet của em tại Ô A1 đều có dữ chữ vậy mà chữ" Back to Index" cứ nằm đè lên làm khi in cứ bị dính nó hoài.
- Em muốn mấy anh giúp em sửa code trên như thê nào để bấm vào back to Index thì quay về sheet Index và em không muốn in chữ Back to Index ra ( In ra có làm gì đâu ). Nếu được thì hay quá!! Nếu không được mấy anh bỏ luôn chữ đó ra dùm em thì em cũng cám ơn nhiều lắm rồi
 
Upvote 0
nhờ các anh chỉ giúp cách lấy địa chỉ cell

em lên mạng tìm mãi nhưng không thấy điều cần tìm và tại đây em thấy nó gần giống nên em hỏi luôn các bác ai biết thì chỉ giùm em với nhe
em có biến B và khi msgbox "cell là" & B
thì nó cho em là r5c6
vạy tại cell hiện tại activecell.value = rang(b).value thì em phải làm sao để tách được 5,6 để làm trong công thức activecell.value = rang(r5c6).value
 
Upvote 0
Nhờ các bạn giúp tôi câu lệnh xoá dấu kiểm trong Match entire cell contents. Thanks!
 

File đính kèm

Upvote 0
Lần sau bạn dùng chức năng Record Macro để ghi lại rồi tham khảo câu lệnh của chính Excel nó thực hiện rồi vận dụng vào trường hợp của mình. Ví dụ mình ghi ở đây

Mã:
[B][COLOR=Red]Cells.Find(What:="c"[/COLOR][/B], After:=ActiveCell, LookIn:=xlFormulas, [B][COLOR=Blue]LookAt:= _
        xlWhole[/COLOR][/B], SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate

Mã:
[B][COLOR=Red]Cells.Find(What:="c"[/COLOR][/B], After:=ActiveCell, LookIn:=xlFormulas,[COLOR=Blue][B] LookAt:= _
        xlPart[/B][/COLOR], SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate

Trong 2 câu lệnh Find trên thì đoạn màu đỏ là bắt buộc, phần còn lại nếu không có thì thực hiện theo mặc định.
Đoạn màu xanh chính là yêu cầu của bạn, đoạn 1 là có dấu kiểm và đoạn 2 là xoá dấu kiểm
 
Upvote 0
Cố định hàm today()

Các bạn viết cho mình code như sau nhé: nếu tại cột G ghi bất cứ thông tin gì thì cột H tương ứng sẽ ghi thời gian (ngày tháng + giờ) ghi dữ liệu.
Nếu dùng hàm today() bằng công thức thì sẽ được nhưng thời gian bị thay đổi liên tục. Vì vậy tôi muốn dùng code để cố định nó lại.

Thời gian trước đã có bạn viết cho mình code này rồi nhưng do máy bị virus va diễn đàn thay đổi giao diện nên giờ không thể tìm lại nữa. Các bạn viết lại giùm nhé! Thanks!
 
Upvote 0
Các bạn viết cho mình code như sau nhé: nếu tại cột G ghi bất cứ thông tin gì thì cột H tương ứng sẽ ghi thời gian (ngày tháng + giờ) ghi dữ liệu.
Nếu dùng hàm today() bằng công thức thì sẽ được nhưng thời gian bị thay đổi liên tục. Vì vậy tôi muốn dùng code để cố định nó lại.

Thời gian trước đã có bạn viết cho mình code này rồi nhưng do máy bị virus va diễn đàn thay đổi giao diện nên giờ không thể tìm lại nữa. Các bạn viết lại giùm nhé! Thanks!
Bạn cần phải nói rõ thêm vài điểm:
- Nếu có thay đổi dữ liệu tại cột G thì có cần cập nhật lại thời gian cho cột H hay không?
- Nếu xóa dữ liệu tại cột G thì có cần xóa luôn dữ liệu ở cột H không?
 
Upvote 0
Có chứ ạ, nếu thay đổi tại cột G thì sẽ cập nhật lại dữ liệu tại cột H. Còn nếu xoá dữ liệu tại cột G thì không cần phải thay đổi. Trong mọi trường hợp thì cột H vẫn có thể thay đổi bằng tay được. Cám ơn anh!
 
Upvote 0
Có chứ ạ, nếu thay đổi tại cột G thì sẽ cập nhật lại dữ liệu tại cột H. Còn nếu xoá dữ liệu tại cột G thì không cần phải thay đổi. Trong mọi trường hợp thì cột H vẫn có thể thay đổi bằng tay được. Cám ơn anh!
Thì dùng code này thử xem:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Clls As Range
  If Not Intersect([G:G], Target) Is Nothing Then
    For Each Clls In Target
      If Clls <> "" Then Clls(, 2) = Now
      Clls(, 2).NumberFormat = "dd/mm/yyyy hh:mm:ss"
    Next
  End If
End Sub
 
Upvote 0
Hình như bạn chỉ cần cập nhật 1 ô thuộc cột 'H' liền kề mà thôi?!

Các bạn viết cho mình code như sau nhé: nếu tại cột G ghi bất cứ thông tin gì thì cột H tương ứng sẽ ghi thời gian (ngày tháng + giờ) ghi dữ liệu.
Nếu dùng hàm today() bằng công thức thì sẽ được nhưng thời gian bị thay đổi liên tục. Vì vậy tôi muốn dùng code để cố định nó lại.

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Columns("G:G")) Is Nothing Then
   If Target.Count = 1 And Target.Value <> "" Then
      Target.Offset(, 1).Value = CStr(Format(Date, "MM/dd/yyyy hh"))
 End If:      End If
End Sub
 
Upvote 0
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Columns("G:G")) Is Nothing Then
   If Target.Count = 1 And Target.Value <> "" Then
      Target.Offset(, 1).Value = CStr(Format(Date, "MM/dd/yyyy hh"))
 End If:      End If
End Sub
Code này không được đâu sư phụ ơi ---> Vì còn trường hợp người ta copy từ nơi khác paste vào cột G, hoặc kéo fill trên cột G thì sao?
Túm lại, em nghĩ phải vòng lập For mới xong!
 
Upvote 0
Anh Ndu sửa lại giúp em với. Khi em xoá đi hoặc thêm vào một dòng thì bị báo lỗi. Nếu thêm một dòng thì không ảnh hưởng gì nhiều nhưng nếu xoá đi một dòng thì toàn bộ dữ liệu của dòng phía trên bị thay đổi hết.
 
Upvote 0
Anh Ndu sửa lại giúp em với. Khi em xoá đi hoặc thêm vào một dòng thì bị báo lỗi. Nếu thêm một dòng thì không ảnh hưởng gì nhiều nhưng nếu xoá đi một dòng thì toàn bộ dữ liệu của dòng phía trên bị thay đổi hết.
Bạn thêm On Error GoTo Thoat ở đâu code thử xem!
Tức là vầy:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Clls As Range
  On Error GoTo Thoat
  If Not Intersect([G:G], Target) Is Nothing Then
    For Each Clls In Target
      If Clls <> "" Then Clls(, 2) = Now
      Clls(, 2).NumberFormat = "dd/mm/yyyy hh:mm:ss"
    Next
  End If
Thoat:
End Sub
Gặp lổi sẽ thoát ngay, không làm gì cả! Đúng chứ?
 
Upvote 0
Không phải vậy đâu ah. Anh làm thế nào để khi insert hoặc delete một hoặc nhiều dòng sẽ như lúc bình thường khi chưa có code này. Thanks!

Em da thu code moi cua anh, no khong bao loi nua. Khi them dong thi ok nhung neu trong nhieu dong lien tiep ma xoa di mot so dong se bi loi (toan bo cac cot phia sau cot H cua dong vua xoa se xuat hien ngay gio).
 
Lần chỉnh sửa cuối:
Upvote 0
Mình tham gia thêm Code của Ndu có 2 điểm:
1/ Nên dùng lệnh Find "*" hiệu quả và tốc độ cao hơn.
2/Nó Reset lại toàn bộ thời gian cột H chứ không phải ở dòng tương ứng. Nhập từng ô thì đơn giản nhưng Paste hay Fill thì thật khó. Phải tìm ra các ô thay đổi để thay đổi giờ tương ứng
 
Upvote 0
Không phải vậy đâu ah. Anh làm thế nào để khi insert hoặc delete một hoặc nhiều dòng sẽ như lúc bình thường khi chưa có code này. Thanks!

Em da thu code moi cua anh, no khong bao loi nua. Khi them dong thi ok nhung neu trong nhieu dong lien tiep ma xoa di mot so dong se bi loi (toan bo cac cot phia sau cot H cua dong vua xoa se xuat hien ngay gio).
Đúng là sự cố này rắc rối thật... cũng may còn có INTERSECT
Ẹc... Ẹc...
Thử code này xem:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Clls As Range
  On Error GoTo Thoat
  If Not Intersect([G:G], Target) Is Nothing Then
    For Each Clls In Target
      If Clls <> "" Then
        With Intersect(Clls, [G:G]).Offset(, 1)
          .Value = Now
          .NumberFormat = "dd/mm/yyyy hh:mm:ss"
        End With
      End If
    Next
  End If
Thoat:
End Sub
 

File đính kèm

Upvote 0
Em có file dữ liệu có 2 cột A, B chiều dài dữ liệu chứa trong 2 cột đó thì đa phần là 12 nhưng cũng có vài ô có chiều dài khác 12. Vậy em muốn delete hoặc xoá những ô có chiều dài không phải 12 thì mình dùng code như thế nào em nghĩ mình nên dùng vòng lặp mà không biết dùng như thế nào mong Anh Chị trên diễn đàn giúp đỡ. Thanks
 
Upvote 0
Em có file dữ liệu có 2 cột A, B chiều dài dữ liệu chứa trong 2 cột đó thì đa phần là 12 nhưng cũng có vài ô có chiều dài khác 12. Vậy em muốn delete hoặc xoá những ô có chiều dài không phải 12 thì mình dùng code như thế nào em nghĩ mình nên dùng vòng lặp mà không biết dùng như thế nào mong Anh Chị trên diễn đàn giúp đỡ. Thanks

Dùng hàm tự tạo này

Mã:
Function XoaCell(Rng As Range)
    Dim Cll As Range
    For Each Cll In Rng.Cells
        If Len(Cll) <> 12 Then Cll.ClearContents
    Next
End Function
 
Upvote 0
Dùng hàm tự tạo này

Mã:
Function XoaCell(Rng As Range)
    Dim Cll As Range
    For Each Cll In Rng.Cells
        If Len(Cll) <> 12 Then Cll.ClearContents
    Next
End Function
Ngộ nha! UDF mà cũng làm được công việc "dọn rác" sao ta?
Bạn làm vào file rồi đưa lên đây xem thử ---> Vụ này tôi chưa thấy bao giờ!
Chứ tôi thì dùng cách nông dân hơn:
- Tạo 1 cột phụ với hàm LEN
- AutoFilter cột phụ này theo điều kiện gì đó
- Xóa dòng không cần thiết
Thế thôi!
 
Upvote 0
Ngộ nha! UDF mà cũng làm được công việc "dọn rác" sao ta?
Bạn làm vào file rồi đưa lên đây xem thử ---> Vụ này tôi chưa thấy bao giờ!
Chứ tôi thì dùng cách nông dân hơn:
- Tạo 1 cột phụ với hàm LEN
- AutoFilter cột phụ này theo điều kiện gì đó
- Xóa dòng không cần thiết
Thế thôi!
To Anh Ndu
Nếu mình dùng macro được không anh, mình chỉ delete dữ liệu trong những ô của 2 cột A, B thôi (giống như mình chọn những ô có dữ liệu chiều dài khác 12 nhấn
chuột phải chọn delete > shift cell up vầy đó) còn dữ liệu ở mấy cột khác có nếu có chiều dài khác 12 thì giữ nguyên không được delete. Em dùng record macro mà làm không được
To Bạn Minh Nguyệt Cảm ơn bạn quan tâm nhưng đoạn code bạn mình sử dụng không được
 
Lần chỉnh sửa cuối:
Upvote 0
To Anh Ndu
Nếu mình dùng macro được không anh, mình chỉ delete dữ liệu trong những ô của 2 cột A, B thôi (giống như mình chọn những ô có dữ liệu chiều dài khác 12 nhấn
chuột phải chọn delete > shift cell up vầy đó) còn dữ liệu ở mấy cột khác có nếu có chiều dài khác 12 thì giữ nguyên không được delete. Em dùng record macro mà làm không được
To Bạn Minh Nguyệt Cảm ơn bạn quan tâm nhưng đoạn code bạn mình sử dụng không được

Bạn chép đạn code trên vào một modul. Bạn muốn xoá dữ liệu ở Sheet1 thì làm một commandbutton có tên là Xoa(cho đơn giản) trên Sheet1 rồi ghi sự kiện click của nó như sau
Mã:
Private Sub Xoa_Click()
     Call XoaCell(Range("A1:B20")
End Sub
UDF này chỉ xoá nội dung trong ô mà không delete ô. Bạn muốn delete ô theo kiểu shift ceel up thi thay câu Cll.ClearContents bằng Cll.Delete Shift:=xlUp
Ngộ nha! UDF mà cũng làm được công việc "dọn rác" sao ta?
Bạn làm vào file rồi đưa lên đây xem thử ---> Vụ này tôi chưa thấy bao giờ!
Chứ tôi thì dùng cách nông dân hơn:
- Tạo 1 cột phụ với hàm LEN
- AutoFilter cột phụ này theo điều kiện gì đó
- Xóa dòng không cần thiết
Thế thôi!
Cái hàm này giống như cách của thầy vậy đó. Thầy xem thử nha
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn chép đạn code trên vào một modul. Bạn muốn xoá dữ liệu ở Sheet1 thì làm một commandbutton có tên là Xoa(cho đơn giản) trên Sheet1 rồi ghi sự kiện click của nó như sau
Mã:
Private Sub Xoa_Click()
     Call XoaCell(Range("A1:B20")
End Sub
Cái hàm này giống như cách của thầy vậy đó
Vậy không ăn thua đâu (bạn thử sẽ biết liền)
Có chăng thì phải vầy:
PHP:
Sub XoaCell()
  Dim Cll As Range, TempRng As Range
  For Each Cll In Range("A1:A20")
    If Len(Cll) <> 12 Then
      If TempRng Is Nothing Then
        Set TempRng = Cll
      Else
        Set TempRng = Union(TempRng, Cll)
      End If
    End If
  Next
  TempRng.Delete
End Sub
Thay TempRng.Delete thành TempRng.EntireRow.Delete nếu muốn xóa nguyên dòng
 
Upvote 0
Mọi người cho minh xin đoạn code bẻ khoá unprotection sheet đi ah
 
Upvote 0
Mọi người cho minh xin đoạn code bẻ khoá unprotection sheet đi ah
Bạn dùng các này nhé. Mình chép trên diễn đàn ko biêt của ai nữa lâu quá rồi
[FONT=&quot]Các bạn có thể phá pass của 1 Sheet bị Protect với đoạn code sau :
[/FONT]
[FONT=&quot]
Sub PasswordBreaker()

Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126

ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then

ActiveWorkbook.Sheets(1).Select
Range(“a1”).FormulaR1C1 = Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next

End Sub



Cách sử dụng : Các bạn chọn Sheet bị Protect , bấm phải chuột, chọn View Code, hoặc bấm phím tắt Alt + F11
Paste đoạn code trên vào và RUn. Chờ khoảng 1-2 phút là xong. Pass đã bị phá bạn có thể nhập liệu bình thường[/FONT]
 
Upvote 0
Bạn dùng các này nhé. Mình chép trên diễn đàn ko biêt của ai nữa lâu quá rồi
[FONT=&quot]Cách sử dụng : Các bạn chọn Sheet bị Protect , bấm phải chuột, chọn View Code, hoặc bấm phím tắt Alt + F11[/FONT]
[FONT=&quot] Paste đoạn code trên vào và Run. Chờ khoảng 1-2 phút là xong. Pass đã bị phá bạn có thể nhập liệu bình thường[/FONT]
Giả sử người ta protect luôn VBA thì bạn Paste code vào đâu?
Đố biết! Ẹc... Ẹc...
 
Lần chỉnh sửa cuối:
Upvote 0
Giả sử người ta protect luôn VBA thì bạn Paste code vào đâu?
Đố biết! Ẹc... Ẹc...
Hì hì, mấy cái vụ VBA Em chẳng biết tí tẹo nào. Anh có thể nói rõ hơn được ko (cho VD cụ thể ấy để Em còn học hỏi)?. Không biết có phải paste vào module ko?
 
Upvote 0
Hì hì, mấy cái vụ VBA Em chẳng biết tí tẹo nào. Anh có thể nói rõ hơn được ko (cho VD cụ thể ấy để Em còn học hỏi)?. Không biết có phải paste vào module ko?
Tức là thế này:
- Bạn có 1 file bị protect sheet và đang có ý định bẻ khóa
- Bạn "hăm hở" copy đoạn code trên, định dán vào module để chạy ---> Và đường nhiên bạn sẽ làm như sau:
a) Bấm Alt + F11
b) Vào menu Insert, chọn Module
c) Dán code đã copy vào Module vừa chèn
d) Bấm F5 và.. ngồi chờ
Đúng chứ?
Thế nhưng không may cho bạn là đôi khi bạn gặp phải 1 file mà họ protect luôn VBA, đồng nghĩa là bạn không thể chèn module hay chỉnh sửa bất cứ thứ gì... Vậy thì chổ đâu cho bạn dán code?
Gặp trường hợp này, tôi thường dùng cách đi vòng:
- Mở 1 Workbook mới
lưu ý: Workbook mới khác với 1 file Excel mới nha ---> Tức bấm nút bấm nút New hoặc tổ hợp phím Ctrl + N hoặc vào menu File, chọn New
(Mở 1 file Excel mới có nghĩa là khởi động Excel từ Start menu)
- Chèn Module, dán code đã copy vào
- Chuyển sang Workbook mà ta cần bẻ khóa, bấm Alt + F8, chọn tên macro (của file mới) rồi bấm Run
Nói tóm lại:
- Có thể đặt code ở 1 Workbook khác rồi đứng từ Workbook này, gọi macro ở Workbook kia
 
Upvote 0
EM có đoạn code như sau:
Mã:
Function mangtangdan(mangbandau() As Double) As Double()
    Dim lb As Long
    Dim ub As Long
    lb = LBound(mangbandau)
    ub = UBound(mangbandau)
    Dim mangtamthoi() As Double
    mangtamthoi = mangbandau
    Dim tg As Double: Dim i As Long: Dim j As Long
    For i = lb To ub - 1
        For j = i + 1 To ub
            If mangtamthoi(i) > mangtamthoi(j) Then
                tg = mangtamthoi(i)
                mangtamthoi(i) = mangtamthoi(j)
                mangtamthoi(j) = tg
            End If
        Next
    Next
        mangtangdan = mangtamthoi
    Erase mangtamthoi
   
End Function
Cho em hỏi: trong đoạn code trên biến tg tại sao lại có thể bằng mảng mangtamthoi(i) được
giải thích giúp em đoạn :
Mã:
             [B]tg = mangtamthoi(i)
                mangtamthoi(i) = mangtamthoi(j)
                mangtamthoi(j) = tg[/B]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
EM có đoạn code như sau:
Function mangtangdan(mangbandau() As Double) As Double()
Dim lb As Long
Dim ub As Long
lb = LBound(mangbandau)
ub = UBound(mangbandau)
Dim mangtamthoi() As Double
mangtamthoi = mangbandau
Dim tg As Double: Dim i As Long: Dim j As Long
For i = lb To ub - 1
For j = i + 1 To ub
If mangtamthoi(i) > mangtamthoi(j) Then
tg = mangtamthoi(i)
mangtamthoi(i) = mangtamthoi(j)
mangtamthoi(j) = tg
End If
Next
Next
mangtangdan = mangtamthoi
Erase mangtamthoi

End Function
Cho em hỏi: trong đoạn code trên biến tg tại sao lại có thể bằng mảng mangtamthoi(i) được
giải thích giúp em đoạn :
tg = mangtamthoi(i)
mangtamthoi(i) = mangtamthoi(j)
mangtamthoi(j) = tg
Đây là thuật toán về SORT TĂNG DẦN
Có thể giải thích ngắn gọn thế này:
- Duyệt từ đầu đến cuối mảng
- Nếu 2 em nằm cạnh nhau mà em bên trái lớn hơn em bên phải thì đổi chổ chúng cho nhau
- Để đổi chổ, ta phải qua công đoạn phụ:
a) Đặt 1 biến tạm = giá trị em bên trái
B) Đặt em bên trái = giá trị em bên phải
c) Đặt em bên phải = giá trị của biến tạm​
-----------------------------------------------
Thuật toán là thế, còn cách thể hiện của mổi người có khác nhau nhưng đều tuân theo quy luật này
 
Upvote 0
Cho em hỏi trong đoạn mã trên Tg là biến tại sao lại có thể = mangtamthoi(i) được.
Theo em hiểu là:
tg là phần tử
mangtamthoi(i) là tập hợp nên không thể bằng nhau được.
 
Upvote 0
Dim mangtamthoi() As Double
For i = lb To ub - 1
mangtamthoi() là 1 mảng gồm nhiều phần tử, số phần tử là ub - 1 phần tử. Ký hiệu mangtamthoi(i) là phần tử thứ i. Vậy tg có thể so sánh với mangtamthoi(i) vì cùng loại.
 
Upvote 0
Anh chị nào giúp em đoạn code này với chưa học tới nhưng em đang cần mà không hiểu ý nghĩa của nó:
Mã:
Private Sub cmdUpdate_Click()
Dim c As Range
With Sheet1.Range("a2:a" & Sheet1.[a56536].End(xlUp).Row)
    Set c = .Find(MANV, LookIn:=xlValues, LookAt:=xlPart)
    If Not c Is Nothing Then
        c.Offset(0, 0) = MANV.Text
        c.Offset(0, 1) = HOTEN.Text
        c.Offset(0, 2) = NGAYSINH.Text
        c.Offset(0, 3) = CMND.Text
        c.Offset(0, 4) = DCTT.Text
        
    End If
End With
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Anh chị nào giúp em đoạn code này với chưa học tới nhưng em đang cần mà không hiểu ý nghĩa của nó:
Private Sub cmdUpdate_Click()
Dim c As Range
With Sheet1.Range("a2:a" & Sheet1.[a56536].End(xlUp).Row)
Set c = .Find(MANV, LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
c.Offset(0, 0) = MANV.Text
c.Offset(0, 1) = HOTEN.Text
c.Offset(0, 2) = NGAYSINH.Text
c.Offset(0, 3) = CMND.Text
c.Offset(0, 4) = DCTT.Text

End If
End With
End Sub
Cái này gần giống như ta bấm Ctrl + F để tìm vậy! Nếu tìm thấy có thì điền giá trị gì đó vào các cell bên phải (giá trị dùng để điền được lấy từ MANV, HOTEN...)
Thế thôi
 
Upvote 0
Anh có thể cho em xin công thức của hàm FIND và giải thích hộ em phần With Sheet1.Range("a2:a" & Sheet1.[a56536].End(xlUp).Row) được không.
Phần đó em chưa học tới.
 
Lần chỉnh sửa cuối:
Upvote 0
Anh có thể cho em xin công thức của hàm FIND và giải thích hộ em phần With Sheet1.Range("a2:a" & Sheet1.[a56536].End(xlUp).Row) được không.
Phần đó em chưa học tới.

(1) FIND() ở đó không fải là 1 hàm, nó là 1 fương thức; Bạn xem thêm tại chổ ni: http://www.giaiphapexcel.com/forum/showthread.php?15116-Tổng-hợp-về-phương-thức-tìm-kiếm-FIND-(-Find-Method)

(2) Để hiểu dòng lệnh nào đó tôi thường đọc từ fải qua trái

Ví dụ để hiểu Sheet1.Range("a2:a" & Sheet1.[a56536].End(xlUp).Row)

Tôi đọc đoạn màu xanh trước; nó là: Chọn ô [A65536] của trang tính tên là Sheet1 & bấm mũi tên lên đến dòng có dữ liệu cuối cùng của cột [A]
Sau đó đọc tiếp fần còn lại Trang tính sheet1, vùng từ A2 cho đến dòng cuối có chứa dữ liệu của nó;

Nếu có ai đó chân f ương hơn, họ sẽ viết thành vài dòng lệnh như sau
PHP:
 Dim eRw As Long
 eRw = Sheet1.[a56536].End(xlUp).Row
 With Sheet1.Range("a2:a" & eRw)
     . . . . 
 End With

Thì cũng rứa mà thôi!
 
Upvote 0
Vì mình không biết về VB, mình muốn nhờ các cao thủ gỡ rối một đoạn mã sau:
Mã:
Public Sub in_bg()
Dim tu, den As Integer
                    'Xac dinh so in
    tu = Sheet1.Cells(2, 12)
    den = Sheet1.Cells(3, 12)
                    'Xoa trang in
Sheet5.Range("A:AQ").Clear
Application.ScreenUpdating = False
                    'Tao trang in
Ak = 1
For i = tu To den
Sheet1.Cells(1, 14) = i
Sheet4.Rows("1:23").Copy
Sheet5.Cells(Ak, 1).PasteSpecial Paste:=xlPasteValues
Sheet5.Cells(Ak, 1).PasteSpecial Paste:=xlPasteFormats
Ak = Ak + 24
Next
Application.ScreenUpdating = True
Sheet5.Activate
Application.CutCopyMode = False
            'Tuyf banj chon cachs xem
'Sheet5.PrintPreview
Sheet5.Range("I1").Select
End Sub
Mình muốn khi mình Paste sang 2 sheet khác, có kèm thêm điều kiện ô AG22 >3
Rất mong được sự giúp đỡ của các cao thủ!
Xin cảm ơn!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
giúp tôi viết đoạn code : tôi đã tạo một form, giờ muốn nhập dữ liệu vào forms đó và muốn nó tự động lưu vào bảng tính excel . vậy đoạn code đó như thế nào và giải thich giúp tôi
 
Upvote 0
Mình học chiêu thứ 30 của ptm0412 về Sort tự động
Mã:
[COLOR=Navy][COLOR=#000000][COLOR=#0000bb]Sub SortByX[/COLOR][COLOR=#007700]( ) 
[/COLOR][COLOR=#0000bb]Dim i [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Long 
[/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000bb]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Columns[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Count To 1 Step [/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000bb]1 
Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Sort Key1[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000bb]Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]2[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000bb]_ 
Order1[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000bb]xlAscending[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]Header[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000bb]xlGuess[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]Orientation[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000bb]xlTopToBottom 
Next i 
End Sub  [/COLOR][/COLOR][/COLOR]
Bây giờ trong bảng tính của mình có thêm 1 vùng cũng muốn sort tự động như trên, nhưng mình muốn cả 2 vùng đó đều được sort cùng lúc, các bạn giúp mình với nhé
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Mình học chiêu thứ 30 của ptm0412 về Sort tự động

Sub SortByX( )
Dim i As Long
For i = Selection.Columns.Count To 1 Step -1
Selection
.Sort Key1:=Selection.Cells(2, i), _
Order1
:=xlAscending, Header:=xlGuess, Orientation:=xlTopToBottom
Next i
End Sub


Bây giờ trong bảng tính của mình có thêm 1 vùng cũng muốn sort tự động như trên, nhưng mình muốn cả 2 vùng đó đều được sort cùng lúc, các bạn giúp mình với nhé
Vậy thì viết thành 2 code
PHP:
Sub SortVung1()
....
End Sub
PHP:
Sub SortVung2()
....
End Sub
Rồi viết 1 đoạn code nữa để chạy 1 lần 2 đoạn code trên
PHP:
Sub Main()
  SortVung1
  SortVung2
End Sub
Với 2 đoạn code SortVung1SortVung2, bạn phải thay Selection bằng 1 Range cụ thể nào đó
 
Upvote 0
Mình đã làm theo hướng dẫn của bạn ndu.
Chọn 1 vùng để nhập code 1
Chọn 1 vùng khác để nhập code 2

Đã viết đọan code để chạy cùng lúc, trước khi chạy code này thì phải chọn vùng của code 1, vậy bạn chỉ tiếp cho mình: "chọn 1 trong 2 vùng bất kỳ cũng có thể chạy cùng lúc
 
Upvote 0
Em có đoạn mã này nhờ mọi người giải đáp hộ em:
PHP:
Sub su_dung_usedrange()
Dim range As range
Dim str As String
For Each range In ActiveSheet.UsedRange
    If range.Value < 0 Then
    str = str & range.Address & ","
    
    End If
Next
If str <> "" Then
  str = Left(str, Len(str) - 1)
  ActiveSheet.range(str).Select
End If

End Sub
Mong mọi người có thể giải thích cho em đoạn If str <> "" Then
Nhân tiện chỉ dùm em cách chèn tab code trong bài viết.Cái này em thấy mọi người làm nhiều nhưng chưa biết cách.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
1. Giải thích If str <> "" Then
Phần trên là đi tìm trong các cells của vùng dữ liệu, nếu cell nào có giá trị âm thì ghi địa chỉ cell đó lại vào biến str, cách nhau bởi dấu phẩy. Nếu không có ô nào có giá trị âm, nghĩa là không ghi kí rì vào str, thì str trống trơn.

2. Tạo tag code:
- Cách 1: thêm [/php] vào cuối code,
PHP:
[/B] vào đầu code
- Cách 2: Thêm [B][/code][/B] vào cuối code, [B][code][/B] vào đầu code

Ghi chú: tôi nói cuối trước đầu sau, vì nếu nói đầu trước cuối sau thì bản thân câu viết của tôi bị biến thành code mất tiêu.
 
Upvote 0
Em chỉ muốn hỏi câu điều kiện If str<>"" nghĩa là gì. Theo như anh giải thích thì em hiểu câu đó có nghĩa là nếu str không rỗng
Đúng không ạ.
 
Upvote 0
giải thích giúp mình đoạn code này với

Ý nghĩa của đoạn code này là gì vậy các bạn


If Not Intersect(Target, Range("B2:E5")) Is Nothing Then
 
Upvote 0
Intersect = "giao"
Interset( Target, Range("B2:E5")) = Phần giao của Target và vùng B2:E5
Interset( Target, Range("B2:E5")) Is Nothing = Phần giao của Target và vùng B2:E5 hông có = 2 vùng hông giao nhau
Not = phủ định
Not Interset( Target, Range("B2:E5")) Is Nothing = Có giao nhau
 
Upvote 0
Ý nghĩa của đoạn code này là gì vậy các bạn

If Not Intersect(Target, Range("B2:E5")) Is Nothing Then

Bạn đã được trả lời về fần giao; Nhưng mình lại khuyên bạn ngâm cứu thêm fần "Hội" ("Union")

Cả "Giao" & "Hội" đều có trên diễn đàn hay trong chữ ký của mình. Rất vui lòng nếu bạn tham khảo cả hai khái niệm này 1 lúc. Đó cũng là cách học cái này để nhớ thêm cái kia vậy mà. & chúc bạn vui suốt tuần.

Thân ái.
 
Lần chỉnh sửa cuối:
Upvote 0
Chỉ những bài toán đơn giản thôi - mình mới học VBA

Chào mọi ng` mình mới học VBA , cái khó là học = tiếng nước ngoài , tài liệu ko đầy đủ lắm + thầy giáo cũng vui tính nên nói chung về căn bản mình chưa nắm đc , chỉ học vẹt , làm đc mấy bài mẫu có sẵn thôi . Mình sắp thi rồi mong mọi ng` giúp đỡ mình nhé , thật lòng đấy /*+

Bài 1
Tìm giá trị c sau khi thực hiện :
a= -5
b=14
b=b+a*2
if a<b then
c=a+b
else c=b-a
end if
Cái này thực ra làm ra nháp cũng ra nhưng mình ko biết viết code trên VBA ntn để ra đc đáp án cả

Mã:
Bài 2 Tính tổng 
Tính Sum của  x^m*m^2 ( for m = 1 to 20) , kết quả tùy vào x

Đáp án như sau : 
Function mySum(x)
Dim s, m
s = 0
For m = 1 To 20
s = s + x ^ m * m ^ 2
Next m
mySum = s

End Function
Ở đây mình thắc mắc là sao s= 0

Đừng nói mình ko chịu động não nhé , căn bản còn chưa nắm đc , với lại bận học nhiều môn khác nữa :;;;:::
 
Upvote 0
Chào mọi ng` mình mới học VBA , cái khó là học = tiếng nước ngoài , tài liệu ko đầy đủ lắm + thầy giáo cũng vui tính nên nói chung về căn bản mình chưa nắm đc , chỉ học vẹt , làm đc mấy bài mẫu có sẵn thôi . Mình sắp thi rồi mong mọi ng` giúp đỡ mình nhé , thật lòng đấy /*+

Cái này thực ra làm ra nháp cũng ra nhưng mình ko biết viết code trên VBA ntn để ra đc đáp án cả
Đừng nói mình ko chịu động não nhé , căn bản còn chưa nắm đc , với lại bận học nhiều môn khác nữa :;;;:::
Câu 1 của bạn mình viết tường minh cho bạn
Sub tinh()
'Tìm giá tri. c sau khi thu+.c hie^.n :
Dim a As Double
Dim b As Double
Dim c As Double
a = -5
b = 14
b = b + a * 2
If a < b Then
c = a + b
MsgBox ("gia tri :" & c)
Else
c = b - a
MsgBox ("gia tri :" & c)
End If
End Sub
CÒn S =0 thực ra nó là lệnh khoi gán giá trị ban đầu( để lúc này m xuất phát từ 1 trở đi)
 
Lần chỉnh sửa cuối:
Upvote 0
hihi cám ơn bạn nhiều lắm
Làm lệnh Sub đơn giản thật , mình cứ loay hoay làm lệnh Function
Bạn có thể add nick ym của mình để tiện trao đổi đc ko ? của mình là : frostimpression@yahoo.com
 
Lần chỉnh sửa cuối:
Upvote 0
Hàm của câu 1 đây, xin mời:
PHP:
Option Explicit
Function TimTriC(Aa As Double, Bb As Double)
 Dim Temp As Double
 
 Temp = Bb + Aa ^ 2
 If Aa < Temp Then
   TimTriC = Aa + Temp
 Else
   TimTriC = Temp - Aa
 End If
End Function

Câu 2 như sau:
PHP:
Function TinhTong(Xx As Double)
 Dim mM As Byte
 
 For mM = 1 To 20
   TinhTong = TinhTong + Xx ^ (mM * (mM ^ 2))
 Next mM
End Function

Chú í hàm này dễ bị làm ô chứa tràn số; Ta chỉ nên thử với các số <1, như 2/3 hay 4/9
(*) Trường hợp đầu hàm trả về trị 0.70570271
(*) Trường hợp sau: 0.445966884
 
Upvote 0
CÒn S =0 thực ra nó là lệnh khoi gán giá trị ban đầu( để lúc này m xuất phát từ 1 trở đi)
s có bằng không hay không thì m cũng xuất phát từ 1 trở đi theo câu lệnh for m = 1 to 20.

s = 0 có nghĩa là gán giá trị 0 ban đầu cho s (s là tổng), để sau khi cộng thêm cái gì đó, cụ thể là cộng 20 lần, s không bị cộng dư 1 con số vớ vẩn nào đó.
Thí dụ:
1. s = 0
2. s = s + 1 (kết quả 1)
3. s = s + 1 (kết quả 2)

nếu vì lý do nào đó, ban đầu s có 1 giá trị vớ vẩn là 0.5 mà không có câu lệnh 1, kết quả sẽ là 2.5, sai!
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ các bạn giúp mình code lấy địa chỉ của Name.
Ví dụ: Tại vùng B5:H10 của Sheet1 có Name là DuLieu. Mình muốn khi chạy code, Msgbox hiện thông báo là $B$5:$H$10 thì code viết như thế nào ?. Thanks
 
Upvote 0
Cách 1: Địa chỉ của range:
Msgbox Sheet1.Range("Dulieu").Address

Cách 2: Tham chiếu của Name:
Msgbox ThisWorkbook.Names("Dulieu").RefersTo

Cách 2 sẽ cho cả tên sheet và cả dấu bằng phía trước: "=Sheet1!$B$5:$H$10"
 
Lần chỉnh sửa cuối:
Upvote 0
Mọi người giúp mình làm 2 bài này với
1)Tìm số nghiệm của ptrinh
x^2+y^2=z^2 , với x,y số nguyên dương <= 100
2)Tính:
Tích (1-0.3/(i+j))
for i =1 to 8
for j= 1 to 7
 
Upvote 0
Tạm xài 2 Sub này vậy

PHP:
Option Explicit
Sub FTDuongTron()
 Dim Xx As Byte, yY As Byte, Zz As Double, Dem As Byte
 ReDim MDL(1, 99) As Long
 Columns("A:C").ClearContents
 [A1].Value = "XX":        [B1].Value = "YY"
 [C1].Value = "ZZ"
 For Xx = 1 To 100
   For yY = 1 To 100
      Zz = Abs((Xx ^ 2 + yY ^ 2) ^ (1 / 2))
      If Int(Zz) = Zz Then
         With [A999].End(xlUp).Offset(1)
            .Value = Xx:         .Offset(, 1).Value = yY
            .Offset(, 2).Value = Zz
         End With
      End If
 Next yY, Xx
End Sub

PHP:
Sub Tich2So()
 Dim Jj As Byte, Ww As Byte
 
 Columns("E:E").ClearContents:         [E1].Value = "TiCh"
 For Jj = 1 To 8
   For Ww = 1 To 7
      With [E999].End(xlUp).Offset(1)
         .Value = 1 - 0.3 / (Jj + Ww)
      End With
 Next Ww, Jj
End Sub

Câu đầu có thể viết cho bạn 1 hàm mảng tự tạo, nếu bạn có nhu cầu tham khảo.
 
Upvote 0
giải thích giúp mình đoạn code này với

giải thích giúp mình đoạn code này với

PHP:
''.......
With Sheets("Goc")
    If Not Intersect(Target, [B2]) Is Nothing Then
        Set Rng = .Range(.[B3], .[B65500].End(xlUp))
        Set sRng = Rng.Find(what:=Target, LookIn:=xlFormulas, lookat:=xlWhole)
''..............

Nhất là cấu trúc câu lệnh Find
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
giải thích giúp mình đoạn code này với
PHP:
With Sheets("Goc")
1    If Not Intersect(Target, [B2]) Is Nothing Then
        Set Rng = .Range(.[B3], .[B65500].End(xlUp))
3      Set sRng = Rng.Find(what:=Target, LookIn:=xlFormulas, lookat:=xlWhole)
    End If
Nhất là cấu trúc câu lệnh Find

Để hiểu câu lệnh 3 bạn nên đến đây & cho bạn 1 tuần ròng đó: http://www.giaiphapexcel.com/forum/showthread.php?15116-T%E1%BB%95ng-h%E1%BB%A3p-v%E1%BB%81-ph%C6%B0%C6%A1ng-th%E1%BB%A9c-t%C3%ACm-ki%E1%BA%BFm-FIND-(-Find-Method)

Câu 1 & 2

(1) Nếu vừa làm gì đó với [B2] (của trang tính có tên "Goc") thì thực hiện các lệnh dưới cho đến khi gặp End If

(2) (Thường nên đọc như chữ Tàu: Từ fải qua trái: Đem vùng từ [B3]. . . đến ô cuối của cột này chứa dữ liệu gàn vô biến đã khai báo Rng

(3) Ô tìm thấy đem gán vô biện sRng đã khai báo

Chúc bạn nhiều may mắn!
 
Upvote 0
Để hiểu câu lệnh 3 bạn nên đến đây & cho bạn 1 tuần ròng đó: http://www.giaiphapexcel.com/forum/showthread.php?15116-T%E1%BB%95ng-h%E1%BB%A3p-v%E1%BB%81-ph%C6%B0%C6%A1ng-th%E1%BB%A9c-t%C3%ACm-ki%E1%BA%BFm-FIND-(-Find-Method)

Câu 1 & 2

(1) Nếu vừa làm gì đó với [B2] (của trang tính có tên "Goc") thì thực hiện các lệnh dưới cho đến khi gặp End If

(2) (Thường nên đọc như chữ Tàu: Từ fải qua trái: Đem vùng từ [B3]. . . đến ô cuối của cột này chứa dữ liệu gàn vô biến đã khai báo Rng

(3) Ô tìm thấy đem gán vô biện sRng đã khai báo

Chúc bạn nhiều may mắn!


Muội xin ăn theo một chút
- Intersect: tiếng anh hiểu là gặp và cắt
- Target: hiểu nôm na như này
Mặt hồ đang phẳng lặng, bạn cầm hòn đá đám cải tủm cái, chỗ mà hòn đá rơi xuống chạm mặt nước đó là target
Cũng giống trong excel
- mặt hồ chính là trang tính gồm có cột và dòng
- Điẻm chạm của hòn đá chính là cell mà ta thao tác với một vùng, cột , dữ liệu nào đó

Còn về Set rng....bạn hiểu nó giống như define name ý, nếu bạn chưa biết define name thì bạn nên tìm đọc về bài này
 
Upvote 0
Phím tắt để chạy code Sort tự động.

Để chạy code Sort tự động, việc đầu tiên là phải chọn vùng muốn sort, mình muốn có 1 phím tắt hay 1 công cụ nào đó mà nó tự chọn vùng muốn sort và chạy code đó luôn, các bạn giúp mình nhé! Cảm ơn nhiều
 
Upvote 0
Phím tắt để chạy code Sort tự động.

Để chạy code Sort tự động, việc đầu tiên là phải chọn vùng muốn sort, mình muốn có 1 phím tắt hay 1 công cụ nào đó mà nó tự chọn vùng muốn sort và chạy code đó luôn, các bạn giúp mình nhé! Cảm ơn nhiều
Bạn muốn sort kiểu gì thì cứ Record macro rồi gán phím tắt cho nó là xong thôi!
 
Upvote 0
Mình đã gán phím tắt, nhưng khi thực hiện phải chọn range trước khi bấm phím tắt, vậy có cách nào không phải chọn range mà vẫn dùng phím tắt không
Vì bạn đã chọn range trước khi record macro nên trong code sẽ có đoạn Selection. gì gì đó
Giờ làm lại:
- Bật chức năng record macro trước
- Chọn range và sort
- Tắt record macro
- Gán phím tắt cho macro
--------------------------
Giờ chỉ cần gọi phím tắt là nó sort luôn, khỏi cần chọn range trước gì cả!
 
Upvote 0
Khi biến không khai báo thì biến được hiểu là gì?

PHP:
 Dim i As Long, Temp
Các Huynh ơi, muội hỏi chút. Biến Temp như trên được hiểu là loại biến gì?

Muội cám ơn
 
Upvote 0
PHP:
 Dim i As Long, Temp
Các Huynh ơi, muội hỏi chút. Biến Temp như trên được hiểu là loại biến gì?

Muội cám ơn

Tôi thấy khai báo dạng này chứ làm gì có biến Temp?

Dim i, Temp As Integer

hoặc

Dim i As Long, Temp As Integer

Bạn cứ nhìn cũng đã thấy chưa logic rồi, làm sao mà i có thể vừa là biến này, vừa là biến khác được???
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
 Dim i As Long, Temp
Các Huynh ơi, muội hỏi chút. Biến Temp như trên được hiểu là loại biến gì?
Muội cám ơn
minhthien đã viết:
Tôi thấy khai báo dạng này chứ làm gì có biến Temp?
Có chứ sao không? Biến Temp được hiểu là loại variant

PHP:
Dim i, Temp As Integer

Khai báo như thế, i cũng là variant, Temp mới là Integer

Muốn khai báo rõ ràng từng biến thì
PHP:
Dim i As Long, Temp As Integer
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử chạy macro sau & suy ngẫm chục lần là ra liền hà.

PHP:
Option Explicit
Sub KhaiBaoBien()
 Dim jJ As Byte, Temp
 For jJ = 20 To 35
   Temp = jJ + Temp
 Next jJ
 MsgBox "2. GPE" & Temp, , "1. GPE" & Str(Temp)
 Dim Zz As Integer
 ReDim Temp(jJ)
 For Zz = jJ To 30 Step -2
   Temp(Zz) = Zz
   MsgBox Temp(Zz)
 Next Zz
End Sub
 
Upvote 0
PHP:
[PHP]Sub Tich2So()
 Dim Jj As Byte, Ww As Byte
 
 Columns("E:E").ClearContents:         [E1].Value = "TiCh"
 For Jj = 1 To 8
   For Ww = 1 To 7
      With [E999].End(xlUp).Offset(1)
         .Value = 1 - 0.3 / (Jj + Ww)
      End With
 Next Ww, Jj
End Sub

Câu đầu có thể viết cho bạn 1 hàm mảng tự tạo, nếu bạn có nhu cầu tham khảo.

Cám ơn bạn nhé
Cho mình hỏi tại sao phải Next w,j còn ngược lại thì lại bị lỗi
Mà sao của bạn cứ Jj , Ww dài ngoằng thế, sao ko viết đơn giản là j ,w ?
 
Upvote 0
Cám ơn bạn nhé
(1) Cho mình hỏi tại sao phải Next w,j còn ngược lại thì lại bị lỗi
(2) Mà sao của bạn cứ Jj , Ww dài ngoằng thế, sao ko viết đơn giản là j ,w ?

(2) Tuy dài ngoằng nhưng tận dụng được tri thức của người đời để loại trừ lỗi chính tả khi nhập các câu lệnh.
Bạn không thấy 1 chữ cái viết hoa & 1 chữ cái viết thường trong 1 tên biến của tôi hay sao?
Để lỡ tui có nhập sai chính tả thì thấy ngay nhãn tiền nhờ trong VBE có sẵn công cụ mà tôi hay gọi là công cụ kiểm lỗi chính tả đó;

Còn nữa, Nhiều lúc tôi cần đổi tên biến, chẳng hạn đổi jJ sang Ww, thì tên biến j, hay i của bạn sẽ rất dễ bị gây lỗi do những từ không đáng đổi nhưng chương trỉnh nó cũng đổi luôn đó. Đây là thói quen do tích lũy nhiều năm kinh nghiệm mà thành thôi. Bạn có chê cũng mặc!

(1) Đó là 1 cách viết khác khi lồng nhau 2 vòng lặp;
Dĩ nhiên vòng lặp trong fải kết thúc trước vòng ngoài; Nếu ngược lại VBE sẽ bắt dò bạn liền!
 
Upvote 0
info_48.png

Các Anh, Chị cho Tôi hỏi!
Sao khi bấm Alt+F11 vào cửa sổ VB và dùng công cụ Object Browser tìm đến lệnh max chẳng hạn, sau đó Tôi Bấm vào Help để xem cấu trúc của hàm max trong VBA như thế nào thì hiện lên bảng sau:
This program cannot display the webpage

Most likely causes:


  • You are not connected to the Internet.
  • The website is encountering problems.
  • There might be a typing error in the address.
What you can try:

bullet.png
Check your Internet connection. Try visiting another website to make sure you are connected.


bullet.png
Retype the address.


bullet.png
Go back to the previous page.


More information
Tương tự cho những hàm khác. Mong Anh, Chị hướng dẫn giúp cách khắc phục hoặc chỉ giúp trang nào có hướng dẫn những hàm trong VBA?
Cảm ơn nhiều!
 
Upvote 0
Hàm Max là hàm của Excel, không phải hàm của VBA nên không có help VBA cho nó.
Hàm của VBA thí dụ như Instr, IIf, ... sẽ có help.

Instr returns a Variant (Long) specifying the position of the first occurrence of one string within another.
Syntax:
InStr([start, ]string1, string2[, compare])

IIf always evaluates both truepart and falsepart, even though it returns only one of them. Because of this, you should watch for undesirable side effects. For example, if evaluating falsepart results in a division by zero error, an error occurs even if expr is True.
 
Upvote 0
info_48.png

Các Anh, Chị cho Tôi hỏi!
Sao khi bấm Alt+F11 vào cửa sổ VB và dùng công cụ Object Browser tìm đến lệnh max chẳng hạn, sau đó Tôi Bấm vào Help để xem cấu trúc của hàm max trong VBA như thế nào thì hiện lên bảng sau:

Tương tự cho những hàm khác. Mong Anh, Chị hướng dẫn giúp cách khắc phục hoặc chỉ giúp trang nào có hướng dẫn những hàm trong VBA?
Cảm ơn nhiều!
Mình cũng mới tập tễnh như bạn thôi, mình xin góp một cách mình hay làm dù nó hơi "xí củn":
Trong module bạn cứ tạo đại một sub gì đó, bạn gõ đại i=VBA. sau khi bạn "chấm" có cửa sổ mở ra, muốn biết hàm match hay max có không bạn "quánh" chữ M trên bàn phím, nó nhảy tới chỗ các loại M, nếu không có Match hoặc Max thì ...không có "tụi nó" trong VBA, muốn sử dụng thì Application.WorksheetFunction......
Cách này hơi "tèo" nhưng đối với mình thì ok
Mong các cao thủ VBA chỉ thêm về vấn đề này
Thân
 
Upvote 0
Cũng dùng Object Browser thôi, nhưng ngó kỹ 1 chút:
Thí dụ gõ Max và tìm kiếm, sẽ thấy 1 đống max hiện ra. Cái Max nào là hàm của Excel thì Class của nó là WorksheetFunction. Property Max của control thì class của nó là ControlFormat, ...

Rồi dòm thêm ở dưới sẽ thấy cú pháp của hàm (như khung xanh trong hình).

VBABrowser.jpg
 
Upvote 0
Mình cũng mới tập tễnh như bạn thôi, mình xin góp một cách mình hay làm dù nó hơi "xí củn":
Trong module bạn cứ tạo đại một sub gì đó, bạn gõ đại i=VBA. sau khi bạn "chấm" có cửa sổ mở ra, muốn biết hàm match hay max có không bạn "quánh" chữ M trên bàn phím, nó nhảy tới chỗ các loại M, nếu không có Match hoặc Max thì ...không có "tụi nó" trong VBA, muốn sử dụng thì Application.WorksheetFunction......
Cách này hơi "tèo" nhưng đối với mình thì ok
Mong các cao thủ VBA chỉ thêm về vấn đề này
Thân
Tôi cũng chỉ biết có vầy:
1. VBA.
2. Gõ as và dấu cách
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi về đoạn code sau:
PHP:
Sub xoadongtrong1sheet()
Dim a, b, c, d, e As Integer
'Tim hang dau tien co du lieu
a = ActiveSheet.UsedRange.Row
Debug.Print " gia tri cua a :"; a
'tim hang cuoi cung co du lieu
b = ActiveSheet.UsedRange.Rows.Count
Debug.Print " gia tri cua b :" & b
'tim so cot co du lieu
c = ActiveSheet.UsedRange.Columns.Count
Debug.Print " gia tri cua c :" & c
'so hang co chua du lieu
d = a - 1 + b
Application.ScreenUpdating = False
For e = d To 1 Step -1
    If Application.CountA(Rows(e)) = 0 Then Rows(e).Delete
    Debug.Print e
Next e
Debug.Print e
Application.ScreenUpdating = True
End Sub
</b>Đoạn code trên hoạt động bình thường.Tất cả các dòng trống trong 1 sheet đều được xoá hết. Nhưng khi em sửa lại đoạn vòng lặp lại như bên dưới thì nó không xoá hết các dòng trống trong 1 lần chạy mà phải chạy nhiều lần . Mong các anh chị giúp đỡ.
PHP:
Sub xoadongtrong1sheet()
Dim a, b, c, d, e As Integer
'Tim hang dau tien co du lieu
a = ActiveSheet.UsedRange.Row
Debug.Print " gia tri cua a :"; a
'tim hang cuoi cung co du lieu
b = ActiveSheet.UsedRange.Rows.Count
Debug.Print " gia tri cua b :" & b
'tim so cot co du lieu
c = ActiveSheet.UsedRange.Columns.Count
Debug.Print " gia tri cua c :" & c
'so hang co chua du lieu
d = a - 1 + b
Application.ScreenUpdating = False
For e = 1 To d Step 1
    If Application.CountA(Rows(e)) = 0 Then Rows(e).Delete
    Debug.Print e
Next e
Debug.Print e
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Dim Dic As New Dictionary khác gì với Dim Dic as Dictionary

Các huynh cho muội hỏi
PHP:
Dim Dic As New Dictionary khác gì với Dim Dic as Dictionary

Có gì khác nhau?
 
Upvote 0
Các huynh cho muội hỏi
PHP:
Dim Dic As New Dictionary khác gì với Dim Dic as Dictionary
Có gì khác nhau?
Nhờ bác Bill nói hộ cho chắc ăn!
Hãy đọc đoạn có liên quan đến vụ.. NEW này:

Declaring Variables@import url(office.css);
Declaring an Object Variable for Automation

When you use one application to control another application's objects, you should set a reference to the other application's type library. Once you set a reference, you can declare object variables according to their most specific type. For example, if you are in Microsoft Word when you set a reference to the Microsoft Excel type library, you can declare a variable of type Worksheet from within Microsoft Word to represent a Microsoft Excel Worksheet object.
If you are using another application to control Microsoft Access objects, in most cases, you can declare object variables according to their most specific type. You can also use the New keyword to create a new instance of an object automatically. However, you may have to indicate that it is a Microsoft Access object. For example, when you declare an object variable to represent a Microsoft Access form from within Microsoft Visual Basic, you must distinguish the Microsoft Access Form object from a Visual Basic Form object. Include the name of the type library in the variable declaration, as in the following example:
Dim frmOrders As New Access.Form
Some applications don't recognize individual Microsoft Access object types. Even if you set a reference to the Microsoft Access type library from these applications, you must declare all Microsoft Access object variables as type Object. Nor can you use the New keyword to create a new instance of the object. The following example shows how to declare a variable to represent an instance of the Microsoft Access Application object from an application that doesn't recognize Microsoft Access object types. The application then creates an instance of the Application object.
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application") To determine which syntax an application supports, see the application's documentation.
 
Upvote 0
Mọi ng` làm nốt hộ mình 2 bài này với nhé
1) Cho dãy: Ai=cos(2*i)*100 , với i=1,2,...100
Tìm hiệu của số dương min và số âm max
2)Tìm min của n sao cho:
1+1/căn 2 + 1/căn 3 +1/căn n >108
Hic mình ngu quá ko có mẫu là chịu chết chả biết làm thế nào cả
Ai có tài liệu cơ bản ko gửi cho mình đọc với , tiếng việt hay tiếng anh cũng đc
 
Upvote 0
Các bạn xem giúp file này: ở vòng lặp thứ nhất thì kết quả đúng nhưng sang vòng lặp tiếp theo thì kết quả sai tóe loe (sai có tính quy luật). Vậy code này sai ở đâu ? Nhờ các bạn sửa giúp. Thanks !
Trong file đính kèm các ô sai được đánh dấu màu đỏ
 

File đính kèm

Upvote 0
Trong file đính kèm các ô sai được đánh dấu màu đỏ

Hay là tại máy của mình, nhưng mình không thấy vùng nào được tô đỏ cả.

Tựu chung, bạn muốn macro làm gì vậy? Có nghĩa là mô tả yêu cầu của bạn giúp nha.
Xin cảm ơn trước.
 
Upvote 0
Hay là tại máy của mình, nhưng mình không thấy vùng nào được tô đỏ cả.

Tựu chung, bạn muốn macro làm gì vậy? Có nghĩa là mô tả yêu cầu của bạn giúp nha.
Xin cảm ơn trước.

Cảm ơn ChanhTQ@ đã quan tâm ! các ô màu đỏ nằm ở bên sheets(“Trinh”) ví dụ W26, AA26…(mình dow về vẫn thấy)
Việc của mình như sau:
Tại Sheet TongHop (nguồn) dữ liệu của từng người nằm ở các cột và mỗi cột có ký hiệu ở dòng trên cùng. Do cột dữ liệu của từng người khác nhau nên mình muốn dựa vào ký hiệu cột ở bảng nguồn để đưa về cùng một cột của bảng đích ở bên sheets(“Trinh”) giống như Hlookup theo vùng M8:BL8 – Tóm lại là sắp xếp các cột có cùng mã hiệu về cùng một cột

Trong ví dụ:
Tại vòng lặp cho mảng 1, cột RSX (ô N12:N23) của nguồn được chuyển đến cột RSX (ô W12:W23) của đích theo mã tại ô W8 –> đúng….
Tại vòng lặp cho mảng 2, cột LUC (ô N26:N29) của nguồn được chuyển đến cột LUC (ô M26:M29) của đích theo mã tại ô M8 –> đúng. Nhưng đồng thời nó lại xuất hiện tại cột RSX (ô W26:W29) –> sai. Mình muốn nó không xuất hiện tại cột này và cột này phải trống vì mảng 2 không có cột RSX.
nói thêm: giá trị di chuyển nằm trong biến tmp1, mình đã viết tmp1=Nothing nhưng không được.
Nhờ các bạn xem giúp. Thanks !
 
Lần chỉnh sửa cuối:
Upvote 0
lâu rồi mình có đọc trên GPE có bài đăng : đoạn code phá " pass protections sheet" ,, bạn nào nhớ cho mình xin ,mình đang cần ,, cảm ơn mọi người...
 
Upvote 0
Đâu bạn dùng thử cái này xem sau http://www.giaiphapexcel.com/forum/showthread.php?15032-Code-Crack-Pass-Sheet
Mã:
[COLOR=#000000][COLOR=#0000bb][FONT=Courier New][SIZE=3]Sub PasswordBreaker[/SIZE][/FONT][/COLOR][SIZE=3][FONT=Courier New][COLOR=#007700]() 

[/COLOR][COLOR=#0000bb]Dim i [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Integer[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]j [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Integer[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]k [/COLOR][COLOR=#007700]As [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]Integer 
Dim l [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Integer[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]m [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Integer[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]n [/COLOR][COLOR=#007700]As [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]Integer 
Dim i1 [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Integer[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]i2 [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Integer[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]i3 [/COLOR][COLOR=#007700]As [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]Integer 
Dim i4 [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Integer[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]i5 [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Integer[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]i6 [/COLOR][COLOR=#007700]As [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]Integer 
On Error Resume Next 
[/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000bb]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]65 To 66[/COLOR][COLOR=#007700]: For [/COLOR][COLOR=#0000bb]j [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]65 To 66[/COLOR][COLOR=#007700]:         For [/COLOR][COLOR=#0000bb]k [/COLOR][COLOR=#007700]= [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]65 To 66 
 [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000bb]l [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]65 To 66[/COLOR][COLOR=#007700]: For [/COLOR][COLOR=#0000bb]m [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]65 To 66[/COLOR][COLOR=#007700]:        For [/COLOR][COLOR=#0000bb]i1 [/COLOR][COLOR=#007700]= [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]65 To 66 
  [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000bb]i2 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]65 To 66[/COLOR][COLOR=#007700]: For [/COLOR][COLOR=#0000bb]i3 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]65 To 66[/COLOR][COLOR=#007700]:       For [/COLOR][COLOR=#0000bb]i4 [/COLOR][COLOR=#007700]= [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]65 To 66 
   [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000bb]i5 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]65 To 66[/COLOR][COLOR=#007700]: For [/COLOR][COLOR=#0000bb]i6 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]65 To 66[/COLOR][COLOR=#007700]:       For [/COLOR][COLOR=#0000bb]n [/COLOR][COLOR=#007700]= [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]32 To 126 

     ActiveSheet[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Unprotect Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]j[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]k[/COLOR][COLOR=#007700]) & [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]_ 
         Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]l[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]m[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i1[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i2[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i3[/COLOR][COLOR=#007700]) & [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]_ 
         Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i4[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i5[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i6[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]n[/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#007700]) 
     If [/COLOR][COLOR=#0000bb]ActiveSheet[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]ProtectContents [/COLOR][COLOR=#007700]= [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]False Then 

         ActiveWorkbook[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Sheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]1[/COLOR][COLOR=#007700]).[/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]Select 
         Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]“a1”[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000bb]FormulaR1C1 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]j[/COLOR][COLOR=#007700]) & [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]_ 
              Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]k[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]l[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]m[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i1[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i2[/COLOR][COLOR=#007700]) & [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]_ 
              Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i3[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i4[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i5[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i6[/COLOR][COLOR=#007700]) & [/COLOR][COLOR=#0000bb]Chr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]n[/COLOR][/FONT][/SIZE][COLOR=#007700][FONT=Courier New][SIZE=3]) 
         Exit [/SIZE][/FONT][/COLOR][COLOR=#0000bb][FONT=Courier New][SIZE=3]Sub 
 End [/SIZE][/FONT][/COLOR][SIZE=3][FONT=Courier New][COLOR=#007700]If 
[/COLOR][COLOR=#0000bb]Next[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000bb]Next[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000bb]Next[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000bb]Next[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000bb]Next[/COLOR][COLOR=#007700]: [/COLOR][/FONT][/SIZE][SIZE=3][FONT=Courier New][COLOR=#0000bb]Next 
Next[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000bb]Next[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000bb]Next[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000bb]Next[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000bb]Next[/COLOR][COLOR=#007700]: [/COLOR][/FONT][/SIZE][COLOR=#0000bb][FONT=Courier New][SIZE=3]Next 

End Sub  [/SIZE][/FONT]
[/COLOR][/COLOR]
Bạn vào trang này để tìm hiểu thêm http://www.google.com.vn/custom?dom...rotect+sheet&sitesearch=www.giaiphapexcel.com
 
Upvote 0
Status
Không mở trả lời sau này.

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

Back
Top Bottom