Trang 2/3 đầuđầu 1 2 3 cuốicuối
Hiển thị kết quả tìm kiếm từ 11 đến 20 trên tổng số: 25

Ðề tài: Dùng Mảng để cộng tổng

  1. Trích Nguyên văn bởi keke355992 View Post
    - Xin chào các Anh chị trong diễn đàn.
    - E đang học về mảng. E có 1 ví dụ sau: Tại cột G là dữ liệu mặc định ban đầu, e muốn kết quả : mỗi khi 1 mặt hàng của cột G, được tìm thấy tại cột B, thì cột B có bao nhiu dòng phát sinh mặt hàng đó, cộng hết lại ứng với Số lượng tại cột D. Nó chính là hàm Sumif tại cột H ( E k bit diễn đạt kiểu nào ). E mún dùng Mảng để giải quyết bài tập này ạ. e xin cảm ơn !
    bạn thử code
    Code:
    Sub Mang()
    Dim Sarr(), Darr(), Arr(), i As Long, Tmp As String
    Darr = Range("B4", Range("B4").End(xlDown)).Resize(, 2).Value
    Sarr = Range("G4", Range("G4").End(xlDown)).Value
    ReDim Arr(1 To UBound(Sarr), 1 To 1)
    With CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(Darr)
        Tmp = Trim(Darr(i, 1))
        If Not .Exists(Tmp) Then
            .Add Tmp, Darr(i, 2)
        Else
            .Item(Tmp) = .Item(Tmp) + Darr(i, 2)
        End If
      Next i
      For i = 1 To UBound(Sarr)
        Tmp = Trim(Sarr(i, 1))
        If .Exists(Tmp) Then Arr(i, 1) = .Item(Tmp)
      Next i
    End With
    Range("I4").Resize(UBound(Sarr), 1) = Arr
    End Sub

  2. Trích Nguyên văn bởi keke355992 View Post
    A Ba Tê hoặc ai có thể giúp e dùng mảng theo đúng mong mún trong bài này được ko ạ, vì cột G dữ liệu được tổng hợp từ nhiều hơn 1 nguồn ạ. E chỉ cần dữ liệu tổng cộng cho cột I thôi !
    Nếu vậy thì bạn thay Sub trên bằng cái này thử xem.
    PHP Code:
    Sub Mang()
    Dim sArr(), dArr(), As LongTem As String
        sArr 
    Range("B4"Range("B4").End(xlDown)).Resize(, 2).Value
    With CreateObject
    ("Scripting.Dictionary")
        For 
    1 To UBound(sArr)
            
    Tem Trim(sArr(I1)): .Item(Tem) = .Item(Tem) + sArr(I2)
        
    Next I
            sArr 
    Range("G4"Range("G4").End(xlDown)).Value
            ReDim dArr
    (1 To UBound(sArr), 1 To 1)
        For 
    1 To UBound(sArr)
            
    Tem Trim(sArr(I1)): dArr(I1) = .Item(Tem)
        
    Next I
    End With
        Range
    ("I4").Resize(1) = dArr
    End Sub 
    Chú ý: Công thức trong cột H của bạn chưa chuẩn!
    thay đổi nội dung bởi: Ba Tê, 16-02-17 lúc 10:46 PM
    ------------------------


    --Bể dốt mênh mông, quay đầu... là bờ ?!

    Tra Cứu Hàm Excel
    Kỷ niệm Hà Nội 16/01/2010

  3. bạn xem cách dùng 1 mảng Darr
    Code:
    Sub Mang()
    Dim Darr(), i As Long
    Darr = Range("B4", Range("B4").End(xlDown)).Resize(, 2).Value
    sArr = Range("G4", Range("G4").End(xlDown)).Value
    With CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(Darr)
        .Item(Darr(i, 1)) = .Item(Darr(i, 1)) + Darr(i, 2)
      Next i
      Darr = Range("F4", Range("G4").End(xlDown)).Value
      For i = 1 To UBound(Darr)
        Darr(i, 1) = .Item(Darr(i, 2))
      Next i
    End With
    Range("I4").Resize(UBound(Darr), 1) = Darr
    End Sub

  4. Trích Nguyên văn bởi HieuCD View Post
    bạn thử code
    Code:
    Sub Mang()
    Dim Sarr(), Darr(), Arr(), i As Long, Tmp As String
    Darr = Range("B4", Range("B4").End(xlDown)).Resize(, 2).Value
    Sarr = Range("G4", Range("G4").End(xlDown)).Value
    ReDim Arr(1 To UBound(Sarr), 1 To 1)
    With CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(Darr)
        Tmp = Trim(Darr(i, 1))
        If Not .Exists(Tmp) Then
            .Add Tmp, Darr(i, 2)
        Else
            .Item(Tmp) = .Item(Tmp) + Darr(i, 2)
        End If
      Next i
      For i = 1 To UBound(Sarr)
        Tmp = Trim(Sarr(i, 1))
        If .Exists(Tmp) Then Arr(i, 1) = .Item(Tmp)
      Next i
    End With
    Range("I4").Resize(UBound(Sarr), 1) = Arr
    End Sub
    Trích Nguyên văn bởi Ba Tê View Post
    Nếu vậy thì bạn thay Sub trên bằng cái này thử xem.
    PHP Code:
    Sub Mang()
    Dim sArr(), dArr(), As LongTem As String
        sArr 
    Range("B4"Range("B4").End(xlDown)).Resize(, 2).Value
    With CreateObject
    ("Scripting.Dictionary")
        For 
    1 To UBound(sArr)
            
    Tem Trim(sArr(I1)): .Item(Tem) = .Item(Tem) + sArr(I2)
        
    Next I
            sArr 
    Range("G4"Range("G4").End(xlDown)).Value
            ReDim dArr
    (1 To UBound(sArr), 1 To 1)
        For 
    1 To UBound(sArr)
            
    Tem Trim(sArr(I1)): dArr(I1) = .Item(Tem)
        
    Next I
    End With
        Range
    ("I4").Resize(1) = dArr
    End Sub 
    Chú ý: Công thức trong cột H của bạn chưa chuẩn!
    Trích Nguyên văn bởi HieuCD View Post
    bạn xem cách dùng 1 mảng Darr
    Code:
    Sub Mang()
    Dim Darr(), i As Long
    Darr = Range("B4", Range("B4").End(xlDown)).Resize(, 2).Value
    sArr = Range("G4", Range("G4").End(xlDown)).Value
    With CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(Darr)
        .Item(Darr(i, 1)) = .Item(Darr(i, 1)) + Darr(i, 2)
      Next i
      Darr = Range("F4", Range("G4").End(xlDown)).Value
      For i = 1 To UBound(Darr)
        Darr(i, 1) = .Item(Darr(i, 2))
      Next i
    End With
    Range("I4").Resize(UBound(Darr), 1) = Darr
    End Sub

    Chân thành cảm ơn 2 bác, không thể tuyệt vời hơn. Chúc 2 bác và Anh chị e ngày cuối tuấn vui vẻ J

  5. Trích Nguyên văn bởi keke355992 View Post
    E làm thử bằng Pivot ra kết quả cũng như của a Ba Tê vậy. nhưng mục đích làm của e không pải là để báo cáo nên sợ Pivot không linh động bằng cách dùng mảng thầy ạ. Tại e cũng đang nghiên cứu về mảng nữa
    Nếu nói NGHIÊN CỨU thì ok, chứ PivotTable mà nói không linh hoạt thì còn thằng nào linh hoạt hơn nữa?

  6. Trích Nguyên văn bởi ndu96081631 View Post
    Nếu nói NGHIÊN CỨU thì ok, chứ PivotTable mà nói không linh hoạt thì còn thằng nào linh hoạt hơn nữa?
    Chủ thớt cho rằng mảng là cái linh động hơn PivotTable. Bạn nói về sự linh hoạt cho nên trật ý chủ thớt.

    (thật sự tôi cũng không chắc chủ thớt hiểu "mảng" là cái gì không nữa. Chưa kể đến việc mảng nó "linh động" ở chỗ nào. Hình như đối với chủ thớt cái nào trông vào hành tráng khó hiểu thì là linh động)

  7. Trích Nguyên văn bởi ndu96081631 View Post
    Nếu nói NGHIÊN CỨU thì ok, chứ PivotTable mà nói không linh hoạt thì còn thằng nào linh hoạt hơn nữa?
    Để ra được cái dữ liệu như trong File, nó còn kết hợp với 3 Sheet nữa ạ, và nó bị kết hợp cả công thức nữa. E chưa vận dụng được hết VBA nên vẫn pải kết hợp vừa VBA, vừa công thức. Và với ví dụ trong file, là sẽ dựa vào đó để vận dụng vào bảng tính hoàn chỉnh. Nên e cảm thấy Pivot trong trường hợp này, chưa thực sự là cần thiết thầy ạ.

    Trích Nguyên văn bởi VetMini View Post
    Chủ thớt cho rằng mảng là cái linh động hơn PivotTable. Bạn nói về sự linh hoạt cho nên trật ý chủ thớt.

    (thật sự tôi cũng không chắc chủ thớt hiểu "mảng" là cái gì không nữa. Chưa kể đến việc mảng nó "linh động" ở chỗ nào. Hình như đối với chủ thớt cái nào trông vào hành tráng khó hiểu thì là linh động)
    - E đang tìm hiểu về mảng, e mún 1 nút bấm là nó ra cái e mún, trước tiên là đơn giản vậy ạ. Sau đó mới hoành tráng đc ạ
    - Mục đích sử dụng của e ở đây là loại bỏ dần công thức, để bảng tính nhẹ và chạy nhanh hơn ạ. Cái nào có thể thay thế được bằng VBA mà k làm ảnh hưởng đến sự tính toán, cũng như kết quả cuối cùng là sẽ kết hợp để vận dụng ngay.

  8. Trích Nguyên văn bởi keke355992 View Post
    - E đang tìm hiểu về mảng, e mún 1 nút bấm là nó ra cái e mún, trước tiên là đơn giản vậy ạ. Sau đó mới hoành tráng đc ạ
    - Mục đích sử dụng của e ở đây là loại bỏ dần công thức, để bảng tính nhẹ và chạy nhanh hơn ạ. Cái nào có thể thay thế được bằng VBA mà k làm ảnh hưởng đến sự tính toán, cũng như kết quả cuối cùng là sẽ kết hợp để vận dụng ngay.
    Bạn muốn làm gì thì cũng là chuyện của bạn. Và các thành viên "chuyên về mảng" có giúp được cũng là chuyện của họ.

    Tôi chỉ xen vào để cảnh báo cho các thành viên khác đang muốn học về VBA rằng:
    - So sánh giữa VBA và các công cụ hổ trợ như PivotTable, PowerPivot, ... thì VBA chưa hẳn đã linh hoạt hơn. Thời gian để viết ba cái code hoành tráng này nọ đem dùng để thiết kế lại bảng tính có thể tiện ích hơn.
    - Mảng không hẳn đã linh động. Vì trong VBA có công cụ chuyển range vào mảng và ngược lại cho nên nhiều người thích dùng nó để tăng tốc. Tham chiếu vào mảng là trưc tiếp vào vùng nhớ liên tục trong máy cho nên nhanh hơn tham chiếu vào cell/range là gián tiếp vào các objects trong bảng tính. Điểm chính là vậy thôi.
    - Muốn thực sự đạt đến sự "linh động" trong các cấu trúc dữ liệu (mảng, collection, dictionary,...) cần phảin học sâu lắm. Không đi đường tắt như bạn làm đâu.
    (người rất giỏi có thể đi đường tắt, nhưng người rất giỏi cũng biét cách áp dụng công cụ rất hiệu nghiệm, không đem xe tăng kéo cày)

  9. Trích Nguyên văn bởi VetMini View Post
    Bạn muốn làm gì thì cũng là chuyện của bạn. Và các thành viên "chuyên về mảng" có giúp được cũng là chuyện của họ.

    Tôi chỉ xen vào để cảnh báo cho các thành viên khác đang muốn học về VBA rằng:
    - So sánh giữa VBA và các công cụ hổ trợ như PivotTable, PowerPivot, ... thì VBA chưa hẳn đã linh hoạt hơn. Thời gian để viết ba cái code hoành tráng này nọ đem dùng để thiết kế lại bảng tính có thể tiện ích hơn.
    - Mảng không hẳn đã linh động. Vì trong VBA có công cụ chuyển range vào mảng và ngược lại cho nên nhiều người thích dùng nó để tăng tốc. Tham chiếu vào mảng là trưc tiếp vào vùng nhớ liên tục trong máy cho nên nhanh hơn tham chiếu vào cell/range là gián tiếp vào các objects trong bảng tính. Điểm chính là vậy thôi.
    - Muốn thực sự đạt đến sự "linh động" trong các cấu trúc dữ liệu (mảng, collection, dictionary,...) cần phảin học sâu lắm. Không đi đường tắt như bạn làm đâu.
    (người rất giỏi có thể đi đường tắt, nhưng người rất giỏi cũng biét cách áp dụng công cụ rất hiệu nghiệm, không đem xe tăng kéo cày)
    Kiến thức của em còn phải học hỏi nhiều mà, bây giờ mới bắt đầu biết đến VBA mà thôi. Cảm ơn những lời chia sẽ của a. Chúc a và mọi người buổi tối vui vẻ :)

  10. Trích Nguyên văn bởi keke355992 View Post
    Để ra được cái dữ liệu như trong File, nó còn kết hợp với 3 Sheet nữa ạ, và nó bị kết hợp cả công thức nữa. E chưa vận dụng được hết VBA nên vẫn pải kết hợp vừa VBA, vừa công thức. Và với ví dụ trong file, là sẽ dựa vào đó để vận dụng vào bảng tính hoàn chỉnh. Nên e cảm thấy Pivot trong trường hợp này, chưa thực sự là cần thiết thầy ạ.
    Kinh nghiệm của tôi: Nếu có rắc rối trong việc xừ lý kết quả thì điều đầu tiên tôi nghĩ tới phải là TA NÊN THIẾT KẾ LẠI CÁCH BỐ TRÍ CỦA DỮ LIỆU NHẬP chứ không phải cố làm bằng mọi cách để có được kết quả
    Nên nhờ rằng cơ sở dữ liệu chiếm đến hơn 50% sự thành công của kết quả (nếu không nói là 80 hay 90%). Thiết kế cơ sở dữ liệu thông minh tuy có cực lần đầu nhưng bạn sẽ dùng nó mãi mãi (Đây là cách ít hao tốn tài nguyên nhất)
    Tôi không biết "văn chương" nên sợ càng nói sẽ càng dài dòng. Chỉ là nêu quan điểm cá nhân, biết đâu có ai đó nghe và.. đồng cảm

Trang 2/3 đầuđầu 1 2 3 cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •