Công thức mảng trên EXCEL

Thảo luận trong 'Excel căn bản' bắt đầu bởi AnhExcel, 27/7/06.

  1. AnhExcel

    AnhExcel New Member Hội viên mới

    Được cảm ơn:
    0
    Điểm thành tích:
    0
    1) Giải thích các hàm

    + Hàm SMALL(VUNG,P): Cho ra giá trị ở vị trí P trong VUNG theo thứ tự từ thấp đến cao mặc dù VUNG chưa được sắp xếp.
    VD A1=4,A2=3,A3=5
    SMALL(A1:A3,3) = 5 (Vì nếu A1:A3 được sắp xếp tăng dần thì 5 sẽ ở vị trí thứ 3)
    SMALL(A1:A3,2) = 4 (Vì nếu A1:A3 được sắp xếp tăng dần thì 4 sẽ ở vị trí thứ 2)
    SMALL(A1:A3,1) = 3 (Vì nếu A1:A3 được sắp xếp tăng dần thì 4 sẽ ở vị trí thứ 1)
    + Hàm LARGE(VUNG,P): Cho ra giá trị ở vị trí P trong VUNG theo thứ tự từ cao đến thấp mặc dù VUNG chưa được sắp xếp.
    VD A1=4,A2=3,A3=5
    LARGE(A1:A3,3) = 3 (Vì nếu A1:A3 được sắp xếp giảm dần thì 3 sẽ ở vị trí thứ 3)

    + Hàm INDIRECT(TextRef) cho ra giá trị kiểu dạng Text thành dạng tham chiếu
    VD INDIRECT("A1")=A1
    Giả sử A1=4
    Nếu bạn dùng SUM("A1") kết quả là #VALUE!. Lỗi vì sai kiểu, đối số của SUM phải là dạng số hoặc các tham chiếu.
    SUM(A1) = 4 đúng vì đúng kiểu
    SUM(INDIRECT("A1")) = 4 đúng vì INDIRECT("A1") =A1, lúc đó EXCEL hiểu là SUM(A1)=>đúng kiểu.
    + Hàm ROW([THAMCHIEU]) nếu không có THAMCHIEU ROW() = dòng con trỏ hiện thời, còn nếu có sẽ cho ra dòng của tham chiếu ROW(A5)=5, ROW(2:2)=2, ROW(5:5)=5.
    + Hàm MOD(SCHIA,SBCHIA). Trả về giá trị 0 khi phép chia là chẵn,<>0 nếu lẻ (ứng dụng để tìm năm nhuận).
    VD: MOD(6,3)=0, MOD(7,3)=1, MOD(8,3)=2

    2) Công thức mảng
    Qua một ví dụ nhỏ bạn sẽ hiểu qua về Formula Array
    Giả sử cột A là SLG, B là DGIA. Cần tính tổng giá trị (Tổng thành tiền)
    A1=4;B1=2
    A2=3;B2=3
    A3=5;B3=2
    =SUM(A1:A3*B1:B3) Nhấn CTRL+SHIFT+ENTER
    {=SUM(A1:A3*B1:B3)}=27 (4*2+3*3+5*2=27)
    Theo cách phân tích của Formula Array thì EXCEL sẽ chạy con trỏ lần lượt tự dòng đầu tiên trong vùng dữ liệu A1:B1 đến dòng cuối của vùng là A3:B3. Mỗi một dòng khi con trỏ chạy qua Excel thực hiện công thức A1*B1, đến dòng thứ 2 là (A1*B1)+(A2*B2) và đến dòng thứ 3 là (A1*B1)+(A2*B2)+(A3*B3). EXCEL sẽ thực hiện tính từng dòng trong CSDL theo công thức chỉ định và tích luỹ lại theo phép tổng (SUM) và ra kết quả.

    Nếu bạn không dùng tổ hợp phím CTRL+SHIFT+ENTER thì gí trị ở cell sẽ là #VALUE! vì sai kiểu.
    Trên chính là phân tích về Fomula Array mà EXCEL thực hiện. Từ đây chúng ta sẽ tự lập cho mình những công thức tính có kết hợp nhiều diều kiện, trong khi bạn lập bạn nên có cách tư duy như: tính tổng vùng TIEN nếu như NGAY là Thứ 7, công thức sẽ là SUM(IF(WEEKDAY(NGAY)=7,TIEN,0)).
    Với công thức trên EXCEL sẽ cộng số TIEN ở dòng tương ứng là Thứ 7, nếu không phải cộng 0. Bạn cứ hình dung trình tự khi EXCEL phân tích công thức trên từng dòng và tích luỹ lại theo phép toán tuỳ vào bạn dung hàm gì bạn sẽ hiểu. Trong VD tren là tổng vì dung hàm SUM bên ngoài.

    3) Phép tính Logic
    "Trái" so sánh với "Phải"
    So sánh có thể là <,>,<>,=,>=,<=, Not
    2>3=FALSE
    3<5=TRUE

    TRUE=1
    FALSE=0
    TRUE+TRUE+....=1
    TRUE*FALSE*....=0
    (2>3)+(3<5)=FALSE+TRUE=TRUE=1 TĐ OR((2>3),(3<5))
    (2>3)*(3<5)=FALSE*TRUE=FALSE=0 TĐ AND((2>3),(3<5))


    4) Giải thích các bài của Handung107
    Các công thức trên đều là Formula Array
    Bạn đọc kỹ 3 phần trên bạn sẽ dễ hiểu!

    1.Tính tổng của N số hạng thấp nhất trong dãy A1:A60
    {=SUM(SMALL(A1:A60,ROW(INDIRECT("1:N"))))}
    Bạn xem lại 2 hàm SMALL và INDIRECT.

    Giả sử cho N=3 có nghĩa là sẽ tính tổng của 3 số thấp nhất trong vung A1:A60
    Khi EXCEL tính dòng 1 sẽ là (SMALL(A1:A60,ROW(INDIRECT("1:1"))))=Số thấp thứ 1
    Khi EXCEL tính dòng 2 sẽ là: Số thấp thứ 1+(SMALL(A1:A60,ROW(INDIRECT("2:2")))):-(Số thấp thứ 1+Số thứ thứ 2)
    Khi EXCEL tính dòng 3 sẽ là (Số thấp thứ 1+Số thứ thứ 2)+(SMALL(A1:A60,ROW(INDIRECT("3:3")))):-(Số thấp thứ 1+Số thứ thứ 2+Số thứ thứ 3)
    Đó chính là tổng của 3 số hạng thấp nhất. Nếu là N EXCEL sẽ chạy từ dòng 1 đến dòng N và tính như trên.
    (Số thấp thứ 1+Số thấp thứ thứ 3
    Tại sao A1:A60 vẫn giữ nguyên? Vì đối số đầu của SMALL phải là vùng SMALL(VUNG,P)

    2.Tính tổng của N số hạng cao nhất trong dãy A1:A60
    {=SUM(LARGE(A1:A60,ROW(INDIRECT("1:N"))))}
    Tương tự như 1) thay SMALL=LARGE =>ngược lại

    3.Tổng những số hạng ở những hàng cách nhau :
    {=SUM((A1:A60)*(MOD(ROW(A1:A60)-ROW(A1);2)=0))}
    ROW(A1)=1 (đã giải thích)
    Theo cách phân tích của Formula Array EXCEL thực hiện công thức từng dòng 1->60 như sau:
    Dòng 1 là (A1)*(MOD(ROW(A1)-ROW(A1),2)=0) Kế quả= A1*0=0
    Dòng 2 là (A2)*(MOD(ROW(A2)-ROW(A1),2)=0) Kế quả= A2*1=A2
    Dòng 3 là (A3)*(MOD(ROW(A3)-ROW(A1),2)=0) Kế quả= A2*0=0
    ....
    Dòng n là (An)*(MOD(ROW(n)-ROW(A1),2)=0) Kế quả= An*0=An (nếu N chẵn)
    EXCEL tính tổng và tích luỹ mỗi dòng=0+A2+0+...+0/An
    Câu 4,5,6 giải thích tương tự
    Trong hàm MOD(SCHIA,SBCHIA) bạn thay SBCHIA thành 5 hay 0 sẽ có ýa nghĩa khacks nhau.

    Câu 7,8 là phép tính có nhiều điều kiện (từ 2 ĐK trở lên) bạn vận dụng phép tính Logic
    Lg1+Lg2+..+Lgn=OR(Lg1,Lg2,..,Lgn)=TRUE khi ít nhất 1 Lg =True
    Lg1*Lg2*..*Lgn=AND(Lg1,Lg2,..,Lgn)=TRUE khi tất cả Lg =True

    Trong Formula Array không cho phép bạn dùng tuỳ tiện AND, OR và NOT

    7.Tổng những số hạng dựa trên điều kiện AND :
    {=SUM(IF((A1:A60>50)*(B1:B60="HH01");C1:C60;0))}
    Tính tổng các giá trị trong vùng C1:C60 nếu như giá trị dòng tương ứng của vùng A1:A60>50 và B1:B60="HH01"
    Phân tích theo EXCEL
    Dòng 1 là If((A1>50)*(B1="HH01"),C1,0))=C1 nếu (A1>50)*(B1="HH01")=TRUE, 0 nếu FALSE
    Dòng 2 là If((A2>50)*(B2="HH01"),C2,0))=C2 ........
    .....
    Dòng 60 .......

    Vì hàm bọc ngoài là SUM nên EXCEL sẽ tính tổng tích luỹ lại khi sang dòng mới.

    Cách 2 :
    {=SUM((A1:A60>50)*(B1:B60="HH01")*C1:C60;0)}

    Dòng 1 là If((A1>50)*(B1="HH01")*C1,0))=1*C1 nếu (A1>50)*(B1="HH01")=TRUE, 0*C1 nếu FALSE
    Dòng 2 là If((A2>50)*(B2="HH01"),C2,0))=C2 ........

    8. Tổng những số hạng dựa trên điều kiện OR :
    {=SUM((A1:A60>50)*((B1:B60="HH01")+(B1:B60="HH02") )*(C1:C60))}
    Cách giải thích như câu 7

    Trong công thức, phần ngăn cách đối số có máy là ( có máy là (,).
    VD IF(Tien>100;"Thưởng";"Không")
    Chuẩn phải là IF(Tien>100,"Thưởng","Không")
    Các bạn vào Control Panel\Regional Setting\Number chỉnh List, thoát khỏi Excel , mở lại là OK

    Chúc các bạn có thêm những sáng tạo để thêm sự hăng say công việc!

    (Nguồn :Webketoan)
     
    Last edited by a moderator: 7/8/06
  2. maythu

    maythu New Member Hội viên mới

    Được cảm ơn:
    0
    Điểm thành tích:
    0

Chia sẻ trang này