Trang 2 của 2 Đầu tiênĐầu tiên 12
Kết quả 11 đến 12 của 12

Chủ đề: Lọc dữ liệu theo điều kiện bằng VBA?

  1. #11
    bighero6new Guest
    Trích dẫn Gửi bởi ChanhTQ@
    Muốn VBA thì VBA; & tương lai sẽ fải VBA mà thôi
    Nghe câu "tương lai sẽ phải VBA" của bạn Chanh mà ham, trong khi kiến thức Vba chỉ mới ở mức "đang tìm hiểu".... cho nên lấy code của bạn Chanh trên bài này để Nhờ bạn Chanh giải thích & khai sáng 1 số khúc mắc, chưa hiểu biết của mình. Bạn chanh (hoặc Bác nào ghé ngang hiểu code thì giải thích hộ mình).
    Trân trọng cảm ơn!

    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shCore.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shAutoloader.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushAppleScript.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushAS3.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushBash.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushColdFusion.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushCpp.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushCSharp.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushCss.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushDelphi.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushDiff.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushErlang.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushGroovy.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushJava.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushJavaFx.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushJScript.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushPerl.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushPhp.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushPlain.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushPowerShell.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushPython.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushRuby.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushSass.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushScala.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushSql.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushVb.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushXml.js"></script>

    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shAutoloader.js"></script>

    <link type="text/css" rel="stylesheet" href="/forum/vctinh_xcode/styles/shCoreDefault.css">
    <link type="text/css" rel="Stylesheet" href="/forum/vctinh_xcode/styles/shThemeDefault.css">

    <pre class="brush: vb; toolbar: false;">Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [b2]) Is Nothing Then
    Dim Sh As Worksheet, Arr()
    Dim Rws As Long, J&, W&


    Set Sh = ThisWorkbook.Worksheets("DuLieuPhatSinh")
    With Sh.[B3]
    Rws = .CurrentRegion.Rows.Count
    Arr() = .Resize(Rws, 6).Value
    End With
    [B6].CurrentRegion.Offset(1, 1).ClearContents
    ReDim dArr(1 To Rws, 1 To 3)
    For J = 1 To UBound(Arr())
    If Arr(J, 3) = Target.Value Then
    W = 1 + W
    dArr(W, 1) = Arr(J, 1)
    dArr(W, 2) = Arr(J, 2)
    dArr(W, 3) = Arr(J, 6)
    End If
    Next J
    If W Then
    [B7].Resize(W, 3).Value = dArr()
    Randomize
    [b2].Interior.ColorIndex = 34 + 9 * Rnd() \ 1
    End If
    End If
    End Sub</pre>

    <script type="text/javascript">
    function path()
    {
    var args = arguments,
    result = []
    ;

    for(var i = 0; i < args.length; i++)
    result.push(args[i].replace('@', '/forum/vctinh_xcode/scripts/'));
    return result;
    };

    SyntaxHighlighter.autoloader.apply(null, path(
    'applescript @shBrushAppleScript.js',
    'actionscript3 as3 @shBrushAS3.js',
    'ahk autohotkey @shBrushAhk.js',
    'asm x86 @shBrushAsm.js',
    'bash shell @shBrushBash.js',
    'coldfusion cf @shBrushColdFusion.js',
    'cpp c @shBrushCpp.js',
    'c# c-sharp csharp @shBrushCSharp.js',
    'css @shBrushCss.js',
    'delphi pascal @shBrushDelphi.js',
    'diff patch pas @shBrushDiff.js',
    'erl erlang @shBrushErlang.js',
    'groovy @shBrushGroovy.js',
    'java @shBrushJava.js',
    'jfx javafx @shBrushJavaFX.js',
    'js jscript javascript @shBrushJScript.js',
    'perl pl @shBrushPerl.js',
    'php @shBrushPhp.js',
    'text plain @shBrushPlain.js',
    'py python @shBrushPython.js',
    'ruby rails ror rb @shBrushRuby.js',
    'sass scss @shBrushSass.js',
    'scala @shBrushScala.js',
    'sql SQL @shBrushSql.js',
    'vb vbnet vba @shBrushVb.js',
    'xml xhtml xslt html @shBrushXml.js'
    ));
    SyntaxHighlighter.config.stripBrs = true;
    SyntaxHighlighter.all();
    </script>

    Bác giải thích giúp mình:

    1.
    Mã:
     If Not Intersect(Target, [b2]) Is Nothing Then
    +Lệnh If + then thì mình hiểu, nhưng thêm Not phía sau có nghĩa là phủ dịnh lại cái đem đi làm điều kiện if hay ntn? bạn giải thích giúp
    +Phương thức Intersect, và cách sử dụng (tìm đọc trên gpe rồi mà chưa hiểu lắm........mông lung quá)
    +Target ở đây (sự kiện change): có phải là sự thay đổi giá trị,...hay gì gì... .bạn giải thích giúp
    + (Target, [b2]): có phải là chỉ giá trị trong ô B2 thay đổi thôi?
    + Is nothing: ý nghĩa của câu lệnh này


    2.
    Mã:
    Dim Sh As Worksheet, Arr()    Dim Rws As Long, J&, W&
    + Arr(): đây là khai bảo dạng vùng (mảng) có phải không?


    3.
    Mã:
     Set Sh = ThisWorkbook.Worksheets("DuLieuPhatSinh")
        With Sh.[B3]
            Rws = .CurrentRegion.Rows.Count
            Arr() = .Resize(Rws, 6).Value
       End With
    + CurrentRegion: lệnh này nghĩa là gì? tìm đọc mà mông lung quá
    + Arr() = .Resize(Rws, 6).Value: hiểu là: Sau khi count được dữ liệu có bao nhiêu dòng, thì gán cho mãng Arr() Count dòng & 6 cột? giải thích giúp.

    4.
    Mã:
     [B6].CurrentRegion.Offset(1, 1).ClearContents
    + Offset(1, 1): chỗ này được hiểu là xóa vùng sau ô B6 1 dòng, & 1 cột (mà trên file thực tế có 1 cột nữa là số lượng, vậy đổi Offset(1, 1) -> Offset(1, 2) có được không?)

    Và theo mình hiểu thì xóa giá trị theo chỉ định vùng sau ô B6, trong khi mình Offset(1, 1) (chỉ 1 dòng 1 cột) , vậy làm sao chỗ này vba hiểu là xóa hết dữ liệu từ dòng 7 trở đi.....về sau. (có chăng là nhờ cái CurrentRegion......mà chưa hiểuCurrentRegion...hixxx.)

    5.
    Mã:
     ReDim dArr(1 To Rws, 1 To 3)
    Có phải thêm chữ Re trước dim là tạo ra mãng mới từ mãng Arr(), tại sao lại thêm ký tự d trước Arr (mãng mới) có thể thay ký tự "d" bằng những ký tự chữ khác không?

    1 To Rws: tạo mãng với số dòng bằng biến Rws ở trên???
    1 to 3: cái này mình hiểu là cần 3 cột để gán kết quả nên 1 to 3

    6.
    Mã:
     For J = 1 To UBound(Arr())
            If Arr(J, 3) = Target.Value Then
                W = 1 + W
                dArr(W, 1) = Arr(J, 1)
                dArr(W, 2) = Arr(J, 2)
                dArr(W, 3) = Arr(J, 6)
            End If
        Next J
    + If Arr(J, 3) = Target.Value Then: xét từng dòng & cột 3 (code sản phẩm )của vùng Arr , nếu bằng giá trị tại ô B2 thì thực hiện cái lệnh phía sau.???
    + 1 to Ubound(Arr()) : là chạy đến dòng cuối cùng của mãng có phải không?
    + W = 1+ W : chưa hiểu biến W tại sao phải khai báo như vậy. Vì không thấy W bắt đầu từ bao nhiêu (1,2,....n)
    Bạn giải thích hộ biến W được khai báo chỗ này, và kết hợp vào dArr
    </font>
    <font color="#ff0000">Biến W chỗ này mình còn chưa hiểu, mông lung quá.......bạn giải thích giúp!


    Đoạn này thì hiểu là tương ứng dòng cột tại vùng Arr lấy được thì gán vào vùng dArr tương ứng dòng cột quy định:
    dArr(W, 1) = Arr(J, 1): 1 số phiếu
    dArr(W, 2) = Arr(J, 2): 2 ngày
    dArr(W, 3) = Arr(J, 6): 6 số lượng


    7.
    Mã:
     If W Then
            [B7].Resize(W, 3).Value = dArr()
            Randomize
            [b2].Interior.ColorIndex = 34 + 9 * Rnd() \ 1
        End If
    + Đoạn này nếu W là gì ?? chưa hiểu ý nghĩa.
    + Đoạn Randomize: chắc là tạo số ngẫu nhiên rồi gán màu ngẫu nhiên cho ô B2

    Nhờ các bạn giải thích giúp, để hiểu thêm & khai sáng kiến thức cơ bản của vba...[IMG]images/smilies/a01.gif[/IMG][IMG]images/smilies/a01.gif[/IMG][IMG]images/smilies/a01.gif[/IMG]!

  2. #12
    baloenglish.2015 Guest
    <div class="contentnote" style="border: 1px solid #CBE3B7;color:#468847;background-color:#DFF0D8;padding:5px;-moz-border-radius: 10px;
    border-radius: 10px;line-height: 1.5em;"> Nghe câu "tương lai sẽ phải VBA" của bạn Chanh mà ham,. . . Cho nên lấy code của bạn Chanh trên bài này để Nhờ bạn Chanh giải thích & khai sáng 1 số khúc mắc, chưa hiểu biết của mình. Bạn chanh (hoặc ai ghé ngang hiểu code thì giải thích hộ mình).
    Trân trọng cảm ơn!

    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shCore.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shAutoloader.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushAppleScript.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushAS3.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushBash.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushColdFusion.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushCpp.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushCSharp.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushCss.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushDelphi.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushDiff.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushErlang.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushGroovy.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushJava.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushJavaFx.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushJScript.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushPerl.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushPhp.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushPlain.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushPowerShell.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushPython.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushRuby.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushSass.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushScala.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushSql.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushVb.js"></script>
    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shBrushXml.js"></script>

    <script type="text/javascript" src="/forum/vctinh_xcode/scripts/shAutoloader.js"></script>

    <link type="text/css" rel="stylesheet" href="/forum/vctinh_xcode/styles/shCoreDefault.css">
    <link type="text/css" rel="Stylesheet" href="/forum/vctinh_xcode/styles/shThemeDefault.css">

    <pre class="brush: vb; toolbar: false;">Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [b2]) Is Nothing Then
    Dim Sh As Worksheet, Arr()
    Dim Rws As Long, J&, W&


    Set Sh = ThisWorkbook.Worksheets("DuLieuPhatSinh")
    With Sh.[B3]
    Rws = .CurrentRegion.Rows.Count
    Arr() = .Resize(Rws, 6).Value
    End With
    [B6].CurrentRegion.Offset(1, 1).ClearContents
    ReDim dArr(1 To Rws, 1 To 3)
    For J = 1 To UBound(Arr())
    If Arr(J, 3) = Target.Value Then
    W = 1 + W
    dArr(W, 1) = Arr(J, 1)
    dArr(W, 2) = Arr(J, 2)
    dArr(W, 3) = Arr(J, 6)
    End If
    Next J
    If W Then
    [B7].Resize(W, 3).Value = dArr()
    Randomize
    [b2].Interior.ColorIndex = 34 + 9 * Rnd() \ 1
    End If
    End If
    End Sub</pre>

    <script type="text/javascript">
    function path()
    {
    var args = arguments,
    result = []
    ;

    for(var i = 0; i < args.length; i++)
    result.push(args[i].replace('@', '/forum/vctinh_xcode/scripts/'));
    return result;
    };

    SyntaxHighlighter.autoloader.apply(null, path(
    'applescript @shBrushAppleScript.js',
    'actionscript3 as3 @shBrushAS3.js',
    'ahk autohotkey @shBrushAhk.js',
    'asm x86 @shBrushAsm.js',
    'bash shell @shBrushBash.js',
    'coldfusion cf @shBrushColdFusion.js',
    'cpp c @shBrushCpp.js',
    'c# c-sharp csharp @shBrushCSharp.js',
    'css @shBrushCss.js',
    'delphi pascal @shBrushDelphi.js',
    'diff patch pas @shBrushDiff.js',
    'erl erlang @shBrushErlang.js',
    'groovy @shBrushGroovy.js',
    'java @shBrushJava.js',
    'jfx javafx @shBrushJavaFX.js',
    'js jscript javascript @shBrushJScript.js',
    'perl pl @shBrushPerl.js',
    'php @shBrushPhp.js',
    'text plain @shBrushPlain.js',
    'py python @shBrushPython.js',
    'ruby rails ror rb @shBrushRuby.js',
    'sass scss @shBrushSass.js',
    'scala @shBrushScala.js',
    'sql SQL @shBrushSql.js',
    'vb vbnet vba @shBrushVb.js',
    'xml xhtml xslt html @shBrushXml.js'
    ));
    SyntaxHighlighter.config.stripBrs = true;
    SyntaxHighlighter.all();
    </script></div>

    Bác giải thích giúp:

    1.
    Mã:
     If Not Intersect(Target, [b2]) Is Nothing Then
    {Bạn chắc nên đến đây http://www.giaiphapexcel.com/forum/s...�ng-đến-VBA! lúc rỗi để đọc các bài trong đó}

    +Lệnh If + then thì mình hiểu, nhưng thêm Not phía sau có nghĩa là phủ dịnh lại cái đem đi làm điều kiện if hay ntn? bạn giải thích giúp
    {Fủ định cái không tồn tại (Is Nothing) có nghĩa là sự tồn tại}

    +Phương thức Intersect, và cách sử dụng (tìm đọc trên gpe rồi mà chưa hiểu lắm........mông lung quá) {Tài liệu đã dẫn}


    +Target ở đây (sự kiện change): có phải là sự thay đổi giá trị,...hay gì gì... .bạn giải thích giúp
    {Có thể tạm hiểu là 1 ô hay 1 vùng ô liên tục hay rời rạc}

    + (Target, [b2]): có phải là chỉ giá trị trong ô B2 thay đổi thôi? {Cái này f ải hiểu về Intersect() trong tài liệu bên trên đã dẫn}

    + Is nothing: ý nghĩa của câu lệnh này {Xem bên trên: If Not. . .}


    2.
    Mã:
    Dim Sh As Worksheet, Arr()    Dim Rws As Long, J&, W&
    + Arr(): đây là khai bảo dạng vùng (mảng) có phải không? { Đúng}


    3.
    Mã:
     Set Sh = ThisWorkbook.Worksheets("DuLieuPhatSinh")
        With Sh.[B3]
            Rws = .CurrentRegion.Rows.Count
            Arr() = .Resize(Rws, 6).Value
       End With
    + CurrentRegion: lệnh này nghĩa là gì? tìm đọc mà mông lung quá
    {Xem trong tài liệu đã dẫn; Chỉ sau đó mới hỏi tiếp nếu cần}
    + Arr() = .Resize(Rws, 6).Value: hiểu là: Sau khi count được dữ liệu có bao nhiêu dòng, thì gán cho mãng Arr() Count dòng & 6 cột? giải thích giúp. {Bạn tìm hiểu fương thức Resize(d,c) trong tài liệu nêu trên}

    4.
    Mã:
     [B6].CurrentRegion.Offset(1, 1).ClearContents
    + Offset(1, 1): chỗ này được hiểu là xóa vùng sau ô B6 1 dòng, & 1 cột (mà trên file thực tế có 1 cột nữa là số lượng, vậy đổi Offset(1, 1) -> Offset(1, 2) có được không?)
    [B]{Dòng 6 của [B6] chưa hẵn là dòng đầu tiên của vùng CurrentRegion; & cột chưa hẵn là cột đầu tiên của vùng Currentregion - Đọc tài liệu đã dẫn}


    Và theo mình hiểu thì xóa giá trị theo chỉ định vùng sau ô B6, trong khi mình Offset(1, 1) (chỉ 1 dòng 1 cột) , vậy làm sao chỗ này vba hiểu là xóa hết dữ liệu từ dòng 7 trở đi.....về sau. (có chăng là nhờ cái CurrentRegion......mà chưa hiểuCurrentRegion...hixxx.)

    5.
    Mã:
     ReDim dArr(1 To Rws, 1 To 3)
    Có phải thêm chữ Re trước dim là tạo ra mãng mới từ mãng Arr(), tại sao lại thêm ký tự d trước Arr (mãng mới) có thể thay ký tự "d" bằng những ký tự chữ khác không? {Là tạo mảng mới hoàn toàn không từ Arr()}

    1 To Rws: tạo mãng với số dòng bằng biến Rws ở trên??? {OK}
    1 to 3: cái này mình hiểu là cần 3 cột để gán kết quả nên 1 to 3 {OK}

    6.
    Mã:
     For J = 1 To UBound(Arr())
            If Arr(J, 3) = Target.Value Then
                W = 1 + W
                dArr(W, 1) = Arr(J, 1)
                dArr(W, 2) = Arr(J, 2)
                dArr(W, 3) = Arr(J, 6)
            End If
        Next J
    + If Arr(J, 3) = Target.Value Then: xét từng dòng & cột 3 (code sản phẩm )của vùng Arr , nếu bằng giá trị tại ô B2 thì thực hiện cái lệnh phía sau.??? {OK}
    + 1 to Ubound(Arr()) : là chạy đến dòng cuối cùng của mãng có phải không? {OK}
    + W = 1+ W : chưa hiểu biến W tại sao phải khai báo như vậy. Vì không thấy W bắt đầu từ bao nhiêu (1,2,....n)
    Bạn giải thích hộ biến W được khai báo chỗ này, và kết hợp vào dArr
    </font>{ Khi vừa khai báo biến thuộc dạng số thì mặc định nó nhận trị là 0; Khi tìm đúng mã thì ghi vô mảng "đích" dArr(); (Còn Arr() là mảng nguốn)}
    <font color="#ff0000">Biến W chỗ này mình còn chưa hiểu, mông lung quá.......bạn giải thích giúp!


    Đoạn này thì hiểu là tương ứng dòng cột tại vùng Arr lấy được thì gán vào vùng dArr tương ứng dòng cột quy định:
    dArr(W, 1) = Arr(J, 1): 1 số phiếu
    dArr(W, 2) = Arr(J, 2): 2 ngày
    dArr(W, 3) = Arr(J, 6): 6 số lượng


    7.
    Mã:
     If W Then
            [B7].Resize(W, 3).Value = dArr()
            Randomize
            [b2].Interior.ColorIndex = 34 + 9 * Rnd() \ 1
        End If
    + Đoạn này nếu W là gì ?? chưa hiểu ý nghĩa. { Hiểu nôm na là w>0 thì . . . }
    + Đoạn Randomize: chắc là tạo số ngẫu nhiên rồi gán màu ngẫu nhiên cho ô B2 {OK}

    Nhờ các bạn giải thích giúp, để hiểu thêm & khai sáng kiến thức cơ bản của vba...[IMG]images/smilies/a01.gif[/IMG]

Trang 2 của 2 Đầu tiênĐầu tiên 12

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •