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

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

ST-Lu!

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

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

BQT

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


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

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

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Lần đầu tiên em viết bài nên có nhiều sai sót,mong các anh thông cảm.
Anh ndu96081631 diễn giải lại rất đúng ý của em.
Mong các anh nghiên cứu và giúp đỡ

 
Upvote 0
Lần đầu tiên em viết bài nên có nhiều sai sót,mong các anh thông cảm.
Anh ndu96081631 diễn giải lại rất đúng ý của em.
Mong các anh nghiên cứu và giúp đỡ
http://www.giaiphapexcel.com/forum/member.php?61139-ndu96081631
- Tại cell A1, bạn cứ gõ 1 biểu thức toán học gì đó (miễn sao Excel nó ra được kết quả khi ta thêm dấu = phía trước)
- Bấm Alt + F11, vào menu Insert, chọn Module
- Chèn code này vào:
PHP:
Sub Test()
  MsgBox Evaluate(Range("A1").Value)
End Sub
Chạy thử xem nó ra cái gì
--------------
Hoặc viết luôn 1 hàm để tính:
PHP:
Function EvalExp(Exp As String)
  EvalExp = Evaluate(Exp)
End Function
Tại cell B1, gõ công thức: =EvalExp(A1)
 

File đính kèm

  • EvalExp.xls
    18.5 KB · Đọc: 17
Upvote 0
Em cảm ơn anh ndu96081631 rất nhiều
 
Upvote 0
nếu ô A1 là 1 chuỗi gồm '' TEXT và biểu thức toán học ''
A1 ( ABCD : 2*3*4+5*6)
A2 là kết quả của biểu thức toán học
thì CODE phải sửa lại như thế nảo?
Mong anh cho ý kiến
 
Upvote 0
nếu ô A1 là 1 chuỗi gồm '' TEXT và biểu thức toán học ''
A1 ( ABCD : 2*3*4+5*6)
A2 là kết quả của biểu thức toán học
thì CODE phải sửa lại như thế nảo?
Mong anh cho ý kiến
Thì bạn dùng các hàm tách chuổi lấy phần sau dấu 2 chấm trước, sau đó cho vào Evaluate
(hàm tách chuổi bình thường thôi: Left, Right, Mid, InStr...)
 
Upvote 0

File đính kèm

  • TinhBT.xls
    26.5 KB · Đọc: 21
Upvote 0
hoi ve cach tao form nhap lieu

Mình muốn làm một form nhâp dữ liệu vào dữ liệu có sẵn trong excel xin chỉ cách làm.
những nơi có công thức sẽ vẫn tự thực hiện khi dữ liệu nhập vào.
xin hướng dẫn chi tiết, vì em đang mới bắt đầu học.

cám ơn rất nhiều
 

File đính kèm

  • bang chot gia hang ngay 10-11.xls
    37.5 KB · Đọc: 7
Upvote 0
Mình muốn làm một form nhâp dữ liệu vào dữ liệu có sẵn trong excel xin chỉ cách làm.
những nơi có công thức sẽ vẫn tự thực hiện khi dữ liệu nhập vào.
xin hướng dẫn chi tiết, vì em đang mới bắt đầu học.

cám ơn rất nhiều
Đã nói đến Form thì ít ra bạn phải có tí kiến thức VBA trong đâu, biết cách tạo ra 1 form với các control và viết code ---> Khi gặp trục trặc nào đó mới post câu hỏi nhở giúp
Còn như bạn là nhờ người ta làm tất tần tật rồi còn gì ---> Thế thì biết đến đời nào mới HỌC xong!
 
Upvote 0
Mong GPE xem giúp mình hộ đoạn code này, bạn Trungchinhs viết hộ mình nhưng mình không hiểu rõ? Chân thành cảm ơn cảm ơn các bạn!
- Đây là đoạn mã code và bài viết trên diễn đàn:
http://www.giaiphapexcel.com/forum/...paste-kết-quả-sang-sheet3&p=299882#post299882
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
On Error Resume Next
Sheet3.Cells.ClearContents
[a1:a1000].Copy Sheet3.[a1]
For Each cls In Sheet3.[a1:a1000].SpecialCells(2)
tmp = Sheet1.[a1:a1000].Find(cls, , , 1)(1, 2).Address
Sheet1.Range(tmp).Resize(, 20).Copy cls(1, 2)
Next
End Sub
- Mình xin lỗi các bạn nhé! Bạn Huuthang_bd đã trả lời giúp mình rồi ạ! Cảm ơn các bạn!
 
Lần chỉnh sửa cuối:
Upvote 0
Giải thích code này dùm em.

Em là người mới tìm hiểu về VBA, các anh có thể giải thích ý nghĩa từng dòng code màu đỏ dùm em:
Sub Test()
Dim Rng As Range, Cll As Range
Set Rng = Sheet2.Range(Sheet2.[A3], Sheet2.[A65536].End(xlUp))
Sheet2.[B:IV].ClearContents
For Each Cll In Sheet1.[1:1].SpecialCells(2, 23)
Set Rng = Rng.Offset(, 1)
Rng.Offset(-1)(1, 1).Value = Cll

Rng.FormulaR1C1 = "=VLOOKUP(RC1,Sheet1!C" & (Cll.Column - 1) & ":C" & Cll.Column & ",2,0)"
Rng.Value = Rng.Value
Next
End Sub

Thanks in advance!
 
Upvote 0
Tiêu đề không rõ ràng: Đoạn Code

Cái này của người khác, nhưng để hoạt động được đoạn code này thì phải làm sao vậy các chú và các bác. ActiveSheet.Range("C2:D10").Select. trân thành Cảm ơn
 
Upvote 0
Em là người mới tìm hiểu về VBA, các anh có thể giải thích ý nghĩa từng dòng code màu đỏ dùm em:
Sub Test()
Dim Rng As Range, Cll As Range
Set Rng = Sheet2.Range(Sheet2.[A3], Sheet2.[A65536].End(xlUp))
Sheet2.[B:IV].ClearContents
For Each Cll In Sheet1.[1:1].SpecialCells(2, 23)
Set Rng = Rng.Offset(, 1)
Rng.Offset(-1)(1, 1).Value = Cll

Rng.FormulaR1C1 = "=VLOOKUP(RC1,Sheet1!C" & (Cll.Column - 1) & ":C" & Cll.Column & ",2,0)"
Rng.Value = Rng.Value
Next
End Sub

Thanks in advance!
PHP:
Set Rng = Sheet2.Range(Sheet2.[A3], Sheet2.[A65536].End(xlUp))
Gán vùng từ A3 đến ô cuối cùng của cột A có dữ liệu ở Sheet2 vào biến Rng
PHP:
For Each Cll In Sheet1.[1:1].SpecialCells(2, 23)
Duyệt qua từng ô có dữ liệu ở dòng 1 của Sheet1
PHP:
Set Rng = Rng.Offset(, 1)
Gán vùng cách vùng Rng 1 cột vào biến Rng
PHP:
Rng.Offset(-1)(1, 1).Value = Cll
Cho giá trị của ô trên vùng Rng 1 dòng bằng giá trị ô Cll
 
Upvote 0
Mình đang nghiên cứu về Dictionary và tạo một Dictionary sau:

-----------
Set Dic1 = CreateObject("Scripting.Dictionary")
-----------
For i =1 to UBound(Arr1)
If Not Dic1.Exists(Arr1(i)) Then
Dic1.Add Arr1(i), ""
End If
Next
-----------
Các Bạn cho hỏi:
- Dấu nháy màu đỏ ở trên ngĩa là sao?
- Sau khi tạo xong, muốn lấy một phần tử (thứ n chẳng hạn) trong Dic1 có được không, nếu được thì cú pháp ra sao?
- Muốn xóa toàn bộ dữ liệu trong Dic1 này thì viết lệnh gì?
 
Lần chỉnh sửa cuối:
Upvote 0
Mình đang nghiên cứu về Dictionary và tạo một Dictionary sau:

-----------
Set Dic1 = CreateObject("Scripting.Dictionary")
-----------
For i =1 to UBound(Arr1)
If Not Dic1.Exists(Arr1(i)) Then
Dic1.Add Arr1(i), ""
End If
Next
-----------
Các Bạn cho hỏi:
- Dấu nháy màu đỏ ở trên ngĩa là sao?
- Sau khi tạo xong, muốn lấy một phần tử (thứ n chẳng hạn) trong Dic1 có được không, nếu được thì cú pháp ra sao?
- Muốn xóa toàn bộ dữ liệu trong Dic1 này thì viết lệnh gì?
Cú pháp để Add Dictionary là
Dic.Add Key, Item
Key bắt buộc phải có (và phải không trùng, vì thế mới có câu If Not Dic.Exists(...) then để bảo đảm cái mà ta chuẩn bị Add vào là chưa hề tồn tại trong Dic)
Item không bắt buộc, nếu không cần thì ghi là "" hoặc Nothing cũng được
Tặng anh đoạn code này, anh tự nghiên cứu lấy nhé:
PHP:
Sub Test()
  Dim Arr1(1 To 4), Arr2, Dic1, i As Long
  Arr1(1) = "a"
  Arr1(2) = "b"
  Arr1(3) = "c"
  Arr1(4) = "d"
  Set Dic1 = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(Arr1)
    If Not Dic1.Exists(Arr1(i)) Then Dic1.Add Arr1(i), Asc(Arr1(i))
  Next
  Arr2 = Dic1.Keys
  MsgBox Arr2(0)
  MsgBox Arr2(1)
  MsgBox Dic1.Item("a")
  MsgBox Dic1.Item("b")
End Sub
Để xóa toàn bộ các phần tử trong Dic1, ta dùng lệnh Dic1.RemoveAll
 
Upvote 0
Cảm ơn ndu nhiều, mới chỉ đọc code của Bạn mình cũng hiểu rồi, thật ngắn gọn và xúc tích.
Mình tìm trên mạng thì ra trang này khó hiểu hơn, và cũng hơi khác.
 
Upvote 0
Cảm ơn ndu nhiều, mới chỉ đọc code của Bạn mình cũng hiểu rồi, thật ngắn gọn và xúc tích.
Mình tìm trên mạng thì ra trang này khó hiểu hơn, và cũng hơi khác.
Ẹc... Ẹc... ở GPE này có cả đóng anh không chịu xem, đi đâu cho xa:
http://www.giaiphapexcel.com/forum/showthread.php?28472-l%E1%BB%8Dc-danh-s%C3%A1ch-kh%C3%B4ng-b%E1%BB%8B-tr%C3%B9ng-t%C3%AAn-v%C3%A0-kho%E1%BA%A3ng-tr%E1%BA%AFng-cho-combobox-validation-list&p=240757#post240757
Ngoài ra, em giải thích "nông dân" theo cách hiểu của em thôi (không bài bản như người ta)
 
Upvote 0
các bạn ơi cho mình hỏi:
Khi mình dùng "do...until" cho bài của mình thì nó báo lỗi tràn bộ nhớ.
Bài của mình có rất nhiều dòng (khoảng 40000 dòng).
Các bạn cho mình hỏi ngoài "do....until"thì còn cấu trúc câu lệnh nào khác không?
Cám ơn nhiều và mong được các bạn sớm hồi âm vì cái này mình rất cần.
 
Lần chỉnh sửa cuối:
Upvote 0
các bạn ơi cho mình hỏi:
Khi mình dùng "do...until" cho bài của mình thì nó báo lỗi tràn bộ nhớ.
Bài của mình có rất nhiều dòng (khoảng 40000 dòng).
Các bạn cho mình hỏi ngoài "do....until"thì còn cấu trúc câu lệnh nào khác không?
Cám ơn nhiều và mong được các bạn sớm hồi âm vì cái này mình rất cần.
Ít ra cũng phải biết được nội dung code của bạn đang "DO" cái gì
Hổng thấy code, hổng có file, chả ai biết bạn "DO" sao mà để đến nỗi bị "TRÀN" cả
(Đoán là "DO" chưa đúng cách)
 
Upvote 0
các bạn ơi cho mình hỏi:
Khi mình dùng "do...until" cho bài của mình thì nó báo lỗi tràn bộ nhớ.
Bài của mình có rất nhiều dòng (khoảng 40000 dòng).
Các bạn cho mình hỏi ngoài "do....until"thì còn cấu trúc câu lệnh nào khác không?
Cám ơn nhiều và mong được các bạn sớm hồi âm vì cái này mình rất cần.
Mình nghĩ do trong vòng lặp bạn đã băt bộ nhớ nó nhớ nhiều quá (chẳng hạn tạo ra 1000 Array) chớ đâu phải là do cấu trúc Do until, vì vậy khi một biến nào đó trong mỗi vòng lặp đã "hoàn thành nhiệm vụ" thì bạn hãy "giải phóng" nó đi để khỏi tốn bộ nhớ.
Nếu chỉ đơn giản như sau thì làm gì tràn bộ nhớ, ví dụ:
Sub Text()
Do Until i = 65536
i = i + 1
Cells(i, 1) = i
Loop
End Sub
Nếu có thể được bạn hãy đưa đoạn code lên cho mọi người xem thử, chớ nếu không có code chắc phải bó tay!. Đừng đổ lỗi cho Until
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom