Chuyên mục xử lý, gỡ rối code VBA

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

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,930
Dạ, em dùng từ ngữ còn rối quá :( Em còn một mong muốn nữa, mong anh giải thích dùm em cái công thức của anh cho nó chọn vẹn ạ

=(SUM(LARGE(COUNTIF($F$2:$F$10,MID(A2,ROW($A$1:$A$4)*2-1,2)),ROW($A$1:$A$4))*IF(--RIGHT(D2)<4,(ROW($A$1:$A$4)=RIGHT(D2)+1)*RIGHT(D2),{0;1;4;3}))

Em chưa hiểu hết logic trong đó, nên mới thắc mắc tại sao lại lấy giá trị MID(A2,ROW($A$1:$A$4)*2-1,2 )hay các số đằng sau nó {0;1;4;3} và
Giải thích thì tôi... thua. Cái này tôi nhờ bạn tôi làm giùm đó :D
nếu thằng D nó ko phải các giá trị x1,x2,x3,x4,x5 mà là bút,vở,sách,bảng thì sẽ thế nào :)) sẽ phải if nó bằng luôn giá trị đó là đc hay phải viết 1 công thức mới. Em cảm ơn anh Thắng nhiều !
Thay --RIGHT(D2)RIGHT(D2) thành
Mã:
MATCH(D2,{"Bút","Vở","Sách","Bảng","Thước"})
 
Upvote 0
Em muốn khai báo và chọn mảng từ ô A1 đến ô A1000. Nhờ các cao thủ giải thích cho em với, em bị lỗi gì

Mã:
Sub Mang_Arr1()
    Dim SArr()
    SArr = Range([A6], [A1000]).Select
End Sub
 
Upvote 0
Mã:
Sub Mang_sArr()
    Dim Dic As Object
    Dim sArr(), dArr
    Set Dic = CreateObject("Scripting.Dictionary")
        
    With Sheet1
        
        sArr = .range(.[a6],.[a1000]).End(xlUp)).Resize(,4).value
        
    End With
    
    ReDim dArr(1 To UBound(sArr, 1), 1 To 4)
    
    
End Sub
CODE này cũng bị lỗi chỗ nào nhờ các cao thủ chỉ giáo, em xin cảm ơn
 

File đính kèm

  • Hoi ve Array 2.xls
    33.5 KB · Đọc: 3
Upvote 0
Mã:
Sub Mang_sArr()
    Dim Dic As Object
    Dim sArr(), dArr
    Set Dic = CreateObject("Scripting.Dictionary")
       
    With Sheet1
       
        sArr = .range(.[a6],.[a1000]).End(xlUp)).Resize(,4).value
       
    End With
   
    ReDim dArr(1 To UBound(sArr, 1), 1 To 4)
   
   
End Sub
CODE này cũng bị lỗi chỗ nào nhờ các cao thủ chỉ giáo, em xin cảm ơn
Dư dấu đóng ngoặc sau [a1000]
 
Upvote 0
Dư dấu đóng ngoặc sau [a1000]
Vậy sau dòng này có nghĩa là gì vậy anh?
Mã:
sArr = .Range(.[C6], .[C65536].End(xlUp)).Resize(, 4).Value

nếu em chuyển thành như thế này thì bị lỗi vì sao?
Mã:
sArr = .Range(.[C6], .[C65536].End(xlUp)).Resize(, 4).select

như thế này nữa
Mã:
sArr = .Range(.[C6], .[C65536].End(xlUp)).select
 
Upvote 0
Vậy sau dòng này có nghĩa là gì vậy anh?
Mã:
sArr = .Range(.[C6], .[C65536].End(xlUp)).Resize(, 4).Value
.[C65536].End(xlUp) tương đương với ô mà khi chọn ô C65536 rồi nhấn Ctrl và phím mũi tên lên.
nếu em chuyển thành như thế này thì bị lỗi vì sao?
Mã:
sArr = .Range(.[C6], .[C65536].End(xlUp)).Resize(, 4).select

như thế này nữa
Mã:
sArr = .Range(.[C6], .[C65536].End(xlUp)).select
Select là phương thức (chọn), không trả về giá trị nên bị lỗi khi gán cho biến sArr.
 
Upvote 0
.[C65536].End(xlUp) tương đương với ô mà khi chọn ô C65536 rồi nhấn Ctrl và phím mũi tên lên.

Select là phương thức (chọn), không trả về giá trị nên bị lỗi khi gán cho biến sArr.
vậy là khi thực hiện dòng lệnh này sẽ trả về giá trị, cụ thể là giá trị bao nhiêu vậy anh?

Mã:
sArr = .Range(.[C6], .[C65536].End(xlUp)).Resize(, 4).Value


.[C6] thì chọn dòng đầu tiên của cột C ---------> đúng không?
.[C65536].End(xlUp) thì chọn dòng cuối cùng chứa dữ liệu của cột C ------->đúng không?
 
Upvote 0
vậy là khi thực hiện dòng lệnh này sẽ trả về giá trị, cụ thể là giá trị bao nhiêu vậy anh?

Mã:
sArr = .Range(.[C6], .[C65536].End(xlUp)).Resize(, 4).Value


.[C6] thì chọn dòng đầu tiên của cột C ---------> đúng không?
.[C65536].End(xlUp) thì chọn dòng cuối cùng chứa dữ liệu của cột C ------->đúng không?
Bạn đang tra khảo tôi đấy à?
 
Upvote 0
Em thực sự không biết mà anh. Ví dụ như File này thì
Mã:
sArr = .Range(.[C6], .[C65536].End(xlUp)).Resize(, 4).Value
sẽ trả về giá trị bao nhiêu, anh chỉ em với
Bác cứ học từ từ thôi. Không nóng vội được đâu. Bây giờ Bác sang Topic Các câu hỏi về mảng đọc rồi Bác sẽ hiểu
Nếu mới đầu thì qua Topic này học căn bản trước đã :p
 
Upvote 0
Mình đọc rồi mà chưa hiểu, Pacific nói dùm chỗ này đi.
Ngay bài 8 Topic các câu hỏi về mảng Thầy NDu đã nói như thế này rồi
Mã:
Ban chỉ cần nhớ điều này:
- Range và mảng không giống nhau
- 1 Range sau khi biến đổi thành mảng thì đó luôn là mảng 2 chiều
- Muốn biến thành mảng 1 chiều phải thêm các công đoạn khác, chẳng hạn dùng For... Next hoặc hàm TRANSPOSE
Do vậy sArr = .Range(.[C6], .[C65536].End(xlUp)).Resize(, 4).Value Thì sArr là mảng
Còn .Range(.[C6], .[C65536].End(xlUp)).Resize(, 4).select là range nếu muốn nó hoạt động được phải làm như bài 972 mà anh befaint đã hướng dẫn
Mã:
Sub test()
    Dim sArr
Set sArr = Range([C6], [C65536].End(xlUp)).Resize(, 4)
sArr.Select
End Sub
 
Upvote 0
Chào mấy anh/chị

Cho em hỏi, em muốn lọc autofilter ngày tháng như bên dưới, nhưng khi viết thì lúc lọc nó không ra đúng. Anh, Chị nào biết giúp em đoạn code bên dưới với.
Em cảm ơn.

Sub Locngayxuat()
Dim dDate As Date
Dim lDate As Long
If IsDate(Range("$C$8:$Q$1001")) Then
dDate = Range("$C$8:$Q$1001")
lDate = DateSerial(Year(dDate), Month(dDate), Day(dDate))
End If
Range("I6").Select
NgayBD = ActiveCell.Value
Range("K6").Select
NgayKT = ActiveCell.Value
ActiveSheet.Range("$C$8:$Q$1001").AutoFilter Field:=2, Criteria1:=">=NgayBD" & lDate, Operator:=xlAnd, Criteria2:="<=NgayKT" & lDate
End Sub
Help giúp em với ạ.
 
Upvote 0
Chào mấy anh/chị

Cho em hỏi, em muốn lọc autofilter ngày tháng như bên dưới, nhưng khi viết thì lúc lọc nó không ra đúng. Anh, Chị nào biết giúp em đoạn code bên dưới với.
Em cảm ơn.

Sub Locngayxuat()
Dim dDate As Date
Dim lDate As Long
If IsDate(Range("$C$8:$Q$1001")) Then
dDate = Range("$C$8:$Q$1001")
lDate = DateSerial(Year(dDate), Month(dDate), Day(dDate))
End If
Range("I6").Select
NgayBD = ActiveCell.Value
Range("K6").Select
NgayKT = ActiveCell.Value
ActiveSheet.Range("$C$8:$Q$1001").AutoFilter Field:=2, Criteria1:=">=NgayBD" & lDate, Operator:=xlAnd, Criteria2:="<=NgayKT" & lDate
End Sub
dùng thử code
Mã:
Sub Locngayxuat()
    ActiveSheet.Range("$C$8:$Q$1001").AutoFilter Field:=2, Criteria1:=">=" & Range("I6").Value, Operator:=xlAnd, Criteria2:="<=" & Range("K6").Value
End Sub
 
Upvote 0
Thưa thầy cho em hỏi về vòng for:
e có 5 sheet tên lần lượt là CD-L1 -:- CD-L5, giờ em lần lượt đánh công thức cộng từ ô O8 sheet2 + 1 với ô O8 của sheet CD-L1; sheet tiếp theo công 1 từ sheet CD-L1 >>> i = 5. code của em sai ko chạy được mong thầy giải thích hướng dẫn em
--------------------------------------
Sub DanhsoSheets()
Dim i As Long
For i = 1 To 5
Sheets("CD-L & i").Select
Range("O8") = "='CD-L1'!O8+i"
Next i
End Sub
 
Upvote 0
Bạn viết hết fép cộng (có cả địa chỉ) ra xem sao?
Ví dụ:
Sheet2.[O8].Value + 1 + Sheets("CD-L1").[O8].Value + . . . .
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom