Tìm hiểu về mảng và công thức mảng

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi levanduyet, 1 Tháng tư 2005.

9,850 lượt xem

  1. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    Kính chào các bạn,
    Xin cung cấp các bạn file để tham khảo về array formula.
    Chúc các bạn thành công.
    Lê Văn Duyệt
     
    #1
  2. luongcp

    luongcp Thành viên sơ cấp

    Bài viết:
    42
    Đã được thích:
    0
    Nơi ở:
    HCMC
    Gửi chị Dung,

    Em co 1 VĐ ve CT mảng nhờ chị giúp nhé ...

    Tại ô A11, em lập CT mảng If(A1:A10<>"".sum(A1:A10)."100%")

    Là : Nếu tất cả các ô A1:A10 đều là rỗng thì A11 = "100%"
    Ngược lại, nếu có 1 ô trong A1:A10 khác rỗng thì A11=sum(A1:10)

    Kết quả của CT mà em trên như trên chẳng như ý chút nào ...

    Nhờ chị giúp em nhé

    Thanks
     
    #2
  3. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Tôi chẳng thấy có vấn đề gì cả, bạn xem thử có kết thúc công thức bằng Ctrl+Shift+Enter không ? Và xin nhắc các bạn, nếu có thể dùng những công thức khác được, thì các bạn nên dùng, hạn chế tối đa công thức mảng, vì công thức mảng tốn nhiều bộ nhớ lắm, thậm chí, nếu có thể các bạn hãy dùng SUMPRODUCT thay thế công thức mảng
     
    #3
  4. WhoamI

    WhoamI Thành viên thân thiết

    Bài viết:
    534
    Đã được thích:
    0
    Nơi ở:
    Cố lên, cứ đi rồi sẽ tới!
    Em có 2 mảng :
    Mảng 1: Gồm các giá trị: [ 1, 2, 3, 5, 9, 6, 14]
    Mảng 2: Gồm các giá trị: [ 1, 6, 10, 11, 12]
    Bây giờ em muốn lấy ra Mảng 3 : [3; 5; 9; 10; 11; 12]
    Gồm các giá trị không giao giữa mảng 1 và mảng 2 thì có cách nào không chi?
     
    #4
  5. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Cái này sử dụng công thức mảng, xem ra không ổn rồi, WhoamI à, dùng VBA tốt hơn, nếu em thích, chị sẽ gởi cho em File cùng Code để em nghiên cứu. Còn các bạn khác, ai có ý gì hay đóng góp nhé.
     
    #5
  6. ForestC

    ForestC Thành viên sơ cấp

    Bài viết:
    377
    Đã được thích:
    1
    Nơi ở:
    E'rywhere
    Với những người không ưa VBA như em W, có lẽ giải pháp của chị Dung đưa ra có vẻ hơi xa xỉ và khó tiếp cận chăng (mặc dù giải pháp đó hình như là tối ưu nhất), MaiKa nghĩ là có thể giải quyết vấn đề = Excel function . Khi nào về đến QN, MaiKa sẽ test và gửi file lên!
     
    #6
  7. ForestC

    ForestC Thành viên sơ cấp

    Bài viết:
    377
    Đã được thích:
    1
    Nơi ở:
    E'rywhere
    Quanh đi quẩn lại cuối cùng vẫn phải dùng đến ..VBA, nhưng ở đây VBA không phải là nhân tố chính, không dùng trong trường hợp này cũng được. Anh chỉ đưa cho em ý tưởng, em hãy phát triển tiếp = hàm Excel nhé.
     
    #7
  8. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Vấn đề chính của bài toán này là kết hợp 2 mảng lại với nhau, mà chẳng có công thức hay hàm nào có thể nối 2 mảng này lại. Bạn nào có ý tưởng hay thuật toán gì khác không, chứ nếu kết hợp 2 mảng lại thì buộc phải dùng VBA. Sau đó, lọc các số hạng không trùng nhau ra bằng công thức thì không có gì khó cả.
    Bạn cũng có thể nhập dữ liệu vào các mảng, thí dụ mảng 1 có 8 mẩu tin tại cột A, mảng 2 có 15 mẩu tin tại cột B, như vậy tại cột C, chọn C1:C8, rồi nhập công thức mảng =A1:A8, xong tiếp tục từ C9:C23 bạn nhập công thức mảng =B1:B15, bạn cũng nối được thành một mảng mới mà không dùng VBA, nhưng giải pháp này chỉ là tạm thời và không chuyên nghiệp, tốt nhất là dùng VBA
     
    #8
  9. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    To luongcp : Xin lỗi bạn vì trả lời chậm, một phần vì sau này tôi không mở hộp thư yahoo, bạn có thể gửi vào handung107@gmail.com, một phần thư của bạn không hiểu sao ở thư mục Bulk nên tôi không chú ý.
    File của bạn có 2 vấn đề :
    1/ Bạn muốn Cell A11 thể hiện dưới dạng %, bạn phải Format Cell này là Percentage, đồng thời, nếu bạn muốn Cell thể hiện 100%, thì kết quả của ô phải là 1, nếu 4%, kết quả phải là 0.04, nghĩa là kết quả của Ô phải được chia cho 100
    2/ Công thức mảng thường hay duyệt phần tử đầu tiên của mảng. Nếu bạn đặt điều kiện cho mảng A1:A10, mà phần tử đầu tiên A1 đáp ứng điều kiện, kết quả sẽ trả ngay theo điều kiện đáp ứng. Vậy kết quả của công thức mảng :
    {=IF(A1:A10<>"",SUM(A1:A10),"100%")}, sẽ trả ngay về 100% nếu A1 rỗng.
    Trong File của bạn, chỉ có Cell A4 có giá trị là 4, bạn hãy thử cho A1, A2, A3 =0, và vào Tool /Options, bỏ dấu kiểm Zero Values, nếu bạn muốn thể hiện là 4%, bạn hãy sửa công thức như sau :
    {=IF(A1:A10<>"",SUM(A1:A10),100)/100)}, và định dạng Cell A11 là Percentage, bạn sẽ có kết quả như ý
    Còn nếu vẫn chưa đúng ý bạn, bạn phải gửi yêu cầu cụ thể hơn, mỗi lần bạn nêu ra một chút ý, tôi không thể có cái nhìn tổng quát để giải đáp cho bạn
     
    #9
  10. workman

    workman Thành viên sơ cấp

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    Bạn có thể thử cách này xem. Củ chuối thôi, nhưng tránh được không phải vào VBA nhức đầu lắm.
    Giả sử mảng một đi từ ô A1:A7, mảng 2 từ ô B1:B5. Bạn tạo công thức sau ở ô C1: =IF(ISNA(MATCH(B1,$A$1:$A$7,0)),B1,""), rồi kéo công thức xuống tới bến luôn. Lúc này các giá trị không rỗng (blank) là các giá trị không giao của hai mảng trên. CHúc bạn vui
     
    #10
  11. WhoamI

    WhoamI Thành viên thân thiết

    Bài viết:
    534
    Đã được thích:
    0
    Nơi ở:
    Cố lên, cứ đi rồi sẽ tới!
    Cám ơn các anh, chị. Em sẽ thử và tìm hiểu tất cả các cách mà anh chị đã gợi ý, cả Công thức và VBA , hihi..tránh VBA mãi sao được vì có nhiều vấn đề mà các hàm, Tool trong Excel không giải quyết được và cần phải dùng tới VBA.
     
    #11
  12. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Điều này chỉ đúng nếu mảng B1:B5 là mảng con của mảng A1:A7, hoặc nếu không nó chỉ lấy được những phần tử của mảng B không có trong mảng A, còn những phần tử của mảng A không có trong mảng B thì không thể hiện tại cột C, không lẽ bạn phải lập thêm công thức như vậy tại cột D, rồi cuối cùng cũng phải kết hợp các phần tử tại cột C và cột D lại bằng VBA để có một mảng gồm các số không giao nhau giữa 2 mảng A và B ?
     
    #12
  13. ForestC

    ForestC Thành viên sơ cấp

    Bài viết:
    377
    Đã được thích:
    1
    Nơi ở:
    E'rywhere
    Vâng, tôi xem công thức của bạn Workman thấy nó có thể hữu ích vào một ngày nào đó (an other day in the paradise), tuy nhiên trong trường hợp bài toán của W ở đây có thể cái đó không giải quyết được = cách của bạn.

    P/S: Đề nghị anh chị em EFC tổ chức 1 lớp sơ cấp - cấp tốc VBA cho W , hihi, hình như em này vẫn chưa biết tạo add-in thì phải. Đúng là Laze có khác, mò mẫm 1 tý là biết thôi mà ko chịu khó gì cả.
     
    #13
  14. workman

    workman Thành viên sơ cấp

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    Hì hì, đúng là tối hôm qua mắt nhắm mắt mở làm tầm bậy thật, cám ơn các bạn đóng góp. Công thức đúng ra phải là =IF(ISNA(MATCH(B1,$A$1:$A$7,0)),B1&",","")&IF(ISNA(MATCH(A1,$B$1:$B$7,0)),A1,""). Còn muốn trau chuốt nữa thì phải làm thêm vào cái hàm xử lý chuỗi nữa.

    Hay lắm, bữa nào bác Maika chỉ giáo cho mấy chiêu VBA nhé. Tôi thú thực rất dốt về VBA, chắc tại già quá rồi.
     
    #14
  15. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Nếu làm theo ý tưởng của Workman, thì mảng này trở thành chuỗi rồi, và mỗi Cell sẽ chứa chuỗi 2 phần tử của mảng A và B nếu không giao nhau. Sẽ không tiện, nếu sau đó, ta phải tiếp tục sử dụng mảng này cho các công thức tính toán kế tiếp. Vấn đề này chỉ có VBA là cách xử lý tốt nhất, mặc dù tôi cũng ít thích sử dụng VBA trong Excel lắm
     
    #15
  16. snoopy2004

    snoopy2004 Thành viên thân thiết

    Bài viết:
    118
    Đã được thích:
    1
    Nơi ở:
    tphcm
    Cho mình hỏi điều này một chút: Mình muốn học về VBA trogn excel thì mình học ở đâu? Có bạn nào biết chỗ ko? NGoài ra có bạn nào có file về quản lý cơ sở dữ liệu trogn excel, sử dụng công thức mảng, các hàm của database.....
     
    #16
  17. workman

    workman Thành viên sơ cấp

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    VBA và csdl (database) là 2 khái niệm khác nhau. Thông thường những doanh nghiệp lớn và trung bình đều lưu trữ dữ liệu bằng những chương trình chuyên làm việc này. Nhỏ thì dùng Access, Foxpro. Trung bình thì dùng SQL. Lớn hơn tý nữa thì dùng Oracle, DBII (IBM). Tuy excel có thể sử dụng để lưu trữ dữ liệu thật, nhưng tôi thành thật khuyên bạn nên sử dụng những phần mềm quản lý Database, rồi dùng excel link vào đấy mà làm báo cáo, phân tích... Gần như tất cả những Database thông dụng đều có thể link vào Excel được cả.

    Còn về VBA, để mình chỉ cách này bạn làm thử nhé (hơi thô thiển nhưng chắc cũng xài được, mình cũng là dân dốt VBA mà). Đầu tiên bạn dùng Record macro, thực hiện một vài động tác căn bản trong excel để nó tự động ghi lại. Sau đó bấm nút Alt F8, chọn edit rồi vào xem những thao tác trên excel được thể hiện trên VBA như thế nào. Từ từ cho quen dần rồi hãy học đến những phần nâng cao. Tôi thấy trong Excel fan club này có rất nhiều cao thủ VBA đấy, bạn cứ mạnh dạn thọ giáo nhé.
     
    #17

Chia sẻ trang này