Giúp dùng biến nào Xuất ra dữ liệu trong Code mãng (1 người xem)

Liên hệ QC

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

minhtuan55

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
23/3/16
Bài viết
705
Được thích
52
Chào cả nhà. Em có 1 đoạn code sau

Mã:
Sub LOCcoban()
Dim sArr(), dArr(), Dk1 As String, Dk2 As String, I As Long, K As Long, R As Long, Col As Long
Dk1 = Range("H4"): Dk2 = Range("I4") ' DIEU KIEN TU CHO
sArr = Range("B4:D15000").Value ' DU LIEU DAU VAO
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 3) ' 3 COT
For I = 1 To R
    If sArr(I, 1) = Dk1 And sArr(I, 2) = Dk2 Then ' DKIEN TUY CHINH Phan biet Text Hoa va Thuong
        K = K + 1
        For Col = 1 To 3 ' 3 COT
            dArr(K, Col) = sArr(I, Col)
        Next Col
    End If
Next I
[COLOR=#ff0000][B]Range("L4").Resize(R, 3) = dArr ' 3 COT[/B][/COLOR]
End Sub

Chổ Ouput đầu ra mình dùng
1. Range("L4").Resize(R, 3) = dArr ' 3 COT thì nó không bảo lỗi khi Điều kiện không thỏa mãn
2. Range("L4").Resize(K, 3) = dArr ' 3 COT thì nó bảo lỗi khi Điều kiện không thỏa mãn

Em đang phân vân nên chọn cái 1 hay 2 nữa. Mong mọi người chỉ giáo
 

File đính kèm

Chào cả nhà. Em có 1 đoạn code sau

Mã:
Sub LOCcoban()
Dim sArr(), dArr(), Dk1 As String, Dk2 As String, I As Long, K As Long, R As Long, Col As Long
Dk1 = Range("H4"): Dk2 = Range("I4") ' DIEU KIEN TU CHO
sArr = Range("B4:D15000").Value ' DU LIEU DAU VAO
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 3) ' 3 COT
For I = 1 To R
    If sArr(I, 1) = Dk1 And sArr(I, 2) = Dk2 Then ' DKIEN TUY CHINH Phan biet Text Hoa va Thuong
        K = K + 1
        For Col = 1 To 3 ' 3 COT
            dArr(K, Col) = sArr(I, Col)
        Next Col
    End If
Next I
[COLOR=#ff0000][B]Range("L4").Resize(R, 3) = dArr ' 3 COT[/B][/COLOR]
End Sub

Chổ Ouput đầu ra mình dùng
1. Range("L4").Resize(R, 3) = dArr ' 3 COT thì nó không bảo lỗi khi Điều kiện không thỏa mãn
2. Range("L4").Resize(K, 3) = dArr ' 3 COT thì nó bảo lỗi khi Điều kiện không thỏa mãn

Em đang phân vân nên chọn cái 1 hay 2 nữa. Mong mọi người chỉ giáo

Không có dòng nào thỏa điều kiện thì K=0.
Resize(0,3) sẽ bị lỗi, Dùng R thì sẽ gán nguyên mảng rỗng.
Muốn dùng K thì bẫy lỗi If K>0 then ....
 
Upvote 0
Không có dòng nào thỏa điều kiện thì K=0.
Resize(0,3) sẽ bị lỗi, Dùng R thì sẽ gán nguyên mảng rỗng.
Muốn dùng K thì bẫy lỗi If K>0 then ....

Cảm ơn anh, em đã hiểu rồi, không biết em sữa lại như thế này đúng chưa. Anh xem giúp em

Mã:
Sub LOCcoban()
Dim sArr(), dArr(), Dk1 As String, Dk2 As String, I As Long, K As Long, R As Long, Col As Long
Dk1 = Range("H4"): Dk2 = Range("I4") ' DIEU KIEN TU CHO
sArr = Range("B4:D15000").Value ' DU LIEU DAU VAO
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 3) ' 3 COT
For I = 1 To R
    If sArr(I, 1) = Dk1 And sArr(I, 2) = Dk2 Then ' DKIEN TUY CHINH 
        K = K + 1
        For Col = 1 To 3 ' 3 COT
            dArr(K, Col) = sArr(I, Col)
        Next Col
    End If
Next I
Range("L4").Resize(R, 3).ClearContents
[COLOR=#ff0000]
[B]    If K > 0 Then
         Range("L4").Resize(K, 3) = dArr ' 3 COT
    End If[/B][/COLOR]


End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn tham khảo macro sau:
PHP:
Option Explicit
Const MyErr As Double = 1 + vbObjectError + 512
Sub LOCcoban()
Dim sArr(), dArr()
Dim Dk1 As String, Dk2 As String
Dim I As Long, K As Long, R As Long, Col As Long
On Error GoTo LoiCT

Dk1 = Range("H4"): Dk2 = Range("I4") ' DIEU KIEN TU CHO'
sArr = Range("B4:D15000").Value ' DU LIEU DAU VAO'
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 3) ' 3 COT'
For I = 1 To R
    If sArr(I, 1) = Dk1 And sArr(I, 2) = Dk2 Then ' DKIEN TUY CHINH Phan biet Text Hoa va Thuong '
        K = K + 1
        For Col = 1 To 3 ' 3 COT'
            dArr(K, Col) = sArr(I, Col)
        Next Col
    End If
Next I
' OUTPUT        '
Err.Raise Number:=MyErr
Range("L4").Resize(R, 3) = dArr ' 3 COT  '
Err_:           Exit Sub
LoiCT:
    If Err = MyErr Then
        MsgBox "Nothing!", , "GPE.COM Xin Chào"
        Resume Next
    Else
        Resume Err_
    End If
End Sub
 
Upvote 0
Cảm ơn anh, em đã hiểu rồi, không biết em sữa lại như thế này đúng chưa. Anh xem giúp em

Mã:
Sub LOCcoban()
Dim sArr(), dArr(), Dk1 As String, Dk2 As String, I As Long, K As Long, R As Long, Col As Long
Dk1 = Range("H4"): Dk2 = Range("I4") ' DIEU KIEN TU CHO
sArr = Range("B4:D15000").Value ' DU LIEU DAU VAO
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 3) ' 3 COT
For I = 1 To R
    If sArr(I, 1) = Dk1 And sArr(I, 2) = Dk2 Then ' DKIEN TUY CHINH 
        K = K + 1
        For Col = 1 To 3 ' 3 COT
            dArr(K, Col) = sArr(I, Col)
        Next Col
    End If
Next I
Range("L4").Resize(R, 3).ClearContents
[COLOR=#ff0000]
[B]    If K > 0 Then
         Range("L4").Resize(K, 3) = dArr ' 3 COT
    End If[/B][/COLOR]


End Sub

Nếu không bị lỗi thì xài thử đi rồi rút kinh nghiệm.
(Sữa Vinamilk hay Sữa "hai con chim")
 
Upvote 0
Nếu không bị lỗi thì xài thử đi rồi rút kinh nghiệm.
(Sữa Vinamilk hay Sữa "hai con chim")

Dạ không bị lỗi anh. Em cảm ơn anh đã giúp em. Chắc em gán R quất hết mãng xuống luôn cho khỏe, khỏi phải Clear Ouput trước anh nhĩ

1. Range("L4").Resize(R, 3) = dArr ' 3 COT thì nó không bảo lỗi khi Điều kiện không thỏa mãn
 
Upvote 0
Web KT

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

Back
Top Bottom