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

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

ST-Lu!

Love Wingchun
Tham gia ngày
19 Tháng tám 2008
Bài viết
730
Được thích
546
Điểm
0
Nơi ở
Hải Phòng
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:

SONGBA

Thành viên mới
Tham gia ngày
24 Tháng mười 2006
Bài viết
48
Được thích
240
Điểm
690
Nhờ giải thích giùm ý nghĩa đoạn code !

range("H12:I13").Select
Selection.AutoFill Destination:=Range(Cells(12, 8), Cells(n, 9)), Type:=xlFillDefault
 

ST-Lu!

Love Wingchun
Tham gia ngày
19 Tháng tám 2008
Bài viết
730
Được thích
546
Điểm
0
Nơi ở
Hải Phòng
đoạn code trên của bác chưa đủ, vì cells(n,9) phải khai báo n là cái gì?
 

cadafi

New Style! New Life!
Thành viên BQT
Super Moderator
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,217
Được thích
11,255
Điểm
1,910
Tuổi
39
Nơi ở
HCM
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
Nếu dữ liệu của bạn < 65.000 dòng thì hai đoạn code trên là tương đương.
Khi dữ liệu >=65.000 dòng thì Khác biệt sẽ thấy rõ đấy bạn à! Bạn hãy thử với hai đoạn code sau (chép vào sheet, không chép vào module), rồi cho chạy SUB này để thấy sự khác biệt.
PHP:
Sub Test()
a = Cells(Cells.Rows.Count, 1).End(xlUp).Row
b = [A65000].End(xlUp).Row
MsgBox a
MsgBox b
End Sub
 

Po_Pikachu

Po_pikachu@ymail.com
Tham gia ngày
29 Tháng tư 2008
Bài viết
2,209
Được thích
3,560
Điểm
0
Nơi ở
#VALUE!
Bạn vào VBA nhấn Ctrl + G rồi gõ thử đoạn sau:
PHP:
?Cells.Rows.Count
Khi nhấn Enter sẽ thấy có thêm dòng bên dưới ghi là: 65536
Tức là số dòng mà bảng tính có thể ghi dữ liệu luôn.
Nhưng do ít ai dùng đến mức như vậy, nên mình sẽ chọn code sau xem vì code sau sẽ ngắn hơn 1 chút mà tính chất gần như nhau,
Thân.
 

SONGBA

Thành viên mới
Tham gia ngày
24 Tháng mười 2006
Bài viết
48
Được thích
240
Điểm
690
Xin cảm ơn ! nguyên đoạn code là như sau :

PHP:
Private Sub CommandButton1_Click()
    Sheets("Solieu").Range("A4:F10000").Copy
    Range("A12").Select
    Selection.PasteSpecial Paste:=xlPasteValues
    Dim n, i, dau As Integer
     n = 12
    Do While Cells(n, "A") <> ""
        n = n + 1
    Loop
    n = n - 1
    Range("H12:I13").Select
    Selection.AutoFill Destination:=Range(Cells(12, 8), Cells(n, 9)), Type:=xlFillDefault
    Range("N13:AJ13").Select
    Selection.AutoFill Destination:=Range(Cells(13, 14), Cells(n, 36)), Type:=xlFillDefault
    i = 12
    dau = 12
    For i = dau To n
        If Cells(i, "A") <> Cells(i + 1, "A") Then
            Cells(dau, "G") = Cells(i, "B")
            Range(Cells(dau, "G"), Cells(dau, "G")).Select
            Selection.AutoFill Destination:=Range(Cells(dau, "G"), Cells(i, "G")), _
                   Type:=xlFillDefault
            dau = i + 1            
        End If
    Next i
    Range("A14").Select
End Sub
nhưng mà mình không hiểu được đoạn này nói gì nhờ các bác giải thích giúp :

Selection.AutoFill Destination:=Range(Cells(12, 8), Cells(n, 9)), Type:=xlFillDefault
Range("N13:AJ13").Select
Selection.AutoFill Destination:=Range(Cells(13, 14), Cells(n, 36)), Type:=xlFillDefault
 

pmhoang

Thành viên thường trực
Tham gia ngày
4 Tháng bảy 2008
Bài viết
269
Được thích
83
Điểm
0
nhưng mà mình không hiểu được đoạn này nói gì nhờ các bác giải thích giúp :

Selection.AutoFill Destination:=Range(Cells(12, 8), Cells(n, 9)), Type:=xlFillDefault
Range("N13:AJ13").Select
Selection.AutoFill Destination:=Range(Cells(13, 14), Cells(n, 36)), Type:=xlFillDefault
Bạn mở Excel lên
Tại ô A2 nhap vao = A1+1
Tại ô B2 nhap vao = A2*2
Vào Tools/Macro/Record New Macro/OK
Chọn vùng A2:B2
đưa chuột về bên phải, ở phía dưới vùng chọn, đến khi xuất hiện dấu + thì ấn vào và kéo xuống đến B6
Vào Tools/Macro/Stop Recording
Ấn F11 vào Code
Mở Module1 lên xem, trong macro 1 là cái bạn cần tìm đố. Đến đây là bạn đã hiểu tác dụng của nó rồi.
Thân chào.
GPE giup mình đoạn Code của mình với, nó nằm trong link này
http://www.giaiphapexcel.com/forum/showthread.php?p=108674#post108674
 
Lần chỉnh sửa cuối:

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,166
Được thích
52,324
Điểm
11,910
Cơ bạn là đây:
Khi viết địa chỉ cũa 1 cell, người ta thường dùng 2 cách:
1> Range("A10") ---> cái này rất gần gữi với công thức, đang muốn nói đến cell A10
2> Cells(10,1) ----> Đang muốn nói đến 1 cell có chỉ số dòng =10 và chỉ số cột =1 --> tức vẩn là A10
cách 1 người ta viết tắt luôn thành [A10]
Vậy:
Cells.Rows.Count là đếm toàn bộ số dòng có trong bảng tính
- Với Excel2003 trở về trước thì giá trị này = 65536 ---> Cells(Cells.Rows.Count, 1) ~ Cells(65536,1) ~ Range("A65536") ~ [A65536]
- Với Excel2007 thì giá trị này = 1048576 ---> Cells(Cells.Rows.Count, 1) ~ Cells(1048576,1) ~ Range("A1048576") ~ [A1048576]
Từ đó suy tiếp nhé
 

pmhoang

Thành viên thường trực
Tham gia ngày
4 Tháng bảy 2008
Bài viết
269
Được thích
83
Điểm
0
Code Copy

Cho mình hỏi về Code Copy? Vì có bạn hỏi mình, mình làm hoài không ra. nên mạo muội hỏi GPE
1. Đứng ở Sheet1 mình muốn copy 1 vùng A1:B2 sang Sheet2.[B2].với giá trị Value (Không copy Format Cell)??? (Copy va Paste trong khi vẫn ở Sheet1 không Active sheet2)
2. Tương tự như vậy mình đứng ở Sheet 2 muốn copy vùng A1:B2 của Sheet1 qua Sheet2 tại cell B2 , chỉ paste value (không format)???
 

cadafi

New Style! New Life!
Thành viên BQT
Super Moderator
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,217
Được thích
11,255
Điểm
1,910
Tuổi
39
Nơi ở
HCM
Cho mình hỏi về Code Copy? Vì có bạn hỏi mình, mình làm hoài không ra. nên mạo muội hỏi GPE
1. Đứng ở Sheet1 mình muốn copy 1 vùng A1:B2 sang Sheet2.[B2].với giá trị Value (Không copy Format Cell)??? (Copy va Paste trong khi vẫn ở Sheet1 không Active sheet2)
2. Tương tự như vậy mình đứng ở Sheet 2 muốn copy vùng A1:B2 của Sheet1 qua Sheet2 tại cell B2 , chỉ paste value (không format)???
Bạn dùng đoạn code sau (chép vào Module) và có thể gán phím tắt để chạy code:
PHP:
Sub TestCopy()
    Sheets("Sheet1").[A1:B2].Copy: Sheets("Sheet2").[B2].PasteSpecial _
           Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
 
Lần chỉnh sửa cuối:

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên danh dự
Tham gia ngày
16 Tháng tám 2006
Bài viết
3,814
Được thích
4,451
Điểm
860
Bạn dùng đoạn code sau (chép vào Module) và có thể gán phím tắt để chạy code:
PHP:
Sub TestCopy()
    Sheets("Sheet1").[A1:B2].Copy: Sheets("Sheet2").[B2].PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
Tôi thì dùng cái này thay ít chiếm bộ nhơ hơn.
PHP:
 Sub Test()
iRow = Sheets("Sheet1").[A1:B2].Row
iCol = Sheets("Sheet1").[A1:B2].Column
With Sheets("Sheet2")
    .[B2].Resize(iRow, iCol).Value = Sheets("Sheet1").[A1:B2].Value
End With
End Sub
 

pmhoang

Thành viên thường trực
Tham gia ngày
4 Tháng bảy 2008
Bài viết
269
Được thích
83
Điểm
0
Hỏi về 1 lỗi Erorr Copy?

Mình đã làm theo cách bạn Ca_dafi, nhưng file của mình vẫn còn bị Error, Mình gởi file cho các bạn kiểm tra nhé
1. Đứng ở Sheet TaoPw thì Run Ok
2. Đứng ở Sheet DangKy thì Run Error, thế mới lạ chứ (trong khi câu lệnh là tổng quát)
PHP:
Sub CopyError()
  Sheets("TaoPw").Range([A2], [B65536].End(xlUp)).Copy
  Sheets("DangKy").[A2].PasteSpecial Paste:=xlPasteValues
  MsgBox "Copy thanh cong"
End Sub
 

File đính kèm

Lệnh Hồ Đại Hiệp

Độc cô Cửu kiếm
Tham gia ngày
20 Tháng mười 2008
Bài viết
299
Được thích
520
Điểm
0
Không nên tạo Sub ở Sheet nào bạn ạ, như vậy rất khó cho bạn.

Nên tạo ra các Sub ở Module, nó sẽ có tác dụng trên mọi Sheet.

Khi đó
1. Đứng ở Sheet1 mình muốn copy 1 vùng A1:B2 sang Sheet2.[B2].với giá trị Value (Không copy Format Cell)??? (Copy va Paste trong khi vẫn ở Sheet1 không Active sheet2)
Thì chỉ cần :
PHP:
Sheet2.Range("B2:C3").Value = Sheet1.Range("A1:B2").Value
2. Tương tự như vậy mình đứng ở Sheet 2 muốn copy vùng A1:B2 của Sheet1 qua Sheet2 tại cell B2 , chỉ paste value (không format)???
PHP:
Sheet1.Range("A1:B2").Value = Sheet2.Range("B2:C3").Value
Khi đó bạn muốn đứng trên Sheet nào thì chỉ cần cho Sheet đó Active là được.

Xin chào!
 

cadafi

New Style! New Life!
Thành viên BQT
Super Moderator
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,217
Được thích
11,255
Điểm
1,910
Tuổi
39
Nơi ở
HCM
Mình đã làm theo cách bạn Ca_dafi, nhưng file của mình vẫn còn bị Error, Mình gởi file cho các bạn kiểm tra nhé
1. Đứng ở Sheet TaoPw thì Run Ok
2. Đứng ở Sheet DangKy thì Run Error, thế mới lạ chứ (trong khi câu lệnh là tổng quát)
Sub CopyError()
Sheets("TaoPw").Range([A2], [B65536].End(xlUp)).Copy <===Sai chỗ này
Sheets("DangKy").[A2].PasteSpecial Paste:=xlPasteValues
MsgBox "Copy thanh cong"
End Sub
Bạn sửa lại code như sau:
PHP:
Sub CopyError()
  Sheets("TaoPw").Range("A2:B" & Sheets("TaoPw").[B65536].End(xlUp).Row).Copy
  Sheets("DangKy").[A2].PasteSpecial Paste:=xlPasteValues
  MsgBox "Copy thanh cong"
End Sub
 

Lệnh Hồ Đại Hiệp

Độc cô Cửu kiếm
Tham gia ngày
20 Tháng mười 2008
Bài viết
299
Được thích
520
Điểm
0
Mình đã làm theo cách bạn Ca_dafi, nhưng file của mình vẫn còn bị Error, Mình gởi file cho các bạn kiểm tra nhé
1. Đứng ở Sheet TaoPw thì Run Ok
2. Đứng ở Sheet DangKy thì Run Error, thế mới lạ chứ (trong khi câu lệnh là tổng quát)
PHP:
Sub CopyError()
  Sheets("TaoPw").Range([A2], [B65536].End(xlUp)).Copy
  Sheets("DangKy").[A2].PasteSpecial Paste:=xlPasteValues
  MsgBox "Copy thanh cong"
End Sub

Bạn sửa lại :
PHP:
Sub CopyErrorSua()
    Dim iC As Long
    iC = Sheet1.Range("B65000").End(xlUp).Row
    If iC < 2 Then Exit Sub
    Sheet2.Range("A2:B" & iC).Value = Sheet1.Range("A2:B" & iC).Value
    MsgBox "Copy thanh cong"
End Sub
Code trên của bạn chưa tường minh về khai báo, hơn nữa thiếu 1 dòng lệnh giải phóng bộ nhớ khi Copy xong



Chúc vui.
 
Lần chỉnh sửa cuối:

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên danh dự
Tham gia ngày
16 Tháng tám 2006
Bài viết
3,814
Được thích
4,451
Điểm
860
Mình đã làm theo cách bạn Ca_dafi, nhưng file của mình vẫn còn bị Error, Mình gởi file cho các bạn kiểm tra nhé
1. Đứng ở Sheet TaoPw thì Run Ok
2. Đứng ở Sheet DangKy thì Run Error, thế mới lạ chứ (trong khi câu lệnh là tổng quát)
PHP:
Sub CopyError()
  Sheets("TaoPw").Range([A2], [B65536].End(xlUp)).Copy
  Sheets("DangKy").[A2].PasteSpecial Paste:=xlPasteValues
  MsgBox "Copy thanh cong"
End Sub
Nên tường minh một chút. Code của bạn sai ở [B65536].End(xlUp), phải thêm .row
Tôi thì thích dùng như sau:
PHP:
Sub CopyRng()
Dim eRow As Long, iCol As Long, Data As Range
Sheets("TaoPw").Select
eRow = [B65000].End(xlUp).Row
Set Data = Range("A2:B" & eRow)
iCol = Data.Columns.Count
With Sheets("DangKy")
    .[A2].Resize(eRow - 1, iCol).Value = Data.Value
End With
End Sub
 

pmhoang

Thành viên thường trực
Tham gia ngày
4 Tháng bảy 2008
Bài viết
269
Được thích
83
Điểm
0
Tôi thì dùng cái này thay ít chiếm bộ nhơ hơn.
Sub Test()
1 iRow = Sheets("Sheet1").[A1:B2].Row
2 iCol = Sheets("Sheet1").[A1:B2].Column
3 With Sheets("Sheet2")
4 .[B2].Resize(iRow, iCol).Value = Sheets("Sheet1").[A1:B2].Value
5 End With
6 End Sub
Đã Test và phân tích lỗi sai Code này. Không hiểu ý bạn TN nói ít chiếm bộ nhớ ..., Mình thì thấy nó thêm Biến iRow, iCol là tốn thêm bộ nhớ ...không biết suy nghi vay dung ko?
1. và 2. Không phải xuất ra số hàng và cột của [A1:B2] mà là xuất ra xuất ra hàng và cột của ActiveCell cũa [A1:B2], nghĩa là Cell A1 => iRow=1, iCol=1
4. Khi đó [B2].resize(1,1) vẫn là [B2] => Kết quả là copy qua Sheet 2 chỉ Past được đúng 1 Cell B2.
 

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên danh dự
Tham gia ngày
16 Tháng tám 2006
Bài viết
3,814
Được thích
4,451
Điểm
860
PHP:
Sub CopyRng()
Dim eRow As Long, iCol As Long, Data As Range
Sheets("TaoPw").Select
eRow = [B65000].End(xlUp).Row
Set Data = Range("A2:B" & eRow)
iCol = Data.Columns.Count
With Sheets("DangKy")
    .[A2].Resize(eRow - 1, iCol).Value = Data.Value
End With
End Sub
Do không xem kỹ, nhưng cái này co OK không. Từ A2 lấy eRow - 1 dòng và iCol cột
lúc này
eRow=5, iCol=2
.[A2].Resize(eRow - 1, iCol) # [a2:B4]
Bạn test hộ mình nhé!
 

pmhoang

Thành viên thường trực
Tham gia ngày
4 Tháng bảy 2008
Bài viết
269
Được thích
83
Điểm
0
Đây là cách làm truyền thống mà. nhưng mình bổ sung 1 tý cho no pro. vì 1 cách tổng quát thì eRow -1 không còn hợp lệ. Mình thay iRow cho nó
PHP:
iCol = Data.Columns.Count
iRow = Data.Rows.Count
With Sheets("DangKy")
    .[A2].Resize(iRow, iCol).Value = Data.Value
End With
Mình có lệnh này mình thấy sao tác dụng của nó cũng gần giống với các lệnh trên, không biết nó có sự khác biệt nhau chổ nào không?
PHP:
iRow = Data.Rows.Count
iRow = UBound(Data.Value, 1)
Sự khác biệt của 2 lệnh trên là gi?
 

TrungChinhs

Thành viên tích cực
Tham gia ngày
18 Tháng hai 2008
Bài viết
1,478
Được thích
2,449
Điểm
0
Nơi ở
Mường La, Sơn La
Cách nhận biết những câu lệnh đang chiếm giữ bộ nhớ ?

Chào các bạn! nhờ các bạn vui lòng chỉ giúp cách nhận biết những câu lệnh trong code đang chiếm giữ bộ nhớ; câu lệnh để giải phóng bộ nhớ và vị trí đặt chúng trong code (ví dụ trong đoạn code sau thì viết như thế nào ?).
Mã:
[COLOR=#000000][COLOR=#0000bb]Sub CopyError[/COLOR][COLOR=#007700]()
  [/COLOR][COLOR=#0000bb]Sheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"TaoPw"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000bb]Range[/COLOR][COLOR=#007700]([[/COLOR][COLOR=#0000bb]A2[/COLOR][COLOR=#007700]], [[/COLOR][COLOR=#0000bb]B65536[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000bb]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]xlUp[/COLOR][COLOR=#007700])).[/COLOR][COLOR=#0000bb]Copy
  Sheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"DangKy"[/COLOR][COLOR=#007700]).[[/COLOR][COLOR=#0000bb]A2[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000bb]PasteSpecial Paste[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000bb]xlPasteValues
  MsgBox [/COLOR][COLOR=#dd0000]"Copy thanh cong"
[/COLOR][COLOR=#0000bb]End Sub  [/COLOR][/COLOR]
Code trên của bạn chưa tường minh về khai báo, hơn nữa thiếu 1 dòng lệnh giải phóng bộ nhớ khi Copy xong[FONT=&quot]

[/FONT]Xin cảm ơn !
 
Lần chỉnh sửa cuối:
Status
Không mở trả lời sau này.
Top