Kết quả 1 đến 9 của 9

Chủ đề: Chạy theo thứ tự trong mảng

  1. #1
    haminhjob Guest

  2. #2
    aukid411 Guest
    Cảm ơn bác. Nhưng eo ôi, Code dài dã man

    Em mà hiểu được thì . . . tối nay (17/06/2007) xin chết tại Thị Nghè !!

    Có cách nào Ngăn ngắn không bác.

    Cảm ơn thật nhiều!

  3. #3
    ducquan1008 Guest
    Nếu nghiên cứu thì cần hiểu. Chứ...anh không cần hiểu. Hi Hi Hi

    Lê Văn Duyệt

  4. #4
    sangame Guest
    Có lẽ nếu vùng dữ liệu mà bác sắp xếp đã theo thứ tự rồi thì việc lọc ra là rất đơn giản (chỉ cần dùng các hàm của Excel như Offset, match, count... là giải quyết được thôi.
    Sau đây là đoạn code chung:

    Mã:
    Option Explicit
    Public Sub Locdulieu2()
        Range("A1:C1").Select
        Selection.AutoFilter
        Selection.AutoFilter field:=1, Criteria1:="PN002"
        
        Dim endRow As Long
        endRow = Range("A65536").End(xlUp).Row
        If endRow >= 2 Then
            Range("A2:C" & endRow).Select
            Selection.SpecialCells(xlCellTypeVisible).Select
            
            Dim rngData As Range
            Set rngData = Selection
            'Xu ly tiep cac so lieu da loc duoc trong bien rngData
            MsgBox rngData.Cells(1, 1)
            '.......
        End If
        Selection.AutoFilter
    End Sub

  5. #5
    chanhtan Guest
    Bác dùng Name động kết hợp với Validation (hoặc Combo Box) là được mà!
    Giả sử vùng A1:A10000 là vùng dữ liệu
    Nhập cận trên tại ô B1 (100 chẳng hạn)
    Nhập cận dưới tại ô B2 (150 chẳng hạn)
    Nhấn Insert/ Name/ Define: đặt tên là Data với công thức như sau:

    Mã:
    =OFFSET(Sheet1!$A$1:$A$10000,Sheet1!$B$1-1,0,Sheet1!$B$2-Sheet1!$B$1+1,1)
    Ô B3 bác đặt Validation với list là Data
    Bây giò bác thử thay đổi giá trị ô B1, B2 xem sao!
    Hy vọng là đúng ý bác.

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Cảm ơn nhiều nhưng không phải là như thế, chắc do mình diễn tả không rõ nghiã
    VD mình có 1 bảng dữ liệu :


    Mã:
        
                 A            B                C  
      1        Chứng từ     Ngày         Mã HH
      2        PN0001      1/1/07         HH002
      3        PN0002      2/1/07         HH002
      4        PN0002      2/1/07         HH003
      5        PN0002      2/1/07         HH004</font>
      6        PN0003      2/1/07         HH002
      7        PN0004      3/1/07         HH009
      ……………………………............................…………

    </font>
    Cột A được đặt Name là :
    DataCT
    Cột B được đặt Name là :
    DataNgay
    <font size="3">
    Cột C được đặt Name là :
    DataMaHH</font>
    Bảng được đặt Name là :
    DataArray
    <font size="3">

    Mình muốn trích lọc các dữ liệu theo Chứng từ :
    PN0002</font>
    (Không dùng Advance Filter)


    Mình biết được trong mảng DataCT có 3 phiếu
    PN0002
    <font size="3">; Đứng liền nhau; Phiếu đầu tiên là phần tử số 2 trong mảng. Mình muốn dùng VBA mà không muốn tạo ra name động mới.

    Tóm lại, mình muốn làm việc với 3 phần tử trên (để có thể lấy được dữ liệu ô bên cạnh, giống như ta làm việc với mảng
    For each CT in range(“DataCT”)</font> - Vòng này sẽ duyệt tất cả các phần tử trong mảng, rất mất thời gian, mình muốn phần tử đầu tiên nó duyệt đến là phần tử thứ hai ngay), cho ra số liệu sau :<font size="3">


    Mã:
              
                PN0002          2/1/07             HH002
                PN0002          2/1/07             HH003
                PN0002          2/1/07             HH004
    <font size="3">

    Cảm ơn nhiều

    Thân!
    P/S : trong công thức

    Mã:
    =OFFSET(Sheet1!$A$1:$A$10000,Sheet1!$B$1-1,0,Sheet1!$B$2-Sheet1!$B$1+1,1)
    Có thể sửa thành

    Mã:
    =OFFSET(Sheet1!$A$1,Sheet1!$B$1-1,0,Sheet1!$B$2-Sheet1!$B$1+1,1)

  7. #7
    khanhnguyen12021 Guest
    Trích dẫn Gửi bởi Mr Okebab
    [SIZE=3]Mình muốn dùng VBA mà không muốn tạo ra name động mới.
    Nếu muốn dùng VBA liên quan đến mảng Mr.Okebab có thể sử dụng
    http://home.pacbell.net/beban/
    Trong đó có hàm


    From Mr OKEBAB:
    Cụ thể đi bác ơi, không hiểu lắm. Bác làm theo VD trên kia cho em hiểu, chứ theo ý bác thì có mà . . . chết em (thông cảm, trình độ có hạn nhưng ham muốn lại lớn)

    Cảm ơn các bác nhiều!!!

    LVD

    Có nghĩa là nếu bạn đưa vào một mảng và đưa vào điều kiện lọc thì hàm này sẽ trả về một mảng kết quả tương ứng.
    Ví dụ:

    Mã:
    Sub TestArrayFilter()
        Dim OutputArr As Variant
        Dim rngRange As Range
        Set rngRange = Range("DATAARRAY")
        OutputArr = ArrayRowFilter1(rngRange, 1, "PN002")
        MsgBox "So cot cua mang la: " & UBound(OutputArr, 2) & vbCrLf & _
               "So hang cua mang ket qua la: " & UBound(OutputArr, 1), vbOKOnly, "Thong bao"
        Application.Worksheets("Sheet1").Range("OutPut") = OutputArr
    End Sub
    Được chưa? [IMG]images/smilies/a12.gif[/IMG]

    Lê Văn Duyệty

  8. #8
    khoitrang1988 Guest
    Chào anh Okebab,

    Có phải như vầy không?

    Mến.

  9. #9
    Ngày tham gia
    Aug 2015
    Bài viết
    0

    Chào B. Okebab
    Mình thấy bác SA_DQ tạo UD hàm mảng để lọc; bạn tham khảo thêm thử; DVLOOPKUP() bên WEBKeToan í!

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
  •