<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Thủ Thuật Access - Thư Viện Hàm]]></title>
		<link>https://thuthuataccess.com/forum/</link>
		<description><![CDATA[Thủ Thuật Access - https://thuthuataccess.com/forum]]></description>
		<pubDate>Thu, 14 May 2026 09:19:25 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[[Phần 3] Demo Xếp hạng (Dùng Mãng Array)]]></title>
			<link>https://thuthuataccess.com/forum/thread-11001.html</link>
			<pubDate>Wed, 26 Jun 2019 22:03:17 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-11001.html</guid>
			<description><![CDATA[<span style="color: #FF4136;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Dựa trên phần 2 phần này dùng Mãng để duyệt, làm cho việc sắp xếp số lượng lớn nhanh và nhẹ hơn</span></span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Option&nbsp;Compare&nbsp;Database<br /></span><span style="color: #DD0000">'Option&nbsp;Explicit<br />Public&nbsp;Mang()&nbsp;As&nbsp;Variant<br /><br />Function&nbsp;TaoMang(TenTable&nbsp;As&nbsp;String,&nbsp;TenCotCanXepHang&nbsp;As&nbsp;String,&nbsp;Optional&nbsp;XepTangdan&nbsp;As&nbsp;Boolean&nbsp;=&nbsp;True)<br />Dim&nbsp;rs&nbsp;As&nbsp;Recordset<br />Dim&nbsp;sql&nbsp;As&nbsp;String<br />Dim&nbsp;a&nbsp;As&nbsp;String,&nbsp;s&nbsp;As&nbsp;String<br />On&nbsp;Error&nbsp;GoTo&nbsp;Loi<br />Dim&nbsp;SoPhanTu&nbsp;As&nbsp;Long<br />Dim&nbsp;Mang1()&nbsp;As&nbsp;Variant<br /><br />sql&nbsp;=&nbsp;"SELECT&nbsp;"&nbsp;&amp;&nbsp;TenCotCanXepHang&nbsp;&amp;&nbsp;"&nbsp;FROM&nbsp;"&nbsp;&amp;&nbsp;TenTable&nbsp;&amp;&nbsp;"&nbsp;GROUP&nbsp;BY&nbsp;"&nbsp;&amp;&nbsp;TenCotCanXepHang<br /><br />Set&nbsp;rs&nbsp;=&nbsp;CurrentDb.OpenRecordset(sql)<br /> &nbsp; &nbsp;If&nbsp;rs.RecordCount&nbsp;&gt;&nbsp;0&nbsp;Then<br /> &nbsp; &nbsp;SoPhanTu&nbsp;=&nbsp;rs.RecordCount<br /> &nbsp; &nbsp;ReDim&nbsp;Mang1(SoPhanTu)<br /> &nbsp; &nbsp;rs.MoveFirst<br /> &nbsp; &nbsp;i&nbsp;=&nbsp;0<br /> &nbsp; &nbsp; &nbsp; &nbsp;Do&nbsp;Until&nbsp;rs.EOF<br /> &nbsp; &nbsp; &nbsp; &nbsp;Mang1(i)&nbsp;=&nbsp;rs.Fields(TenCotCanXepHang)<br /> &nbsp; &nbsp; &nbsp; &nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;1<br /> &nbsp; &nbsp; &nbsp; &nbsp;rs.MoveNext<br /> &nbsp; &nbsp;Loop<br /> &nbsp; &nbsp;Mang()&nbsp;=&nbsp;Mang1()<br /> &nbsp; &nbsp; &nbsp; &nbsp;If&nbsp;XepTangdan&nbsp;=&nbsp;True&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; &nbsp;XepMangTangDan<br /> &nbsp; &nbsp;Else<br /> &nbsp; &nbsp; &nbsp; &nbsp;XepMangGiamDan<br /> &nbsp; &nbsp;End&nbsp;If<br />End&nbsp;If<br />ThoatLoi:<br /> &nbsp; &nbsp;rs.Close<br /> &nbsp; &nbsp;Exit&nbsp;Function<br />Loi:<br /> &nbsp; &nbsp;Resume&nbsp;ThoatLoi<br />End&nbsp;Function<br /><br />Function&nbsp;HamXepHang3(TenTable&nbsp;As&nbsp;String,&nbsp;TenCotCanXepHang&nbsp;As&nbsp;String,&nbsp;SoCanXephang&nbsp;As&nbsp;Long)<br />On&nbsp;Error&nbsp;GoTo&nbsp;Loi<br />Dim&nbsp;i&nbsp;As&nbsp;Variant<br />i&nbsp;=&nbsp;UBound(Mang())<br />If&nbsp;i&nbsp;&lt;&gt;&nbsp;0&nbsp;Then<br /> &nbsp; &nbsp;TaoMang&nbsp;"BangLuong",&nbsp;"NGAYCONG"<br />End&nbsp;If<br /><br />ThoatLoi:<br /> &nbsp; &nbsp;HamXepHang3&nbsp;=&nbsp;VitriPhantu(Mang,&nbsp;SoCanXephang)<br /> &nbsp; &nbsp;Exit&nbsp;Function<br />Loi:<br /> &nbsp; &nbsp;<br /> &nbsp; &nbsp;TaoMang&nbsp;"BangLuong",&nbsp;"NGAYCONG"<br /> &nbsp; &nbsp;Resume&nbsp;ThoatLoi<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;VitriPhantu(Mang&nbsp;As&nbsp;Variant,&nbsp;TenPhanTuCanTim&nbsp;As&nbsp;Variant)&nbsp;As&nbsp;Variant<br />Dim&nbsp;i&nbsp;As&nbsp;Long<br />For&nbsp;i&nbsp;=&nbsp;LBound(Mang)&nbsp;To&nbsp;UBound(Mang)<br /> &nbsp; &nbsp;If&nbsp;Mang(i)&nbsp;=&nbsp;TenPhanTuCanTim&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; &nbsp;VitriPhantu&nbsp;=&nbsp;i<br /> &nbsp; &nbsp; &nbsp; &nbsp;Exit&nbsp;Function<br /> &nbsp; &nbsp;End&nbsp;If<br />Next&nbsp;i<br />VitriPhantu&nbsp;=&nbsp;Null<br />End&nbsp;Function<br /><br />Public&nbsp;Sub&nbsp;XepMangTangDan()<br /> &nbsp;Dim&nbsp;arr()&nbsp;As&nbsp;Variant<br /> &nbsp;arr&nbsp;=&nbsp;Mang()<br /> &nbsp;lngMin&nbsp;=&nbsp;LBound(arr)<br /> &nbsp;lngMax&nbsp;=&nbsp;UBound(arr)<br /> &nbsp;For&nbsp;i&nbsp;=&nbsp;lngMin&nbsp;To&nbsp;lngMax&nbsp;-&nbsp;1<br /> &nbsp; &nbsp;For&nbsp;j&nbsp;=&nbsp;i&nbsp;+&nbsp;1&nbsp;To&nbsp;lngMax<br /> &nbsp; &nbsp; &nbsp;If&nbsp;arr(i)&nbsp;&gt;&nbsp;arr(j)&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; &nbsp;strTemp&nbsp;=&nbsp;arr(i)<br /> &nbsp; &nbsp; &nbsp; &nbsp;arr(i)&nbsp;=&nbsp;arr(j)<br /> &nbsp; &nbsp; &nbsp; &nbsp;arr(j)&nbsp;=&nbsp;strTemp<br /> &nbsp; &nbsp; &nbsp; &nbsp;<br /> &nbsp; &nbsp; &nbsp;End&nbsp;If<br /> &nbsp; &nbsp;Next&nbsp;j<br /> &nbsp;Next&nbsp;i<br /> &nbsp; &nbsp; &nbsp; &nbsp;Mang()&nbsp;=&nbsp;arr<br />End&nbsp;Sub<br /><br />Public&nbsp;Sub&nbsp;XepMangGiamDan()<br /> &nbsp;Dim&nbsp;arr()&nbsp;As&nbsp;Variant<br /> &nbsp;arr&nbsp;=&nbsp;Mang()<br /> &nbsp;lngMin&nbsp;=&nbsp;LBound(arr)<br /> &nbsp;lngMax&nbsp;=&nbsp;UBound(arr)<br /> &nbsp;For&nbsp;i&nbsp;=&nbsp;lngMin&nbsp;To&nbsp;lngMax&nbsp;-&nbsp;1<br /> &nbsp; &nbsp;For&nbsp;j&nbsp;=&nbsp;i&nbsp;+&nbsp;1&nbsp;To&nbsp;lngMax<br /> &nbsp; &nbsp; &nbsp;If&nbsp;arr(i)&nbsp;&lt;&nbsp;arr(j)&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; &nbsp;strTemp&nbsp;=&nbsp;arr(i)<br /> &nbsp; &nbsp; &nbsp; &nbsp;arr(i)&nbsp;=&nbsp;arr(j)<br /> &nbsp; &nbsp; &nbsp; &nbsp;arr(j)&nbsp;=&nbsp;strTemp<br /> &nbsp; &nbsp; &nbsp;End&nbsp;If<br /> &nbsp; &nbsp;Next&nbsp;j<br /> &nbsp;Next&nbsp;i<br /> &nbsp;Mang()&nbsp;=&nbsp;arr<br />End&nbsp;Sub&nbsp;<br /></span></code></div></div></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=802" target="_blank" title="">DemoXephangbangQuery(Phan3).zip</a> (Kích cỡ: 40.69 KB / Tải về: 55)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<span style="color: #FF4136;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Dựa trên phần 2 phần này dùng Mãng để duyệt, làm cho việc sắp xếp số lượng lớn nhanh và nhẹ hơn</span></span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Option&nbsp;Compare&nbsp;Database<br /></span><span style="color: #DD0000">'Option&nbsp;Explicit<br />Public&nbsp;Mang()&nbsp;As&nbsp;Variant<br /><br />Function&nbsp;TaoMang(TenTable&nbsp;As&nbsp;String,&nbsp;TenCotCanXepHang&nbsp;As&nbsp;String,&nbsp;Optional&nbsp;XepTangdan&nbsp;As&nbsp;Boolean&nbsp;=&nbsp;True)<br />Dim&nbsp;rs&nbsp;As&nbsp;Recordset<br />Dim&nbsp;sql&nbsp;As&nbsp;String<br />Dim&nbsp;a&nbsp;As&nbsp;String,&nbsp;s&nbsp;As&nbsp;String<br />On&nbsp;Error&nbsp;GoTo&nbsp;Loi<br />Dim&nbsp;SoPhanTu&nbsp;As&nbsp;Long<br />Dim&nbsp;Mang1()&nbsp;As&nbsp;Variant<br /><br />sql&nbsp;=&nbsp;"SELECT&nbsp;"&nbsp;&amp;&nbsp;TenCotCanXepHang&nbsp;&amp;&nbsp;"&nbsp;FROM&nbsp;"&nbsp;&amp;&nbsp;TenTable&nbsp;&amp;&nbsp;"&nbsp;GROUP&nbsp;BY&nbsp;"&nbsp;&amp;&nbsp;TenCotCanXepHang<br /><br />Set&nbsp;rs&nbsp;=&nbsp;CurrentDb.OpenRecordset(sql)<br /> &nbsp; &nbsp;If&nbsp;rs.RecordCount&nbsp;&gt;&nbsp;0&nbsp;Then<br /> &nbsp; &nbsp;SoPhanTu&nbsp;=&nbsp;rs.RecordCount<br /> &nbsp; &nbsp;ReDim&nbsp;Mang1(SoPhanTu)<br /> &nbsp; &nbsp;rs.MoveFirst<br /> &nbsp; &nbsp;i&nbsp;=&nbsp;0<br /> &nbsp; &nbsp; &nbsp; &nbsp;Do&nbsp;Until&nbsp;rs.EOF<br /> &nbsp; &nbsp; &nbsp; &nbsp;Mang1(i)&nbsp;=&nbsp;rs.Fields(TenCotCanXepHang)<br /> &nbsp; &nbsp; &nbsp; &nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;1<br /> &nbsp; &nbsp; &nbsp; &nbsp;rs.MoveNext<br /> &nbsp; &nbsp;Loop<br /> &nbsp; &nbsp;Mang()&nbsp;=&nbsp;Mang1()<br /> &nbsp; &nbsp; &nbsp; &nbsp;If&nbsp;XepTangdan&nbsp;=&nbsp;True&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; &nbsp;XepMangTangDan<br /> &nbsp; &nbsp;Else<br /> &nbsp; &nbsp; &nbsp; &nbsp;XepMangGiamDan<br /> &nbsp; &nbsp;End&nbsp;If<br />End&nbsp;If<br />ThoatLoi:<br /> &nbsp; &nbsp;rs.Close<br /> &nbsp; &nbsp;Exit&nbsp;Function<br />Loi:<br /> &nbsp; &nbsp;Resume&nbsp;ThoatLoi<br />End&nbsp;Function<br /><br />Function&nbsp;HamXepHang3(TenTable&nbsp;As&nbsp;String,&nbsp;TenCotCanXepHang&nbsp;As&nbsp;String,&nbsp;SoCanXephang&nbsp;As&nbsp;Long)<br />On&nbsp;Error&nbsp;GoTo&nbsp;Loi<br />Dim&nbsp;i&nbsp;As&nbsp;Variant<br />i&nbsp;=&nbsp;UBound(Mang())<br />If&nbsp;i&nbsp;&lt;&gt;&nbsp;0&nbsp;Then<br /> &nbsp; &nbsp;TaoMang&nbsp;"BangLuong",&nbsp;"NGAYCONG"<br />End&nbsp;If<br /><br />ThoatLoi:<br /> &nbsp; &nbsp;HamXepHang3&nbsp;=&nbsp;VitriPhantu(Mang,&nbsp;SoCanXephang)<br /> &nbsp; &nbsp;Exit&nbsp;Function<br />Loi:<br /> &nbsp; &nbsp;<br /> &nbsp; &nbsp;TaoMang&nbsp;"BangLuong",&nbsp;"NGAYCONG"<br /> &nbsp; &nbsp;Resume&nbsp;ThoatLoi<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;VitriPhantu(Mang&nbsp;As&nbsp;Variant,&nbsp;TenPhanTuCanTim&nbsp;As&nbsp;Variant)&nbsp;As&nbsp;Variant<br />Dim&nbsp;i&nbsp;As&nbsp;Long<br />For&nbsp;i&nbsp;=&nbsp;LBound(Mang)&nbsp;To&nbsp;UBound(Mang)<br /> &nbsp; &nbsp;If&nbsp;Mang(i)&nbsp;=&nbsp;TenPhanTuCanTim&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; &nbsp;VitriPhantu&nbsp;=&nbsp;i<br /> &nbsp; &nbsp; &nbsp; &nbsp;Exit&nbsp;Function<br /> &nbsp; &nbsp;End&nbsp;If<br />Next&nbsp;i<br />VitriPhantu&nbsp;=&nbsp;Null<br />End&nbsp;Function<br /><br />Public&nbsp;Sub&nbsp;XepMangTangDan()<br /> &nbsp;Dim&nbsp;arr()&nbsp;As&nbsp;Variant<br /> &nbsp;arr&nbsp;=&nbsp;Mang()<br /> &nbsp;lngMin&nbsp;=&nbsp;LBound(arr)<br /> &nbsp;lngMax&nbsp;=&nbsp;UBound(arr)<br /> &nbsp;For&nbsp;i&nbsp;=&nbsp;lngMin&nbsp;To&nbsp;lngMax&nbsp;-&nbsp;1<br /> &nbsp; &nbsp;For&nbsp;j&nbsp;=&nbsp;i&nbsp;+&nbsp;1&nbsp;To&nbsp;lngMax<br /> &nbsp; &nbsp; &nbsp;If&nbsp;arr(i)&nbsp;&gt;&nbsp;arr(j)&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; &nbsp;strTemp&nbsp;=&nbsp;arr(i)<br /> &nbsp; &nbsp; &nbsp; &nbsp;arr(i)&nbsp;=&nbsp;arr(j)<br /> &nbsp; &nbsp; &nbsp; &nbsp;arr(j)&nbsp;=&nbsp;strTemp<br /> &nbsp; &nbsp; &nbsp; &nbsp;<br /> &nbsp; &nbsp; &nbsp;End&nbsp;If<br /> &nbsp; &nbsp;Next&nbsp;j<br /> &nbsp;Next&nbsp;i<br /> &nbsp; &nbsp; &nbsp; &nbsp;Mang()&nbsp;=&nbsp;arr<br />End&nbsp;Sub<br /><br />Public&nbsp;Sub&nbsp;XepMangGiamDan()<br /> &nbsp;Dim&nbsp;arr()&nbsp;As&nbsp;Variant<br /> &nbsp;arr&nbsp;=&nbsp;Mang()<br /> &nbsp;lngMin&nbsp;=&nbsp;LBound(arr)<br /> &nbsp;lngMax&nbsp;=&nbsp;UBound(arr)<br /> &nbsp;For&nbsp;i&nbsp;=&nbsp;lngMin&nbsp;To&nbsp;lngMax&nbsp;-&nbsp;1<br /> &nbsp; &nbsp;For&nbsp;j&nbsp;=&nbsp;i&nbsp;+&nbsp;1&nbsp;To&nbsp;lngMax<br /> &nbsp; &nbsp; &nbsp;If&nbsp;arr(i)&nbsp;&lt;&nbsp;arr(j)&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; &nbsp;strTemp&nbsp;=&nbsp;arr(i)<br /> &nbsp; &nbsp; &nbsp; &nbsp;arr(i)&nbsp;=&nbsp;arr(j)<br /> &nbsp; &nbsp; &nbsp; &nbsp;arr(j)&nbsp;=&nbsp;strTemp<br /> &nbsp; &nbsp; &nbsp;End&nbsp;If<br /> &nbsp; &nbsp;Next&nbsp;j<br /> &nbsp;Next&nbsp;i<br /> &nbsp;Mang()&nbsp;=&nbsp;arr<br />End&nbsp;Sub&nbsp;<br /></span></code></div></div></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=802" target="_blank" title="">DemoXephangbangQuery(Phan3).zip</a> (Kích cỡ: 40.69 KB / Tải về: 55)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Phần 2] Demo Hàm Xếp hạng]]></title>
			<link>https://thuthuataccess.com/forum/thread-11000.html</link>
			<pubDate>Wed, 26 Jun 2019 18:18:17 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-11000.html</guid>
			<description><![CDATA[Trưước đây tôi có 1 <a href="http://thuthuataccess.com/forum/thread-8333.html" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b">Hướng Dẫn</span> Demo Code Xếp hạng trong Query giống như hàm Rank trong Excel</a> hạn chế của nó là nó bị nhảy bậc.<br />
<br />
Và thể theo yêu cầu của nguyenvanhongthang@gmail.com ta se viết 1 hàm ngắn gọn và dùng được trên mọi địa hình.<br />
<br />
<br />
<blockquote class="mycode_quote"><cite>Trích dẫn:</cite>từ:Nguyễn Văn Hồng Thắng &lt;nguyenvanhongthang@gmail.com&gt;<br />
tới:maidinhdan@gmail.com<br />
ngày:21:05, 26 thg 6, 2019<br />
Bạn có thể huớng dẫn mình xếp thứ hạng mà không bị nhảy bậc được không<br />
ạ? Thấy cái bạn làm ở đây nó bị nhảy bậc khi có người bằng nhau mất.<br />
Mong bạn giúp đỡ ạ!</blockquote>
<br />
<span style="color: #17B529;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">* Để thực hiện được ta viết 1 hàm như sau</span></span><br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #DD0000">'---------------------------------------------------------------------------------------<br />'&nbsp;</span><span style="color: #0000BB">Procedure&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">HamXepHang&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">I</span><span style="color: #007700">)<br /></span><span style="color: #DD0000">'&nbsp;Author &nbsp; &nbsp;:&nbsp;HENDAN_WIN10PRO<br />'&nbsp;</span><span style="color: #0000BB">Date &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">27</span><span style="color: #007700">/</span><span style="color: #0000BB">06</span><span style="color: #007700">/</span><span style="color: #0000BB">2019<br /></span><span style="color: #DD0000">'&nbsp;Purpose &nbsp;:&nbsp;HamXepHang("BangLuong","NGAYCONG",[NGAYCONG])<br />'</span><span style="color: #007700">---------------------------------------------------------------------------------------<br /></span><span style="color: #DD0000">'<br />Function&nbsp;HamXepHang(TenTable&nbsp;As&nbsp;String,&nbsp;TenCotCanXepHang&nbsp;As&nbsp;String,&nbsp;SoCanXep&nbsp;As&nbsp;Integer)&nbsp;As&nbsp;Integer<br />Dim&nbsp;rs&nbsp;As&nbsp;Recordset<br />Dim&nbsp;sql&nbsp;As&nbsp;String<br />Dim&nbsp;i&nbsp;As&nbsp;Integer<br />On&nbsp;Error&nbsp;GoTo&nbsp;Loi<br /><br />sql&nbsp;=&nbsp;"SELECT&nbsp;"&nbsp;&amp;&nbsp;TenCotCanXepHang&nbsp;&amp;&nbsp;"&nbsp;FROM&nbsp;"&nbsp;&amp;&nbsp;TenTable&nbsp;&amp;&nbsp;"&nbsp;GROUP&nbsp;BY&nbsp;"&nbsp;&amp;&nbsp;TenCotCanXepHang&nbsp;&amp;&nbsp;"&nbsp;ORDER&nbsp;BY&nbsp;"&nbsp;&amp;&nbsp;TenCotCanXepHang<br />Set&nbsp;rs&nbsp;=&nbsp;CurrentDb.OpenRecordset(sql)<br /> &nbsp; &nbsp;If&nbsp;rs.RecordCount&nbsp;&gt;&nbsp;0&nbsp;Then<br /> &nbsp; &nbsp;rs.MoveFirst<br /> &nbsp; &nbsp;i&nbsp;=&nbsp;1<br /> &nbsp; &nbsp; &nbsp; &nbsp;Do&nbsp;Until&nbsp;rs.EOF<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;If&nbsp;rs.Fields(TenCotCanXepHang)&nbsp;=&nbsp;SoCanXep&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;HamXepHang&nbsp;=&nbsp;i<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GoTo&nbsp;ThoatLoi<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End&nbsp;If<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;1<br /> &nbsp; &nbsp; &nbsp; &nbsp;rs.MoveNext<br /> &nbsp; &nbsp; &nbsp; &nbsp;Loop<br /> &nbsp; &nbsp;Else<br /> &nbsp; &nbsp;MsgBox&nbsp;"Khong&nbsp;co&nbsp;nguoi&nbsp;nao&nbsp;de&nbsp;xep&nbsp;hang"<br />End&nbsp;If<br />ThoatLoi:<br /> &nbsp; &nbsp;rs.Close<br /> &nbsp; &nbsp;Exit&nbsp;Function<br />Loi:<br /> &nbsp; &nbsp;Resume&nbsp;ThoatLoi<br /><br />End&nbsp;Function&nbsp;<br /></span></code></div></div></div><br />
<br />
<span style="color: #2ECC40;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">* Cú pháp gọi để sử dụng</span></span><br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">HamXepHang</span><span style="color: #007700">(</span><span style="color: #DD0000">"Tên&nbsp;table&nbsp;của&nbsp;bạn"</span><span style="color: #007700">,</span><span style="color: #DD0000">"Tên&nbsp;cột&nbsp;cần&nbsp;xếp&nbsp;hạng"</span><span style="color: #007700">,[</span><span style="color: #0000BB">Tên đối&nbsp;tượng&nbsp;cần&nbsp;phân&nbsp;loại&nbsp;hạng&nbsp;mấy</span><span style="color: #007700">])&nbsp;<br /></span></code></div></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #F551FF;" class="mycode_color">* Lưu ý</span></span>, 2 tham số đầu 1 kiểu chuỗi phải đặt trong dấy nháy đôi, còn cái thứ 3 phải để trong dấy []<br />
<br />
* Đính kèm Demo.<br />
<span style="color: #FF4136;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Thân mếm</span></span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=801" target="_blank" title="">DemoXephangbangQuery(PhanII).zip</a> (Kích cỡ: 32.45 KB / Tải về: 65)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Trưước đây tôi có 1 <a href="http://thuthuataccess.com/forum/thread-8333.html" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b">Hướng Dẫn</span> Demo Code Xếp hạng trong Query giống như hàm Rank trong Excel</a> hạn chế của nó là nó bị nhảy bậc.<br />
<br />
Và thể theo yêu cầu của nguyenvanhongthang@gmail.com ta se viết 1 hàm ngắn gọn và dùng được trên mọi địa hình.<br />
<br />
<br />
<blockquote class="mycode_quote"><cite>Trích dẫn:</cite>từ:Nguyễn Văn Hồng Thắng &lt;nguyenvanhongthang@gmail.com&gt;<br />
tới:maidinhdan@gmail.com<br />
ngày:21:05, 26 thg 6, 2019<br />
Bạn có thể huớng dẫn mình xếp thứ hạng mà không bị nhảy bậc được không<br />
ạ? Thấy cái bạn làm ở đây nó bị nhảy bậc khi có người bằng nhau mất.<br />
Mong bạn giúp đỡ ạ!</blockquote>
<br />
<span style="color: #17B529;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">* Để thực hiện được ta viết 1 hàm như sau</span></span><br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #DD0000">'---------------------------------------------------------------------------------------<br />'&nbsp;</span><span style="color: #0000BB">Procedure&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">HamXepHang&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">I</span><span style="color: #007700">)<br /></span><span style="color: #DD0000">'&nbsp;Author &nbsp; &nbsp;:&nbsp;HENDAN_WIN10PRO<br />'&nbsp;</span><span style="color: #0000BB">Date &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">27</span><span style="color: #007700">/</span><span style="color: #0000BB">06</span><span style="color: #007700">/</span><span style="color: #0000BB">2019<br /></span><span style="color: #DD0000">'&nbsp;Purpose &nbsp;:&nbsp;HamXepHang("BangLuong","NGAYCONG",[NGAYCONG])<br />'</span><span style="color: #007700">---------------------------------------------------------------------------------------<br /></span><span style="color: #DD0000">'<br />Function&nbsp;HamXepHang(TenTable&nbsp;As&nbsp;String,&nbsp;TenCotCanXepHang&nbsp;As&nbsp;String,&nbsp;SoCanXep&nbsp;As&nbsp;Integer)&nbsp;As&nbsp;Integer<br />Dim&nbsp;rs&nbsp;As&nbsp;Recordset<br />Dim&nbsp;sql&nbsp;As&nbsp;String<br />Dim&nbsp;i&nbsp;As&nbsp;Integer<br />On&nbsp;Error&nbsp;GoTo&nbsp;Loi<br /><br />sql&nbsp;=&nbsp;"SELECT&nbsp;"&nbsp;&amp;&nbsp;TenCotCanXepHang&nbsp;&amp;&nbsp;"&nbsp;FROM&nbsp;"&nbsp;&amp;&nbsp;TenTable&nbsp;&amp;&nbsp;"&nbsp;GROUP&nbsp;BY&nbsp;"&nbsp;&amp;&nbsp;TenCotCanXepHang&nbsp;&amp;&nbsp;"&nbsp;ORDER&nbsp;BY&nbsp;"&nbsp;&amp;&nbsp;TenCotCanXepHang<br />Set&nbsp;rs&nbsp;=&nbsp;CurrentDb.OpenRecordset(sql)<br /> &nbsp; &nbsp;If&nbsp;rs.RecordCount&nbsp;&gt;&nbsp;0&nbsp;Then<br /> &nbsp; &nbsp;rs.MoveFirst<br /> &nbsp; &nbsp;i&nbsp;=&nbsp;1<br /> &nbsp; &nbsp; &nbsp; &nbsp;Do&nbsp;Until&nbsp;rs.EOF<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;If&nbsp;rs.Fields(TenCotCanXepHang)&nbsp;=&nbsp;SoCanXep&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;HamXepHang&nbsp;=&nbsp;i<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GoTo&nbsp;ThoatLoi<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End&nbsp;If<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;1<br /> &nbsp; &nbsp; &nbsp; &nbsp;rs.MoveNext<br /> &nbsp; &nbsp; &nbsp; &nbsp;Loop<br /> &nbsp; &nbsp;Else<br /> &nbsp; &nbsp;MsgBox&nbsp;"Khong&nbsp;co&nbsp;nguoi&nbsp;nao&nbsp;de&nbsp;xep&nbsp;hang"<br />End&nbsp;If<br />ThoatLoi:<br /> &nbsp; &nbsp;rs.Close<br /> &nbsp; &nbsp;Exit&nbsp;Function<br />Loi:<br /> &nbsp; &nbsp;Resume&nbsp;ThoatLoi<br /><br />End&nbsp;Function&nbsp;<br /></span></code></div></div></div><br />
<br />
<span style="color: #2ECC40;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">* Cú pháp gọi để sử dụng</span></span><br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">HamXepHang</span><span style="color: #007700">(</span><span style="color: #DD0000">"Tên&nbsp;table&nbsp;của&nbsp;bạn"</span><span style="color: #007700">,</span><span style="color: #DD0000">"Tên&nbsp;cột&nbsp;cần&nbsp;xếp&nbsp;hạng"</span><span style="color: #007700">,[</span><span style="color: #0000BB">Tên đối&nbsp;tượng&nbsp;cần&nbsp;phân&nbsp;loại&nbsp;hạng&nbsp;mấy</span><span style="color: #007700">])&nbsp;<br /></span></code></div></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #F551FF;" class="mycode_color">* Lưu ý</span></span>, 2 tham số đầu 1 kiểu chuỗi phải đặt trong dấy nháy đôi, còn cái thứ 3 phải để trong dấy []<br />
<br />
* Đính kèm Demo.<br />
<span style="color: #FF4136;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Thân mếm</span></span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=801" target="_blank" title="">DemoXephangbangQuery(PhanII).zip</a> (Kích cỡ: 32.45 KB / Tải về: 65)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hàm chuyển tiền thành chữ Unicode (một hàm duy nhất) không lỗi Font]]></title>
			<link>https://thuthuataccess.com/forum/thread-9823.html</link>
			<pubDate>Sat, 18 Feb 2017 11:00:43 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=15953">tranthanhan1962</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-9823.html</guid>
			<description><![CDATA[Ngồi vọc lại mấy chương trình cổ thấy hàm đọc số excel của một cao thủ đời 80 thấy hay quá. Function này cũng xài tốt cho access. Có điều font VNI thì được còn Unicode bị lỗi font. Thử gõ lại phần tiếng Việt bằng bộ gõ Windows, không ngờ lại OK.<br />
<div class="codeblock"><div class="title">Mã:</div><div class="body" dir="ltr"><code>Public Function VND(BaoNhieu)<br />
Dim KetQua, SOTIEN, Nhom, Chu, Dich, S1, S2, S3 As String<br />
Dim i, j, Vitri As Byte, S As Double<br />
Dim HANG, Doc, Dem, l<br />
If BaoNhieu = 0 Then<br />
   KetQua = "Không đồng"<br />
Else<br />
   If Abs(BaoNhieu) &gt;= 1E+15 Then '1E+15 tức 1.000.000.000.000.000 tức 1 triệu tỷ<br />
       KetQua = "Số quá lớn"<br />
   Else<br />
       If BaoNhieu &lt; 0 Then<br />
           KetQua = "Âm" &amp; Space(1)<br />
       Else<br />
           KetQua = Space(0)<br />
           End If<br />
           SOTIEN = Format(Abs(BaoNhieu), "##############0.00")<br />
           SOTIEN = Right(Space(15) &amp; SOTIEN, 18)<br />
           HANG = Array("None", "trăm", "mươi", "gì đó")<br />
           Doc = Array("Nonne", "nghìn tỷ", "tỷ", "triệu", "nghìn", "đồng", "xu")<br />
           Dem = Array("None", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín")<br />
           For i = 1 To 6<br />
               Nhom = Mid(SOTIEN, i * 3 - 2, 3)<br />
               If Nhom &lt;&gt; Space(3) Then<br />
                   Select Case Nhom<br />
                       Case "000"<br />
                           If i = 5 Then<br />
                               Chu = "đồng" &amp; Space(1)<br />
                           Else<br />
                               Chu = Space(0)<br />
                           End If<br />
                       Case ",00"<br />
                       Chu = "chẵn"<br />
                       Case "0.00"<br />
                       Chu = " chẵn"<br />
                       Case Else<br />
                           S1 = Left(Nhom, 1)<br />
                           S2 = Mid(Nhom, 2, 1)<br />
                           S3 = Right(Nhom, 1)<br />
                           Chu = Space(0)<br />
                           HANG(3) = Doc(i)<br />
                           For j = 1 To 3<br />
                               Dich = Space(0)<br />
                               S = Val(Mid(Nhom, j, 1))<br />
                               If S &gt; 0 Then<br />
                                   Dich = Dem(S) &amp; Space(1) &amp; HANG(j) &amp; Space(1)<br />
                               End If<br />
                               Select Case j<br />
                                   Case 2 And S = 1<br />
                                       Dich = "mười" &amp; Space(1)<br />
                                   Case 3 And S = 0 And Nhom &lt;&gt; Space(2) &amp; "0"<br />
                                       Dich = HANG(j) &amp; Space(1)<br />
                               Case 3 And S = 5 And S2 &lt;&gt; Space(1) And S2 &lt;&gt; "0"<br />
                                       Dich = "l" &amp; Mid(Dich, 2) 'ký tự l<br />
                                   Case 2 And S = 0 And S3 &lt;&gt; "0"<br />
                                       If (S1 &gt;= "1" And S1 &lt;= "9") Or (S1 = "0" And l = 4) Then<br />
                                           Dich = "lẻ" &amp; Space(1)<br />
                                       End If<br />
                                   End Select<br />
                                   Chu = Chu &amp; Dich<br />
                               Next j<br />
                           End Select<br />
                           Vitri = InStr(1, Chu, "mươi một", 1)<br />
                           If Vitri &gt; 0 Then Mid(Chu, Vitri, 9) = "mươi mốt"<br />
                           KetQua = KetQua &amp; Chu<br />
                       End If<br />
                   Next i<br />
               End If<br />
           End If<br />
           VND = UCase(Left(KetQua, 1)) &amp; Mid(KetQua, 2)<br />
   End Function</code></div></div><br />
Các bạn muốn sử dụng phải tắt bộ gõ tiếng Việt và thiết đặt Vietnamesse keyboard trước khi copy và dán vào module thì mới không bị lỗi. Sau khi dán vào module mà font chữ tiếng Việt vẫn giữ nguyên thì đã thành công.]]></description>
			<content:encoded><![CDATA[Ngồi vọc lại mấy chương trình cổ thấy hàm đọc số excel của một cao thủ đời 80 thấy hay quá. Function này cũng xài tốt cho access. Có điều font VNI thì được còn Unicode bị lỗi font. Thử gõ lại phần tiếng Việt bằng bộ gõ Windows, không ngờ lại OK.<br />
<div class="codeblock"><div class="title">Mã:</div><div class="body" dir="ltr"><code>Public Function VND(BaoNhieu)<br />
Dim KetQua, SOTIEN, Nhom, Chu, Dich, S1, S2, S3 As String<br />
Dim i, j, Vitri As Byte, S As Double<br />
Dim HANG, Doc, Dem, l<br />
If BaoNhieu = 0 Then<br />
   KetQua = "Không đồng"<br />
Else<br />
   If Abs(BaoNhieu) &gt;= 1E+15 Then '1E+15 tức 1.000.000.000.000.000 tức 1 triệu tỷ<br />
       KetQua = "Số quá lớn"<br />
   Else<br />
       If BaoNhieu &lt; 0 Then<br />
           KetQua = "Âm" &amp; Space(1)<br />
       Else<br />
           KetQua = Space(0)<br />
           End If<br />
           SOTIEN = Format(Abs(BaoNhieu), "##############0.00")<br />
           SOTIEN = Right(Space(15) &amp; SOTIEN, 18)<br />
           HANG = Array("None", "trăm", "mươi", "gì đó")<br />
           Doc = Array("Nonne", "nghìn tỷ", "tỷ", "triệu", "nghìn", "đồng", "xu")<br />
           Dem = Array("None", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín")<br />
           For i = 1 To 6<br />
               Nhom = Mid(SOTIEN, i * 3 - 2, 3)<br />
               If Nhom &lt;&gt; Space(3) Then<br />
                   Select Case Nhom<br />
                       Case "000"<br />
                           If i = 5 Then<br />
                               Chu = "đồng" &amp; Space(1)<br />
                           Else<br />
                               Chu = Space(0)<br />
                           End If<br />
                       Case ",00"<br />
                       Chu = "chẵn"<br />
                       Case "0.00"<br />
                       Chu = " chẵn"<br />
                       Case Else<br />
                           S1 = Left(Nhom, 1)<br />
                           S2 = Mid(Nhom, 2, 1)<br />
                           S3 = Right(Nhom, 1)<br />
                           Chu = Space(0)<br />
                           HANG(3) = Doc(i)<br />
                           For j = 1 To 3<br />
                               Dich = Space(0)<br />
                               S = Val(Mid(Nhom, j, 1))<br />
                               If S &gt; 0 Then<br />
                                   Dich = Dem(S) &amp; Space(1) &amp; HANG(j) &amp; Space(1)<br />
                               End If<br />
                               Select Case j<br />
                                   Case 2 And S = 1<br />
                                       Dich = "mười" &amp; Space(1)<br />
                                   Case 3 And S = 0 And Nhom &lt;&gt; Space(2) &amp; "0"<br />
                                       Dich = HANG(j) &amp; Space(1)<br />
                               Case 3 And S = 5 And S2 &lt;&gt; Space(1) And S2 &lt;&gt; "0"<br />
                                       Dich = "l" &amp; Mid(Dich, 2) 'ký tự l<br />
                                   Case 2 And S = 0 And S3 &lt;&gt; "0"<br />
                                       If (S1 &gt;= "1" And S1 &lt;= "9") Or (S1 = "0" And l = 4) Then<br />
                                           Dich = "lẻ" &amp; Space(1)<br />
                                       End If<br />
                                   End Select<br />
                                   Chu = Chu &amp; Dich<br />
                               Next j<br />
                           End Select<br />
                           Vitri = InStr(1, Chu, "mươi một", 1)<br />
                           If Vitri &gt; 0 Then Mid(Chu, Vitri, 9) = "mươi mốt"<br />
                           KetQua = KetQua &amp; Chu<br />
                       End If<br />
                   Next i<br />
               End If<br />
           End If<br />
           VND = UCase(Left(KetQua, 1)) &amp; Mid(KetQua, 2)<br />
   End Function</code></div></div><br />
Các bạn muốn sử dụng phải tắt bộ gõ tiếng Việt và thiết đặt Vietnamesse keyboard trước khi copy và dán vào module thì mới không bị lỗi. Sau khi dán vào module mà font chữ tiếng Việt vẫn giữ nguyên thì đã thành công.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Tính số ngày làm việc (trừ ngày nghỉ, ngày lễ)]]></title>
			<link>https://thuthuataccess.com/forum/thread-9709.html</link>
			<pubDate>Sun, 11 Dec 2016 04:31:29 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=16696">ongke0711</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-9709.html</guid>
			<description><![CDATA[<span style="font-family: Tahoma;" class="mycode_font">Tôi có tham khảo một số hàm tính số ngày làm việc và thấy hàm này đáp ứng các tùy chọn tính hoặc không tính các ngày nghỉ (T7, CN) và ngày lễ (Hàm này tính luôn ngày bắt đầu).Tôi có chỉnh sửa và up lên chia sẽ với các bạn.</span><br />
<br />
<span style="font-family: Tahoma;" class="mycode_font">- Để tính các ngày nghỉ lễ, bạn phải tạo 1 table lưu cac ngày lễ. Trong demo tôi tạo table tên tblNgayLe có 2 trường [NgayLe]- Date, [DienGiai] - Text.</span><br />
<span style="font-family: Tahoma;" class="mycode_font">- Tham số “bytSoNgayLVTuan” trong hàm là số ngày làm việc trong 1 tuần. Các bạn nhập số 5 nếu 1 tuần làm 5 ngày, nghỉ T7+CN. Nhập số 6: nếu chỉ nghỉ ngày CN.</span><br />
<span style="font-family: Tahoma;" class="mycode_font">- Tham số "blnTinhNgayLe": chọn True nếu muốn trừ các ngày Lễ và False nếu không cần trừ ngày Lễ.</span><br />
<br />
<span style="font-family: Tahoma;" class="mycode_font"><a href="https://flic.kr/p/Q2Wqf1" target="_blank" rel="noopener" class="mycode_url"><img src="https://c5.staticflickr.com/1/33/31527058956_c5251cb19b_b.jpg" loading="lazy"  alt="[Hình: 31527058956_c5251cb19b_b.jpg]" class="mycode_img" /></a></span><br />
<br />
Code hàm fWorkingDays(). Copy vào module.<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Option&nbsp;Compare&nbsp;Database<br />Option&nbsp;Explicit<br /><br /></span><span style="color: #007700">Public&nbsp;Function&nbsp;</span><span style="color: #0000BB">fWorkingdays</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;datTuNgay&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ByVal&nbsp;datDenNgay&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ByVal&nbsp;bytSoNgayLVTuan&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Byte</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_<br /> &nbsp; Optional&nbsp;ByVal&nbsp;blnTinhNgayLe&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Boolean</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long<br /></span><span style="color: #DD0000">'-------------------------------------------------------------------------------------------------<br />'</span><span style="color: #0000BB">Muc&nbsp;dich</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">Tính&nbsp;so&nbsp;ngày&nbsp;làm&nbsp;viec&nbsp;giua&nbsp;2&nbsp;tham&nbsp;so&nbsp; </span><span style="color: #007700">(</span><span style="color: #0000BB">datTuNgay</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">và&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">datDenNgay</span><span style="color: #007700">).<br /></span><span style="color: #DD0000">'Có&nbsp;tùy&nbsp;chon&nbsp;tru&nbsp;ngày&nbsp;nghi&nbsp;(Thu&nbsp;7,&nbsp;CN)&nbsp;và&nbsp;tru&nbsp;các&nbsp;ngày&nbsp;Le<br />'</span><span style="color: #0000BB">bytSoNgayLVTuan&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">là&nbsp;so&nbsp;ngày&nbsp;lam&nbsp;viec&nbsp;trong&nbsp;1&nbsp;tuan</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">neu&nbsp;nghi&nbsp;thu&nbsp;7&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">CN</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">6</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">nêu&nbsp;chi&nbsp;nghi&nbsp;CN<br /></span><span style="color: #DD0000">'blnTinhNgayLe&nbsp; &nbsp;:&nbsp;là&nbsp;'</span><span style="color: #0000BB">True</span><span style="color: #DD0000">'&nbsp;neu&nbsp;có&nbsp;tru&nbsp;ngay&nbsp;Le;&nbsp;'</span><span style="color: #0000BB">False</span><span style="color: #DD0000">'&nbsp;neu&nbsp;không&nbsp;tru&nbsp;ngay&nbsp;Le<br />'</span><span style="color: #007700">-------------------------------------------------------------------------------------------------<br /><br /></span><span style="color: #0000BB"> &nbsp; </span><span style="color: #DD0000">'Const&nbsp;bytSoNgayLVTuan&nbsp; &nbsp; &nbsp;'</span><span style="color: #0000BB">Khai&nbsp;bao&nbsp;so&nbsp;ngay&nbsp;lam&nbsp;viec&nbsp;trong&nbsp;tuan<br /> &nbsp; <br /> &nbsp; </span><span style="color: #DD0000">'Khai&nbsp;bao&nbsp;ten&nbsp;table&nbsp;Ngay&nbsp;Nghi.<br /> &nbsp; Const&nbsp;cstrTenTableNgayLe&nbsp; As&nbsp;String&nbsp;=&nbsp;"tblNgayLe"<br /> &nbsp; '</span><span style="color: #0000BB">Khai&nbsp;bao&nbsp;ten&nbsp;truong&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">Field</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">luu&nbsp;Ngay&nbsp;Nghi&nbsp;trong&nbsp;table&nbsp;Ngay&nbsp;Nghi</span><span style="color: #007700">.<br /></span><span style="color: #0000BB"> &nbsp; Const&nbsp;cstrTenFieldNgayLe&nbsp; As&nbsp;String&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"NgayLe"<br /></span><span style="color: #0000BB"> &nbsp; Dim&nbsp;bytSunday&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Byte<br /> &nbsp; Dim&nbsp;intWeekdayTuNgay&nbsp; &nbsp; &nbsp; As&nbsp;Integer<br /> &nbsp; Dim&nbsp;intWeekdayDenNgay&nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer<br /> &nbsp; Dim&nbsp;lngDays&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /> &nbsp; Dim&nbsp;datDateTemp&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date<br /> &nbsp; Dim&nbsp;strDateFrom&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br /> &nbsp; Dim&nbsp;strDateTo&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br /> &nbsp; Dim&nbsp;lngNgayLe&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /> &nbsp; Dim&nbsp;strFilter&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br /> <br /> &nbsp; </span><span style="color: #DD0000">'Dao&nbsp;nguoc&nbsp;TuNgay,&nbsp;DenNgay&nbsp;neu&nbsp;nhap&nbsp;lieu&nbsp;nguoc&nbsp;lai.<br /> &nbsp; If&nbsp;datTuNgay&nbsp;&gt;&nbsp;datDenNgay&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; datDateTemp&nbsp;=&nbsp;datTuNgay<br /> &nbsp; &nbsp; &nbsp; datTuNgay&nbsp;=&nbsp;datDenNgay<br /> &nbsp; &nbsp; &nbsp; datDenNgay&nbsp;=&nbsp;datDateTemp<br /> &nbsp; End&nbsp;If<br /> <br /> &nbsp; '</span><span style="color: #0000BB">Xac&nbsp;dinh&nbsp;Weekday&nbsp;cua&nbsp;Sunday</span><span style="color: #007700">.<br /></span><span style="color: #0000BB"> &nbsp; </span><span style="color: #DD0000">'Nêu&nbsp;chon&nbsp;Sat&nbsp;là&nbsp;ngày&nbsp;dau&nbsp;tuan&nbsp;thì&nbsp;Weekday&nbsp;cua&nbsp;Sunday=7,&nbsp;Sunday&nbsp;là&nbsp;ngày&nbsp;dau&nbsp;tuan&nbsp;thì&nbsp;Weekday&nbsp;cua&nbsp;Sunday=1.<br /> &nbsp; bytSunday&nbsp;=&nbsp;Weekday(vbSunday,&nbsp;vbMonday)<br /> &nbsp; '</span><span style="color: #0000BB">Xac&nbsp;dinh&nbsp;Weekdays&nbsp;cua&nbsp;</span><span style="color: #007700">[</span><span style="color: #0000BB">TuNgay</span><span style="color: #007700">],&nbsp;[</span><span style="color: #0000BB">DenNgay</span><span style="color: #007700">].<br /></span><span style="color: #0000BB"> &nbsp; intWeekdayTuNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Weekday</span><span style="color: #007700">(</span><span style="color: #0000BB">datTuNgay</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">vbMonday</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; intWeekdayDenNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Weekday</span><span style="color: #007700">(</span><span style="color: #0000BB">datDenNgay</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">vbMonday</span><span style="color: #007700">)<br /><br /></span><span style="color: #0000BB"> &nbsp; intWeekdayTuNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intWeekdayTuNgay&nbsp;</span><span style="color: #007700">+&nbsp;(</span><span style="color: #0000BB">intWeekdayTuNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">bytSunday</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; intWeekdayDenNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intWeekdayDenNgay&nbsp;</span><span style="color: #007700">+&nbsp;(</span><span style="color: #0000BB">intWeekdayDenNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">bytSunday</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; lngDays&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intWeekdayDenNgay&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">intWeekdayTuNgay&nbsp;</span><span style="color: #007700">-&nbsp;(</span><span style="color: #0000BB">bytSoNgayLVTuan&nbsp;</span><span style="color: #007700">*&nbsp;(</span><span style="color: #0000BB">intWeekdayDenNgay&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">intWeekdayTuNgay</span><span style="color: #007700">))<br /></span><span style="color: #0000BB"> &nbsp; </span><span style="color: #DD0000">'Them&nbsp;so&nbsp;ngay&nbsp;lam&nbsp;viec&nbsp;ung&nbsp;voi&nbsp;so&nbsp;tuan&nbsp;giua&nbsp;TuNgay&nbsp;va&nbsp;DenNgay<br /> &nbsp; lngDays&nbsp;=&nbsp;lngDays&nbsp;+&nbsp;(bytSoNgayLVTuan&nbsp;*&nbsp;DateDiff("w",&nbsp;datTuNgay-1,&nbsp;datDenNgay,&nbsp;vbMonday,&nbsp;vbFirstFourDays))<br /> &nbsp; <br /> &nbsp; '</span><span style="color: #0000BB">Dem&nbsp;so&nbsp;ngay&nbsp;Le&nbsp;trong&nbsp;khoang&nbsp;thoi&nbsp;gian&nbsp;TuNgay&nbsp;va&nbsp;DenNgay<br /> &nbsp; If&nbsp;blnTinhNgayLe&nbsp;</span><span style="color: #007700">And&nbsp;</span><span style="color: #0000BB">lngDays&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; strTuNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Format</span><span style="color: #007700">(</span><span style="color: #0000BB">datTuNgay</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"yyyy&#092;/mm&#092;/dd"</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; strDenNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Format</span><span style="color: #007700">(</span><span style="color: #0000BB">datDenNgay</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"yyyy&#092;/mm&#092;/dd"</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; strFilter&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">cstrTenFieldNgayLe&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">"&nbsp;Between&nbsp;#"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">strTuNgay&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">"#&nbsp;And&nbsp;#"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">strDenNgay&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">"#&nbsp;And&nbsp;Weekday("&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">cstrTenFieldNgayLe&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">",&nbsp;2)&nbsp;&lt;=&nbsp;"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">bytSoNgayLVTuan&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">""<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; lngNgayLe&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">DCount</span><span style="color: #007700">(</span><span style="color: #DD0000">"*"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">cstrTenTableNgayLe</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">strFilter</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; End&nbsp;</span><span style="color: #007700">If<br /></span><span style="color: #0000BB"> <br /> &nbsp; fWorkingdays&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">lngDays&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">lngNgayLe<br />End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div><br />
<br />
Link file demo: <a href="http://www.mediafire.com/file/28ohh1urbhx029l/WorkingDays.mdb" target="_blank" rel="noopener" class="mycode_url">http://www.mediafire.com/file/28ohh1urbh...ngDays.mdb</a><br />
<br />
<br />
Bổ sung thêm 1 hàm tính ngày khác đơn giản hơn là dùng vòng lặp qua các ngày và đếm. Hàm này cũng dùng Dcount để tính ngày nghỉ lễ trong table tblNgayLe.<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Public&nbsp;Function&nbsp;</span><span style="color: #0000BB">fCalcWorkingDays</span><span style="color: #007700">(</span><span style="color: #0000BB">dteTuNgay&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">dteDenNgay&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Integer<br /> &nbsp; Dim&nbsp;intCount&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer<br /><br /> &nbsp; intCount&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0<br /><br /> &nbsp; Do&nbsp;</span><span style="color: #007700">While&nbsp;</span><span style="color: #0000BB">dteTuNgay&nbsp;</span><span style="color: #007700">&lt;=&nbsp;</span><span style="color: #0000BB">dteDenNgay<br /> &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; Select&nbsp;</span><span style="color: #007700">Case&nbsp;</span><span style="color: #0000BB">Weekday</span><span style="color: #007700">(</span><span style="color: #0000BB">dteTuNgay</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Case&nbsp;Is&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #DD0000">'La&nbsp;ngày&nbsp;CN&nbsp;-&gt;&nbsp;không&nbsp;dem'<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Case&nbsp;Is&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">4</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">6</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">7&nbsp; &nbsp; &nbsp; </span><span style="color: #DD0000">'Tu&nbsp;thu&nbsp;2&nbsp;-&nbsp;thu&nbsp;7'<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #DD0000">'Kiem&nbsp;tra&nbsp;xem&nbsp;có&nbsp;nam&nbsp;trong&nbsp;table&nbsp;tblNgayLe&nbsp;không?'<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If&nbsp;DCount</span><span style="color: #007700">(</span><span style="color: #DD0000">"*"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"tblNgayLe"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"[NgayLe]&nbsp;=&nbsp;#"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">Format</span><span style="color: #007700">(</span><span style="color: #0000BB">dteTuNgay</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"mm/dd/yyyy"</span><span style="color: #007700">)&nbsp;&amp;&nbsp;</span><span style="color: #DD0000">"#"</span><span style="color: #007700">)&nbsp;&lt;&nbsp;</span><span style="color: #0000BB">1&nbsp;Then&nbsp; </span><span style="color: #DD0000">'Không&nbsp;phai&nbsp;ngay&nbsp;le'<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intCount&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intCount&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;</span><span style="color: #007700">If<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; End&nbsp;Select<br /> &nbsp; &nbsp; &nbsp; dteTuNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">dteTuNgay&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1<br /> &nbsp; Loop<br /> &nbsp; fCalcWorkingDays&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intCount<br />End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div>]]></description>
			<content:encoded><![CDATA[<span style="font-family: Tahoma;" class="mycode_font">Tôi có tham khảo một số hàm tính số ngày làm việc và thấy hàm này đáp ứng các tùy chọn tính hoặc không tính các ngày nghỉ (T7, CN) và ngày lễ (Hàm này tính luôn ngày bắt đầu).Tôi có chỉnh sửa và up lên chia sẽ với các bạn.</span><br />
<br />
<span style="font-family: Tahoma;" class="mycode_font">- Để tính các ngày nghỉ lễ, bạn phải tạo 1 table lưu cac ngày lễ. Trong demo tôi tạo table tên tblNgayLe có 2 trường [NgayLe]- Date, [DienGiai] - Text.</span><br />
<span style="font-family: Tahoma;" class="mycode_font">- Tham số “bytSoNgayLVTuan” trong hàm là số ngày làm việc trong 1 tuần. Các bạn nhập số 5 nếu 1 tuần làm 5 ngày, nghỉ T7+CN. Nhập số 6: nếu chỉ nghỉ ngày CN.</span><br />
<span style="font-family: Tahoma;" class="mycode_font">- Tham số "blnTinhNgayLe": chọn True nếu muốn trừ các ngày Lễ và False nếu không cần trừ ngày Lễ.</span><br />
<br />
<span style="font-family: Tahoma;" class="mycode_font"><a href="https://flic.kr/p/Q2Wqf1" target="_blank" rel="noopener" class="mycode_url"><img src="https://c5.staticflickr.com/1/33/31527058956_c5251cb19b_b.jpg" loading="lazy"  alt="[Hình: 31527058956_c5251cb19b_b.jpg]" class="mycode_img" /></a></span><br />
<br />
Code hàm fWorkingDays(). Copy vào module.<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Option&nbsp;Compare&nbsp;Database<br />Option&nbsp;Explicit<br /><br /></span><span style="color: #007700">Public&nbsp;Function&nbsp;</span><span style="color: #0000BB">fWorkingdays</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;datTuNgay&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ByVal&nbsp;datDenNgay&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ByVal&nbsp;bytSoNgayLVTuan&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Byte</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_<br /> &nbsp; Optional&nbsp;ByVal&nbsp;blnTinhNgayLe&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Boolean</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long<br /></span><span style="color: #DD0000">'-------------------------------------------------------------------------------------------------<br />'</span><span style="color: #0000BB">Muc&nbsp;dich</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">Tính&nbsp;so&nbsp;ngày&nbsp;làm&nbsp;viec&nbsp;giua&nbsp;2&nbsp;tham&nbsp;so&nbsp; </span><span style="color: #007700">(</span><span style="color: #0000BB">datTuNgay</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">và&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">datDenNgay</span><span style="color: #007700">).<br /></span><span style="color: #DD0000">'Có&nbsp;tùy&nbsp;chon&nbsp;tru&nbsp;ngày&nbsp;nghi&nbsp;(Thu&nbsp;7,&nbsp;CN)&nbsp;và&nbsp;tru&nbsp;các&nbsp;ngày&nbsp;Le<br />'</span><span style="color: #0000BB">bytSoNgayLVTuan&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">là&nbsp;so&nbsp;ngày&nbsp;lam&nbsp;viec&nbsp;trong&nbsp;1&nbsp;tuan</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">neu&nbsp;nghi&nbsp;thu&nbsp;7&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">CN</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">6</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">nêu&nbsp;chi&nbsp;nghi&nbsp;CN<br /></span><span style="color: #DD0000">'blnTinhNgayLe&nbsp; &nbsp;:&nbsp;là&nbsp;'</span><span style="color: #0000BB">True</span><span style="color: #DD0000">'&nbsp;neu&nbsp;có&nbsp;tru&nbsp;ngay&nbsp;Le;&nbsp;'</span><span style="color: #0000BB">False</span><span style="color: #DD0000">'&nbsp;neu&nbsp;không&nbsp;tru&nbsp;ngay&nbsp;Le<br />'</span><span style="color: #007700">-------------------------------------------------------------------------------------------------<br /><br /></span><span style="color: #0000BB"> &nbsp; </span><span style="color: #DD0000">'Const&nbsp;bytSoNgayLVTuan&nbsp; &nbsp; &nbsp;'</span><span style="color: #0000BB">Khai&nbsp;bao&nbsp;so&nbsp;ngay&nbsp;lam&nbsp;viec&nbsp;trong&nbsp;tuan<br /> &nbsp; <br /> &nbsp; </span><span style="color: #DD0000">'Khai&nbsp;bao&nbsp;ten&nbsp;table&nbsp;Ngay&nbsp;Nghi.<br /> &nbsp; Const&nbsp;cstrTenTableNgayLe&nbsp; As&nbsp;String&nbsp;=&nbsp;"tblNgayLe"<br /> &nbsp; '</span><span style="color: #0000BB">Khai&nbsp;bao&nbsp;ten&nbsp;truong&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">Field</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">luu&nbsp;Ngay&nbsp;Nghi&nbsp;trong&nbsp;table&nbsp;Ngay&nbsp;Nghi</span><span style="color: #007700">.<br /></span><span style="color: #0000BB"> &nbsp; Const&nbsp;cstrTenFieldNgayLe&nbsp; As&nbsp;String&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"NgayLe"<br /></span><span style="color: #0000BB"> &nbsp; Dim&nbsp;bytSunday&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Byte<br /> &nbsp; Dim&nbsp;intWeekdayTuNgay&nbsp; &nbsp; &nbsp; As&nbsp;Integer<br /> &nbsp; Dim&nbsp;intWeekdayDenNgay&nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer<br /> &nbsp; Dim&nbsp;lngDays&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /> &nbsp; Dim&nbsp;datDateTemp&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date<br /> &nbsp; Dim&nbsp;strDateFrom&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br /> &nbsp; Dim&nbsp;strDateTo&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br /> &nbsp; Dim&nbsp;lngNgayLe&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /> &nbsp; Dim&nbsp;strFilter&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br /> <br /> &nbsp; </span><span style="color: #DD0000">'Dao&nbsp;nguoc&nbsp;TuNgay,&nbsp;DenNgay&nbsp;neu&nbsp;nhap&nbsp;lieu&nbsp;nguoc&nbsp;lai.<br /> &nbsp; If&nbsp;datTuNgay&nbsp;&gt;&nbsp;datDenNgay&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; datDateTemp&nbsp;=&nbsp;datTuNgay<br /> &nbsp; &nbsp; &nbsp; datTuNgay&nbsp;=&nbsp;datDenNgay<br /> &nbsp; &nbsp; &nbsp; datDenNgay&nbsp;=&nbsp;datDateTemp<br /> &nbsp; End&nbsp;If<br /> <br /> &nbsp; '</span><span style="color: #0000BB">Xac&nbsp;dinh&nbsp;Weekday&nbsp;cua&nbsp;Sunday</span><span style="color: #007700">.<br /></span><span style="color: #0000BB"> &nbsp; </span><span style="color: #DD0000">'Nêu&nbsp;chon&nbsp;Sat&nbsp;là&nbsp;ngày&nbsp;dau&nbsp;tuan&nbsp;thì&nbsp;Weekday&nbsp;cua&nbsp;Sunday=7,&nbsp;Sunday&nbsp;là&nbsp;ngày&nbsp;dau&nbsp;tuan&nbsp;thì&nbsp;Weekday&nbsp;cua&nbsp;Sunday=1.<br /> &nbsp; bytSunday&nbsp;=&nbsp;Weekday(vbSunday,&nbsp;vbMonday)<br /> &nbsp; '</span><span style="color: #0000BB">Xac&nbsp;dinh&nbsp;Weekdays&nbsp;cua&nbsp;</span><span style="color: #007700">[</span><span style="color: #0000BB">TuNgay</span><span style="color: #007700">],&nbsp;[</span><span style="color: #0000BB">DenNgay</span><span style="color: #007700">].<br /></span><span style="color: #0000BB"> &nbsp; intWeekdayTuNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Weekday</span><span style="color: #007700">(</span><span style="color: #0000BB">datTuNgay</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">vbMonday</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; intWeekdayDenNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Weekday</span><span style="color: #007700">(</span><span style="color: #0000BB">datDenNgay</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">vbMonday</span><span style="color: #007700">)<br /><br /></span><span style="color: #0000BB"> &nbsp; intWeekdayTuNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intWeekdayTuNgay&nbsp;</span><span style="color: #007700">+&nbsp;(</span><span style="color: #0000BB">intWeekdayTuNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">bytSunday</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; intWeekdayDenNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intWeekdayDenNgay&nbsp;</span><span style="color: #007700">+&nbsp;(</span><span style="color: #0000BB">intWeekdayDenNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">bytSunday</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; lngDays&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intWeekdayDenNgay&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">intWeekdayTuNgay&nbsp;</span><span style="color: #007700">-&nbsp;(</span><span style="color: #0000BB">bytSoNgayLVTuan&nbsp;</span><span style="color: #007700">*&nbsp;(</span><span style="color: #0000BB">intWeekdayDenNgay&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">intWeekdayTuNgay</span><span style="color: #007700">))<br /></span><span style="color: #0000BB"> &nbsp; </span><span style="color: #DD0000">'Them&nbsp;so&nbsp;ngay&nbsp;lam&nbsp;viec&nbsp;ung&nbsp;voi&nbsp;so&nbsp;tuan&nbsp;giua&nbsp;TuNgay&nbsp;va&nbsp;DenNgay<br /> &nbsp; lngDays&nbsp;=&nbsp;lngDays&nbsp;+&nbsp;(bytSoNgayLVTuan&nbsp;*&nbsp;DateDiff("w",&nbsp;datTuNgay-1,&nbsp;datDenNgay,&nbsp;vbMonday,&nbsp;vbFirstFourDays))<br /> &nbsp; <br /> &nbsp; '</span><span style="color: #0000BB">Dem&nbsp;so&nbsp;ngay&nbsp;Le&nbsp;trong&nbsp;khoang&nbsp;thoi&nbsp;gian&nbsp;TuNgay&nbsp;va&nbsp;DenNgay<br /> &nbsp; If&nbsp;blnTinhNgayLe&nbsp;</span><span style="color: #007700">And&nbsp;</span><span style="color: #0000BB">lngDays&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0&nbsp;Then<br /> &nbsp; &nbsp; &nbsp; strTuNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Format</span><span style="color: #007700">(</span><span style="color: #0000BB">datTuNgay</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"yyyy&#092;/mm&#092;/dd"</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; strDenNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Format</span><span style="color: #007700">(</span><span style="color: #0000BB">datDenNgay</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"yyyy&#092;/mm&#092;/dd"</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; strFilter&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">cstrTenFieldNgayLe&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">"&nbsp;Between&nbsp;#"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">strTuNgay&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">"#&nbsp;And&nbsp;#"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">strDenNgay&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">"#&nbsp;And&nbsp;Weekday("&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">cstrTenFieldNgayLe&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">",&nbsp;2)&nbsp;&lt;=&nbsp;"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">bytSoNgayLVTuan&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">""<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; lngNgayLe&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">DCount</span><span style="color: #007700">(</span><span style="color: #DD0000">"*"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">cstrTenTableNgayLe</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">strFilter</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; End&nbsp;</span><span style="color: #007700">If<br /></span><span style="color: #0000BB"> <br /> &nbsp; fWorkingdays&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">lngDays&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">lngNgayLe<br />End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div><br />
<br />
Link file demo: <a href="http://www.mediafire.com/file/28ohh1urbhx029l/WorkingDays.mdb" target="_blank" rel="noopener" class="mycode_url">http://www.mediafire.com/file/28ohh1urbh...ngDays.mdb</a><br />
<br />
<br />
Bổ sung thêm 1 hàm tính ngày khác đơn giản hơn là dùng vòng lặp qua các ngày và đếm. Hàm này cũng dùng Dcount để tính ngày nghỉ lễ trong table tblNgayLe.<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Public&nbsp;Function&nbsp;</span><span style="color: #0000BB">fCalcWorkingDays</span><span style="color: #007700">(</span><span style="color: #0000BB">dteTuNgay&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">dteDenNgay&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Integer<br /> &nbsp; Dim&nbsp;intCount&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer<br /><br /> &nbsp; intCount&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0<br /><br /> &nbsp; Do&nbsp;</span><span style="color: #007700">While&nbsp;</span><span style="color: #0000BB">dteTuNgay&nbsp;</span><span style="color: #007700">&lt;=&nbsp;</span><span style="color: #0000BB">dteDenNgay<br /> &nbsp; &nbsp; &nbsp; <br /> &nbsp; &nbsp; &nbsp; Select&nbsp;</span><span style="color: #007700">Case&nbsp;</span><span style="color: #0000BB">Weekday</span><span style="color: #007700">(</span><span style="color: #0000BB">dteTuNgay</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Case&nbsp;Is&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #DD0000">'La&nbsp;ngày&nbsp;CN&nbsp;-&gt;&nbsp;không&nbsp;dem'<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Case&nbsp;Is&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">4</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">6</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">7&nbsp; &nbsp; &nbsp; </span><span style="color: #DD0000">'Tu&nbsp;thu&nbsp;2&nbsp;-&nbsp;thu&nbsp;7'<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #DD0000">'Kiem&nbsp;tra&nbsp;xem&nbsp;có&nbsp;nam&nbsp;trong&nbsp;table&nbsp;tblNgayLe&nbsp;không?'<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If&nbsp;DCount</span><span style="color: #007700">(</span><span style="color: #DD0000">"*"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"tblNgayLe"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"[NgayLe]&nbsp;=&nbsp;#"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">Format</span><span style="color: #007700">(</span><span style="color: #0000BB">dteTuNgay</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"mm/dd/yyyy"</span><span style="color: #007700">)&nbsp;&amp;&nbsp;</span><span style="color: #DD0000">"#"</span><span style="color: #007700">)&nbsp;&lt;&nbsp;</span><span style="color: #0000BB">1&nbsp;Then&nbsp; </span><span style="color: #DD0000">'Không&nbsp;phai&nbsp;ngay&nbsp;le'<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intCount&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intCount&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;</span><span style="color: #007700">If<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; End&nbsp;Select<br /> &nbsp; &nbsp; &nbsp; dteTuNgay&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">dteTuNgay&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1<br /> &nbsp; Loop<br /> &nbsp; fCalcWorkingDays&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intCount<br />End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Demo] Hàm đặt pass cho file *.mdb khác]]></title>
			<link>https://thuthuataccess.com/forum/thread-9237.html</link>
			<pubDate>Sat, 30 Apr 2016 15:42:46 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-9237.html</guid>
			<description><![CDATA[<span style="color: #ff66ff;" class="mycode_color"><span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">Nhân sinh nhật làm cài demo chơi, nhiều bạn muốn đặt pass cho file *.mdb mà đôi lúc cũng gặp khó khăn hoặc không biết cách đặt.<br />
Hình minh họa <br />
</span></span></span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://sites.google.com/site/bikipaccess/home/hinhDatpass.png" loading="lazy"  alt="[Hình: hinhDatpass.png]" class="mycode_img" /></div>
<br />
<span style="color: #339933;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Công dụng:</span></span><br />
- Đặt pass, Thay pass, Xóa Pass cho file Access khác (*.mdb) mà không cần mở file đó<br />
- Thay đổi pass<br />
- Xóa pass<br />
<br />
<span style="color: #339933;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Phạm vi áp dụng:</span></span><br />
- Bảo mật file Access *.mdb thêm một chút<br />
- Có thể kết hợp chung với ứng dụng của ta. khi đến một lúc nào đó muốn thay đổi mật khẩu hoặc muốn xóa để vào xử lý các table.<br />
- Các ứng dụng có liên quan đến mang LAN<br />
- Có thể phối hợp với: <a href="http://thuthuataccess.com/forum/thread-8651.html" target="_blank" rel="noopener" class="mycode_url"><span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">[Hàm]</span></span> Demo_Tạo ra mật khẩu ngẫu nhiên (2 loại)</a> Để tạo sự thay đổi pass liên tục của Data file Backend<br />
<br />
<span style="color: #339933;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Hàm triển khai:</span></span><br />
- một hàm duy nhất: Hàm Datpass ("Duongdan", "Pass moi", "Pass cu")<br />
<span style="color: #339933;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><br />
Cú pháp sử dụng:</span></span><br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">Tao&nbsp;pass</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">Datpass&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">"Duongdan"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Pass&nbsp;can&nbsp;tao"</span><span style="color: #007700">)<br />+&nbsp;</span><span style="color: #0000BB">Thay&nbsp;pass</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">Datpass&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">"Duongdan"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Pass&nbsp;moi"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Pass&nbsp;cu"</span><span style="color: #007700">)<br />+&nbsp;</span><span style="color: #0000BB">Xoa&nbsp;pass&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">Datpass&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">"Duongdan"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Pass&nbsp;cu"</span><span style="color: #007700">)&nbsp;<br /></span></code></div></div></div><br />
<span style="color: #339933;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Pass VBA: </span></span>xin để mại Email phía dưới nhé.<br />
<span style="color: #3366ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Demo: </span></span>tải phía dưới<br />
<span style="color: #ff3333;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><br />
* Update ngày 9/11/2018</span></span><br />
<a href="http://thuthuataccess.com/forum/attachment.php?aid=791" target="_blank" rel="noopener" class="mycode_url">Demo_DatPassChofileAccesskhac(V3).zip</a> (Kích cỡ: 26.56 KB / Có chỉnh lại thông báo theo yêu cầu của các bạn)<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=689" target="_blank" title="">Demo_DatPassChofileAccesskhac(V2).zip</a> (Kích cỡ: 24.52 KB / Tải về: 107)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=791" target="_blank" title="">Demo_DatPassChofileAccesskhac(V3).zip</a> (Kích cỡ: 26.56 KB / Tải về: 62)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<span style="color: #ff66ff;" class="mycode_color"><span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">Nhân sinh nhật làm cài demo chơi, nhiều bạn muốn đặt pass cho file *.mdb mà đôi lúc cũng gặp khó khăn hoặc không biết cách đặt.<br />
Hình minh họa <br />
</span></span></span><br />
<div style="text-align: center;" class="mycode_align"><img src="https://sites.google.com/site/bikipaccess/home/hinhDatpass.png" loading="lazy"  alt="[Hình: hinhDatpass.png]" class="mycode_img" /></div>
<br />
<span style="color: #339933;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Công dụng:</span></span><br />
- Đặt pass, Thay pass, Xóa Pass cho file Access khác (*.mdb) mà không cần mở file đó<br />
- Thay đổi pass<br />
- Xóa pass<br />
<br />
<span style="color: #339933;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Phạm vi áp dụng:</span></span><br />
- Bảo mật file Access *.mdb thêm một chút<br />
- Có thể kết hợp chung với ứng dụng của ta. khi đến một lúc nào đó muốn thay đổi mật khẩu hoặc muốn xóa để vào xử lý các table.<br />
- Các ứng dụng có liên quan đến mang LAN<br />
- Có thể phối hợp với: <a href="http://thuthuataccess.com/forum/thread-8651.html" target="_blank" rel="noopener" class="mycode_url"><span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">[Hàm]</span></span> Demo_Tạo ra mật khẩu ngẫu nhiên (2 loại)</a> Để tạo sự thay đổi pass liên tục của Data file Backend<br />
<br />
<span style="color: #339933;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Hàm triển khai:</span></span><br />
- một hàm duy nhất: Hàm Datpass ("Duongdan", "Pass moi", "Pass cu")<br />
<span style="color: #339933;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><br />
Cú pháp sử dụng:</span></span><br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">Tao&nbsp;pass</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">Datpass&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">"Duongdan"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Pass&nbsp;can&nbsp;tao"</span><span style="color: #007700">)<br />+&nbsp;</span><span style="color: #0000BB">Thay&nbsp;pass</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">Datpass&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">"Duongdan"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Pass&nbsp;moi"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Pass&nbsp;cu"</span><span style="color: #007700">)<br />+&nbsp;</span><span style="color: #0000BB">Xoa&nbsp;pass&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">Datpass&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">"Duongdan"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Pass&nbsp;cu"</span><span style="color: #007700">)&nbsp;<br /></span></code></div></div></div><br />
<span style="color: #339933;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Pass VBA: </span></span>xin để mại Email phía dưới nhé.<br />
<span style="color: #3366ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Demo: </span></span>tải phía dưới<br />
<span style="color: #ff3333;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><br />
* Update ngày 9/11/2018</span></span><br />
<a href="http://thuthuataccess.com/forum/attachment.php?aid=791" target="_blank" rel="noopener" class="mycode_url">Demo_DatPassChofileAccesskhac(V3).zip</a> (Kích cỡ: 26.56 KB / Có chỉnh lại thông báo theo yêu cầu của các bạn)<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=689" target="_blank" title="">Demo_DatPassChofileAccesskhac(V2).zip</a> (Kích cỡ: 24.52 KB / Tải về: 107)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=791" target="_blank" title="">Demo_DatPassChofileAccesskhac(V3).zip</a> (Kích cỡ: 26.56 KB / Tải về: 62)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hàm API trong quản lý file và folder]]></title>
			<link>https://thuthuataccess.com/forum/thread-9207.html</link>
			<pubDate>Sat, 16 Apr 2016 05:30:43 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-9207.html</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">1. Khái quát <br />
 </span><br />
Khi cấu trúc của Windows được tạo ra, Microsoft có ý định tạo ra một số lớn các chức năng lập trình có giá trị cho mọi chương trình dựa trên nền Windows. Chiến thuật này phục vụ hai mục đích, cung cấp ứng dụng Windows một cái nhìn và cảm giác nhất quán cũng như khiến cho người lập trình khỏi phải sao chép lại các hàm mà đã được mã hóa và debug. Những hàm này được lưu trữ trong một dãy các thư viện liên kết động ( DLL ) và được biết như là giao diện lập trình ứng dụng ( API ). Từ khi phát triển thành hệ điều hành 32bit, Windows 95’ những phiên bản mới được biết đến như Win32 API. Một vài hàm trong Win32 API thì có giá trị như những lệnh Visual Basic, nhưng phần lớn thì được truy cập chỉ bằng cách gọi hàm API.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Các hàm API cơ bản dùng để quản lí File và Folder<br />
 2.1 Hàm truy xuất File<br />
 * GetLogicalDrives<br />
 <br />
 </span>Ý nghĩa: Xác định các kí tự của tất cả ổ đĩa luận lí trên hệ thống.<br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetLogicalDrives&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetLogicalDrives"&nbsp;</span><span style="color: #007700">(&nbsp;)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Giá trị trả về: Các bit trong kết quả này chỉ định các ổ đĩa luận lí tồn tại trên hệ thống.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetDriveType<br />
 </span><br />
Ý nghĩa: Hàm này cho biết loại của một đĩa cụ thể cho trước. Sử dụng kèm với hàm GetLogicalDriveStrings để biết được loại của những đĩa do hàm GetLogicalDriveStrings tìm được.<br />
<br />
Khai báo:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetDriveType&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetDriveTypeA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;nDrive&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Mô tả<br />
Ndrive<br />
<br />
Một chuỗi chứa đường dẫn đến thư mục gốc của đĩa.<br />
<br />
<br />
Các hằng số:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Const&nbsp;</span><span style="color: #0000BB">DRIVE_REMOVABLE&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2<br /></span><span style="color: #007700">Const&nbsp;</span><span style="color: #0000BB">DRIVE_FIXED&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">3<br /></span><span style="color: #007700">Const&nbsp;</span><span style="color: #0000BB">DRIVE_REMOTE&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">4<br /></span><span style="color: #007700">Const&nbsp;</span><span style="color: #0000BB">DRIVE_CDROM&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">5<br /></span><span style="color: #007700">Const&nbsp;</span><span style="color: #0000BB">DRIVE_RAMDISK&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">6&nbsp;<br /></span></code></div></div></div><br />
<br />
Giá trị trả về: 0 nếu đĩa không thể xác định được, 1 nếu thư mục đã chỉ định không tồn tại. Một trong số các hằng chỉ ra loại đĩa được mô tả bên trên thì thành công.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* FindFirstFile<br />
 </span><br />
Ý nghĩa: Tìm File - Folder dựa trên tên File đã cho.<br />
<br />
Khai báo:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">FindFirstFile&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"FindFirstFileA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;lpFileName&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpFindFileData&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">WIN32_FIND_DATA</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Ý nghĩa<br />
<br />
LpFileName <br />
Tên File cần tìm. Có thể bao gồm các kí tự tìm kiếm ( *, ? ). Có thể bao gồm đường dẫn đầy đủ.<br />
<br />
LpFindFileData<br />
Một cấu trúc dữ liệu dùng để lưu trữ thông tin về File tìm được.<br />
<br />
<br />
Kiểu dữ liệu:<br />
<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Type&nbsp;WIN32_FIND_DATA<br /><br />dwFileAttributes&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /><br />ftCreationTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME<br /><br />ftLastAccessTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME<br /><br />ftLastWriteTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME<br /><br />nFileSizeHigh&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /><br />nFileSizeLow&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /><br />dwReserved0&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /><br />dwReserved1&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /><br />cFileName&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">MAX_PATH<br /><br />cAlternate&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">14<br /><br />End&nbsp;Type&nbsp;<br /></span></code></div></div></div><br />
<br />
Giá trị trả về: Một điều quản tìm kiếm nếu thành công, INVALID_HANDLE_VALUE nếu có lỗi. Điều quản này nên được đóng bởi hàm FindClose khi nó không còn cần thiết. <br />
<br />
Điều quản trả về từ hàm này được sử dụng như một tham số cho hàm FindNextFile. Điều này cho phép ta lấy tất cả các File mà được so sánh với tên File đã được chỉ định bởi tham số lpFileName. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">* FindNextFile<br />
 </span><br />
Ý nghĩa: Sử dụng kết hợp với hàm FindFirstFile để tìm File kế tiếp trong đường dẫn được chỉ ra trong hàm FindFirstFile. Hàm này tìm File kế tiếp ngay sau File đầu tiên hoặc File sau File được tìm thấy ở lần gọi hàm FindNextFile trước đó và được gọi lại nhiều lần cho đến khi tìm ra hết tất cả các File.<br />
<br />
Khai báo:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">FindNextFile&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"FindNextFileA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;hFindFile&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpFindFileData&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">WIN32_FIND_DATA</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Ý nghĩa<br />
<br />
HfindFile<br />
Handle trả về từ hàm FindFirstFile.<br />
<br />
LpFindFileData<br />
Một cấu trúc dữ liệu dùng để lưu trữ thông tin của File tìm được.<br />
<br />
<br />
Giá trị trả về: True (số khác 0 nếu thành công), 0 nếu có lỗi. Thiết lập GetLastError thành ERROR_NO_MORE_FILES khi không còn File nào để lấy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* FindClose <br />
 </span><br />
Ý nghĩa: Chấm dứt việc tìm File đã được gọi bởi hàm FindFirstFile.<br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">FindClose&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"FindClose"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;hFindFile&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Ý nghĩa<br />
<br />
HfindFile<br />
Một Handle được cung cấp bởi hàm FindFirstFile. <br />
<br />
<br />
Giá trị trả về: số khác 0 nếu thành công, 0 nếu có lỗi. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">* ExtractIcon<br />
 </span><br />
Ý nghĩa: Lấy một Icon trong các File.ICO,.EXE,.DLL <br />
<br />
Khai báo: <br />
<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">ExtractIcon&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"shell32.dll"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"ExtractIconA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;hInst&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ByVal&nbsp;lpszExeFileName&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ByVal&nbsp;nIconIndex&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Ý nghĩa<br />
<br />
Hlnst <br />
Con số chỉ định <br />
<br />
LpszExeFileName <br />
Tên của File chứa Icon<br />
<br />
NiconIndex <br />
Chỉ số của Icon trong các File.ICO,.EXE,.DLL<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetDiskFreeSpace<br />
 </span><br />
Ý nghĩa: lấy thông tin về sự tổ chức của đĩa và không gian còn trống.<br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Private&nbsp;Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetDiskFreeSpace&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetDiskFreeSpaceA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;lpRootPathName&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpSectorsPerCluster&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpBytesPerSector&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpNumberOfFreeClusters&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpTotalNumberOfClusters&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Mô tả<br />
<br />
LpRootPathName: Đường dẫn gốc của ổ đĩa mà không phải là tên của ổ đĩa.<br />
LpSectorsPerCluster: Một biến chứa số Sector trong một Cluster.<br />
LpBytesPerSector: Một biến chứa số Byte trong một Sector.<br />
LpNumberOfFreeCluster:Một bién chứa số Cluster trống trên đĩa.<br />
LpTotalNumberOfCluster:Một biến chứa số Cluster trên đĩa.<br />
<br />
<br />
Giá trị trả về: Số khác 0 nếu thành công, 0 nếu có lỗi. Hàm này không nên sử dụng trên Win ’95 cho ổ đĩa lớn hơn 2 GB<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetFileAttributes <br />
 </span><br />
Ý nghĩa: xác định thuộc tính của một File cụ thể.<br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Private&nbsp;Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetFileAttributes&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetFileAttributesA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;lpFileName&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Mô tả<br />
<br />
LpFileName<br />
Tên của File cần lấy thuộc tính<br />
<br />
<br />
Hằng số: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">FILE_ATTRIBUTE_ARCHIVE&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H20<br />FILE_ATTRIBUTE_COMPRESSED&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H800<br />FILE_ATTRIBUTE_DIRECTORY&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H10<br />FILE_ATTRIBUTE_HIDDEN&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H2<br />FILE_ATTRIBUTE_NORMAL&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H80<br />FILE_ATTRIBUTE_READONLY&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H1<br />FILE_ATTRIBUTE_SYSTEM&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H4<br />FILE_ATTRIBUTE_TEMPORARY&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H100&nbsp;<br /></span></code></div></div></div><br />
<br />
Giá trị trả về: -1 nếu có lỗi. Một giá trị chứa bit cờ cụ thể thuộc tính của File với bit cờ là một hằng số.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetFileSize<br />
 </span><br />
Ý nghĩa: Xác định kích cỡ của File. <br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Private&nbsp;Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetFileSize&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetFileSize"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;hFile&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpFileSizeHigh&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Mô tả<br />
<br />
HFile:Handle của File<br />
LpFileSizeHigh:Giá trị số được nạp với 32 bit cao của 64 bit kích cỡ File. Có thể Null (thay đổi bởi Byval), nếu kích cỡ thì không tối thiểu bằng 2^32 Byte.<br />
<br />
Giá trị trả về: Kích cỡ của File. &amp;HFFFFFFFF nếu có lỗi. Nếu lpFileSizeHigh không phải là Null và kết quả là &amp;HFFFFFFFF thì phải gọi GetLastError để xác định, nếu một lỗi thực sự xảy ra thì giá trị này là kết quả hợp lệ.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetFileTime <br />
 </span><br />
Ý nghĩa: Lấy thông tin thời gian của File đã được chỉ định. <br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Private&nbsp;Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetFileTime&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetFileTime"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;hFile&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpCreationTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpLastAccessTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpLastWriteTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Mô tả<br />
<br />
Hfile<br />
Một Handle của File <br />
<br />
LpCreateTime:Một cấu trúc dữ liệu chứa thới gian tạo lập của File<br />
<br />
LpLastAccessTime:Một cấu trúc dữ liệu chứa thời gian truy cập lần cuối của File (không được hổ trợ bởi hệ thống File FAT)<br />
<br />
LpLastWriteTime:Một cấu trúc dữ liệu chứa thời gian cập nhật lần cuối của File<br />
<br />
<br />
Giá trị trả về: số khác 0 nếu thành công, 0 nếu có lỗi. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetLogicalDriveString <br />
 </span><br />
Ý nghĩa: Lấy một chuỗi chứa đường dẫn ổ đĩa gốc của tất cả ổ đĩa luận lí tồn tại trên hệ thống.<br />
<br />
Khai báo:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Private&nbsp;Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetLogicalDriveStrings&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetLogicalDriveStringsA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;nBufferLength&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ByVal&nbsp;lpBuffer&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
<br />
Tham số<br />
Mô tả<br />
<ul class="mycode_list"><li>nBufferLengh:Chiều dài của chuỗi lpBuffer<br />
</li>
<li>lpBuffer:Một chuỗi chứa tên các đĩa Logic. Mỗi tên được ngăn cách bởi kí tự Null, tên cuối cùng theo sau bởi 2 kí tự Null.<br />
</li>
</ul>
<br />
Giá trị trả về: số kí tự được nạp vào lpBuffer (ngoại trừ kí tự Null kết thúc ). Nếu Buffer không đủ dài để chứa đường dẫn, giá trị trả về sẽ là kích cở của Buffer cần thiết. 0 nếu có lỗi. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">2.2 Hàm truy xuất Registry<br />
 <br />
 a) Giới thiệu<br />
 <br />
 </span>Registry lưu trữ các dữ liệu liên quan đến hệ thống và các ứng dụng. Registry bao gồm một số tập tin mà hệ thống và các ứng dụng có thể truy cập đến và sử dụng để hiệu chỉnh thông tin cấu hình. Có ba loại tập tin mà lưu trữ tất cả các thông tin Registry là: System.dat, User.dat và các tập tin Policy.<br />
<br />
Trong Win’95 Folder và mỗi một File được tạo ra bởi một chương trình khác nhau thì sẽ có các Icon khác nhau được lưu trữ trong các File liên kết hoãc các File chương trình. Các chương trình khi được cài đặt trên máy tính sẽ phải đăng kí Registry và đồng thời Registry lưu trữ các thông tin này để các ứng dụng khác có thể sử dụng để tham khảo khi cần thiết. Chúng ta có thể sử dụng chương trình Regedit của Win ’95 để xem và hiệu chỉnh Registry.<br />
<br />
Thông tin trong Registry cũng được lưu trữ có cấp bậc và có các Key nắm giữ các thông tin khác nhau. Hình 3-1 minh họa cách lưu trữ trong Registry thông qua chương trình Regedit.<br />
<br />
<br />
· Các loại thông tin lưu trữ trong Registry.<br />
<br />
Registry có ba loại dữ liệu của các đối tượng là Key, Value, và Data.<br />
<br />
KEY: Một Key có thể chứa các Key và các Value.<br />
<br />
VALUE: Registry có thể có ba loại dữ liệu: chuỗi, thông tin nhị phân và giá trị DWORD. Giá trị mặc định thường là chuỗi, mặc dù nó xuất hiện như "(value not set)" cho đến khi nó chứa dữ liệu. Nếu dữ liệu bị loại bỏ thì nó chứa chuỗi rỗng "" thay vì "(value not set)".<br />
<br />
DATA: Dữ liệu Registry thì thường đuợc chứa trong một value. Một mẫu dữ liệu thì thường không lớn hơn 64KB.<br />
<br />
· Cách truy xuất Registry để lấy thông tin của các Icon chương trình.<br />
<br />
Như chúng ta đã biết một File được lưu trữ sẽ có hai phần: phần tên và phần mở rộng, phần mở rộng này dùng để xác định kiểu của File. Trong Registry muốn biết được Icon tương ứng của một File chúng ta có thể lấy được thông tin về chương trình tạo ra File đó và từ đó có thể truy xuất đến key tương ứng để lấy được thông tin về icon mặc định ( đường dẫn chỉ vị trí File chứa Icon chương trình đó trên đĩa ) của chương trình.<br />
<br />
B) Một số hàm API liên quan đến việc truy xuất Registry<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegCloseKey <br />
 </span><br />
Ý nghĩa: Đóng một Registry key mà trước đó đã được mở bởi hàm API. Bạn phải đóng Registry key khi chấm dứt làm việc với nó. <br />
<br />
Khai báo:<br />
<br />
Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey" (ByVal hKey As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Từ khóa để đóng có kiểu dữ liệu là Long<br />
<br />
<br />
Giá trị trả về: trả về con số kiểu Long, 0 ( ERROR_SUCCESS) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegConnectRegistry<br />
 </span><br />
Ý nghĩa: Cho phép bạn truy cập vào một phần của Registry trên máy mạng<br />
<br />
Khai báo:<br />
<br />
Declare Function RegConnectRegistry Lib "advapi32.dll" Alias "RegConnectRegistryA" (ByVal lpMachineName As String, ByVal hKey As Long, phkResult As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
LpMachineName<br />
Tên của hệ thống để connect tới có kiểu dữ liệu là kiểu chuỗi. <br />
<br />
Hkey<br />
Là HKEY_LOCAL_MAHCINE hoặc HKEY_USER kiểu dữ liệu Long.<br />
<br />
PhkResult<br />
Biến dùng để Load Handle với một khóa cụ thể.<br />
<br />
<br />
Giá trị trả về: trả về con số kiểu Long, 0 ( ERROR_SUCCESS) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegCreateKey<br />
 </span><br />
Ý nghĩa: Cho phép bạn tạo một từ khóa mới trong Registry. Nếu từ khóa với cùng các thuộc tính có sẵn đã được mở. <br />
<br />
Khai báo:<br />
<br />
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. Handle của một Key đã mở hoặc một số tiêu chuẩn của tên Key.<br />
<br />
lpSubKey<br />
Kiểu chuỗi. Tên của một SubKey mới để tạo. Bạn có thể tạo nhiều khóa cùng một lúc bởi dấu gạch chéo ngược giữa chúng.<br />
<br />
VD: level1\level2\newkey<br />
<br />
phkResult<br />
Kiểu Long. Biến dùng để Load một Handle với subkey mới.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegCreateKeyEx<br />
 </span><br />
Ý nghĩa: Hàm này cho phép bạn thêm vào thông tin bảo mật mà có thể được đặt trên thực thể Registry.<br />
<br />
Khai báo: <br />
<br />
Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. Handle của một Key đã mở hoặc một số tiêu chuẩn của tên Key.<br />
<br />
LpSubKey<br />
Kiểu chuỗi. Tên của một SubKey mới để tạo. Bạn có thể tạo nhiều khóa cùng một lúc bởi dấu gạch chéo ngược giữa chúng.<br />
<br />
VD: level1\level2\newkey<br />
<br />
Reserved<br />
Kiểu Long. Được thiết lập bằng 0.<br />
<br />
LpClass<br />
Kiễu chuỗi. Tên một lớp cho Key.<br />
<br />
DwOptions<br />
Kiểu Long. Bằng 0 hoặc hằng số sau: REG_OPITON_VOLATILE. Khóa này thì không lưu giữ lại mà biến mất sau khi khởi động lại hệ thống.<br />
<br />
samDesired<br />
Kiểu Long. Một hoặc nhiều hằng số có tiếp đầu ngữ là KEY_?? kết hợp với mô tả của mỗi tác vụ cho Key này.<br />
<br />
lpSecurityAttributes<br />
SECRUITY ATTRIBUTES. Mô tả cấu trúc bảo vệ cho Key này.<br />
<br />
phkResult<br />
Kiểu Long. Biến để Load một Handle với một subkey mới.<br />
<br />
LpdwDisposition<br />
Kiểu Long. Biến để Load một trong số ngững hằng số sau: <br />
<br />
· REG_CREATED_NEW_KEY. Một Key mới vừa được tạo.<br />
<br />
· REG_OPENED_EXISTING_KEY.Một Key đã có đượ mở.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
Kiểu dữ liệu: <br />
<br />
Type SECURITY_ATTRIBUTES<br />
<br />
nLength As Long<br />
<br />
lpSecurityDescriptor As Long<br />
<br />
bInheritHandle As Long <br />
<br />
End Type<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegDeleteKey<br />
 </span><br />
Ý nghĩa: Xóa một Registry key và giá trị kết hợp của nó<br />
<br />
Khai báo:<br />
<br />
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. handle của một Key được mở hoặc một số tiêu chuẩn của tên Key.<br />
<br />
LpSubKey<br />
Kiểu chuỗi. Tên của một Key để Delete. Mọi subkeys của key đều được xóa.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegDeleteValue<br />
 </span><br />
Ý nghĩa: Xóa giá trị của một Registry key<br />
<br />
Khai báo:<br />
<br />
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. handle của một key được mở hoặc một số tiêu chuẩn của tên key.<br />
<br />
lpValueName<br />
Kiểu chuỗi. Tên của giá trị cần xóa. Có thể là vbNullString hoặc một chuỗi rổng cần xóa giá trị mặc định cho Key.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegEnumKey / RegEnumKeyEx<br />
 </span><br />
Ý nghĩa: Cho phép bạn truy xuất mỗi tên từng bước một của một subkey được định vị dưới một từ khóa cụ thể.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long<br />
<br />
Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
Hkey<br />
Kiểu Long. handle của một Key được mở hoặc một số tiêu chuẩn của tên Key. <br />
<br />
DwIndex<br />
Kiểu Long. Chỉ số của giá trị được lấy, giá trị đàu tiên là số 0.<br />
<br />
LpName<br />
Kiểu chuỗi. một buffer dùng để Load tên của key tại một chỉ số cụ thể.<br />
<br />
lpcbName<br />
Kiểu Long. một biến có chiều dài được định bởi lpName (bao gồm cả ký tự Null). Trả về một con số của ký tự được Load vào trong lpName hiện thời.<br />
<br />
lpReserved<br />
Kiểu Long. Không sử dụng, được thiết lập bằng 0.<br />
<br />
lpClass<br />
Kiểu chuỗi. Tên của một lớp được sử dụng cho Key. Có thể là vbNullString.<br />
<br />
lpcbClass<br />
Kiểu Long. một biến có chiều dài được định bởi lpClass. Trả về một con số của ký tự được Load vào trong buffer.<br />
<br />
lpftLastWriteTime<br />
FILETIME. thời gian sửa đổi lần cuối cùng của subkey được lấy.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
Type FILETIME<br />
<br />
dwLowDateTime As Long<br />
<br />
dwHighDateTime As Long<br />
<br />
End Type<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegEnumValue<br />
 </span><br />
Ý nghĩa: Cho phép bạn truy xuất mỗi tên từng bước một của một subkey được định vị dưới một từ khóa cụ thể.<br />
<br />
Khai báo: <br />
<br />
Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. handle của một Key được mở hoặc một số tiêu chuẩn của tên Key.<br />
<br />
dwIndex<br />
Kiểu Long. Chỉ số của giá trị được lấy, giá trị đàu tiên là số 0.<br />
<br />
lpValueName<br />
Kiểu chuỗi. một buffer dùng để Load tên của giá trị tại một chỉ số cụ thể.<br />
<br />
lpcbValueName<br />
Kiểu Long. một biến có chiều dài được định bởi lpValueName. Trả về một con số của ký tự được Load vào trong buffer.<br />
<br />
lpReserved<br />
Kiểu Long. không sử dụng, được thiết lập bằng 0.<br />
<br />
lpType<br />
Kiểu Long. Một biến dùng Load giá trị của loại mã.<br />
<br />
lpData<br />
Byte. Buffer dùng để Load dữ liệu dành cho giá trị.<br />
<br />
lpcbData<br />
Kiểu Long. một biến có chiều dài được định bởi lpData. Trả về một con số của byte được Load vào trong buffer. <br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegFlushKey<br />
 </span><br />
Ý nghĩa: Ghi thông tin vào Registry ngay lập tức.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegFlushKey Lib "advapi32.dll" Alias "RegFlushKey" (ByVal hKey As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. Một Handle của một Key dùng để Flush.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegLoadKey<br />
 </span><br />
Ý nghĩa: Nạp thông tin Registry từ một tập tin đã được tạo trước đó bởi RegSaveKey.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. HKEY_LOCAL_MACHINE, HKEY_USERS hoặc một Key được tạo sử dụng RegConnectRegistry.<br />
<br />
lpSubKey<br />
Kiểu chuỗi. Tên của một subKey mới được tạo.<br />
<br />
lpFile<br />
Kiểu chuỗi. một tên File đã đăng ký.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegNotifyChangeKeyValue<br />
 </span><br />
Ý nghĩa: Cho phép ứng dụng của bạn quan sát việc đăng ký từ khóa và nhận được thông báo khi từ khóa bị thay đổi.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" Alias "RegNotifyChangeKeyValue" (ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. một handle của Key dùng để xem.<br />
<br />
bWatchSubtree<br />
Kiểu Long. TRUE (nonzero ) sẽ thất được subkey tương tự như một Key cụ thể.<br />
<br />
dwNotifyFilter<br />
Kiểu Long. Một hoặc nhiều hằng số sau đây: REG_NOTIFY_CHANGE_NAME:nhận biết việc đổi tên, tạo hoặc xóa một Key.<br />
<br />
REG_NOTIFY_CHANGE_ATTRIBUTES: nhận biết việc thay đổi thuộc tính.<br />
<br />
REG_NOTIFY_CHANGE_LAST_SET: xác định thời gian sửa đổi cuối cùng.<br />
<br />
REG_NOTIFY_CHANGE_SECURITY: nhận biết việc thay đổi của việc bảo mật.<br />
<br />
hEvent<br />
Kiểu Long.Một Handle đến một Event. nếu bỏ qua thì fAsynchronus bằng False.<br />
<br />
fAsynchronus<br />
Kiểu Long.Nếu bằng 0 thì hàm không trả về cho đến khi một sự thay đổi được nhận biết. Nếu khác 0 thì hàm sẽ trả về và sự kiện của hEvent sẽ báo hiệu khi có sự thay đổi. <br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegOpenKey/ RegOpenKeyEx<br />
 <br />
 </span>Ý nghĩa: Mở một từ khóa được chỉ định. RegOpenKeyEx cũng mở một từ khóa nhưng thêm vào các tham số bảo mật.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long<br />
<br />
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. handle của một Key được mở <br />
<br />
lpSubKey<br />
Kiểu chuỗi. tên của key để mở.<br />
<br />
ulOptions<br />
Kiểu Long. Không sử dụng và được thiết lập bằng 0.<br />
<br />
samDesired<br />
Kiểu Long. Một hoặc nhiều hằng số có tiếp đầu ngữ là KEY_?? kết hợp với việc mô tả mỗi tác vụ được cho phép đối với key. <br />
<br />
phkResult<br />
Kiểu Long. Biến để Load một Handle đến Key đượ mở.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegQueryInfoKey <br />
 </span><br />
Ý nghĩa: Cho phép ứng dụng của bạn lấy được thông tin về từ khóa. <br />
<br />
Khai báo:<br />
<br />
Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
Hkey<br />
Kiểu Long. handle của Key được mở.<br />
<br />
LpClass<br />
Kiểu chuỗi. Một chuỗi để Load tên lớp cho Key<br />
<br />
LpcbClass<br />
Kiểu Long.Một biến mà chiều dài được xác định bởi lpClass. Trả về sẽ thiết lập con số kiểu Byte thực sự, Load vào buffer.<br />
<br />
LpReserved<br />
Kiểu Long. Không sử dụng và được thiết lập bằng 0.<br />
<br />
LpSubKeys<br />
Kiểu Long. một biến để Load con số của SubKey cho key này.<br />
<br />
LpcbMaxSubKeyLen<br />
Kiểu Long. Một biến dùng để Load chiều dài dài nhất của subkey name cho key này (không bao gồm ký tự NULL )<br />
<br />
LpcbMaxClassLen<br />
Kiểu Long. Một biến dùng để Load chiều dài dài nhất của tên lớp của subkey cho key này (không bao gồm ký tự NULL )<br />
<br />
LpcValues<br />
Kiểu Long. Một biến dùng để Load con số giá trị cho Key.<br />
<br />
LpcbMaxValueNameLen<br />
Kiểu Long. một biến dùng để Load giá trị tên với chiều dài lớn nhất của subkey cho Key (không bao gồm ký tự NULL )<br />
<br />
LpcbMaxValueLen<br />
Kiểu Long. Một biến để Load với kích cở yêu cầu của buffer để giữ giá trị dữ liệu lớn nhất cho Key này.<br />
<br />
LpcbSecurityDescriptor<br />
Kiểu Long. một biến dùng để Load có chiều dài bằng mô tả bảo mật của Key.<br />
<br />
lpftLastWriteTime<br />
Kiểu FILETIME. Một cấu trúc dùng để Load I gian tạo lập cuối cùng cho Key.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. Bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi. Hàm trả về ERROR_MORE_DATA nếu như một trong các buffer không có đủ chi62u dài để chứa dữ liệu trả về.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegQueryValue/ RegQueryValueEx<br />
 </span><br />
Ý nghĩa: Lấy giá trị mặc định cho từ khóa. RegQueryValueEx lấy thông tin bảo mật của từ khóa.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long<br />
<br />
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. Handle của một Key được mở.<br />
<br />
lpValueName<br />
Kiểu chuỗi. Tên của giá cần lấy.<br />
<br />
lpReserved<br />
Kiểu Long.Không được sử dụng và được thiết lập bằng 0.<br />
<br />
lpType<br />
Kiểu Long.Một biến dùng để Load có kiểu dữ liệu cần tìm.<br />
<br />
lpData<br />
Mọi kiểu dữ liệu. Một buffer dùng để Load với một giá trị cụ thể.<br />
<br />
lpcbData<br />
Kiểu Long.Một biến mà có chiều dài được định bởi lpData. Khi trả về thì thiết lập con số kiểu Byte để Load vào bộ đệm <br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công, các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegReplaceKey<br />
 </span><br />
Ý nghĩa: Thay đổi thông tin Registry của một File và tạo File Backup của thông tin đã thay đổi.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegReplaceKey Lib "advapi32.dll" Alias "RegReplaceKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpNewFile As String, ByVal lpOldFile As String) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. handle của một key được mở.<br />
<br />
LpSubKey<br />
Kiểu chuỗi. tên của subkey cần Replace, nó phải là thư mục nằm trong HKEY_LOCAL_MACHINE hoặc HKEY_USERS.<br />
<br />
LpNewFile<br />
Kiểu chuỗi. Tên của File chứa thông tin đăng ký, File này được tạo bằng cách sử dụng hàm RegSaveKey.<br />
<br />
LpOldFile<br />
Kiểu chuỗi. Tên của File khi Backup thông tin đăng ký hiện tại.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công, các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegRestoreKey<br />
 </span><br />
Ý nghĩa: Khôi phục thông tin từ một tập tin mà đã được tạo bởi hàm RegReplaceKey.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
Hkey<br />
Kiểu Long. handle của một Key mở. <br />
<br />
LpFIle<br />
Kiểu chuỗi. Tên của File cần Restore thông tin.<br />
<br />
dwFlags<br />
Kiểu Long. 0 thì trả lại giá trị như cũ. REG_WHOLE_HIVE_VOLATIVE dùng để khôi phục lại thông tin tạm thời ( chưa Save khi hệ thống khởi động lại ). Trong trường hợp này thì hKey phải tham khỏa đến HKEY_LOCAL_MACHINE hoặc HKEY_USERS.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công, các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegSaveKey<br />
 </span><br />
Ý nghĩa: Lưu một Registry key cũng như tất cả các subkey của nó lên một File trên đĩa. Tập tin này có thể được sử dụng sau đó bởi hàm RegLoadKey.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. Handle của một Key mở. <br />
<br />
LpFIle<br />
Kiểu chuỗi. Tên của Disk để lưu giữ thông tin cần đăng ký.<br />
<br />
LpSecurityAttributes<br />
SECRITY_ATTRIBUTES. Thông tin bảo mật cho thông tin vừa được lưu. Có thể là Null để mặc định thông tin bảo mật <br />
<br />
<br />
Giá trị trả về: Kiểu Long. bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegSetValue/ RegSetValueEx<br />
 </span><br />
Ý nghĩa: Thay đổi giá trị của một từ khóa cụ thể.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long<br />
<br />
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. handle của một Key mở <br />
<br />
LpValueName<br />
Kiểu chuỗi. Tên của giá trị được thiết lập.<br />
<br />
Reserved<br />
Kiểu Long. Không sử dụng và được thiết lập bằng 0.<br />
<br />
DwType<br />
Kiểu Long. Kiểu dữ liệu để thiết lập. <br />
<br />
LpData<br />
Kiểu Byte. Byte đầu tiên trong trong buffer chứa dữ liệu.<br />
<br />
CbData<br />
Kiểu Long. chiều dài của buffer lpData.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegUnloadKey<br />
 </span><br />
Ý nghĩa: Đóng và loại bỏ khỏi bộ nhớ một từ khóa đã được mở trước đó bởi hàm RegLoadKey.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. HKEY_LOCAL_MACHINE, HKEY_USERS, hoặc một Key đã được mở sử dụng hàm RegConnectRegistry.<br />
<br />
LpSubKey<br />
Kiểu chuỗi. tên của SubKey để UnLoad. Phải được Load trước đó bằng hàm RegLoadKey.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<br />
Nguồn : <a href="http://www.echip.com.vn/echiproot/weblh/sdpm/2002/lvtn/apivb/index.htm" target="_blank" rel="noopener" class="mycode_url">http://www.echip.com.vn</a><br />
<br />
<br />
Tiếp tục....<br />
<br />
VB có 6 lệnh tương tác trực tiếp với hệ điều hành: <br />
<br />
<span style="font-weight: bold;" class="mycode_b">ChDrive (Drive as String)</span> ' thay đổi ổ đĩa đăng nhập đối với hệ điều hành nền <br />
VD: ChDrive ("D:\") <br />
<br />
<span style="font-weight: bold;" class="mycode_b">ChDir (Path as String)</span> ' thay đổi thư mục hiện hành <br />
VD: ChDir ("C:\Windows\Temp") <br />
<br />
<span style="font-weight: bold;" class="mycode_b">MkDir (Path as String)</span> ' tạo mới thư mục <br />
VD: MkDir ("C:\MyDir") ' tạo mới thư mục MyDir trên ổ C <br />
<br />
<span style="font-weight: bold;" class="mycode_b">RmDir ("Path as String")</span> ' loại bỏ một thư mục <br />
VD: RmDir ("C:\MyDir") <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Name [Source] As [Dest]</span> ' đổi tên và di chuyển tập tin <br />
VD: Name "C:\myFile.txt" As "D:\FileChua.txt" sẽ move tập tin myFile.txt từ C:\ đến D:\ với tên mới: FileChua.txt <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kill (PathName as String)</span> ' xoá tập tin với tham số PathName chấp nhận ký tự đại diên (như Dos) <br />
VD: Kill ("C:\*.txt") sẽ xoá tất cả tập tin có phần mở rộng là txt trong thư mục gốc của ổ C <br />
------------------------------------------------------------------------------------------------------- <br />
Ôn lại một chút về khái niệm "hiện hành" có từ thời của Dos để hiểu rõ hơn về 6 lệnh này của Vb vì thực sự chúng rất mạnh. <br />
Ví dụ khi file thực thi của bạn nằm tại "C:\MyDir\MyFile.exe" thì lệnh MkDir ("NewDir") sẽ tạo mới một Path: "C:\MyDir\NewDir" tức là thư mục NewDir nằm cùng cấp với MyFile.exe. Nhưng nếu trước đó có câu lệnh ChDir ("C:\Windows") thì lệnh trên sẽ tạo Path: "C:\Windows\NewDir". Tương tự như vậy với lệnh ChDrive. Quan trọng là bạn phải biết "mình đang ở đâu?" bằng không với câu lệnh không chỉ rõ Path: Kill (*.*) sẽ bụp sạch các File không mong muốn nếu trước đó đã xài ChDir mà quên. <br />
-------------------------------------------------------------------------------------------------------- <br />
<br />
<span style="font-weight: bold;" class="mycode_b">CurDir (Drive)</span> ' trả về một chuỗi với tên đầy đủ của ổ đĩa hiện hành nếu tham số Drive để trống ( ) <br />
VD: <br />
CurDir ( ) ---&gt; tên ổ đĩa hiện hành <br />
CurDir ( "D") ---&gt; tên đầy đủ "D:\" <br />
CurDir ("X") ---&gt; sẽ báo lỗi nếu hệ thống không có tới ổ thứ X này <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Dir (PathName, Attributes)</span> ' tìm kiếm tập tin với đường dẫn đặt tại tham số 1. Tham số 2(Attributs) tùy chọn để chuyên biệt thuộc tính tìm kiếm. Mặc định la vbNormal <br />
VD: <br />
tmp = Dir ("C:\boot.ini") ---&gt; tmp = "" <br />
tmp = Dir ("C:\boot.ini", vbHidden) ---&gt; tmp = "boot.ini" <br />
<br />
<span style="font-weight: bold;" class="mycode_b">FileCopy (Source as String, Destination as String)</span> ' sao chép tập tin từ đường dẫn nguồn (Source) đến đường dẫn khác (Destination) <br />
VD: <br />
Filecopy "C:\Config.sys", "D:\Config.sys" <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Filelen (PathNam As String) As Long</span> ' trả về kích thước của tập tin <br />
<br />
<span style="font-weight: bold;" class="mycode_b">FileDateTime (PathName as string)</span> ' trả về ngày tháng và thời gian tập tin đã được tạo ra hoặc được chỉnh sữa lần gần nhất. <br />
VD: <br />
Msgbox FileDateTime ("C:\Config.sys") <br />
<br />
<span style="font-weight: bold;" class="mycode_b">GetAttr (PathName as String) as Integer</span> ' trả về một số nguyên là trị thuộc tính của File <br />
<span style="text-decoration: underline;" class="mycode_u">Các hằng thuộc tính gồm:</span> <br />
vbNormal = 0 <br />
vbReadOnly = 1 <br />
vbHiden = 2 <br />
vbSystem = 4 <br />
vbVolume = 8 <br />
vbDirectory = 16 <br />
vbArchive = 32 <br />
<br />
VD: <br />
GetAttr "C:\boot.ini" = 35 (file Boot.ini mang các thuộc tính sau: ReadOnly(1) + Hiden(2) + Archive(32) <br />
<br />
<span style="font-weight: bold;" class="mycode_b">SetAttr (PathName as String, Attributes as vbFileAttribute)</span> ' Xác lập thông tin thuộc tính của File. Sử dụng các hằng thuộc tính hoặc các giá trị ở bảng trên cho tham số Attributes <br />
VD: <br />
SetAttr "C:\Boot.ini, 0" ---&gt; xác lập file boot.ini chỉ mang một thuộc tính là Normal <br />
SetAttr "C:\Boot.ini,3" ---&gt; xác lập boot.ini mang thuộc tính chỉ đọc và ẩn. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">FreeFile</span> ' trả về một số integer là chỉ số (ID) để HDH theo dõi và quản lý các file đang mở (Open). Dùng một biến nguyên để lưu giá trị này dùng cho các cuôc gọi lệnh Open (file). Khi đó ta không cần quan tâm đến các chỉ số(ID) này nữa. FreeFile sẽ theo dõi và cung cấp cho ta các chỉ số(ID) chưa dùng. <br />
VD: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Dim&nbsp;Filenum</span><span style="color: #FF8000">#&nbsp;<br /></span><span style="color: #0000BB">FileNum&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">FreeFile&nbsp;<br />Open&nbsp;</span><span style="color: #007700">[</span><span style="color: #0000BB">PathName</span><span style="color: #007700">]&nbsp;For&nbsp;</span><span style="color: #0000BB">Output&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #FF8000">#Filenum&nbsp;<br /></span></code></div></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Open [PathName as String] For [Mode] As [ID File] </span>' Mỗi khi thấy lệnh Open, VB sẽ sẵn sàng cho các thao tác đọc và ghi lên File được cung cấp ở tham số [PathName]. Có năm chế độ mở tập tin được đặt ở tham số [Mode], và [ID File] dĩ nhiên là chỉ số của tập tin đang mở. <br />
<span style="text-decoration: underline;" class="mycode_u">Các dạng thức cơ bản của lệnh Open:</span> <br />
<span style="font-style: italic;" class="mycode_i">Open [Pathname] For Input As Filenum</span> ' mở File và chỉ đọc được thông tin, không ghi lên được. <br />
<span style="font-style: italic;" class="mycode_i">Open [PathName] For Output As Filenum</span> ' mở File để xuất thông tin. Khi được mở theo dạng này mọi thông tin cũ trên File sẽ bị mất. <br />
<span style="font-style: italic;" class="mycode_i">Open [PathName] For Append As Filenum</span> ' mở File để đọc và ghi tiếp lên được. <br />
<span style="font-style: italic;" class="mycode_i">Open [PathName] For Random As Filenum</span> ' mở và truy cập ngẫu nhiên các bản ghi và các trường trên File (phải biết được cấu trúc của các bản ghi) <br />
<span style="font-style: italic;" class="mycode_i">Open [PathName] For Binary As Filenum</span> ' đọc ghi theo Byte. Đây là dạng tổng quát và linh hoạt nhất. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Input [Number, #Filenum]</span> ' đọc nội dung File với số lượng xác định ở tham số Number <br />
VD: Str = Input (10, #Filenum) ' đọc 10 ký tự vào biến Str. <br />
Dạng khác của Input: <br />
<span style="font-weight: bold;" class="mycode_b">Input [#Filenum, Str]</span> ' ở đây biến Str thường ở dạng Variant <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Line Input [#FileNum, Str]</span> ' đọc thông tin theo từng dòng vào biến Str. Thường kết hợp với hàm EOF để lấy hết thông tin <br />
<br />
<span style="font-weight: bold;" class="mycode_b">EOF (Filenum)</span> ' trả về vị trí chấm dứt của File khi đang mở <br />
VD: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Do&nbsp;While&nbsp;</span><span style="color: #0000BB">Not&nbsp;EOF&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">Filenum</span><span style="color: #007700">)&nbsp;</span><span style="color: #DD0000">'&nbsp;lập&nbsp;nếu&nbsp;không&nbsp;phải&nbsp;ở&nbsp;end&nbsp;of&nbsp;file&nbsp;<br />Line&nbsp;Input&nbsp;#Filenum,&nbsp;Str&nbsp;'&nbsp;</span><span style="color: #0000BB">đọc&nbsp;từng&nbsp;dòng&nbsp;vào&nbsp;biến&nbsp;Str&nbsp;<br />Loop&nbsp;<br /></span></code></div></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">LOF (Filenum)</span> ' trả về kích thước của File khi đang mở. <br />
VD: <br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Str&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Input&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">LOF</span><span style="color: #007700">(</span><span style="color: #0000BB">Filenum</span><span style="color: #007700">),&nbsp;</span><span style="color: #FF8000">#Filenum)&nbsp;<br /></span></code></div></div></div> ' sẽ lấy hết nội dung của File (không nên sử dụng với File có kích thước vài Mb sẽ bị lỗi "out of memory") <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Write [#Filenum, Expression]</span> ' ghi lên File <br />
VD: <br />
Write #FileNum, "12345" ---&gt; "12345" <br />
Write #Filenum, 12345 ---&gt;12345 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Print [#Filenum, Expression]</span> ' làm việc chính xác như khi Print lên Form <br />
VD: <br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Print&nbsp;</span><span style="color: #FF8000">#Filenum,&nbsp;123;&nbsp;456&nbsp;<br /></span></code></div></div></div> ---&gt; 123 456 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Get [#Filenum, position, ByteArray]</span> ' lấy thông tin từ tập tin được mở theo Binary tại vị trí xác định bởi Position và lưu vào ByteArray. Số byte lấy ra tùy thuộc vào kích thước của mảng ByteArray. Mỗi khi lấy ra 1 byte con trỏ tập tin tự động chuyển tới vị trí byte kế tiếp. <br />
VD: <br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Dim&nbsp;Str&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">String&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">4&nbsp;<br /></span></code></div></div></div>Get #Filenum, 3, Str ---&gt; lấy 4 byte bắt đầu từ byte thứ 3 lưu vào Str. <br />
(nếu có câu lệnh Get tiếp theo mà tham số Position bỏ trống, thì vị trí bắt đầu lấy ra sẽ là byte thứ 8) <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Loc (#Filenum)</span> ' Trả về vị trí byte đọc/ghi hiện tại trong tập tin đang mở. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Seek [#Filenum, Position]</span> ' dịch chuyển con trỏ tập tin đến vị trí qui định bởi tham số Position <br />
VD: <br />
Seek #Filenum, 3 <br />
Get #Filenum, , Str ---&gt; vị trí lấy ra sẽ bắt đầu tại byte thứ 3 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Seek (#Filenum)</span> ' trả về vị trí hiện tại của con trỏ tập tin<br />
Put [#Filenum, Position, ByteArray] ' đặt nội dung của mảng ByteArray vào vị trí byte thứ[Position]. <br />
Lệnh Put se ghi đè lên mọi thứ và chỉ dùng cho truy cập Random và Binary <br />
VD: Put #filenum, , Str ---&gt; sẽ ghi 4 byte bắt đầu ở vị trí byte thứ 1 <br />
<br />
Reset ' Đóng tất cả các tập tin đã được mở bằng lệnh Open <br />
<br />
Code:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Option&nbsp;Explicit<br /></span><span style="color: #007700">Private&nbsp;</span><span style="color: #0000BB">Sub&nbsp;Form_Load</span><span style="color: #007700">()<br /></span><span style="color: #0000BB">Dim&nbsp;FileNumber<br /> &nbsp; For&nbsp;FileNumber&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1&nbsp;To&nbsp;5<br /> &nbsp; &nbsp; &nbsp; Open&nbsp;</span><span style="color: #DD0000">"TEST"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">FileNumber&nbsp;</span><span style="color: #007700">For&nbsp;</span><span style="color: #0000BB">Output&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #FF8000">#FileNumber&nbsp;'&nbsp;Mở&nbsp;file<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Write&nbsp;</span><span style="color: #FF8000">#FileNumber,&nbsp;"Hello&nbsp;World"&nbsp; &nbsp;'&nbsp;Ghi&nbsp;dữ&nbsp;liệu&nbsp;vào&nbsp;file.<br /></span><span style="color: #0000BB"> &nbsp; Next&nbsp;FileNumber<br /> &nbsp; Reset&nbsp; &nbsp;</span><span style="color: #DD0000">'&nbsp;Đóng&nbsp;file&nbsp;và&nbsp;cập&nbsp;nhật&nbsp;dữ&nbsp;liệu&nbsp;vào&nbsp;file<br />End&nbsp;Sub&nbsp;<br /></span></code></div></div></div><br />
Close (#Filenum) ' Đóng tập tin đã được mở bằng lệnh Open. <br />
<span style="font-weight: bold;" class="mycode_b"><br />
 Lock [#Filenum, Expression]</span> ' khoá tập tin không cho người khác truy cập khi App của bạn đang mở. Tham số thứ hai chuyên biệt vị trí khoá. Nếu bỏ qua tham số tùy chọn này, lệnh Lock sẽ khoá toàn bộ tập tin. Đối với các tập tin mở theo truy cập tuần tự lệnh Lock sẽ khoá toàn bộ tập tin bất kể khoảng do tham số 2 qui định. <br />
VD: <br />
Lock #Filenum, 1 To 100 ---&gt; sẽ khoá 100 byte từ byte thứ 1 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Unlock [#Filenum, Expression]</span> ' mở khoá tập tin, tham số sử dụng như Lock. <br />
<br />
Chú ý: cần bảo đảm loại bỏ tất cả các khoá với câu lệnh Unlock tương ứng trước khi đóng tập tin hoặc thoát khỏi chương trình(các đối số phải tương hợp chính xác). Nếu không tập tin có thể bị rối loạn. <br />
---------------------------------------------------------------------------------------------------------- <br />
Để điều khiển sự chia sẽ tập tin vào thời gian bạn mở tập tin. Có thể dùng câu lệnh tổng quát nhất của lệnh Open <br />
Cú pháp: <br />
<span style="font-weight: bold;" class="mycode_b">Open PathName [For mode] [Access access] [Lock] As #Filenum [Len=reclength]</span> ' trong đó: <br />
<br />
PathName là chuỗi chứa đường dẫn đến tập tin <br />
<br />
Mode là từ khoá chuyên biệt chế độ tập tin như Input, Append, Random... <br />
<br />
Access là từ khoá chuyên biệt các thao tác được phép trên tập tin mở. Có ba thao tác: Read, Write, ReadWrite VD:Open PathName For Binary Access Read As #Filenum --&gt; cho phép bạn đọc nhưng không cho phép thực hiện các thay đổi đối với tập tin. <br />
<br />
Lock là từ khoá chuyên biệt các thao tác được phép trên tập tin mở đối với các quá trình khác. <br />
Khác với Access : điều khiển cách thức chương trình bạn làm việc với tập tin. Với từ khoá Lock có bốn khả năng: <br />
1- [Shared] các quá trình khác có thể đọc và viết vào tập tin mặc dù chương trình của bạn đang làm việc với tập tin đó. <br />
2- [LockRead] chương trình khác không thể mở để đọc tập tin, trong khi chương trình của bạn đang làm việc với tập tin đó. <br />
3- [LockWrite] không thể mở để viết lên tập tin trong khi chương trình bạn đang làm việc với tập tin đó. <br />
4- [LockReadWrite] chương trình khác không thể làm việc với tập tin trong khi chương trình bạn đang làm việc với tập tin đó. <br />
VD: Open PathName For binary Access Lock Read #Filenum ---&gt; sẽ ngăn chận các chương trình khác sử dụng tập tin khi bạn đang làm việc với tập tin đó. <br />
<br />
Reclength đây là số nguyên từ 1 đến 32767. Đối các tập tin mở ở chế độ Random số này đưa ra chiều dài bản ghi. Đối với các tập tin chuỗi thứ tự, giá trị này là số lượng các ký tự đươc đệm trong hệ điều hành]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">1. Khái quát <br />
 </span><br />
Khi cấu trúc của Windows được tạo ra, Microsoft có ý định tạo ra một số lớn các chức năng lập trình có giá trị cho mọi chương trình dựa trên nền Windows. Chiến thuật này phục vụ hai mục đích, cung cấp ứng dụng Windows một cái nhìn và cảm giác nhất quán cũng như khiến cho người lập trình khỏi phải sao chép lại các hàm mà đã được mã hóa và debug. Những hàm này được lưu trữ trong một dãy các thư viện liên kết động ( DLL ) và được biết như là giao diện lập trình ứng dụng ( API ). Từ khi phát triển thành hệ điều hành 32bit, Windows 95’ những phiên bản mới được biết đến như Win32 API. Một vài hàm trong Win32 API thì có giá trị như những lệnh Visual Basic, nhưng phần lớn thì được truy cập chỉ bằng cách gọi hàm API.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Các hàm API cơ bản dùng để quản lí File và Folder<br />
 2.1 Hàm truy xuất File<br />
 * GetLogicalDrives<br />
 <br />
 </span>Ý nghĩa: Xác định các kí tự của tất cả ổ đĩa luận lí trên hệ thống.<br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetLogicalDrives&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetLogicalDrives"&nbsp;</span><span style="color: #007700">(&nbsp;)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Giá trị trả về: Các bit trong kết quả này chỉ định các ổ đĩa luận lí tồn tại trên hệ thống.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetDriveType<br />
 </span><br />
Ý nghĩa: Hàm này cho biết loại của một đĩa cụ thể cho trước. Sử dụng kèm với hàm GetLogicalDriveStrings để biết được loại của những đĩa do hàm GetLogicalDriveStrings tìm được.<br />
<br />
Khai báo:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetDriveType&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetDriveTypeA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;nDrive&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Mô tả<br />
Ndrive<br />
<br />
Một chuỗi chứa đường dẫn đến thư mục gốc của đĩa.<br />
<br />
<br />
Các hằng số:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Const&nbsp;</span><span style="color: #0000BB">DRIVE_REMOVABLE&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2<br /></span><span style="color: #007700">Const&nbsp;</span><span style="color: #0000BB">DRIVE_FIXED&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">3<br /></span><span style="color: #007700">Const&nbsp;</span><span style="color: #0000BB">DRIVE_REMOTE&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">4<br /></span><span style="color: #007700">Const&nbsp;</span><span style="color: #0000BB">DRIVE_CDROM&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">5<br /></span><span style="color: #007700">Const&nbsp;</span><span style="color: #0000BB">DRIVE_RAMDISK&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">6&nbsp;<br /></span></code></div></div></div><br />
<br />
Giá trị trả về: 0 nếu đĩa không thể xác định được, 1 nếu thư mục đã chỉ định không tồn tại. Một trong số các hằng chỉ ra loại đĩa được mô tả bên trên thì thành công.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* FindFirstFile<br />
 </span><br />
Ý nghĩa: Tìm File - Folder dựa trên tên File đã cho.<br />
<br />
Khai báo:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">FindFirstFile&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"FindFirstFileA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;lpFileName&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpFindFileData&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">WIN32_FIND_DATA</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Ý nghĩa<br />
<br />
LpFileName <br />
Tên File cần tìm. Có thể bao gồm các kí tự tìm kiếm ( *, ? ). Có thể bao gồm đường dẫn đầy đủ.<br />
<br />
LpFindFileData<br />
Một cấu trúc dữ liệu dùng để lưu trữ thông tin về File tìm được.<br />
<br />
<br />
Kiểu dữ liệu:<br />
<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Type&nbsp;WIN32_FIND_DATA<br /><br />dwFileAttributes&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /><br />ftCreationTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME<br /><br />ftLastAccessTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME<br /><br />ftLastWriteTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME<br /><br />nFileSizeHigh&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /><br />nFileSizeLow&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /><br />dwReserved0&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /><br />dwReserved1&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br /><br />cFileName&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">MAX_PATH<br /><br />cAlternate&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">14<br /><br />End&nbsp;Type&nbsp;<br /></span></code></div></div></div><br />
<br />
Giá trị trả về: Một điều quản tìm kiếm nếu thành công, INVALID_HANDLE_VALUE nếu có lỗi. Điều quản này nên được đóng bởi hàm FindClose khi nó không còn cần thiết. <br />
<br />
Điều quản trả về từ hàm này được sử dụng như một tham số cho hàm FindNextFile. Điều này cho phép ta lấy tất cả các File mà được so sánh với tên File đã được chỉ định bởi tham số lpFileName. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">* FindNextFile<br />
 </span><br />
Ý nghĩa: Sử dụng kết hợp với hàm FindFirstFile để tìm File kế tiếp trong đường dẫn được chỉ ra trong hàm FindFirstFile. Hàm này tìm File kế tiếp ngay sau File đầu tiên hoặc File sau File được tìm thấy ở lần gọi hàm FindNextFile trước đó và được gọi lại nhiều lần cho đến khi tìm ra hết tất cả các File.<br />
<br />
Khai báo:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">FindNextFile&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"FindNextFileA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;hFindFile&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpFindFileData&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">WIN32_FIND_DATA</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Ý nghĩa<br />
<br />
HfindFile<br />
Handle trả về từ hàm FindFirstFile.<br />
<br />
LpFindFileData<br />
Một cấu trúc dữ liệu dùng để lưu trữ thông tin của File tìm được.<br />
<br />
<br />
Giá trị trả về: True (số khác 0 nếu thành công), 0 nếu có lỗi. Thiết lập GetLastError thành ERROR_NO_MORE_FILES khi không còn File nào để lấy.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* FindClose <br />
 </span><br />
Ý nghĩa: Chấm dứt việc tìm File đã được gọi bởi hàm FindFirstFile.<br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">FindClose&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"FindClose"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;hFindFile&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Ý nghĩa<br />
<br />
HfindFile<br />
Một Handle được cung cấp bởi hàm FindFirstFile. <br />
<br />
<br />
Giá trị trả về: số khác 0 nếu thành công, 0 nếu có lỗi. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">* ExtractIcon<br />
 </span><br />
Ý nghĩa: Lấy một Icon trong các File.ICO,.EXE,.DLL <br />
<br />
Khai báo: <br />
<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">ExtractIcon&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"shell32.dll"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"ExtractIconA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;hInst&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ByVal&nbsp;lpszExeFileName&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ByVal&nbsp;nIconIndex&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Ý nghĩa<br />
<br />
Hlnst <br />
Con số chỉ định <br />
<br />
LpszExeFileName <br />
Tên của File chứa Icon<br />
<br />
NiconIndex <br />
Chỉ số của Icon trong các File.ICO,.EXE,.DLL<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetDiskFreeSpace<br />
 </span><br />
Ý nghĩa: lấy thông tin về sự tổ chức của đĩa và không gian còn trống.<br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Private&nbsp;Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetDiskFreeSpace&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetDiskFreeSpaceA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;lpRootPathName&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpSectorsPerCluster&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpBytesPerSector&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpNumberOfFreeClusters&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpTotalNumberOfClusters&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Mô tả<br />
<br />
LpRootPathName: Đường dẫn gốc của ổ đĩa mà không phải là tên của ổ đĩa.<br />
LpSectorsPerCluster: Một biến chứa số Sector trong một Cluster.<br />
LpBytesPerSector: Một biến chứa số Byte trong một Sector.<br />
LpNumberOfFreeCluster:Một bién chứa số Cluster trống trên đĩa.<br />
LpTotalNumberOfCluster:Một biến chứa số Cluster trên đĩa.<br />
<br />
<br />
Giá trị trả về: Số khác 0 nếu thành công, 0 nếu có lỗi. Hàm này không nên sử dụng trên Win ’95 cho ổ đĩa lớn hơn 2 GB<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetFileAttributes <br />
 </span><br />
Ý nghĩa: xác định thuộc tính của một File cụ thể.<br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Private&nbsp;Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetFileAttributes&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetFileAttributesA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;lpFileName&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Mô tả<br />
<br />
LpFileName<br />
Tên của File cần lấy thuộc tính<br />
<br />
<br />
Hằng số: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">FILE_ATTRIBUTE_ARCHIVE&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H20<br />FILE_ATTRIBUTE_COMPRESSED&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H800<br />FILE_ATTRIBUTE_DIRECTORY&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H10<br />FILE_ATTRIBUTE_HIDDEN&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H2<br />FILE_ATTRIBUTE_NORMAL&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H80<br />FILE_ATTRIBUTE_READONLY&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H1<br />FILE_ATTRIBUTE_SYSTEM&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H4<br />FILE_ATTRIBUTE_TEMPORARY&nbsp;</span><span style="color: #007700">=&nbsp;&amp;</span><span style="color: #0000BB">H100&nbsp;<br /></span></code></div></div></div><br />
<br />
Giá trị trả về: -1 nếu có lỗi. Một giá trị chứa bit cờ cụ thể thuộc tính của File với bit cờ là một hằng số.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetFileSize<br />
 </span><br />
Ý nghĩa: Xác định kích cỡ của File. <br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Private&nbsp;Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetFileSize&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetFileSize"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;hFile&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpFileSizeHigh&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Mô tả<br />
<br />
HFile:Handle của File<br />
LpFileSizeHigh:Giá trị số được nạp với 32 bit cao của 64 bit kích cỡ File. Có thể Null (thay đổi bởi Byval), nếu kích cỡ thì không tối thiểu bằng 2^32 Byte.<br />
<br />
Giá trị trả về: Kích cỡ của File. &amp;HFFFFFFFF nếu có lỗi. Nếu lpFileSizeHigh không phải là Null và kết quả là &amp;HFFFFFFFF thì phải gọi GetLastError để xác định, nếu một lỗi thực sự xảy ra thì giá trị này là kết quả hợp lệ.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetFileTime <br />
 </span><br />
Ý nghĩa: Lấy thông tin thời gian của File đã được chỉ định. <br />
<br />
Khai báo: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Private&nbsp;Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetFileTime&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetFileTime"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;hFile&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpCreationTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpLastAccessTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">lpLastWriteTime&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">FILETIME</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
Tham số<br />
Mô tả<br />
<br />
Hfile<br />
Một Handle của File <br />
<br />
LpCreateTime:Một cấu trúc dữ liệu chứa thới gian tạo lập của File<br />
<br />
LpLastAccessTime:Một cấu trúc dữ liệu chứa thời gian truy cập lần cuối của File (không được hổ trợ bởi hệ thống File FAT)<br />
<br />
LpLastWriteTime:Một cấu trúc dữ liệu chứa thời gian cập nhật lần cuối của File<br />
<br />
<br />
Giá trị trả về: số khác 0 nếu thành công, 0 nếu có lỗi. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">* GetLogicalDriveString <br />
 </span><br />
Ý nghĩa: Lấy một chuỗi chứa đường dẫn ổ đĩa gốc của tất cả ổ đĩa luận lí tồn tại trên hệ thống.<br />
<br />
Khai báo:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Private&nbsp;Declare&nbsp;Function&nbsp;</span><span style="color: #0000BB">GetLogicalDriveStrings&nbsp;Lib&nbsp;</span><span style="color: #DD0000">"kernel32"&nbsp;</span><span style="color: #0000BB">Alias&nbsp;</span><span style="color: #DD0000">"GetLogicalDriveStringsA"&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">ByVal&nbsp;nBufferLength&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ByVal&nbsp;lpBuffer&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">Long&nbsp;<br /></span></code></div></div></div><br />
<br />
Tham số<br />
Mô tả<br />
<ul class="mycode_list"><li>nBufferLengh:Chiều dài của chuỗi lpBuffer<br />
</li>
<li>lpBuffer:Một chuỗi chứa tên các đĩa Logic. Mỗi tên được ngăn cách bởi kí tự Null, tên cuối cùng theo sau bởi 2 kí tự Null.<br />
</li>
</ul>
<br />
Giá trị trả về: số kí tự được nạp vào lpBuffer (ngoại trừ kí tự Null kết thúc ). Nếu Buffer không đủ dài để chứa đường dẫn, giá trị trả về sẽ là kích cở của Buffer cần thiết. 0 nếu có lỗi. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">2.2 Hàm truy xuất Registry<br />
 <br />
 a) Giới thiệu<br />
 <br />
 </span>Registry lưu trữ các dữ liệu liên quan đến hệ thống và các ứng dụng. Registry bao gồm một số tập tin mà hệ thống và các ứng dụng có thể truy cập đến và sử dụng để hiệu chỉnh thông tin cấu hình. Có ba loại tập tin mà lưu trữ tất cả các thông tin Registry là: System.dat, User.dat và các tập tin Policy.<br />
<br />
Trong Win’95 Folder và mỗi một File được tạo ra bởi một chương trình khác nhau thì sẽ có các Icon khác nhau được lưu trữ trong các File liên kết hoãc các File chương trình. Các chương trình khi được cài đặt trên máy tính sẽ phải đăng kí Registry và đồng thời Registry lưu trữ các thông tin này để các ứng dụng khác có thể sử dụng để tham khảo khi cần thiết. Chúng ta có thể sử dụng chương trình Regedit của Win ’95 để xem và hiệu chỉnh Registry.<br />
<br />
Thông tin trong Registry cũng được lưu trữ có cấp bậc và có các Key nắm giữ các thông tin khác nhau. Hình 3-1 minh họa cách lưu trữ trong Registry thông qua chương trình Regedit.<br />
<br />
<br />
· Các loại thông tin lưu trữ trong Registry.<br />
<br />
Registry có ba loại dữ liệu của các đối tượng là Key, Value, và Data.<br />
<br />
KEY: Một Key có thể chứa các Key và các Value.<br />
<br />
VALUE: Registry có thể có ba loại dữ liệu: chuỗi, thông tin nhị phân và giá trị DWORD. Giá trị mặc định thường là chuỗi, mặc dù nó xuất hiện như "(value not set)" cho đến khi nó chứa dữ liệu. Nếu dữ liệu bị loại bỏ thì nó chứa chuỗi rỗng "" thay vì "(value not set)".<br />
<br />
DATA: Dữ liệu Registry thì thường đuợc chứa trong một value. Một mẫu dữ liệu thì thường không lớn hơn 64KB.<br />
<br />
· Cách truy xuất Registry để lấy thông tin của các Icon chương trình.<br />
<br />
Như chúng ta đã biết một File được lưu trữ sẽ có hai phần: phần tên và phần mở rộng, phần mở rộng này dùng để xác định kiểu của File. Trong Registry muốn biết được Icon tương ứng của một File chúng ta có thể lấy được thông tin về chương trình tạo ra File đó và từ đó có thể truy xuất đến key tương ứng để lấy được thông tin về icon mặc định ( đường dẫn chỉ vị trí File chứa Icon chương trình đó trên đĩa ) của chương trình.<br />
<br />
B) Một số hàm API liên quan đến việc truy xuất Registry<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegCloseKey <br />
 </span><br />
Ý nghĩa: Đóng một Registry key mà trước đó đã được mở bởi hàm API. Bạn phải đóng Registry key khi chấm dứt làm việc với nó. <br />
<br />
Khai báo:<br />
<br />
Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey" (ByVal hKey As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Từ khóa để đóng có kiểu dữ liệu là Long<br />
<br />
<br />
Giá trị trả về: trả về con số kiểu Long, 0 ( ERROR_SUCCESS) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegConnectRegistry<br />
 </span><br />
Ý nghĩa: Cho phép bạn truy cập vào một phần của Registry trên máy mạng<br />
<br />
Khai báo:<br />
<br />
Declare Function RegConnectRegistry Lib "advapi32.dll" Alias "RegConnectRegistryA" (ByVal lpMachineName As String, ByVal hKey As Long, phkResult As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
LpMachineName<br />
Tên của hệ thống để connect tới có kiểu dữ liệu là kiểu chuỗi. <br />
<br />
Hkey<br />
Là HKEY_LOCAL_MAHCINE hoặc HKEY_USER kiểu dữ liệu Long.<br />
<br />
PhkResult<br />
Biến dùng để Load Handle với một khóa cụ thể.<br />
<br />
<br />
Giá trị trả về: trả về con số kiểu Long, 0 ( ERROR_SUCCESS) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegCreateKey<br />
 </span><br />
Ý nghĩa: Cho phép bạn tạo một từ khóa mới trong Registry. Nếu từ khóa với cùng các thuộc tính có sẵn đã được mở. <br />
<br />
Khai báo:<br />
<br />
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. Handle của một Key đã mở hoặc một số tiêu chuẩn của tên Key.<br />
<br />
lpSubKey<br />
Kiểu chuỗi. Tên của một SubKey mới để tạo. Bạn có thể tạo nhiều khóa cùng một lúc bởi dấu gạch chéo ngược giữa chúng.<br />
<br />
VD: level1\level2\newkey<br />
<br />
phkResult<br />
Kiểu Long. Biến dùng để Load một Handle với subkey mới.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegCreateKeyEx<br />
 </span><br />
Ý nghĩa: Hàm này cho phép bạn thêm vào thông tin bảo mật mà có thể được đặt trên thực thể Registry.<br />
<br />
Khai báo: <br />
<br />
Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. Handle của một Key đã mở hoặc một số tiêu chuẩn của tên Key.<br />
<br />
LpSubKey<br />
Kiểu chuỗi. Tên của một SubKey mới để tạo. Bạn có thể tạo nhiều khóa cùng một lúc bởi dấu gạch chéo ngược giữa chúng.<br />
<br />
VD: level1\level2\newkey<br />
<br />
Reserved<br />
Kiểu Long. Được thiết lập bằng 0.<br />
<br />
LpClass<br />
Kiễu chuỗi. Tên một lớp cho Key.<br />
<br />
DwOptions<br />
Kiểu Long. Bằng 0 hoặc hằng số sau: REG_OPITON_VOLATILE. Khóa này thì không lưu giữ lại mà biến mất sau khi khởi động lại hệ thống.<br />
<br />
samDesired<br />
Kiểu Long. Một hoặc nhiều hằng số có tiếp đầu ngữ là KEY_?? kết hợp với mô tả của mỗi tác vụ cho Key này.<br />
<br />
lpSecurityAttributes<br />
SECRUITY ATTRIBUTES. Mô tả cấu trúc bảo vệ cho Key này.<br />
<br />
phkResult<br />
Kiểu Long. Biến để Load một Handle với một subkey mới.<br />
<br />
LpdwDisposition<br />
Kiểu Long. Biến để Load một trong số ngững hằng số sau: <br />
<br />
· REG_CREATED_NEW_KEY. Một Key mới vừa được tạo.<br />
<br />
· REG_OPENED_EXISTING_KEY.Một Key đã có đượ mở.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
Kiểu dữ liệu: <br />
<br />
Type SECURITY_ATTRIBUTES<br />
<br />
nLength As Long<br />
<br />
lpSecurityDescriptor As Long<br />
<br />
bInheritHandle As Long <br />
<br />
End Type<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegDeleteKey<br />
 </span><br />
Ý nghĩa: Xóa một Registry key và giá trị kết hợp của nó<br />
<br />
Khai báo:<br />
<br />
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. handle của một Key được mở hoặc một số tiêu chuẩn của tên Key.<br />
<br />
LpSubKey<br />
Kiểu chuỗi. Tên của một Key để Delete. Mọi subkeys của key đều được xóa.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegDeleteValue<br />
 </span><br />
Ý nghĩa: Xóa giá trị của một Registry key<br />
<br />
Khai báo:<br />
<br />
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. handle của một key được mở hoặc một số tiêu chuẩn của tên key.<br />
<br />
lpValueName<br />
Kiểu chuỗi. Tên của giá trị cần xóa. Có thể là vbNullString hoặc một chuỗi rổng cần xóa giá trị mặc định cho Key.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegEnumKey / RegEnumKeyEx<br />
 </span><br />
Ý nghĩa: Cho phép bạn truy xuất mỗi tên từng bước một của một subkey được định vị dưới một từ khóa cụ thể.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long<br />
<br />
Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
Hkey<br />
Kiểu Long. handle của một Key được mở hoặc một số tiêu chuẩn của tên Key. <br />
<br />
DwIndex<br />
Kiểu Long. Chỉ số của giá trị được lấy, giá trị đàu tiên là số 0.<br />
<br />
LpName<br />
Kiểu chuỗi. một buffer dùng để Load tên của key tại một chỉ số cụ thể.<br />
<br />
lpcbName<br />
Kiểu Long. một biến có chiều dài được định bởi lpName (bao gồm cả ký tự Null). Trả về một con số của ký tự được Load vào trong lpName hiện thời.<br />
<br />
lpReserved<br />
Kiểu Long. Không sử dụng, được thiết lập bằng 0.<br />
<br />
lpClass<br />
Kiểu chuỗi. Tên của một lớp được sử dụng cho Key. Có thể là vbNullString.<br />
<br />
lpcbClass<br />
Kiểu Long. một biến có chiều dài được định bởi lpClass. Trả về một con số của ký tự được Load vào trong buffer.<br />
<br />
lpftLastWriteTime<br />
FILETIME. thời gian sửa đổi lần cuối cùng của subkey được lấy.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.<br />
<br />
Type FILETIME<br />
<br />
dwLowDateTime As Long<br />
<br />
dwHighDateTime As Long<br />
<br />
End Type<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegEnumValue<br />
 </span><br />
Ý nghĩa: Cho phép bạn truy xuất mỗi tên từng bước một của một subkey được định vị dưới một từ khóa cụ thể.<br />
<br />
Khai báo: <br />
<br />
Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. handle của một Key được mở hoặc một số tiêu chuẩn của tên Key.<br />
<br />
dwIndex<br />
Kiểu Long. Chỉ số của giá trị được lấy, giá trị đàu tiên là số 0.<br />
<br />
lpValueName<br />
Kiểu chuỗi. một buffer dùng để Load tên của giá trị tại một chỉ số cụ thể.<br />
<br />
lpcbValueName<br />
Kiểu Long. một biến có chiều dài được định bởi lpValueName. Trả về một con số của ký tự được Load vào trong buffer.<br />
<br />
lpReserved<br />
Kiểu Long. không sử dụng, được thiết lập bằng 0.<br />
<br />
lpType<br />
Kiểu Long. Một biến dùng Load giá trị của loại mã.<br />
<br />
lpData<br />
Byte. Buffer dùng để Load dữ liệu dành cho giá trị.<br />
<br />
lpcbData<br />
Kiểu Long. một biến có chiều dài được định bởi lpData. Trả về một con số của byte được Load vào trong buffer. <br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegFlushKey<br />
 </span><br />
Ý nghĩa: Ghi thông tin vào Registry ngay lập tức.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegFlushKey Lib "advapi32.dll" Alias "RegFlushKey" (ByVal hKey As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. Một Handle của một Key dùng để Flush.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegLoadKey<br />
 </span><br />
Ý nghĩa: Nạp thông tin Registry từ một tập tin đã được tạo trước đó bởi RegSaveKey.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. HKEY_LOCAL_MACHINE, HKEY_USERS hoặc một Key được tạo sử dụng RegConnectRegistry.<br />
<br />
lpSubKey<br />
Kiểu chuỗi. Tên của một subKey mới được tạo.<br />
<br />
lpFile<br />
Kiểu chuỗi. một tên File đã đăng ký.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegNotifyChangeKeyValue<br />
 </span><br />
Ý nghĩa: Cho phép ứng dụng của bạn quan sát việc đăng ký từ khóa và nhận được thông báo khi từ khóa bị thay đổi.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" Alias "RegNotifyChangeKeyValue" (ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. một handle của Key dùng để xem.<br />
<br />
bWatchSubtree<br />
Kiểu Long. TRUE (nonzero ) sẽ thất được subkey tương tự như một Key cụ thể.<br />
<br />
dwNotifyFilter<br />
Kiểu Long. Một hoặc nhiều hằng số sau đây: REG_NOTIFY_CHANGE_NAME:nhận biết việc đổi tên, tạo hoặc xóa một Key.<br />
<br />
REG_NOTIFY_CHANGE_ATTRIBUTES: nhận biết việc thay đổi thuộc tính.<br />
<br />
REG_NOTIFY_CHANGE_LAST_SET: xác định thời gian sửa đổi cuối cùng.<br />
<br />
REG_NOTIFY_CHANGE_SECURITY: nhận biết việc thay đổi của việc bảo mật.<br />
<br />
hEvent<br />
Kiểu Long.Một Handle đến một Event. nếu bỏ qua thì fAsynchronus bằng False.<br />
<br />
fAsynchronus<br />
Kiểu Long.Nếu bằng 0 thì hàm không trả về cho đến khi một sự thay đổi được nhận biết. Nếu khác 0 thì hàm sẽ trả về và sự kiện của hEvent sẽ báo hiệu khi có sự thay đổi. <br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegOpenKey/ RegOpenKeyEx<br />
 <br />
 </span>Ý nghĩa: Mở một từ khóa được chỉ định. RegOpenKeyEx cũng mở một từ khóa nhưng thêm vào các tham số bảo mật.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long<br />
<br />
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. handle của một Key được mở <br />
<br />
lpSubKey<br />
Kiểu chuỗi. tên của key để mở.<br />
<br />
ulOptions<br />
Kiểu Long. Không sử dụng và được thiết lập bằng 0.<br />
<br />
samDesired<br />
Kiểu Long. Một hoặc nhiều hằng số có tiếp đầu ngữ là KEY_?? kết hợp với việc mô tả mỗi tác vụ được cho phép đối với key. <br />
<br />
phkResult<br />
Kiểu Long. Biến để Load một Handle đến Key đượ mở.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegQueryInfoKey <br />
 </span><br />
Ý nghĩa: Cho phép ứng dụng của bạn lấy được thông tin về từ khóa. <br />
<br />
Khai báo:<br />
<br />
Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
Hkey<br />
Kiểu Long. handle của Key được mở.<br />
<br />
LpClass<br />
Kiểu chuỗi. Một chuỗi để Load tên lớp cho Key<br />
<br />
LpcbClass<br />
Kiểu Long.Một biến mà chiều dài được xác định bởi lpClass. Trả về sẽ thiết lập con số kiểu Byte thực sự, Load vào buffer.<br />
<br />
LpReserved<br />
Kiểu Long. Không sử dụng và được thiết lập bằng 0.<br />
<br />
LpSubKeys<br />
Kiểu Long. một biến để Load con số của SubKey cho key này.<br />
<br />
LpcbMaxSubKeyLen<br />
Kiểu Long. Một biến dùng để Load chiều dài dài nhất của subkey name cho key này (không bao gồm ký tự NULL )<br />
<br />
LpcbMaxClassLen<br />
Kiểu Long. Một biến dùng để Load chiều dài dài nhất của tên lớp của subkey cho key này (không bao gồm ký tự NULL )<br />
<br />
LpcValues<br />
Kiểu Long. Một biến dùng để Load con số giá trị cho Key.<br />
<br />
LpcbMaxValueNameLen<br />
Kiểu Long. một biến dùng để Load giá trị tên với chiều dài lớn nhất của subkey cho Key (không bao gồm ký tự NULL )<br />
<br />
LpcbMaxValueLen<br />
Kiểu Long. Một biến để Load với kích cở yêu cầu của buffer để giữ giá trị dữ liệu lớn nhất cho Key này.<br />
<br />
LpcbSecurityDescriptor<br />
Kiểu Long. một biến dùng để Load có chiều dài bằng mô tả bảo mật của Key.<br />
<br />
lpftLastWriteTime<br />
Kiểu FILETIME. Một cấu trúc dùng để Load I gian tạo lập cuối cùng cho Key.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. Bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi. Hàm trả về ERROR_MORE_DATA nếu như một trong các buffer không có đủ chi62u dài để chứa dữ liệu trả về.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegQueryValue/ RegQueryValueEx<br />
 </span><br />
Ý nghĩa: Lấy giá trị mặc định cho từ khóa. RegQueryValueEx lấy thông tin bảo mật của từ khóa.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long<br />
<br />
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
hKey<br />
Kiểu Long. Handle của một Key được mở.<br />
<br />
lpValueName<br />
Kiểu chuỗi. Tên của giá cần lấy.<br />
<br />
lpReserved<br />
Kiểu Long.Không được sử dụng và được thiết lập bằng 0.<br />
<br />
lpType<br />
Kiểu Long.Một biến dùng để Load có kiểu dữ liệu cần tìm.<br />
<br />
lpData<br />
Mọi kiểu dữ liệu. Một buffer dùng để Load với một giá trị cụ thể.<br />
<br />
lpcbData<br />
Kiểu Long.Một biến mà có chiều dài được định bởi lpData. Khi trả về thì thiết lập con số kiểu Byte để Load vào bộ đệm <br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công, các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegReplaceKey<br />
 </span><br />
Ý nghĩa: Thay đổi thông tin Registry của một File và tạo File Backup của thông tin đã thay đổi.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegReplaceKey Lib "advapi32.dll" Alias "RegReplaceKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpNewFile As String, ByVal lpOldFile As String) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. handle của một key được mở.<br />
<br />
LpSubKey<br />
Kiểu chuỗi. tên của subkey cần Replace, nó phải là thư mục nằm trong HKEY_LOCAL_MACHINE hoặc HKEY_USERS.<br />
<br />
LpNewFile<br />
Kiểu chuỗi. Tên của File chứa thông tin đăng ký, File này được tạo bằng cách sử dụng hàm RegSaveKey.<br />
<br />
LpOldFile<br />
Kiểu chuỗi. Tên của File khi Backup thông tin đăng ký hiện tại.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công, các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegRestoreKey<br />
 </span><br />
Ý nghĩa: Khôi phục thông tin từ một tập tin mà đã được tạo bởi hàm RegReplaceKey.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
Hkey<br />
Kiểu Long. handle của một Key mở. <br />
<br />
LpFIle<br />
Kiểu chuỗi. Tên của File cần Restore thông tin.<br />
<br />
dwFlags<br />
Kiểu Long. 0 thì trả lại giá trị như cũ. REG_WHOLE_HIVE_VOLATIVE dùng để khôi phục lại thông tin tạm thời ( chưa Save khi hệ thống khởi động lại ). Trong trường hợp này thì hKey phải tham khỏa đến HKEY_LOCAL_MACHINE hoặc HKEY_USERS.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công, các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegSaveKey<br />
 </span><br />
Ý nghĩa: Lưu một Registry key cũng như tất cả các subkey của nó lên một File trên đĩa. Tập tin này có thể được sử dụng sau đó bởi hàm RegLoadKey.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. Handle của một Key mở. <br />
<br />
LpFIle<br />
Kiểu chuỗi. Tên của Disk để lưu giữ thông tin cần đăng ký.<br />
<br />
LpSecurityAttributes<br />
SECRITY_ATTRIBUTES. Thông tin bảo mật cho thông tin vừa được lưu. Có thể là Null để mặc định thông tin bảo mật <br />
<br />
<br />
Giá trị trả về: Kiểu Long. bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegSetValue/ RegSetValueEx<br />
 </span><br />
Ý nghĩa: Thay đổi giá trị của một từ khóa cụ thể.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long<br />
<br />
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. handle của một Key mở <br />
<br />
LpValueName<br />
Kiểu chuỗi. Tên của giá trị được thiết lập.<br />
<br />
Reserved<br />
Kiểu Long. Không sử dụng và được thiết lập bằng 0.<br />
<br />
DwType<br />
Kiểu Long. Kiểu dữ liệu để thiết lập. <br />
<br />
LpData<br />
Kiểu Byte. Byte đầu tiên trong trong buffer chứa dữ liệu.<br />
<br />
CbData<br />
Kiểu Long. chiều dài của buffer lpData.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">* RegUnloadKey<br />
 </span><br />
Ý nghĩa: Đóng và loại bỏ khỏi bộ nhớ một từ khóa đã được mở trước đó bởi hàm RegLoadKey.<br />
<br />
Khai báo:<br />
<br />
Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long<br />
<br />
Tham số<br />
Mô tả<br />
<br />
HKey<br />
Kiểu Long. HKEY_LOCAL_MACHINE, HKEY_USERS, hoặc một Key đã được mở sử dụng hàm RegConnectRegistry.<br />
<br />
LpSubKey<br />
Kiểu chuỗi. tên của SubKey để UnLoad. Phải được Load trước đó bằng hàm RegLoadKey.<br />
<br />
<br />
Giá trị trả về: Kiểu Long. bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.<br />
<br />
<br />
Nguồn : <a href="http://www.echip.com.vn/echiproot/weblh/sdpm/2002/lvtn/apivb/index.htm" target="_blank" rel="noopener" class="mycode_url">http://www.echip.com.vn</a><br />
<br />
<br />
Tiếp tục....<br />
<br />
VB có 6 lệnh tương tác trực tiếp với hệ điều hành: <br />
<br />
<span style="font-weight: bold;" class="mycode_b">ChDrive (Drive as String)</span> ' thay đổi ổ đĩa đăng nhập đối với hệ điều hành nền <br />
VD: ChDrive ("D:\") <br />
<br />
<span style="font-weight: bold;" class="mycode_b">ChDir (Path as String)</span> ' thay đổi thư mục hiện hành <br />
VD: ChDir ("C:\Windows\Temp") <br />
<br />
<span style="font-weight: bold;" class="mycode_b">MkDir (Path as String)</span> ' tạo mới thư mục <br />
VD: MkDir ("C:\MyDir") ' tạo mới thư mục MyDir trên ổ C <br />
<br />
<span style="font-weight: bold;" class="mycode_b">RmDir ("Path as String")</span> ' loại bỏ một thư mục <br />
VD: RmDir ("C:\MyDir") <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Name [Source] As [Dest]</span> ' đổi tên và di chuyển tập tin <br />
VD: Name "C:\myFile.txt" As "D:\FileChua.txt" sẽ move tập tin myFile.txt từ C:\ đến D:\ với tên mới: FileChua.txt <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kill (PathName as String)</span> ' xoá tập tin với tham số PathName chấp nhận ký tự đại diên (như Dos) <br />
VD: Kill ("C:\*.txt") sẽ xoá tất cả tập tin có phần mở rộng là txt trong thư mục gốc của ổ C <br />
------------------------------------------------------------------------------------------------------- <br />
Ôn lại một chút về khái niệm "hiện hành" có từ thời của Dos để hiểu rõ hơn về 6 lệnh này của Vb vì thực sự chúng rất mạnh. <br />
Ví dụ khi file thực thi của bạn nằm tại "C:\MyDir\MyFile.exe" thì lệnh MkDir ("NewDir") sẽ tạo mới một Path: "C:\MyDir\NewDir" tức là thư mục NewDir nằm cùng cấp với MyFile.exe. Nhưng nếu trước đó có câu lệnh ChDir ("C:\Windows") thì lệnh trên sẽ tạo Path: "C:\Windows\NewDir". Tương tự như vậy với lệnh ChDrive. Quan trọng là bạn phải biết "mình đang ở đâu?" bằng không với câu lệnh không chỉ rõ Path: Kill (*.*) sẽ bụp sạch các File không mong muốn nếu trước đó đã xài ChDir mà quên. <br />
-------------------------------------------------------------------------------------------------------- <br />
<br />
<span style="font-weight: bold;" class="mycode_b">CurDir (Drive)</span> ' trả về một chuỗi với tên đầy đủ của ổ đĩa hiện hành nếu tham số Drive để trống ( ) <br />
VD: <br />
CurDir ( ) ---&gt; tên ổ đĩa hiện hành <br />
CurDir ( "D") ---&gt; tên đầy đủ "D:\" <br />
CurDir ("X") ---&gt; sẽ báo lỗi nếu hệ thống không có tới ổ thứ X này <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Dir (PathName, Attributes)</span> ' tìm kiếm tập tin với đường dẫn đặt tại tham số 1. Tham số 2(Attributs) tùy chọn để chuyên biệt thuộc tính tìm kiếm. Mặc định la vbNormal <br />
VD: <br />
tmp = Dir ("C:\boot.ini") ---&gt; tmp = "" <br />
tmp = Dir ("C:\boot.ini", vbHidden) ---&gt; tmp = "boot.ini" <br />
<br />
<span style="font-weight: bold;" class="mycode_b">FileCopy (Source as String, Destination as String)</span> ' sao chép tập tin từ đường dẫn nguồn (Source) đến đường dẫn khác (Destination) <br />
VD: <br />
Filecopy "C:\Config.sys", "D:\Config.sys" <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Filelen (PathNam As String) As Long</span> ' trả về kích thước của tập tin <br />
<br />
<span style="font-weight: bold;" class="mycode_b">FileDateTime (PathName as string)</span> ' trả về ngày tháng và thời gian tập tin đã được tạo ra hoặc được chỉnh sữa lần gần nhất. <br />
VD: <br />
Msgbox FileDateTime ("C:\Config.sys") <br />
<br />
<span style="font-weight: bold;" class="mycode_b">GetAttr (PathName as String) as Integer</span> ' trả về một số nguyên là trị thuộc tính của File <br />
<span style="text-decoration: underline;" class="mycode_u">Các hằng thuộc tính gồm:</span> <br />
vbNormal = 0 <br />
vbReadOnly = 1 <br />
vbHiden = 2 <br />
vbSystem = 4 <br />
vbVolume = 8 <br />
vbDirectory = 16 <br />
vbArchive = 32 <br />
<br />
VD: <br />
GetAttr "C:\boot.ini" = 35 (file Boot.ini mang các thuộc tính sau: ReadOnly(1) + Hiden(2) + Archive(32) <br />
<br />
<span style="font-weight: bold;" class="mycode_b">SetAttr (PathName as String, Attributes as vbFileAttribute)</span> ' Xác lập thông tin thuộc tính của File. Sử dụng các hằng thuộc tính hoặc các giá trị ở bảng trên cho tham số Attributes <br />
VD: <br />
SetAttr "C:\Boot.ini, 0" ---&gt; xác lập file boot.ini chỉ mang một thuộc tính là Normal <br />
SetAttr "C:\Boot.ini,3" ---&gt; xác lập boot.ini mang thuộc tính chỉ đọc và ẩn. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">FreeFile</span> ' trả về một số integer là chỉ số (ID) để HDH theo dõi và quản lý các file đang mở (Open). Dùng một biến nguyên để lưu giá trị này dùng cho các cuôc gọi lệnh Open (file). Khi đó ta không cần quan tâm đến các chỉ số(ID) này nữa. FreeFile sẽ theo dõi và cung cấp cho ta các chỉ số(ID) chưa dùng. <br />
VD: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Dim&nbsp;Filenum</span><span style="color: #FF8000">#&nbsp;<br /></span><span style="color: #0000BB">FileNum&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">FreeFile&nbsp;<br />Open&nbsp;</span><span style="color: #007700">[</span><span style="color: #0000BB">PathName</span><span style="color: #007700">]&nbsp;For&nbsp;</span><span style="color: #0000BB">Output&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #FF8000">#Filenum&nbsp;<br /></span></code></div></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Open [PathName as String] For [Mode] As [ID File] </span>' Mỗi khi thấy lệnh Open, VB sẽ sẵn sàng cho các thao tác đọc và ghi lên File được cung cấp ở tham số [PathName]. Có năm chế độ mở tập tin được đặt ở tham số [Mode], và [ID File] dĩ nhiên là chỉ số của tập tin đang mở. <br />
<span style="text-decoration: underline;" class="mycode_u">Các dạng thức cơ bản của lệnh Open:</span> <br />
<span style="font-style: italic;" class="mycode_i">Open [Pathname] For Input As Filenum</span> ' mở File và chỉ đọc được thông tin, không ghi lên được. <br />
<span style="font-style: italic;" class="mycode_i">Open [PathName] For Output As Filenum</span> ' mở File để xuất thông tin. Khi được mở theo dạng này mọi thông tin cũ trên File sẽ bị mất. <br />
<span style="font-style: italic;" class="mycode_i">Open [PathName] For Append As Filenum</span> ' mở File để đọc và ghi tiếp lên được. <br />
<span style="font-style: italic;" class="mycode_i">Open [PathName] For Random As Filenum</span> ' mở và truy cập ngẫu nhiên các bản ghi và các trường trên File (phải biết được cấu trúc của các bản ghi) <br />
<span style="font-style: italic;" class="mycode_i">Open [PathName] For Binary As Filenum</span> ' đọc ghi theo Byte. Đây là dạng tổng quát và linh hoạt nhất. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Input [Number, #Filenum]</span> ' đọc nội dung File với số lượng xác định ở tham số Number <br />
VD: Str = Input (10, #Filenum) ' đọc 10 ký tự vào biến Str. <br />
Dạng khác của Input: <br />
<span style="font-weight: bold;" class="mycode_b">Input [#Filenum, Str]</span> ' ở đây biến Str thường ở dạng Variant <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Line Input [#FileNum, Str]</span> ' đọc thông tin theo từng dòng vào biến Str. Thường kết hợp với hàm EOF để lấy hết thông tin <br />
<br />
<span style="font-weight: bold;" class="mycode_b">EOF (Filenum)</span> ' trả về vị trí chấm dứt của File khi đang mở <br />
VD: <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Do&nbsp;While&nbsp;</span><span style="color: #0000BB">Not&nbsp;EOF&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">Filenum</span><span style="color: #007700">)&nbsp;</span><span style="color: #DD0000">'&nbsp;lập&nbsp;nếu&nbsp;không&nbsp;phải&nbsp;ở&nbsp;end&nbsp;of&nbsp;file&nbsp;<br />Line&nbsp;Input&nbsp;#Filenum,&nbsp;Str&nbsp;'&nbsp;</span><span style="color: #0000BB">đọc&nbsp;từng&nbsp;dòng&nbsp;vào&nbsp;biến&nbsp;Str&nbsp;<br />Loop&nbsp;<br /></span></code></div></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">LOF (Filenum)</span> ' trả về kích thước của File khi đang mở. <br />
VD: <br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Str&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Input&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">LOF</span><span style="color: #007700">(</span><span style="color: #0000BB">Filenum</span><span style="color: #007700">),&nbsp;</span><span style="color: #FF8000">#Filenum)&nbsp;<br /></span></code></div></div></div> ' sẽ lấy hết nội dung của File (không nên sử dụng với File có kích thước vài Mb sẽ bị lỗi "out of memory") <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Write [#Filenum, Expression]</span> ' ghi lên File <br />
VD: <br />
Write #FileNum, "12345" ---&gt; "12345" <br />
Write #Filenum, 12345 ---&gt;12345 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Print [#Filenum, Expression]</span> ' làm việc chính xác như khi Print lên Form <br />
VD: <br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Print&nbsp;</span><span style="color: #FF8000">#Filenum,&nbsp;123;&nbsp;456&nbsp;<br /></span></code></div></div></div> ---&gt; 123 456 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Get [#Filenum, position, ByteArray]</span> ' lấy thông tin từ tập tin được mở theo Binary tại vị trí xác định bởi Position và lưu vào ByteArray. Số byte lấy ra tùy thuộc vào kích thước của mảng ByteArray. Mỗi khi lấy ra 1 byte con trỏ tập tin tự động chuyển tới vị trí byte kế tiếp. <br />
VD: <br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Dim&nbsp;Str&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">String&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">4&nbsp;<br /></span></code></div></div></div>Get #Filenum, 3, Str ---&gt; lấy 4 byte bắt đầu từ byte thứ 3 lưu vào Str. <br />
(nếu có câu lệnh Get tiếp theo mà tham số Position bỏ trống, thì vị trí bắt đầu lấy ra sẽ là byte thứ 8) <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Loc (#Filenum)</span> ' Trả về vị trí byte đọc/ghi hiện tại trong tập tin đang mở. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Seek [#Filenum, Position]</span> ' dịch chuyển con trỏ tập tin đến vị trí qui định bởi tham số Position <br />
VD: <br />
Seek #Filenum, 3 <br />
Get #Filenum, , Str ---&gt; vị trí lấy ra sẽ bắt đầu tại byte thứ 3 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Seek (#Filenum)</span> ' trả về vị trí hiện tại của con trỏ tập tin<br />
Put [#Filenum, Position, ByteArray] ' đặt nội dung của mảng ByteArray vào vị trí byte thứ[Position]. <br />
Lệnh Put se ghi đè lên mọi thứ và chỉ dùng cho truy cập Random và Binary <br />
VD: Put #filenum, , Str ---&gt; sẽ ghi 4 byte bắt đầu ở vị trí byte thứ 1 <br />
<br />
Reset ' Đóng tất cả các tập tin đã được mở bằng lệnh Open <br />
<br />
Code:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Option&nbsp;Explicit<br /></span><span style="color: #007700">Private&nbsp;</span><span style="color: #0000BB">Sub&nbsp;Form_Load</span><span style="color: #007700">()<br /></span><span style="color: #0000BB">Dim&nbsp;FileNumber<br /> &nbsp; For&nbsp;FileNumber&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1&nbsp;To&nbsp;5<br /> &nbsp; &nbsp; &nbsp; Open&nbsp;</span><span style="color: #DD0000">"TEST"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">FileNumber&nbsp;</span><span style="color: #007700">For&nbsp;</span><span style="color: #0000BB">Output&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #FF8000">#FileNumber&nbsp;'&nbsp;Mở&nbsp;file<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Write&nbsp;</span><span style="color: #FF8000">#FileNumber,&nbsp;"Hello&nbsp;World"&nbsp; &nbsp;'&nbsp;Ghi&nbsp;dữ&nbsp;liệu&nbsp;vào&nbsp;file.<br /></span><span style="color: #0000BB"> &nbsp; Next&nbsp;FileNumber<br /> &nbsp; Reset&nbsp; &nbsp;</span><span style="color: #DD0000">'&nbsp;Đóng&nbsp;file&nbsp;và&nbsp;cập&nbsp;nhật&nbsp;dữ&nbsp;liệu&nbsp;vào&nbsp;file<br />End&nbsp;Sub&nbsp;<br /></span></code></div></div></div><br />
Close (#Filenum) ' Đóng tập tin đã được mở bằng lệnh Open. <br />
<span style="font-weight: bold;" class="mycode_b"><br />
 Lock [#Filenum, Expression]</span> ' khoá tập tin không cho người khác truy cập khi App của bạn đang mở. Tham số thứ hai chuyên biệt vị trí khoá. Nếu bỏ qua tham số tùy chọn này, lệnh Lock sẽ khoá toàn bộ tập tin. Đối với các tập tin mở theo truy cập tuần tự lệnh Lock sẽ khoá toàn bộ tập tin bất kể khoảng do tham số 2 qui định. <br />
VD: <br />
Lock #Filenum, 1 To 100 ---&gt; sẽ khoá 100 byte từ byte thứ 1 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Unlock [#Filenum, Expression]</span> ' mở khoá tập tin, tham số sử dụng như Lock. <br />
<br />
Chú ý: cần bảo đảm loại bỏ tất cả các khoá với câu lệnh Unlock tương ứng trước khi đóng tập tin hoặc thoát khỏi chương trình(các đối số phải tương hợp chính xác). Nếu không tập tin có thể bị rối loạn. <br />
---------------------------------------------------------------------------------------------------------- <br />
Để điều khiển sự chia sẽ tập tin vào thời gian bạn mở tập tin. Có thể dùng câu lệnh tổng quát nhất của lệnh Open <br />
Cú pháp: <br />
<span style="font-weight: bold;" class="mycode_b">Open PathName [For mode] [Access access] [Lock] As #Filenum [Len=reclength]</span> ' trong đó: <br />
<br />
PathName là chuỗi chứa đường dẫn đến tập tin <br />
<br />
Mode là từ khoá chuyên biệt chế độ tập tin như Input, Append, Random... <br />
<br />
Access là từ khoá chuyên biệt các thao tác được phép trên tập tin mở. Có ba thao tác: Read, Write, ReadWrite VD:Open PathName For Binary Access Read As #Filenum --&gt; cho phép bạn đọc nhưng không cho phép thực hiện các thay đổi đối với tập tin. <br />
<br />
Lock là từ khoá chuyên biệt các thao tác được phép trên tập tin mở đối với các quá trình khác. <br />
Khác với Access : điều khiển cách thức chương trình bạn làm việc với tập tin. Với từ khoá Lock có bốn khả năng: <br />
1- [Shared] các quá trình khác có thể đọc và viết vào tập tin mặc dù chương trình của bạn đang làm việc với tập tin đó. <br />
2- [LockRead] chương trình khác không thể mở để đọc tập tin, trong khi chương trình của bạn đang làm việc với tập tin đó. <br />
3- [LockWrite] không thể mở để viết lên tập tin trong khi chương trình bạn đang làm việc với tập tin đó. <br />
4- [LockReadWrite] chương trình khác không thể làm việc với tập tin trong khi chương trình bạn đang làm việc với tập tin đó. <br />
VD: Open PathName For binary Access Lock Read #Filenum ---&gt; sẽ ngăn chận các chương trình khác sử dụng tập tin khi bạn đang làm việc với tập tin đó. <br />
<br />
Reclength đây là số nguyên từ 1 đến 32767. Đối các tập tin mở ở chế độ Random số này đưa ra chiều dài bản ghi. Đối với các tập tin chuỗi thứ tự, giá trị này là số lượng các ký tự đươc đệm trong hệ điều hành]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Tổng hợp các hàm Toán học cơ bản ( có ví dụ)]]></title>
			<link>https://thuthuataccess.com/forum/thread-9206.html</link>
			<pubDate>Sat, 16 Apr 2016 05:19:19 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-9206.html</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">1. Hàm ABS()</span><br />
<br />
Lấy trị tuyệt đối của một số<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = ABS(number)<br />
number: Số muốn tính trị tuyệt đối<br />
<br />
<br />
Ví dụ: <br />
ABS(2) = 2<br />
<br />
ABS(-5) = 5<br />
<br />
ABS(A2) = 7 (A2 đang chứa công thức = 3.5 x -2)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Hàm CEILING() và Hàm FLOOR()</span><br />
<br />
Hai hàm này, hao hao giống hàm MROUND(), là làm tròn đến bội số gần nhất của một số được chỉ định, chỉ khác đôi chút về cách tính: CEILING() luôn luôn làm tròn một số ra xa số 0, còn FLOOR() làm tròn về số 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span><br />
<br />
= CEILING(number, significance)<br />
= FLOOR(number, significance)<br />
<br />
number: Con số sẽ làm tròn<br />
significance: Con số mà bạn cần làm tròn number đến bội số của nó <br />
- Nếu number và significancekhác dấu, hàm sẽ báo lỗi #NUM!<br />
- Nếu number là bội số của significance, kết quả là chính số đó<br />
<br />
Ví dụ: So sánh giữa CEILING(), FLOOR() và MROUND() <br />
<br />
- ở ví dụ này, xem như significance là multiple của MROUND()<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Hàm COMBIN()</span><br />
<br />
Trả về số tổ hợp của một số phần tử cho trước<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = COMBIN(number, number_chosen)<br />
<br />
number: Tổng số phần tử<br />
<br />
number_chosen: Số phần tử trong mỗi tổ hợp<br />
<br />
<br />
Chú ý:<br />
<br />
- Nếu các đối số là số thập phân, hàm chỉ lấy phần nguyên <br />
- Nếu các đối số không phải là số, COMBIN sẽ báo lỗi #VALUE! <br />
- Nếu number &lt; 0, number_chosen &lt; 0, hoặc number &lt; number_chosen, COMBIN sẽ báo lỗi #NUM! <br />
- Tổ hợp khác với hoán vị: Tổ hợp không quan tâm đến thứ tự của các phần tử trong mỗi tổ hợp; còn hoán vị thì thứ tự của mỗi phần tử đều có ý nghĩa. <br />
COMBIN được tính như công thức sau đây (với n = number, k = number_chosen)<br />
<br />
undefined<br />
<br />
Trong đó:<br />
<br />
undefined<br />
<br />
Ví dụ:<br />
<br />
Với 4 phần tử Mai, Lan, Cúc, Trúc có thể xếp được bao nhiêu tổ hợp khác nhau, với mỗi tổ hợp gồm 2 phần tử ? <br />
<br />
= COMBIN(4, 2) = 6 <br />
<br />
6 tổ hợp này là: Mai-Lan, Mai-Cúc, Mai-Trúc, Lan-Cúc, Lan-Trúc và Cúc-Trúc<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Hàm EVEN() và Hàm ODD()</span><br />
<br />
Hai hàm này làm tròn rất đơn giản. EVEN() làm tròn đến số nguyên chẵn gần nhất, còn ODD() làm tròn đến số nguyên lẻ gần nhất. Cả hai đều làm tròn theo kiểu chạy xa khỏi số 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = EVEN(number) | = ODD(number)<br />
<br />
<br />
Ví dụ: <br />
<br />
EVEN(14.2) = 16<br />
EVEN(-23) = 24<br />
ODD(58.1) = 59<br />
ODD(-6) = -7<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Hàm EXP()</span><br />
<br />
Tính lũy thừa của cơ số e (2.71828182845905...)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = EXP(number)<br />
number: số mũ của cơ số e<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- Để tính lũy thừa của cơ số khác, bạn có thể dùng toán tử ^ (dấu mũ), hoặc dùng hàm POWER()<br />
<br />
- Hàm EXP() là nghịch đảo của hàm LN(): tính logarit tự nhiên của một số<br />
<br />
<br />
Ví dụ: <br />
EXP(1) = 2.718282 (là chính cơ số e)<br />
EXP(2) = 7.389056 (bình phương của e)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Hàm FACT()</span><br />
<br />
Tính giai thừa của một số.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = FACT(number)<br />
number: số cần tính giai thừa<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- number phải là một số dương<br />
<br />
- Nếu number là số thập phân, FACT() sẽ lấy phần nguyên của number để tính<br />
<br />
<br />
Ví dụ: <br />
FACT(5) = 120 (5! = 1 x 2 x 3 x 4 x 5 = 120)<br />
<br />
FACT(2.9) = 2 (2! = 1 x 2 = 2)<br />
<br />
FACT(0) = 1 (0! = 1)<br />
<br />
FACT(-3) = #NUM!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Hàm FACTDOUBLE()</span><br />
<br />
Tính giai thừa cấp hai của một số.<br />
<br />
Giai thừa cấp hai (ký hiệu bằng hai dấu !!) được tính như sau:<br />
<br />
- Với số chẵn: n!! = n x (n-2) x (n-4) x ... x 4 x 2<br />
<br />
- Với số lẻ: n!! = n x (n-2) x (n-4) x ... x 3 x 1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = FACTDOUBLE(number)<br />
number: số cần tính giai thừa cấp hai<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- number phải là một số dương<br />
<br />
- Nếu number là số thập phân, FACTDOUBLE() sẽ lấy phần nguyên của number để tính<br />
<br />
Ví dụ: <br />
FACTDOUBLE(6) = 48 (6!! = 6 x 4 x 2 = 24)<br />
<br />
FACTDOUBLE(7) = 105 (7!! = 7 x 5 x 3 x 1 = 105)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">8. Hàm CEILING() và Hàm FLOOR()</span><br />
<br />
Hai hàm này, hao hao giống hàm MROUND(), là làm tròn đến bội số gần nhất của một số được chỉ định, chỉ khác đôi chút về cách tính: CEILING() luôn luôn làm tròn một số ra xa số 0, còn FLOOR() làm tròn về số 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span><br />
<br />
= CEILING(number, significance)<br />
= FLOOR(number, significance)<br />
number: Con số sẽ làm tròn<br />
<br />
<br />
significance: Con số mà bạn cần làm tròn number đến bội số của nó <br />
- Nếu number và significancekhác dấu, hàm sẽ báo lỗi #NUM!<br />
- Nếu number là bội số của significance, kết quả là chính số đó<br />
<br />
<br />
Ví dụ: So sánh giữa CEILING(), FLOOR() và MROUND() - ở ví dụ này, xem như significance là multiple của MROUND()<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">9. Hàm GCD()</span><br />
<br />
GCD là viết tắt của chữ Greatest Common Divisor: Ước số chung lớn nhất.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = GCD(number1, number2 [,number3...])<br />
number1, number2...: những số mà bạn bạn cần tìm ước số chung lớn nhất<br />
<br />
GCD() có thể tìm ước số chung lớn nhất của một dãy có đến 255 giá trị (với Excel 2003 trở về trước thì con số này là 19)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
<br />
Nếu có bất kỳ một number nào &lt; 0, GCD() sẽ báo lỗi #NUM!<br />
<br />
Nếu có bất kỳ một number nào không phải là một con số, GDC() sẽ báo lỗi #VALUE!<br />
<br />
Nếu number là số thập phân, GCD() chỉ tính toán với phần nguyên của nó.<br />
<br />
Ví dụ: GCD(5, 2) = 1 ; GCD(24, 36) = 12 ; GCD(5, 0) = 5<br />
<br />
<span style="font-weight: bold;" class="mycode_b">10. Hàm INT() và hàm TRUNC()</span><br />
<br />
Hai hàm này gần như giống nhau nếu như bạn muốn làm tròn một số thành một số nguyên.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span><br />
<br />
= INT(number)<br />
<br />
= TRUNC(number [, num_digits])<br />
<br />
number: Số cần làm tròn <br />
num_digits: Là một số nguyên, chỉ cách mà bạn muốn cắt bớt số <br />
<br />
num_digits &gt; 0 : nếu number là một số thập phân, thì num_digits chỉ ra số con số thập phân mà bạn muốn giữ lại (sau dấu phẩy)<br />
<br />
num_digits = 0 hoặc không nhập: cắt bỏ hết phần thập phân của number (nếu có)<br />
<br />
num_digits &lt; 0 : làm tròn number thành một số nguyên và làm tròn number sang trái thành một bội số của 10 (xem thêm ở ví dụ)<br />
<br />
<br />
<span style="font-style: italic;" class="mycode_i">Hàm INT() làm tròn một số tới số nguyên gần nhất</span><br />
<br />
Đối với số dương, hàm INT() và TRUNC() cho kết quả giống nhau (num_digits của TRUNC() = 0 hoặc không có), nhưng đối với số âm thì hai hàm này sẽ cho kết quả hoàn toàn khác nhau.<br />
Ví dụ:<br />
INT( 123.456) = 123 | TRUNC( 123.456) = 123<br />
<br />
INT(-123.456) = -124 | TRUNC(-123.456) = -123<br />
<br />
Khi num_digits khác 0, TRUNC() khác hẳn với ROUND() ở chỗ: ROUND() thì làm tròn, còn TRUNC() chỉ cắt bỏ bớt số chứ không làm tròn.<br />
<br />
Một số ví dụ về hàm TRUNC()<br />
<br />
undefined <br />
<span style="font-weight: bold;" class="mycode_b">admin</span> - April 7, 2008 03:09 AM (GMT)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">11. Hàm LCM()</span><br />
<br />
LCM là viết tắt của chữ Lowest common multiple: Bội số chung nhỏ nhất.<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = LCM(number1, number2 [,number3...])<br />
number1, number2...: những số mà bạn bạn cần tìm bội số chung nhỏ nhất<br />
<br />
LCM() có thể tìm bội số chung nhỏ nhất của một dãy có đến 255 giá trị (với Excel 2003 trở về trước thì con số này là 19)<br />
<br />
<br />
Lưu ý:<br />
<br />
Hàm LCM()<br />
<br />
LCM là viết tắt của chữ Lowest common multiple: Bội số chung nhỏ nhất.<br />
Cú pháp: = LCM(number1, number2 [,number3...])<br />
number1, number2...: những số mà bạn bạn cần tìm bội số chung nhỏ nhất<br />
<br />
LCM() có thể tìm bội số chung nhỏ nhất của một dãy có đến 255 giá trị (với Excel 2003 trở về trước thì con số này là 19)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
Nếu có bất kỳ một number nào &lt; 0, GDC() sẽ báo lỗi #NUM!<br />
<br />
Nếu có bất kỳ một number nào không phải là một con số, GDC() sẽ báo lỗi #VALUE!<br />
<br />
Nếu number là số thập phân, LCM() chỉ tính toán với phần nguyên của nó.<br />
<br />
<br />
Ví dụ: LCM(5, 2) = 10 ; LCM(24, 36) = 72<br />
<br />
<br />
Nếu có bất kỳ một number nào &lt; 0, GDC() sẽ báo lỗi #NUM!<br />
<br />
Nếu có bất kỳ một number nào không phải là một con số, GDC() sẽ báo lỗi #VALUE!<br />
<br />
Nếu number là số thập phân, LCM() chỉ tính toán với phần nguyên của nó.<br />
<br />
<br />
Ví dụ: LCM(5, 2) = 10 ; LCM(24, 36) = 72<br />
<br />
<span style="font-weight: bold;" class="mycode_b">12. Hàm LN()</span><br />
<br />
Tính logarit tự nhiên của một số (logarit cơ số e = 2.71828182845905...)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = LN(number)<br />
number: số thực, dương mà ta muốn tính logarit tự nhiên (logarit cơ số e) của nó<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- Hàm LN() là nghịch đảo của hàm EXP(): tính lũy thừa của cơ số e<br />
<br />
<br />
Ví dụ: <br />
LN(86) = 4.454347 (logarit cơ số e của 86)<br />
LN(2.7181818) = 1 (logarit cơ số e của e)<br />
LN(EXP(3)) = 3 (logarit cơ số e của e lập phương)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">13. Hàm LOG()</span><br />
<br />
Tính logarit của một số với cơ số được chỉ định<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = LOG(number [, base])<br />
number: Số thực, dương mà ta muốn tính logarit tự nhiên (logarit cơ số e) của nó<br />
base: Cơ số để tính logarit (mặc định là 10) - Nếu bỏ trống, hàm LOG() tương đương với hàm LOG10()<br />
<br />
<br />
Ví dụ: <br />
LOG(10) = 1 (logarit cơ số 10 của 10)<br />
LOG(8, 2) = 3 (logarit cơ số 2 của 8)<br />
LOG(86, 2.7182818) = 4.454347 (logarit cơ số e của 86)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">14. Hàm LOG10()</span><br />
<br />
Tính logarit cơ số 10 của một số <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = LOG10(number)<br />
number: số thực, dương mà ta muốn tính logarit tự nhiên (logarit cơ số e) của nó<br />
Ví dụ: <br />
<br />
LOG10(10) = LOG(10) = 1 (logarit cơ số 10 của 10)<br />
LOG10(86) = LOG(86) = 1.93449845 (logarit cơ số 10 của 86)<br />
LOG10(1E5) = 5 (logarit cơ số 10 của 1E5)<br />
LOG10(10^5) = 5 (logarit cơ số 10 của 10^5)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">15. MDETERM (array) : Tính định thức của một ma trận</span><br />
<br />
Trước khi trình bày các hàm về ma trận, xin giải thích chút xíu về định nghĩa ma trận.<br />
<br />
Định nghĩa Ma Trận<br />
<br />
Ma trận là một bảng có m hàng và n cột<br />
<br />
undefined<br />
<br />
A còn được gọi là một ma trận cỡ m x n<br />
Một phần tử ở hàng thứ i và cột thứ j sẽ được ký hiệu là undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Hàm MDETERM()</span><br />
<br />
MDETERM viết tắt từ chữ Matrix Determinant: Định thức ma trận<br />
Hàm này dùng để tính định thức của một ma trận vuông<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MDETERM(array)<br />
array: mảng giá trị chứa ma trận vuông (có số hàng và số cột bằng nhau) <br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- array có thể một dãy ô như A1:C3; hoặc một mảng như {1,2,3 ; 4,5,6 ; 7,8,9}; hoặc là một khối ô đã được đặt tên...<br />
<br />
- Hàm MDETERM() sẽ báo lỗi #VALUE! khi: <br />
<br />
array không phải là ma trận vuông (số hàng khác số cột) <br />
Có bất kỳ 1 vị trí nào trong array là rỗng hoặc không phải là dữ liệu kiểu số <br />
- Hàm MDETERM() có thể tính chính xác với ma trận 4 x 4 (có 16 ký số)<br />
<br />
- Ví dụ về cách tính toán của hàm MDETERM() với ma trận 3 x 3 (A1:C3):<br />
<br />
MDETERM(A1:C3) = A1*(B2*C3 - B3*C2) + A2*(B3*C1 - B1*C3) + A3*(B1*C2 - B2*C1)<br />
<br />
Ví dụ:<br />
<br />
MDETERM(A1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4) = 88<br />
<br />
undefined<br />
<br />
MDETERM(A1:C4) = #VALUE! (A1:C4 không phải là ma trận vuông)<br />
<br />
MDETERM({3,6,1 ; 1,1,0 ; 3,10,2}) = 1<br />
<br />
MDETERM({3,6 ; 1,1}) = 1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">16. Hàm MINVERSE()</span><br />
<br />
MINVERSE viết tắt từ chữ Matrix Inverse: Ma trận nghịch đảo<br />
Hàm này dùng để tính ma trận nghịch đảo của một ma trận vuông<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MINVERSE(array)<br />
array: mảng giá trị chứa ma trận vuông (có số hàng và số cột bằng nhau) <br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- array có thể một dãy ô như A1:C3; hoặc một mảng như {1,2,3 ; 4,5,6 ; 7,8,9}; hoặc là một khối ô đã được đặt tên...<br />
<br />
- Giống hàm MDETERM, hàm MINVERSE() sẽ báo lỗi #VALUE! khi: <br />
<br />
array không phải là ma trận vuông (số hàng khác số cột)<br />
<br />
<br />
Có bất kỳ 1 vị trí nào trong array là rỗng hoặc không phải là dữ liệu kiểu số<br />
<br />
<br />
Ma trận không thể tính nghịch đảo (ví dụ ma trận có định thức = 0)<br />
<br />
- Hàm MINVERSE() có thể tính chính xác với ma trận 4 x 4 (có 16 ký số)<br />
<br />
Ví dụ về cách sử dụng hàm MINVERSE():<br />
<br />
Ví dụ bạn có một ma trận A1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4, để tìm ma trận nghịch đảo của ma trận này, bạn quét chọn một khối ô tương ứng với A1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4, ví dụ A6<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />9 (cùng có 4 hàng và 4 cột), tại A6, gõ công thức = MINVERSE(A1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4) và sau đó nhấn Ctrl-Shift-Enter, bạn sẽ có kết quả tại A6<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />9 là một ma trận nghịch đảo của ma trận A1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">17. Hàm MMULT()</span><br />
<br />
MMULT viết tắt từ chữ Matrix Multiple: Ma trận tích<br />
Hàm này dùng để tính tích của hai ma trận<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MMULT(array1, array2)<br />
array1, array 2: mảng giá trị chứa ma trận<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- array1, array2 có thể một dãy ô như A1:C3; hoặc một mảng như {1,2,3 ; 4,5,6 ; 7,8,9}; hoặc là một khối ô đã được đặt tên...<br />
<br />
- Số cột của array1 phải bằng số dòng của array2<br />
- Công thức tính tích hai ma trận (A = B x C) có dạng như sau:<br />
<br />
Trong đó: i là số hàng của array1 (B), j là số cột của array2 ©; n là số cột của array1 (= số dòng của array2)<br />
<br />
- Nếu có bất kỳ một phần tử nào trong hai ma trận là rỗng hoặc không phải là dữ liệu kiểu số, MMULT() sẽ báo lỗi #VALUE!<br />
<br />
- Để có kết quả chính xác ở ma trận kết quả, phải dùng công thức mãng<br />
<br />
<br />
Ví dụ:<br />
<br />
Mời bạn xem hình sau:<br />
<br />
undefined<br />
<br />
Để tính tích của hai ma trận B và C, quét chọn khối C7<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />8<br />
gõ công thức = MMULT(A2:C3,E2:F4) rồi nhấn Ctrl-Shift-Enter <br />
sẽ có kết quả là ma trận A như trên hình.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">18. Hàm MOD()</span><br />
<br />
Dùng để lấy số dư của một phép chia<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MOD(number, divisor)<br />
number: Số bị chia<br />
divisor: Số chia<br />
<br />
Ví dụ: MOD(24, 10) = 4 (24 chia 10 được 2, dư 4)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Một công thức để tính toán số thời gian chênh lệch:</span><br />
<br />
Chúng ta đã biết cách để tính số thời gian chênh lệch, đó là lấy thời gian hoàn thành (EndTime) trừ đi thời gian bắt đầu (StartTime), và để phòng hờ trường hợp thời gian xuyên qua một ngày (khi đó có thể thời gian lúc hoàn thành nhỏ hơn thời gian bắt đầu, ví dụ làm từ 20 giờ ngày hôm trước đến 8 giờ ngày hôm sau), thì ta dùng công thức:<br />
= IF(EndTime &lt; StartTime, 1 + EndTime - StartTime, EndTime - StartTime)<br />
<br />
Tuy nhiên, ta cũng đã biết rằng, Excel tính toán với thời gian như tính toán với một con số chạy từ 0 cho tới 1, và lại bắt đầu từ 0 vào lúc nửa đêm. Do đó, ta có thể dùng hàm MOD() để thay cho công thức ở trên:<br />
= MOD(EndTime - StartTime, 1)<br />
<br />
Ví dụ: <br />
<br />
Tính số thời gian làm việc từ 10 giờ sáng đến 11 giờ đêm: <br />
= MOD(23:00 - 10:00, 1) = 13<br />
<br />
Tính số thời gian làm việc từ 10 giờ đêm đến 11 giờ trưa hôm sau: <br />
= MOD(11:00 - 22:00, 1) = 13<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cộng các ô cách nhau một số hàng cố định</span><br />
<br />
Có một bài toán như sau: <br />
<br />
Trong một cột dữ liệu, người ta muốn tính tổng của cách ô cách nhau mỗi n hàng nào đó. <br />
Ví dụ, trong dãy A1:A20, tính tổng của các ô cách nhau 5 ô, nghĩa là lấy A1 + A6 + A11 + A16<br />
<br />
Nói tới hàng, ta nghĩ đến hàm ROW(): ROW(A1) = 1, ROW(A6) = 6, v.v...<br />
<br />
Và ở ví dụ vừa nêu trên đây, ta để ý các con số 1, 6, 11, 16 khi đem chia cho 5 đều dư 1, vậy ta nghĩ đến hàm MOD(), lấy số thứ tự của hàng chia cho 5: MOD(ROW(A1), 5) = 1, MOD(ROW(A6), 5) = 1, v.v...<br />
<br />
Vậy ta sẽ lập công thức cho mảng A1:A20: <br />
Xét trong khối A1:A20, ô nào có số thứ tự của hàng chia cho 5 mà dư 1, thì lấy các ô đó cộng lại:<br />
<br />
{= SUM(IF(MOD(ROW(A1:A20), 5) = 1, A1:A20, 0))}<br />
<br />
Hay cụ thể hơn, gọi dãy ô để tính tổng là range, và số hàng cách nhau giữa các ô là n, ta sẽ có công thức:<br />
<br />
{= SUM(IF(MOD(ROW(range), n) = 1, range, 0))}<br />
<br />
Con số 1 ở đây không phải là con số cố định, mà nó là số dư của phép chia của số thứ tự cho n. Do đó, tùy vào điều kiện của bài toán mà ta thay bằng con số thích hợp. <br />
Chẳng hạn, cũng ví dụ trên đây, như ta muốn tính tổng của các ô A2, A7, A12, A17 thì công thức sẽ là:<br />
<br />
{= SUM(IF(MOD(ROW(A1:A20), 5) = 2, A1:A20, 0))}<br />
<br />
(2 là số dư của 2, 7, 12, 17 cho 5)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cộng các ô có số thứ tự hàng là chẵn, hoặc có số thứ tự hàng là lẻ</span><br />
<br />
Từ bài toán trên đây, ta có công thức để cộng các ô có số thứ tự hàng làm chẵn:<br />
<br />
{= SUM(IF(MOD(ROW(Range), 2) = 0, Range, 0))}<br />
<br />
Và công thức để cộng các ô có số thứ tự hàng làm lẻ:<br />
<br />
{= SUM(IF(MOD(ROW(Range), 2) = 1, Range, 0))}<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Xem một năm có phải là năm nhuận hay không</span><br />
<br />
Nếu bạn muốn có một công thức để xem thử một năm nào đó có phải là năm nhuận hay không, bạn có thể dùng hàm MOD().<br />
Năm nhuận, là năm chia hết cho 4, hay phép dư của phép chia số năm cho 4 thì bẳng 0 ở công thức sau đây:<br />
= MOD(year, 4)<br />
<br />
Số năm phải là một con số có 4 chữ số. <br />
<br />
Công thức trên chỉ đúng trong khoảng từ năm 1901 đến 2099 (có lẽ chúng ta cũng sống tối đa trong khoảng thời gian này thôi). Công thức này không đúng với năm 1900 và 2100, bởi vì điều kiện để tính năm nhuận còn có chuyện: Năm nhuận là năm chia hết cho 4, nếu năm này tận cùng bằng hai con số 0 thì nó phải chia hết cho 400 (ví dụ, năm 2000). <br />
<br />
Vậy, để có một công thức đúng cho tất cả mọi năm, ta làm một công thức luận lý như sau:<br />
= (MOD(year, 4) = 0) - (MOD(year, 100) = 0) + (MOD(year, 400) = 0)<br />
<br />
Nếu công thức này cho đáp số là 1 (TRUE), thì đó là năm nhuận, còn nếu cho đáp số là 0 (FALSE), thì đó không phải là năm nhuận.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ứng dụng của hàm MOD() trong định dạng bảng tính</span><br />
<br />
<br />
Chắc cũng có một lúc nào đó, bạn thích định dạng cho bảng tính của mình theo kiểu Ledger Shading. Ledger Shading là kiểu định dạng các hàng có màu xen kẽ nhau (ví dụ, xanh và trắng). Loại định dạng này thích hợp cho những danh sách dài, có nhiều cột, giúp ta phân biệt được hàng này với hàng kia cách dễ dàng, ít khi bị nhìn lầm dữ liệu giữa các hàng...<br />
<br />
Hình sau đây là một ví dụ:<br />
<br />
undefined<br />
<br />
Dĩ nhiên là việc này rất dễ thực hiện, chúng ta chỉ cần chọn các hàng xen kẽ nhau và tô màu cho nó. Tuy nhiên, nếu làm thủ công bằng tay, thì sẽ có một số bất tiện sau:<br />
<br />
- Rất lâu cho những bảng dữ liệu lớn.<br />
<br />
- Mỗi khi chèn thêm một hàng hoặc xóa bớt một hàng, thì phải định dạng lại.<br />
<br />
<br />
Để tránh những bất tiện đó, bạn có thể dùng một liên kết giữa hàm MOD() và chức năng Conditional Formatting (định dạng có điều kiện) của Excel.<br />
<br />
Cách làm như sau:<br />
<br />
1. Chọn vùng bạn muốn định dạng<br />
<br />
2. Gọi hộp thoại Conditional Formatting, và chọn New Ruler để mở hộp thoại New Formatting Ruler<br />
<br />
3. Chọn Use a Formula to Determine Which Cells to Format<br />
<br />
Trong khung Format values where this formular is true, gõ công thức = MOD(ROW(), 2)<br />
<br />
undefined<br />
<br />
4. Nhấn nút Format... để mở hộp thoại Format Cells<br />
<br />
5. Chọn tab Fills, chọn màu bạn thích tô cho các hàng xen kẽ với màu trắng, rồi nhấn OK để quay về hộp thoại New Formatting Ruler<br />
<br />
6. Nhấn OK <br />
<br />
Công thức = MOD(ROW(), 2) sẽ trả về 1 cho những hàng có số thứ tự lẻ và trả về 0 cho những hàng có số thứ tự chẵn. Bởi vì 1 thì tương đương với TRUE, nên Excel sẽ áp dụng màu tô mà bạn đã chọn cho tất cả những hàng có số thứ tự lẻ trong vùng bạn muốn định dạng, và bỏ qua những hàng có số thứ tự chẵn.<br />
<br />
<br />
Tương tự, <br />
<br />
- Nếu muốn định dạng các cột có màu xen kẽ, bạn chỉ cần thay công thức ở trên thành:<br />
= MOD(COLUMN(), 2)<br />
<br />
- Nếu thích định dạng cho hàng có số thứ tự lẻ thì không tô màu, còn hàng có số thứ tự chẵn mới tô màu, bạn thay đổi công thức trên một tí:<br />
= MOD(ROW() + 1, 2) <br />
<br />
<span style="font-weight: bold;" class="mycode_b">19. Hàm MROUND()</span><br />
<br />
Làm tròn đến bội số của một số khác<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MROUND(number, multiple)<br />
number: Con số sẽ làm tròn<br />
<br />
<br />
multiple: Con số mà bạn cần làm tròn number đến bội số của nó <br />
- Nếu number và multiple khác dấu, hàm sẽ báo lỗi #NUM!<br />
- Nếu number và multiple bằng nhau, kết quả là chính số đó<br />
- MROUND() sẽ làm tròn lên, nếu phần chia của phép chia number cho multiple lớn hơn hoặc bằng 1/2 multiple, và làm tròn xuống nếu phần chia của phép chia number cho multiple nhỏ hơn 1/2 multiple<br />
<br />
<br />
Ví dụ:<br />
MROUND(5, 2) = 6 (do 5/2 &gt; 2/2, bội số của 2 gần nhất mà lớn hơn 5 là 6)<br />
MROUND(11, 5) = 10 (do 11/5 &lt; 5/2, bội số của 5 gần nhất mà nhỏ hơn 11 là 10)<br />
MROUND(13, 5) = 15 (do 13/5 &gt; 5/2, bội số của 5 gần nhất mà lớn hơn 13 là 15)<br />
MROUND(5, 5) = 5 (number và multiple bằng nhau)<br />
MROUND(7.31, 0.5) = 7.5 (do 7.31/0.5 &gt; 0.5/2, bội số của 0.5 gần nhất mà lớn hơn 7.31 là 7.5)<br />
MROUND(-11, -5) = -10 (do -11/-5 &gt; -5/2, bội số của -5 gần nhất mà lớn hơn -11 là -10)<br />
MROUND(-11, 5) = #NUM! (number và multiple khác dấu)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">20. Hàm MULTINOMIAL()</span><br />
<br />
Dùng để tính tỷ lệ giữa giai thừa tổng và tích giai thừa của các số<br />
<br />
Xin ví dụ cho dễ hiểu: Giả sử ta có 3 số a, b và c<br />
<br />
undefined<br />
<br />
Cú pháp: = MULTINOMIAL(number1, number2, ...)<br />
<br />
number1, number2,... : là những con số mà ta muốn tính tỷ lệ giữa giai thừa tổng và tích giai thừa của chúng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ghi chú:</span><br />
<br />
- number1, number2, ... có thể lên đến 255 con số (với Excel 2003 trở về trước, con số này chỉ là 30)<br />
<br />
- Nếu có bất kỳ một number nào không phải là dữ liệu kiểu số, MULTINOMIAL() sẽ báo lỗi #VALUE!<br />
<br />
Nếu có bất kỳ một number nào &lt; 0, MULTINOMIAL() sẽ báo lỗi #NUM! <br />
<br />
Ví dụ: MULTINOMIAL(2, 3, 4) = 1,260 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">admin</span> - April 7, 2008 03:33 AM (GMT)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">21. Hàm EVEN() và Hàm ODD()</span><br />
<br />
Hai hàm này làm tròn rất đơn giản. EVEN() làm tròn đến số nguyên chẵn gần nhất, còn ODD() làm tròn đến số nguyên lẻ gần nhất. Cả hai đều làm tròn theo kiểu chạy xa khỏi số 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = EVEN(number) | = ODD(number)<br />
<br />
<br />
Ví dụ: <br />
<br />
EVEN(14.2) = 16<br />
EVEN(-23) = 24<br />
ODD(58.1) = 59<br />
ODD(-6) = -7<br />
<br />
<span style="font-weight: bold;" class="mycode_b">22. Hàm PI()</span><br />
<br />
Trả về giá trị của số Pi = 3.14159265358979, lấy chính xác đến 15 chữ số.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = PI()<br />
Hàm này không có tham số<br />
<br />
Ví dụ:<br />
PI() = 3.14159265358979<br />
PI()/2 = 1.570796327<br />
PI()*(3^2) = 28.27433388<br />
<br />
<span style="font-weight: bold;" class="mycode_b">23. Hàm POWER()</span><br />
<br />
Tính lũy thừa của một số.<br />
Có thể dùng toán tử ^ thay cho hàm này. Ví dụ: POWER(2, 10) = 2^10<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = POWER(number, power)<br />
<br />
Trong đó:<br />
<br />
number: Số cần tính lũy thừa<br />
<br />
power: Số mũ<br />
<br />
Ví dụ:<br />
POWER(5, 2) = 25<br />
POWER(98.6, 3.2) = 2,401,077<br />
POWER(4, 5/4) = 5.656854<br />
<br />
<span style="font-weight: bold;" class="mycode_b">24. Hàm PRODUCT()</span><br />
<br />
Dùng để tính tích của các số<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = PRODUCT(number1, number2, ...)<br />
<br />
number1, number2,... : là những con số mà ta muốn tính tỷ lệ giữa giai thừa tổng và tích giai thừa của chúng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ghi chú:</span><br />
<br />
- number1, number2, ... có thể lên đến 255 con số (với Excel 2003 trở về trước, con số này chỉ là 30)<br />
<br />
- Nếu các number nằm trong một mảng dữ liệu, thì chỉ có những giá trị kiểu số trong mảng đó mới được tính; những giá trị không phải là kiểu số sẽ được bỏ qua.<br />
<br />
Ví dụ: PRODUCT(2, 3, 4) = 24<br />
<br />
<span style="font-weight: bold;" class="mycode_b">25. Hàm QUOTIENT()</span><br />
<br />
Lấy phần nguyên của phép chia. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = QUOTIENT(numberator, denominator)<br />
<br />
numberator: Số bị chia<br />
<br />
denominator: Số chia<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ghi chú:</span><br />
<br />
- Nếu các thông số không phải là dữ liệu kiểu số, hàm sẽ báo lỗi #VALUE!<br />
<br />
- Hàm này tương đương với hàm INT(): QUOTIENT(a, b) = INT(a/b) <br />
<br />
Ví dụ:<br />
QUOTIENT(5, 2) = 2<br />
QUOTIENT(4.5, 3.1) = 1<br />
QUOTIENT(-10, 3) = -3<br />
<br />
Đôi khi, chúng ta cần có một dữ liệu mô phỏng để thử nghiệm một công việc, một kế hoạch gì đó, và cần điền một vài con số vào để có cái mà thử nghiệm. Trong nhiều trường hợp, chúng ta sẽ cần có những con số ngẫu nhiên, không biết trước. Excel cung cấp cho chúng ta hai hàm để lấy số ngẫu nhiên, đó là RAND() và RANDBETWEEN().<br />
<br />
<span style="font-weight: bold;" class="mycode_b">26. Hàm RAND()</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = RAND()<br />
<br />
Hàm RAND() trả về một con số ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn 1. Nếu dùng hàm để lấy một giá trị thời gian, thì RAND() là hàm thích hợp nhất.<br />
<br />
Bên cạnh đó, cũng có những cách để ép RAND() cung cấp cho chúng ta những con số ngẫu nhiên nằm giữa hai giá trị nào đó.<br />
Để lấy một số ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn n, ta dùng cú pháp: <br />
RAND() * n<br />
Ví dụ, công thức sau đây sẽ cung cấp cho chúng ta một con số ngẫu nhiên giữa 0 và 30:<br />
<br />
= RAND() * 30<br />
<br />
Trường hợp khác, mở rộng hơn, chúng ta cần có một con số ngẫu nhiên lớn hơn hoặc bằng số m nào đó, và nhỏ hơn số n nào đó, ta dùng cú pháp: <br />
RAND() * (n - m) + m<br />
Ví dụ, để lấy một số ngẫu nhiên lớn hơn hoặc bằng 100 và nhỏ hơn 200, ta dùng công thức:<br />
<br />
= RAND() * (200 - 100) + 100<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span> <br />
<br />
Do hàm RAND() là một hàm biến đổi (volatile function), tức là kết quả do RAND() cung cấp có thể thay đổi mỗi khi bạn cập nhật bảng tính hoặc mở lại bảng tính, ngay cả khi bạn thay đổi một ô nào đó trong bảng tính... <br />
<br />
Để có một kết quả ngẫu nhiên nhưng không thay đổi, bạn dùng cách sau:<br />
Sau khi nhập công thức = RAND() vào, bạn nhấn F9 và sau đó nhấn Enter. Động tác này sẽ lấy một con số ngẫu nhiên ngay tại thời điểm gõ công thức, nhưng sau đó thì luôn dùng con số này, vì trong ô nhập công thức sẽ không còn hàm RAND() nữa.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lấy một số ngẫu nhiên nguyên dương, gồm có x chữ số</span><br />
<br />
Trong một số trường hợp, bài toán yêu cầu của chúng ta là lấy một số ngẫu nhiên nguyên, dương và gồm có 6 chữ số; hoặc chúng ta muốn có một cái mã số thuế ngẫu nhiên (nguyên, dương, có 10 chữ số), v.v...<br />
<br />
Dựa vào công thức lấy số ngẫu nhiên trong một khoảng ở ví dụ trên, ta dùng hàm INT() để lấy phần nguyên: <br />
INT(RAND() * (n - m) + m)<br />
<br />
Và trong trường hợp này, để lấy một số ngẫu nhiên mà cố định số chữ số, chúng ta sẽ đặt n = 10^x và m = 10^(x-1); với x là số chữ số theo yêu cầu (dấu ^ là lũy thừa). <br />
<br />
Chẳng hạn, để lấy một con số ngẫu nhiên có 8 chữ số, ta dùng công thức:<br />
<br />
= INT(RAND() * (100000000 - 10000000) + 10000000)<br />
<br />
Công thức này sẽ cho chúng ta một con số ngẫu nhiên lớn hơn hoặc bằng 10,000,000 và nhỏ hơn 99,999,999<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lấy một ký tự ngẫu nhiên</span> <br />
<br />
Ngoài việc cho kết quả là một con số ngẫu nhiên, hàm RAND() có thể cho cho kết quả là một ký tự ngẫu nhiên không ? Thưa được.<br />
<br />
Ví dụ, để lấy một ký tự ngẫu nhiên trong bảng chữ cái tiếng Anh: <br />
<br />
Chúng ta biết rằng bảng chữ cái tiếng Anh có 26 chữ cái, vậy trước hết ta sẽ yêu cầu RAND() cung cấp cho ta một con số ngẫu nhiên giữa 1 và 26:<br />
<br />
INT(RAND() * 26 + 1)<br />
<br />
Bây giờ, dựa theo bảng mã ANSI, ta biết những ký tự viết hoa (A tới Z) nằm từ mã ANSI 65 đến mã ANSI 90, và hàm dùng để lấy kết quả là chữ dựa vào bảng mã ANSI là CHAR(), ta có công thức sau:<br />
<br />
= CHAR(INT(RAND() * 26 + 1) + 64)<br />
<br />
Tương tự, để lấy một ký tự ngẫu nhiên là ký tự viết thường (a tới z), nằm từ mã ANSI 97 đến mã ANSI 122, ta dùng công thức:<br />
<br />
= CHAR(INT(RAND() * 26 + 1) + 96)<br />
<br />
Mỗi ký tự mà chúng ta có thể nhập vào màn hình này, đều mang một mã số (numeric code). Ví dụ, chữ A (hoa) là 65, dấu &amp; (và) là số 38... <br />
<br />
Những ký tự này, có cái chúng ta có thể nhập trực tiếp từ bàn phím, tuy nhiên cũng có những ký tự chúng ta phải nhập bằng phím Alt và một mã số thích hợp ở bên bàn phím số. Ví dụ, mã số của ký tự bản quyền © là 169, để gõ ký tự này, chúng ta sẽ nhấn Alt+0169 (dùng số bên nhóm phím số, và nhớ là luôn luôn thêm số 0 cho những ký tự lớn hơn 127).<br />
<br />
Tất cả những mã số đại diện cho các ký tự này, người ta thường gọi là bảng mã ANSI (The ANSI code). Bảng mã ANSI gồm từ 1 đến 255, tuy nhiên 31 số đầu tiên chỉ là những ký tự rỗng, ký tự đặc biệt (dấu ngắt câu, xuống hàng, v.v...)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">27. Hàm CHAR()</span><br />
<br />
Chuyển đổi một mã số trong bộ mã ANSI (có miền giá trị từ 1 - 255) sang ký tự tương ứng.<br />
<br />
Cú pháp: = CHAR(number)<br />
Number : là một mã số trong bảng mã ANSI.<br />
<br />
<br />
Ví dụ: Để kết quả có được là ký tự bản quyền ©, chúng ta nhập: = CHAR(169)<br />
<br />
Ở bài trên, tôi đã trình bày cách lấy một số ngẫu nhiên nằm trong một khoảng {n, m} nào đó:<br />
= RAND() * (n - m) + m<br />
Có một hàm nữa trong Excel có chức năng tương tự công thức trên: Hàm RANDBETWEEN(). <br />
RANDBETWEEN() chỉ khác RAND() ở chỗ: RANDBETWEEN() cho kết quả là số nguyên, còn RAND() thì cho kết quả vừa là số nguyên vừa là số thập phân.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">28. Hàm RANDBETWEEN()</span><br />
<br />
Hàm RANDBETWEEN() trả về một số nguyên ngẫu nhiên nằm trong một khoảng cho trước.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = RANDBETWEEN(bottom, top)<br />
<br />
bottom: Số nhỏ nhất trong dãy tìm số ngẫu nhiên (kết quả sẽ lớn hơn hoặc bằng số này)<br />
<br />
top: Số lớn nhất trong dãy tìm số ngẫu nhiên (kết quả sẽ nhỏ hơn hoặc bằng số này)<br />
<br />
Ví dụ: = RANDBETWEEN(0, 59) sẽ cho kết quả là một số nguyên nằm trong khoảng 0 tới 59.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">29. Hàm ROMAN()</span><br />
<br />
Dùng để chuyển đổi một số dạng Ả-rập sang dạng số La-mã<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = ROMAN(number, form)<br />
<br />
number: Số cần chuyển đổi<br />
<br />
form: dạng chuyển đổi<br />
0 (hoặc TRUE, hoặc không nhập): Dạng cổ điển<br />
<br />
1 cho đến 3: Dạng cổ điển nhưng được rút gọn, số càng lớn rút gọn càng nhiều (xem thêm ở ví dụ)<br />
<br />
4 (hoặc FALSE): Dạng hiện đại<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Chú ý:</span><br />
<br />
number phải là số dương, nếu number &lt; 0 hàm sẽ báo lỗi #VALUE!<br />
<br />
Nếu number là số thập phân, ROMAN() chỉ chuyển đổi phần nguyên của nó<br />
<br />
Hàm ROMAN() chỉ xử lý được tới số lớn nhất là 3999, nếu number &gt; 3999 hàm sẽ báo lỗi #VALUE!<br />
<br />
Sau khi đã chuyển đổi, kết quả sẽ là một dữ liệu dạng text, và không thể tính toán với nó được nữa<br />
<br />
Ví dụ:<br />
<br />
ROMAN(499, 0) = CDXCIX = ROMAN(499) = ROMAN(499, TRUE) <br />
<br />
ROMAN(499, 1) = LDVLIV<br />
<br />
ROMAN(499, 2) = XDIX<br />
<br />
ROMAN(499, 3) = VDIV<br />
<br />
ROMAN(499, 4) = ID = ROMAN(499, FALSE) <br />
<br />
ROMAN(2008) = MMVIII<br />
<br />
<span style="font-weight: bold;" class="mycode_b">30. Hàm ROUND()</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = ROUND(number, num_digits)<br />
<br />
number: Con số sẽ làm tròn<br />
num_digits: Là một số nguyên, chỉ cách mà bạn muốn làm tròn <br />
num_digits &gt; 0 : làm tròn đến số thập phân được chỉ định<br />
num_digits = 0 : làm tròn đến số nguyên gần nhất<br />
num_digits &lt; 0 : làm tròn đến phần nguyên được chỉ định<br />
<br />
Ví dụ: Với con số 1234.5678<br />
ROUND(1234.5678, 3) = 1234.568<br />
ROUND(1234.5678, 2) = 1234.57<br />
ROUND(1234.5678, 1) = 1234.6<br />
ROUND(1234.5678, 0) = 1235<br />
ROUND(1234.5678, -1) = 1230<br />
ROUND(1234.5678, -2) = 1200<br />
ROUND(1234.5678, -3) = 1000 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">admin</span> - April 7, 2008 03:57 AM (GMT)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">31. Hàm ROUNDDOWN() và Hàm ROUNDUP()</span><br />
<br />
Hai hàm này, về cơ bản thì giống hàm ROUND(), chỉ khác là chúng chỉ làm tròn theo một chiều: ROUNDDONW() luôn luôn làm tròn một số về số 0, còn ROUNDUP() thì luôn luôn làm tròn một số ra xa số 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span><br />
<br />
= ROUNDDOWN(number, num_digits)<br />
= ROUNDUP(number, num_digits)<br />
<br />
number: Con số sẽ làm tròn<br />
num_digits: Là một số nguyên, chỉ cách mà bạn muốn làm tròn <br />
num_digits &gt; 0 : làm tròn đến số thập phân được chỉ định<br />
<br />
num_digits = 0 : làm tròn đến số nguyên gần nhất<br />
<br />
num_digits &lt; 0 : làm tròn đến phần nguyên được chỉ định<br />
<br />
<br />
Ví dụ: So sánh giữa ROUNDDOWN() và ROUNDUP()<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">32. Hàm SERIESSUM()</span><br />
<br />
Dùng để tính tổng lũy thừa của một chuỗi số, theo công thức sau đây:<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SERIESSUM(x, n, m, coefficients)<br />
<br />
x : giá trị nhập vào cho chuỗi lũy thừa<br />
<br />
n : lũy thừa khởi tạo để tăng tới x<br />
<br />
m : bước tăng cho mỗi phần tử trong chuỗi<br />
<br />
coefficients : tập hợp hệ số sẽ được nhân với mỗi lũy thừa của x<br />
<br />
Các thông số này phải là các dữ liệu kiểu số, nếu không, hàm sẽ báo lỗi #VALUE!<br />
<br />
<br />
Ví dụ:<br />
<br />
SERIESSUM(5, 0, 2, {1, 2, 3, 4}) = 64,426<br />
<br />
Diễn giải chi tiết: (x = 5, n = 0, m = 2, coefficients = 1, 2, 3, 4)<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">33. Hàm SIGN()</span><br />
<br />
Trả về dấu của số: 1 nếu là số dương, 0 (zero) nếu là số 0 và -1 nếu là số âm.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SIGN(number)<br />
<br />
Ví dụ:<br />
SIGN(10) = 1<br />
SIGN(4-4) = 0<br />
SIGN(-0.057) = -1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">34. Hàm SQRT()</span><br />
<br />
Dùng để tính căn bậc hai của một số<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SQRT(number)<br />
<br />
number: Số thực, dương (nếu number &lt; 0 hàm sẽ báo lỗi #NUM!)<br />
<br />
<br />
Ví dụ: Giả sử ở ô A2, có con số -16<br />
<br />
SQRT(16) = 4<br />
SQRT(A2) = #NUM!<br />
SQRT(ABS(A2)) = 4<br />
<br />
<span style="font-weight: bold;" class="mycode_b">35. Hàm SQRTPI()</span><br />
<br />
Dùng để tính căn bậc hai của một số nhân với Pi (= 3.14159265358979)<br />
<br />
Cú pháp: = SQRTPI(number)<br />
<br />
number: Số thực, dương nhân với Pi (nếu number &lt; 0 hàm sẽ báo lỗi #NUM!)<br />
<br />
Ví dụ: Giả sử ở ô A2, có con số -16<br />
<br />
SQRT(1) = 1.772454 (căn bậc hai của Pi)<br />
SQRT(2) = 2.506628 (căn bậc hai của 2*Pi)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">36. Hàm SUBTOTAL()</span><br />
<br />
Hàm SUBTOTAL là một hàm rất linh hoạt nhưng cũng là một trong các hàm hơi khó sử dụng của Excel. Điều khó hiểu thứ nhất chính là cái tên của nó, vì nó thực sự làm được nhiều thứ hơn ý nghĩa của tên hàm. Đối số thứ nhất của hàm bắt buộc bạn phải nhớ con số đại diện cho phép tính cần thực hiện trên tập số liệu (trong Excel 2007 có tính năng AutoComplete giúp chúng ta khỏi nhớ các con số này). Hàm SUBTOTAL được Microsoft nâng cấp kể từ phiên bản Excel 2003 với sự gia tăng các tuỳ chọn cho đối số thứ nhất của hàm, tuy nhiên điều này dẫn đến sự không tương thích với các phiên bản cũ nếu chúng ta sử dụng các tính năng mới bổ sung này.<br />
<br />
Đối số đầu tiên của của hàm SUBTOTAL xác định hàm thực sự nào sẽ được sử dụng khi tính toán (xem trong danh sách bên dưới). Ví dụ nếu đối số là 1 thì hàm SUBTOTAL hoạt động giống nhưng hàm AVERAGE, nếu đối số thứ nhất là 9 thì hàm hàm SUBTOTAL hoạt động giống nhưng hàm SUM.<br />
<br />
SUBTOTAL là hàm tính toán cho một nhóm con trong một danh sách hoặc bảng dữ liệu tuỳ theo phép tính mà bạn chọn lựa trong đối số thứ nhất. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SUBTOTAL(function_num, ref1, ref2,...)<br />
Function_num: Các con số từ 1 đến 11 (hay 101 đến 111) qui định hàm nào sẽ được dùng để tính toán trong SUBTOTAL<br />
<br />
undefined<br />
<br />
Ref1, ref2: Các vùng địa chỉ tham chiếu mà bạn muốn thực hiện phép tính trên đó.<br />
Trong Excel 2007, bạn có thể dùng đến 254 ref (với Excel 2003 trở vế trước thì con số này chỉ là 29) <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ghi chú:</span><br />
<br />
- Nếu có hàm SUBTOTAL khác đặt lồng trong các đối số ref1, ref2,… thì các hàm lồng này sẽ bị bỏ qua không được tính, nhằm tránh trường hợp tính toán 2 lần. <br />
- Đối số function_num nếu từ 1 đến 11 thì hàm SUBTOTAL tính toán bao gồm cả các giá trị ẩn trong tập số liệu (hàng ẩn). Đối số function_num nếu từ 101 đến 111 thì hàm SUBTOTAL chỉ tính toán cho các giá trị không ẩn trong tập số liệu (bỏ qua các giá trị ẩn). <br />
- Hàm SUBTOTAL sẽ bỏ qua không tính toán tất cả các hàng bị ẩn bởi lệnh Filter (Auto Filter) mà không phụ thuộc vào đối số function_num được dùng (1 giống 101...). <br />
- Hàm SUBTOTAL được thiết kế để tính toán cho các cột số liệu theo chiều dọc, nó không được thiết kế để tính theo chiều ngang. <br />
- Hàm này chỉ tính toán cho dữ liệu 2-D, do vậy nếu dữ liệu tham chiếu dạng 3-D (Ví dụ về tham chiếu 3-D: =SUM(Sheet2:Sheet13!B5) thì hàm SUBTOTAL báo lỗi #VALUE! <br />
<br />
Ví dụ:<br />
SUBTOTAL(9, {120, 10, 150, 23}) = 303 = 120 + 10 + 150 + 23<br />
SUBTOTAL(1, {120, 10, 150, 23}) = 75.75 = (120 + 10 + 150 + 23) / 4<br />
<br />
<span style="font-weight: bold;" class="mycode_b">37. Hàm SUM()</span><br />
<br />
Khi cộng các giá trị với nhau trong Excel, ta có thể dùng dấu cộng (+) hoặc dùng hàm SUM() <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SUM(number1 [, number2...])<br />
<br />
Trong Excel 2007, bạn có thể dùng SUM() để để tính tổng của 255 giá trị lại với nhau (trong những version trước, con số này chỉ là 30)<br />
<br />
Ví dụ: = SUM(A2:A13, C2:C13, E2:E13)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Phép cộng lũy tiến</span><br />
<br />
Tôi có một bảng công nợ khách hàng như sau:<br />
Ở cột I, tôi muốn rằng mỗi khi có một phát sinh nào đó (mua hàng thêm, hoặc trả tiền hàng, trả hàng, v.v...) thì cột Số Nợ sẽ phản ánh con số nợ còn lại ngay tại thời điểm có phát sinh.<br />
<br />
undefined<br />
<br />
Tôi dùng công thức sau (tại I12 và kéo xuống cho cả cột I):<br />
= SUM(&#36;G&#36;12:G12) - SUM(&#36;H&#36;12:H12)<br />
<br />
"Bí quyết" ở đây là dùng địa chỉ tuyệt đối để giữ G12 và H12 lại.<br />
Ví dụ, tại I20, tôi sẽ có công thức:<br />
= SUM(&#36;G&#36;12:G20) - SUM(&#36;H&#36;12:H20)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cộng riêng số dương và số âm</span><br />
<br />
Tôi có một vùng dữ liệu, trong đó có cả số dương và số âm lẫn lộn. Làm cách nào để tôi biết tổng của tất cả những số dương, hoặc tổng của tất cả những số âm? <br />
Tính tổng, thì dùng SUM(), nhưng làm sao cho nó biết số nào là dương số nào là âm để cộng lại?<br />
Thoạt tiên tôi nghĩ đến hàm SUMIF... Nhưng, có một cách hay hơn, là dùng công thức mảng cho SUM:<br />
<br />
Tổng các số âm trong vùng dữ liệu (tạm đặt tên cho nó là range):<br />
<br />
{= SUM((range &lt; 0) * range)}<br />
<br />
Xin nhắc lại, cặp dấu {} không phải do ta gõ vào, mà là do ta nhấn Ctrl-Shift-Enter sau khi nhập công thức bình thường.<br />
<br />
Tương tự, tổng các số dương trong vùng dữ liệu range<br />
<br />
{= SUM((range &gt; 0) * range)}<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">38. Hàm SUMIF()</span><br />
<br />
Tính tổng các ô trong một vùng thỏa một điều kiện cho trước.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SUMIF(range, criteria, sum_range)<br />
<br />
Range : Dãy các ô để tính tổng, có thể là ô chứa số, tên, mảng, hay tham chiếu đến các ô chứa số. Ô rỗng và ô chứa giá trị text sẽ được bỏ qua. <br />
<br />
Criteria : Điều kiện để tính tổng. Có thể ở dạng số, biểu thức, hoặc text. Ví dụ, criteria có thể là 32, "32", "&gt; 32", hoặc "apple", v.v...<br />
<br />
Sum_range : Là vùng thực sự để tính tổng. Nếu bỏ qua, Excel sẽ coi như sum_range = range.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- Sum_range không nhất thiết phải cùng kích thước với range. Vùng thực sự để tính tổng được xác định bằng ô đầu tiên phía trên bên trái của sum_range, và bao gồm thêm những ô tương ứng với kích thước của range. Ví dụ:<br />
- Nếu Range là A1:A5, Sum_range là B1:B5, thì vùng thực sự để tính tổng là B1:B5<br />
- Nếu Range là A1:A5, Sum_range là B1:B3, thì vùng thực sự để tính tổng là B1:B5<br />
- Nếu Range là A1:B4, Sum_range là C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4, thì vùng thực sự để tính tổng là C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4<br />
- Nếu Range là A1:B4, Sum_range là C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />2, thì vùng thực sự để tính tổng là C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4<br />
Có thể dùng các ký tự đại diện trong điều kiện: dấu ? đại diện cho một ký tự, dấu * đại diện cho nhiều ký tự (nếu như điều kiện là tìm những dấu ? hoặc *, thì gõ thêm dấu ~ ở trước dấu ? hay *). <br />
Khi điều kiện để tính tổng là những ký tự, SUMIF() không phân biệt chữ thường hay chữ hoa. <br />
<br />
Ví dụ: Có bảng tính như sau<br />
<br />
undefined<br />
<br />
Tính tổng của những huê hồng mà có doanh thu &gt; 160,000 ?<br />
= SUMIF(A2:A5, "&gt;160000", B2:B5) = 63,000 <br />
Tính tổng của những doanh thu &gt; 160,000 ?<br />
= SUMIF(A2:A5, "&gt;160000") = 900,000 <br />
Tính tổng của những huê hồng mà có doanh thu = 300,000 ?<br />
= SUMIF(A2:A5, "=300000", B2:B3) = 21,000<br />
<br />
<span style="font-weight: bold;" class="mycode_b">39. Hàm SUMPRODUCT()</span><br />
<br />
Sum = Tổng / Product = Tích<br />
SUMPRODUCT = Tổng của tích (các mảng dữ liệu)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SUMPRODUCT(array1, array2, ...)<br />
array1, array2, ... : Có thể dùng từ 2 tới 255 mảng (với Excel 2003 trở về trước thì con số này chỉ là 30) và các mảng này phải cùng kích thước với nhau<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
<br />
- Nếu các mảng không cùng kích thước, SUMPRODUCT sẽ báo lỗi #VALUE!<br />
<br />
- Bất kỳ một phần tử nào trong mảng không phải là dữ liệu kiểu số, sẽ được SUMPRODUCT coi như bằng 0 (zero) <br />
<br />
Ví dụ:<br />
<br />
undefined<br />
<br />
SUMPRODUCT(A1:B3, C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />3) = 156<br />
<br />
Cách tính: 156 = (3*2)+(4*7)+(8*6)+(6*7)+(1*5)+(9*3)<br />
<br />
Nếu dùng SUM() với công thức mảng, sẽ cho kết quả tương đương:<br />
<br />
{SUM(A1:B3 * C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />3)} = SUMPRODUCT(A1:B3, C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />3) = 156<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Mình xin phân tích cách dùng SumProduct và Công thức mảng.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Hàm SumProduct:</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cấu trúc:</span> SUMPRODUCT(array1,array2,array3, ...)<br />
<br />
Array - Mảng dữ liệu là một tập hợp dãy giá trị liên tiếp trong một khảng nào đó. VD A1:C1 hoặ A1:A10,...<br />
<br />
Phép tính này cho phép chúng ta tính tổng của tích array1*array2*array3* ...array30.<br />
VD: A: Số lượng; B: Đơn giá<br />
A1 =2 B1=20 C1="Cam" D1="Giống lai"<br />
A2 =3 B2=10 C2="Bưởi" D2="Không"<br />
A3 =4 B3=25 C3="Cam" D3="Không"<br />
<br />
Bây giờ cần tính doanh thu của các loại hoa quả<br />
array1=A1:A3<br />
array2=B1:B3<br />
Công thức =SumProduct(A1:A3, B1:B3) = 170<br />
Bản chất công thức làm việc như thế này =A1*B1+A2*B2+A3*B3 kết quả là 170<br />
Nhắc lại về phép tính logic:<br />
Giá trị kiểu logic chỉ cho ra 1 trong 2 giá trị là TRUE/1, FALSE/0<br />
Phép toán logic:&lt;, &gt;, &lt;&gt;, =, &gt;=, &lt;=, Not()<br />
VD:<br />
2&gt;3=False<br />
3&gt;1=True<br />
4&gt;3=True<br />
*) Logic và - AND<br />
=(2&gt;3)*(3&gt;1)*(4&gt;3)=False*True*True=0*1*1=False/0 tương đương với hàm AND(2&gt;3,3&gt;1,4&gt;3). Ít nhất một logic=False thì kết quả sẽ là False hay 0.<br />
* Logic hoặc - OR<br />
=(2&gt;3)+(3&gt;1)+(4&gt;3)=False+True+True=0+1=True/1 tương đương với hàm OR(2&gt;3,3&gt;1,4&gt;3). Ít nhất một logic=True thì kết quả sẽ là True hay 1. <br />
Lưu ý tổng của các giá trị là True=True=1).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">*) Tính tổng có nhiều điều kiện:</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cách 1:</span> dùng SUMPRODUCT<br />
<br />
Tính tổng doanh thu của loại là "Cam"<br />
=SUMPRODUCT(A1:A3,B1:B3*(C1:C3="Cam")) hoặc =SUMPRODUCT(A1:A3*B1:B3*(C1:C3="Cam")) = 140<br />
Công thức tính như sau: <br />
=A1*B1*(C1="Cam")+A2*B2*(C2="Cam")+A3*B3*(C3="Cam" ) <br />
=2*20*True+3*10*False+4*25*True<br />
=2*20*1+3*10*0+4*25*1= 140<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cách 2:</span> Dùng Công thức mảng - "Formula Array"<br />
<br />
=Sum(IF(C1:C3="Cam",A1:A3*B1:B3,0))<br />
Kết thức nhẫn tổ hợp CTRL+SHIFT+ENTER. Với cách làm này EXCEL sẽ phân tích như sau:<br />
Xét trên từng dòng trong mảng (array)<br />
dòng1: (c1="Cam")=true nên lấy A1*B1=2*20<br />
dòng2: (c2="Cam")=false nên lấy 0 (theo cách của lấy của hàm IF)<br />
dòng3: (c3="Cam")=true nên lấy A3*B3=4*25<br />
Sau khi chạy hết các dòng, EXCEL sẽ dùng hàm SUM để tính tổng kết quả tính được ở từng dòng=2*20+0+2*25=140. Nếu trong công thức là hàm khác hàm SUM thì cách tính sẽ theo hàm đó.<br />
<br />
Như vậy có 2 cách tính:<br />
<br />
=SUMPRODUCT(A1:A3*B1:B3*(C1:C3="Cam")) và<br />
=Sum(IF(C1:C3="Cam",A1:A3*B1:B3,0))<br />
<br />
*) Vậy tại sao không dùng là =SUM(A1:A3*B1:B3*(C1:C3="Cam"))<br />
mà phải dùng hàm =SUMPRODUCT(A1:A3*B1:B3*(C1:C3="Cam")) ?<br />
<br />
Các bạn nhớ lại cấu trúc của SUM là<br />
SUM(number1,number2, ...)<br />
Còn SUMPRODUCT là<br />
SUMPRODUCT(array1,array2,array3, ...)<br />
number &lt;&gt; array<br />
<br />
Nếu SUMPRODUCT(A1:A3*B1:B3*(C1:C3="Cam")) rồi ENTER là đúng vì đối số của nó phải là mảng - Array.<br />
<br />
Nếu công thức =SUM(A1:A3*B1:B3*(C1:C3="Cam")) rồi ENTER kết quả là #VALUE! -lỗi vì A1:A3 là một array chứ không phải là một number.<br />
<br />
Nếu nhấn tổ hợp CTRL+SHIFT+ENTER. Với cách làm này EXCEL sẽ phân tích như sau:<br />
Xét trên từng dòng trong mảng (array)<br />
dòng1: A1*B1*(c1="Cam")=2*20*True=2*20*1<br />
dòng2: A2*B2*(c2="Cam")=3*10*False=3*10*0<br />
dòng3: A3*B3*(c3="Cam")=2*25*True=4*25*1<br />
<br />
Sau khi chạy hết các dòng, EXCEL sẽ dùng hàm SUM để tính tổng kết quả tính được ở từng dòng=2*20*1+3*10*0<br />
+4*25*1=140.<br />
<br />
Vậy vẫn dùng được =SUM(A1:A3*B1:B3*(C1:C3="Cam")) với điều kiện nhấn tổ hợp phím CTRL+SHIFT+ENTER<br />
<br />
<br />
Như vậy đến đây chúng ta có có 3 cách tính:<br />
<br />
=SUMPRODUCT(A1:A3*B1:B3*(C1:C3="Cam")) nhấn phím ENTER<br />
=SUM(IF(C1:C3="Cam",A1:A3*B1:B3,0)) nhấn phím CTRL+SHIFT+ENTER<br />
=SUM(A1:A3*B1:B3*(C1:C3="Cam")) nhấn phím CTRL+SHIFT+ENTER<br />
<br />
Chúng có thể kết hợp rất nhiều điều kiện vào trong hàm thông qua phép toán logic nhân-và- And, cộng - hoặc - Or. <br />
<br />
*) Dùng hàm SUMPRODUCT hay dùng SUM kết hợp CTRL+SHIFT+ENTER đều cho ra được kết quả như nhau chính là do phép toán logic của bạn.<br />
*) Hàm SUMPRODUCT chỉ có thể tính tổng theo nhiều điều kiện<br />
*) Công thức mảng - Formula Array ngoài việc tính tổng có nhiều điều kiện còn làm rất nhiều phép tính khác do cách sử dụng hàm mà thôi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">40. Hàm SUMSQ()</span><br />
<br />
Dùng để tính tổng các bình phương của các số<br />
<br />
Cú pháp: = SUMSQ(number1, number2, ...)<br />
<br />
number1, number2, ... : Có thể dùng đến 255 tham số (với Excel 2003 trở về trước, con số này chỉ là 30)<br />
Các tham số (number) có thể là một số, là một mảng, một tên, hay là một tham chiếu đến một ô chứa số, v.v...<br />
<br />
Ví dụ: SUMSQ(3, 4) = (3^2) + (4^2) = 9 + 16 = 25<br />
<br />
<span style="font-weight: bold;" class="mycode_b">41. Hàm SUMX2MY2(), Hàm SUMXPY2() và Hàm SUMXMY2()</span><br />
<br />
Để dễ nhớ tên của ba hàm này, bạn đọc chúng từ trái sang phải với các quy ước sau:<br />
<br />
SUM = Tổng, M (Minus) = Trừ (hiệu số), P (Plus) = Cộng (tổng số), 2 = Bình phương, X và Y là hai mảng gì đó, có chứa nhiều phần tử x và y <br />
Vậy, định nghĩa và cách tính toán của 3 hàm này là: <br />
<br />
- SUMX2MY2: Tổng của hiệu hai bình phương của các phần tử tương ứng trong 2 mảng dữ liệu<br />
<br />
undefined<br />
<br />
- SUMX2PY2: Tổng của tổng hai bình phương của các phần tử tương ứng trong 2 mảng dữ liệu <br />
<br />
undefined<br />
<br />
- SUMXMY2: Tổng của bình phương của hiệu các phần tử tương ứng trong 2 mảng dữ liệu <br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp: </span><br />
<br />
= SUMX2MY2(array_x, array_y)<br />
<br />
= SUMX2PY2(array_x, array_y)<br />
<br />
= SUMXMY2(array_x, array_y)<br />
<br />
array_x và array_y là các dãy ô hoặc giá trị kiểu mảng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý: </span><br />
<br />
- array_x và array_y bắt buộc phải có cùng kích thước, nếu không, hàm sẽ báo lỗi #NA!<br />
<br />
- Nếu trong array_x hoặc array_y có những giá trị kiểu text, kiểu logic hoặc rỗng, thì sẽ được bỏ qua (không tính), tuy nhiên các giá trị = 0 vẫn được tính. <br />
<br />
Ví dụ:<br />
Với hai mảng X = {1, 2, 3, 4} và Y = {5, 6, 7, 8}<br />
<br />
SUMX2MY2({1, 2, 3, 4}, {5, 6, 7, 8}) = -144<br />
<br />
= (1^2 - 5^2) + (2^2 - 6^2) + (3^2 - 7^2) + (4^2 - 8^2) = -144<br />
<br />
SUMX2PY2({1, 2, 3, 4}, {5, 6, 7, 8}) = 204<br />
<br />
= (1^2 + 5^2) + (2^2 + 6^2) + (3^2 + 7^2) + (4^2 + 8^2) = -204<br />
SUMXMY2({1, 2, 3, 4}, {5, 6, 7, 8}) = 64<br />
<br />
= (1 - 5)^2 + (2 - 6)^2 + (3 - 7)^2 + (4 - 8)^2 = 64]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">1. Hàm ABS()</span><br />
<br />
Lấy trị tuyệt đối của một số<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = ABS(number)<br />
number: Số muốn tính trị tuyệt đối<br />
<br />
<br />
Ví dụ: <br />
ABS(2) = 2<br />
<br />
ABS(-5) = 5<br />
<br />
ABS(A2) = 7 (A2 đang chứa công thức = 3.5 x -2)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Hàm CEILING() và Hàm FLOOR()</span><br />
<br />
Hai hàm này, hao hao giống hàm MROUND(), là làm tròn đến bội số gần nhất của một số được chỉ định, chỉ khác đôi chút về cách tính: CEILING() luôn luôn làm tròn một số ra xa số 0, còn FLOOR() làm tròn về số 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span><br />
<br />
= CEILING(number, significance)<br />
= FLOOR(number, significance)<br />
<br />
number: Con số sẽ làm tròn<br />
significance: Con số mà bạn cần làm tròn number đến bội số của nó <br />
- Nếu number và significancekhác dấu, hàm sẽ báo lỗi #NUM!<br />
- Nếu number là bội số của significance, kết quả là chính số đó<br />
<br />
Ví dụ: So sánh giữa CEILING(), FLOOR() và MROUND() <br />
<br />
- ở ví dụ này, xem như significance là multiple của MROUND()<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Hàm COMBIN()</span><br />
<br />
Trả về số tổ hợp của một số phần tử cho trước<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = COMBIN(number, number_chosen)<br />
<br />
number: Tổng số phần tử<br />
<br />
number_chosen: Số phần tử trong mỗi tổ hợp<br />
<br />
<br />
Chú ý:<br />
<br />
- Nếu các đối số là số thập phân, hàm chỉ lấy phần nguyên <br />
- Nếu các đối số không phải là số, COMBIN sẽ báo lỗi #VALUE! <br />
- Nếu number &lt; 0, number_chosen &lt; 0, hoặc number &lt; number_chosen, COMBIN sẽ báo lỗi #NUM! <br />
- Tổ hợp khác với hoán vị: Tổ hợp không quan tâm đến thứ tự của các phần tử trong mỗi tổ hợp; còn hoán vị thì thứ tự của mỗi phần tử đều có ý nghĩa. <br />
COMBIN được tính như công thức sau đây (với n = number, k = number_chosen)<br />
<br />
undefined<br />
<br />
Trong đó:<br />
<br />
undefined<br />
<br />
Ví dụ:<br />
<br />
Với 4 phần tử Mai, Lan, Cúc, Trúc có thể xếp được bao nhiêu tổ hợp khác nhau, với mỗi tổ hợp gồm 2 phần tử ? <br />
<br />
= COMBIN(4, 2) = 6 <br />
<br />
6 tổ hợp này là: Mai-Lan, Mai-Cúc, Mai-Trúc, Lan-Cúc, Lan-Trúc và Cúc-Trúc<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Hàm EVEN() và Hàm ODD()</span><br />
<br />
Hai hàm này làm tròn rất đơn giản. EVEN() làm tròn đến số nguyên chẵn gần nhất, còn ODD() làm tròn đến số nguyên lẻ gần nhất. Cả hai đều làm tròn theo kiểu chạy xa khỏi số 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = EVEN(number) | = ODD(number)<br />
<br />
<br />
Ví dụ: <br />
<br />
EVEN(14.2) = 16<br />
EVEN(-23) = 24<br />
ODD(58.1) = 59<br />
ODD(-6) = -7<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Hàm EXP()</span><br />
<br />
Tính lũy thừa của cơ số e (2.71828182845905...)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = EXP(number)<br />
number: số mũ của cơ số e<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- Để tính lũy thừa của cơ số khác, bạn có thể dùng toán tử ^ (dấu mũ), hoặc dùng hàm POWER()<br />
<br />
- Hàm EXP() là nghịch đảo của hàm LN(): tính logarit tự nhiên của một số<br />
<br />
<br />
Ví dụ: <br />
EXP(1) = 2.718282 (là chính cơ số e)<br />
EXP(2) = 7.389056 (bình phương của e)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Hàm FACT()</span><br />
<br />
Tính giai thừa của một số.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = FACT(number)<br />
number: số cần tính giai thừa<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- number phải là một số dương<br />
<br />
- Nếu number là số thập phân, FACT() sẽ lấy phần nguyên của number để tính<br />
<br />
<br />
Ví dụ: <br />
FACT(5) = 120 (5! = 1 x 2 x 3 x 4 x 5 = 120)<br />
<br />
FACT(2.9) = 2 (2! = 1 x 2 = 2)<br />
<br />
FACT(0) = 1 (0! = 1)<br />
<br />
FACT(-3) = #NUM!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Hàm FACTDOUBLE()</span><br />
<br />
Tính giai thừa cấp hai của một số.<br />
<br />
Giai thừa cấp hai (ký hiệu bằng hai dấu !!) được tính như sau:<br />
<br />
- Với số chẵn: n!! = n x (n-2) x (n-4) x ... x 4 x 2<br />
<br />
- Với số lẻ: n!! = n x (n-2) x (n-4) x ... x 3 x 1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = FACTDOUBLE(number)<br />
number: số cần tính giai thừa cấp hai<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- number phải là một số dương<br />
<br />
- Nếu number là số thập phân, FACTDOUBLE() sẽ lấy phần nguyên của number để tính<br />
<br />
Ví dụ: <br />
FACTDOUBLE(6) = 48 (6!! = 6 x 4 x 2 = 24)<br />
<br />
FACTDOUBLE(7) = 105 (7!! = 7 x 5 x 3 x 1 = 105)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">8. Hàm CEILING() và Hàm FLOOR()</span><br />
<br />
Hai hàm này, hao hao giống hàm MROUND(), là làm tròn đến bội số gần nhất của một số được chỉ định, chỉ khác đôi chút về cách tính: CEILING() luôn luôn làm tròn một số ra xa số 0, còn FLOOR() làm tròn về số 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span><br />
<br />
= CEILING(number, significance)<br />
= FLOOR(number, significance)<br />
number: Con số sẽ làm tròn<br />
<br />
<br />
significance: Con số mà bạn cần làm tròn number đến bội số của nó <br />
- Nếu number và significancekhác dấu, hàm sẽ báo lỗi #NUM!<br />
- Nếu number là bội số của significance, kết quả là chính số đó<br />
<br />
<br />
Ví dụ: So sánh giữa CEILING(), FLOOR() và MROUND() - ở ví dụ này, xem như significance là multiple của MROUND()<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">9. Hàm GCD()</span><br />
<br />
GCD là viết tắt của chữ Greatest Common Divisor: Ước số chung lớn nhất.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = GCD(number1, number2 [,number3...])<br />
number1, number2...: những số mà bạn bạn cần tìm ước số chung lớn nhất<br />
<br />
GCD() có thể tìm ước số chung lớn nhất của một dãy có đến 255 giá trị (với Excel 2003 trở về trước thì con số này là 19)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
<br />
Nếu có bất kỳ một number nào &lt; 0, GCD() sẽ báo lỗi #NUM!<br />
<br />
Nếu có bất kỳ một number nào không phải là một con số, GDC() sẽ báo lỗi #VALUE!<br />
<br />
Nếu number là số thập phân, GCD() chỉ tính toán với phần nguyên của nó.<br />
<br />
Ví dụ: GCD(5, 2) = 1 ; GCD(24, 36) = 12 ; GCD(5, 0) = 5<br />
<br />
<span style="font-weight: bold;" class="mycode_b">10. Hàm INT() và hàm TRUNC()</span><br />
<br />
Hai hàm này gần như giống nhau nếu như bạn muốn làm tròn một số thành một số nguyên.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span><br />
<br />
= INT(number)<br />
<br />
= TRUNC(number [, num_digits])<br />
<br />
number: Số cần làm tròn <br />
num_digits: Là một số nguyên, chỉ cách mà bạn muốn cắt bớt số <br />
<br />
num_digits &gt; 0 : nếu number là một số thập phân, thì num_digits chỉ ra số con số thập phân mà bạn muốn giữ lại (sau dấu phẩy)<br />
<br />
num_digits = 0 hoặc không nhập: cắt bỏ hết phần thập phân của number (nếu có)<br />
<br />
num_digits &lt; 0 : làm tròn number thành một số nguyên và làm tròn number sang trái thành một bội số của 10 (xem thêm ở ví dụ)<br />
<br />
<br />
<span style="font-style: italic;" class="mycode_i">Hàm INT() làm tròn một số tới số nguyên gần nhất</span><br />
<br />
Đối với số dương, hàm INT() và TRUNC() cho kết quả giống nhau (num_digits của TRUNC() = 0 hoặc không có), nhưng đối với số âm thì hai hàm này sẽ cho kết quả hoàn toàn khác nhau.<br />
Ví dụ:<br />
INT( 123.456) = 123 | TRUNC( 123.456) = 123<br />
<br />
INT(-123.456) = -124 | TRUNC(-123.456) = -123<br />
<br />
Khi num_digits khác 0, TRUNC() khác hẳn với ROUND() ở chỗ: ROUND() thì làm tròn, còn TRUNC() chỉ cắt bỏ bớt số chứ không làm tròn.<br />
<br />
Một số ví dụ về hàm TRUNC()<br />
<br />
undefined <br />
<span style="font-weight: bold;" class="mycode_b">admin</span> - April 7, 2008 03:09 AM (GMT)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">11. Hàm LCM()</span><br />
<br />
LCM là viết tắt của chữ Lowest common multiple: Bội số chung nhỏ nhất.<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = LCM(number1, number2 [,number3...])<br />
number1, number2...: những số mà bạn bạn cần tìm bội số chung nhỏ nhất<br />
<br />
LCM() có thể tìm bội số chung nhỏ nhất của một dãy có đến 255 giá trị (với Excel 2003 trở về trước thì con số này là 19)<br />
<br />
<br />
Lưu ý:<br />
<br />
Hàm LCM()<br />
<br />
LCM là viết tắt của chữ Lowest common multiple: Bội số chung nhỏ nhất.<br />
Cú pháp: = LCM(number1, number2 [,number3...])<br />
number1, number2...: những số mà bạn bạn cần tìm bội số chung nhỏ nhất<br />
<br />
LCM() có thể tìm bội số chung nhỏ nhất của một dãy có đến 255 giá trị (với Excel 2003 trở về trước thì con số này là 19)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
Nếu có bất kỳ một number nào &lt; 0, GDC() sẽ báo lỗi #NUM!<br />
<br />
Nếu có bất kỳ một number nào không phải là một con số, GDC() sẽ báo lỗi #VALUE!<br />
<br />
Nếu number là số thập phân, LCM() chỉ tính toán với phần nguyên của nó.<br />
<br />
<br />
Ví dụ: LCM(5, 2) = 10 ; LCM(24, 36) = 72<br />
<br />
<br />
Nếu có bất kỳ một number nào &lt; 0, GDC() sẽ báo lỗi #NUM!<br />
<br />
Nếu có bất kỳ một number nào không phải là một con số, GDC() sẽ báo lỗi #VALUE!<br />
<br />
Nếu number là số thập phân, LCM() chỉ tính toán với phần nguyên của nó.<br />
<br />
<br />
Ví dụ: LCM(5, 2) = 10 ; LCM(24, 36) = 72<br />
<br />
<span style="font-weight: bold;" class="mycode_b">12. Hàm LN()</span><br />
<br />
Tính logarit tự nhiên của một số (logarit cơ số e = 2.71828182845905...)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = LN(number)<br />
number: số thực, dương mà ta muốn tính logarit tự nhiên (logarit cơ số e) của nó<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- Hàm LN() là nghịch đảo của hàm EXP(): tính lũy thừa của cơ số e<br />
<br />
<br />
Ví dụ: <br />
LN(86) = 4.454347 (logarit cơ số e của 86)<br />
LN(2.7181818) = 1 (logarit cơ số e của e)<br />
LN(EXP(3)) = 3 (logarit cơ số e của e lập phương)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">13. Hàm LOG()</span><br />
<br />
Tính logarit của một số với cơ số được chỉ định<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = LOG(number [, base])<br />
number: Số thực, dương mà ta muốn tính logarit tự nhiên (logarit cơ số e) của nó<br />
base: Cơ số để tính logarit (mặc định là 10) - Nếu bỏ trống, hàm LOG() tương đương với hàm LOG10()<br />
<br />
<br />
Ví dụ: <br />
LOG(10) = 1 (logarit cơ số 10 của 10)<br />
LOG(8, 2) = 3 (logarit cơ số 2 của 8)<br />
LOG(86, 2.7182818) = 4.454347 (logarit cơ số e của 86)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">14. Hàm LOG10()</span><br />
<br />
Tính logarit cơ số 10 của một số <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = LOG10(number)<br />
number: số thực, dương mà ta muốn tính logarit tự nhiên (logarit cơ số e) của nó<br />
Ví dụ: <br />
<br />
LOG10(10) = LOG(10) = 1 (logarit cơ số 10 của 10)<br />
LOG10(86) = LOG(86) = 1.93449845 (logarit cơ số 10 của 86)<br />
LOG10(1E5) = 5 (logarit cơ số 10 của 1E5)<br />
LOG10(10^5) = 5 (logarit cơ số 10 của 10^5)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">15. MDETERM (array) : Tính định thức của một ma trận</span><br />
<br />
Trước khi trình bày các hàm về ma trận, xin giải thích chút xíu về định nghĩa ma trận.<br />
<br />
Định nghĩa Ma Trận<br />
<br />
Ma trận là một bảng có m hàng và n cột<br />
<br />
undefined<br />
<br />
A còn được gọi là một ma trận cỡ m x n<br />
Một phần tử ở hàng thứ i và cột thứ j sẽ được ký hiệu là undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Hàm MDETERM()</span><br />
<br />
MDETERM viết tắt từ chữ Matrix Determinant: Định thức ma trận<br />
Hàm này dùng để tính định thức của một ma trận vuông<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MDETERM(array)<br />
array: mảng giá trị chứa ma trận vuông (có số hàng và số cột bằng nhau) <br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- array có thể một dãy ô như A1:C3; hoặc một mảng như {1,2,3 ; 4,5,6 ; 7,8,9}; hoặc là một khối ô đã được đặt tên...<br />
<br />
- Hàm MDETERM() sẽ báo lỗi #VALUE! khi: <br />
<br />
array không phải là ma trận vuông (số hàng khác số cột) <br />
Có bất kỳ 1 vị trí nào trong array là rỗng hoặc không phải là dữ liệu kiểu số <br />
- Hàm MDETERM() có thể tính chính xác với ma trận 4 x 4 (có 16 ký số)<br />
<br />
- Ví dụ về cách tính toán của hàm MDETERM() với ma trận 3 x 3 (A1:C3):<br />
<br />
MDETERM(A1:C3) = A1*(B2*C3 - B3*C2) + A2*(B3*C1 - B1*C3) + A3*(B1*C2 - B2*C1)<br />
<br />
Ví dụ:<br />
<br />
MDETERM(A1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4) = 88<br />
<br />
undefined<br />
<br />
MDETERM(A1:C4) = #VALUE! (A1:C4 không phải là ma trận vuông)<br />
<br />
MDETERM({3,6,1 ; 1,1,0 ; 3,10,2}) = 1<br />
<br />
MDETERM({3,6 ; 1,1}) = 1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">16. Hàm MINVERSE()</span><br />
<br />
MINVERSE viết tắt từ chữ Matrix Inverse: Ma trận nghịch đảo<br />
Hàm này dùng để tính ma trận nghịch đảo của một ma trận vuông<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MINVERSE(array)<br />
array: mảng giá trị chứa ma trận vuông (có số hàng và số cột bằng nhau) <br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- array có thể một dãy ô như A1:C3; hoặc một mảng như {1,2,3 ; 4,5,6 ; 7,8,9}; hoặc là một khối ô đã được đặt tên...<br />
<br />
- Giống hàm MDETERM, hàm MINVERSE() sẽ báo lỗi #VALUE! khi: <br />
<br />
array không phải là ma trận vuông (số hàng khác số cột)<br />
<br />
<br />
Có bất kỳ 1 vị trí nào trong array là rỗng hoặc không phải là dữ liệu kiểu số<br />
<br />
<br />
Ma trận không thể tính nghịch đảo (ví dụ ma trận có định thức = 0)<br />
<br />
- Hàm MINVERSE() có thể tính chính xác với ma trận 4 x 4 (có 16 ký số)<br />
<br />
Ví dụ về cách sử dụng hàm MINVERSE():<br />
<br />
Ví dụ bạn có một ma trận A1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4, để tìm ma trận nghịch đảo của ma trận này, bạn quét chọn một khối ô tương ứng với A1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4, ví dụ A6<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />9 (cùng có 4 hàng và 4 cột), tại A6, gõ công thức = MINVERSE(A1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4) và sau đó nhấn Ctrl-Shift-Enter, bạn sẽ có kết quả tại A6<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />9 là một ma trận nghịch đảo của ma trận A1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">17. Hàm MMULT()</span><br />
<br />
MMULT viết tắt từ chữ Matrix Multiple: Ma trận tích<br />
Hàm này dùng để tính tích của hai ma trận<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MMULT(array1, array2)<br />
array1, array 2: mảng giá trị chứa ma trận<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- array1, array2 có thể một dãy ô như A1:C3; hoặc một mảng như {1,2,3 ; 4,5,6 ; 7,8,9}; hoặc là một khối ô đã được đặt tên...<br />
<br />
- Số cột của array1 phải bằng số dòng của array2<br />
- Công thức tính tích hai ma trận (A = B x C) có dạng như sau:<br />
<br />
Trong đó: i là số hàng của array1 (B), j là số cột của array2 ©; n là số cột của array1 (= số dòng của array2)<br />
<br />
- Nếu có bất kỳ một phần tử nào trong hai ma trận là rỗng hoặc không phải là dữ liệu kiểu số, MMULT() sẽ báo lỗi #VALUE!<br />
<br />
- Để có kết quả chính xác ở ma trận kết quả, phải dùng công thức mãng<br />
<br />
<br />
Ví dụ:<br />
<br />
Mời bạn xem hình sau:<br />
<br />
undefined<br />
<br />
Để tính tích của hai ma trận B và C, quét chọn khối C7<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />8<br />
gõ công thức = MMULT(A2:C3,E2:F4) rồi nhấn Ctrl-Shift-Enter <br />
sẽ có kết quả là ma trận A như trên hình.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">18. Hàm MOD()</span><br />
<br />
Dùng để lấy số dư của một phép chia<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MOD(number, divisor)<br />
number: Số bị chia<br />
divisor: Số chia<br />
<br />
Ví dụ: MOD(24, 10) = 4 (24 chia 10 được 2, dư 4)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Một công thức để tính toán số thời gian chênh lệch:</span><br />
<br />
Chúng ta đã biết cách để tính số thời gian chênh lệch, đó là lấy thời gian hoàn thành (EndTime) trừ đi thời gian bắt đầu (StartTime), và để phòng hờ trường hợp thời gian xuyên qua một ngày (khi đó có thể thời gian lúc hoàn thành nhỏ hơn thời gian bắt đầu, ví dụ làm từ 20 giờ ngày hôm trước đến 8 giờ ngày hôm sau), thì ta dùng công thức:<br />
= IF(EndTime &lt; StartTime, 1 + EndTime - StartTime, EndTime - StartTime)<br />
<br />
Tuy nhiên, ta cũng đã biết rằng, Excel tính toán với thời gian như tính toán với một con số chạy từ 0 cho tới 1, và lại bắt đầu từ 0 vào lúc nửa đêm. Do đó, ta có thể dùng hàm MOD() để thay cho công thức ở trên:<br />
= MOD(EndTime - StartTime, 1)<br />
<br />
Ví dụ: <br />
<br />
Tính số thời gian làm việc từ 10 giờ sáng đến 11 giờ đêm: <br />
= MOD(23:00 - 10:00, 1) = 13<br />
<br />
Tính số thời gian làm việc từ 10 giờ đêm đến 11 giờ trưa hôm sau: <br />
= MOD(11:00 - 22:00, 1) = 13<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cộng các ô cách nhau một số hàng cố định</span><br />
<br />
Có một bài toán như sau: <br />
<br />
Trong một cột dữ liệu, người ta muốn tính tổng của cách ô cách nhau mỗi n hàng nào đó. <br />
Ví dụ, trong dãy A1:A20, tính tổng của các ô cách nhau 5 ô, nghĩa là lấy A1 + A6 + A11 + A16<br />
<br />
Nói tới hàng, ta nghĩ đến hàm ROW(): ROW(A1) = 1, ROW(A6) = 6, v.v...<br />
<br />
Và ở ví dụ vừa nêu trên đây, ta để ý các con số 1, 6, 11, 16 khi đem chia cho 5 đều dư 1, vậy ta nghĩ đến hàm MOD(), lấy số thứ tự của hàng chia cho 5: MOD(ROW(A1), 5) = 1, MOD(ROW(A6), 5) = 1, v.v...<br />
<br />
Vậy ta sẽ lập công thức cho mảng A1:A20: <br />
Xét trong khối A1:A20, ô nào có số thứ tự của hàng chia cho 5 mà dư 1, thì lấy các ô đó cộng lại:<br />
<br />
{= SUM(IF(MOD(ROW(A1:A20), 5) = 1, A1:A20, 0))}<br />
<br />
Hay cụ thể hơn, gọi dãy ô để tính tổng là range, và số hàng cách nhau giữa các ô là n, ta sẽ có công thức:<br />
<br />
{= SUM(IF(MOD(ROW(range), n) = 1, range, 0))}<br />
<br />
Con số 1 ở đây không phải là con số cố định, mà nó là số dư của phép chia của số thứ tự cho n. Do đó, tùy vào điều kiện của bài toán mà ta thay bằng con số thích hợp. <br />
Chẳng hạn, cũng ví dụ trên đây, như ta muốn tính tổng của các ô A2, A7, A12, A17 thì công thức sẽ là:<br />
<br />
{= SUM(IF(MOD(ROW(A1:A20), 5) = 2, A1:A20, 0))}<br />
<br />
(2 là số dư của 2, 7, 12, 17 cho 5)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cộng các ô có số thứ tự hàng là chẵn, hoặc có số thứ tự hàng là lẻ</span><br />
<br />
Từ bài toán trên đây, ta có công thức để cộng các ô có số thứ tự hàng làm chẵn:<br />
<br />
{= SUM(IF(MOD(ROW(Range), 2) = 0, Range, 0))}<br />
<br />
Và công thức để cộng các ô có số thứ tự hàng làm lẻ:<br />
<br />
{= SUM(IF(MOD(ROW(Range), 2) = 1, Range, 0))}<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Xem một năm có phải là năm nhuận hay không</span><br />
<br />
Nếu bạn muốn có một công thức để xem thử một năm nào đó có phải là năm nhuận hay không, bạn có thể dùng hàm MOD().<br />
Năm nhuận, là năm chia hết cho 4, hay phép dư của phép chia số năm cho 4 thì bẳng 0 ở công thức sau đây:<br />
= MOD(year, 4)<br />
<br />
Số năm phải là một con số có 4 chữ số. <br />
<br />
Công thức trên chỉ đúng trong khoảng từ năm 1901 đến 2099 (có lẽ chúng ta cũng sống tối đa trong khoảng thời gian này thôi). Công thức này không đúng với năm 1900 và 2100, bởi vì điều kiện để tính năm nhuận còn có chuyện: Năm nhuận là năm chia hết cho 4, nếu năm này tận cùng bằng hai con số 0 thì nó phải chia hết cho 400 (ví dụ, năm 2000). <br />
<br />
Vậy, để có một công thức đúng cho tất cả mọi năm, ta làm một công thức luận lý như sau:<br />
= (MOD(year, 4) = 0) - (MOD(year, 100) = 0) + (MOD(year, 400) = 0)<br />
<br />
Nếu công thức này cho đáp số là 1 (TRUE), thì đó là năm nhuận, còn nếu cho đáp số là 0 (FALSE), thì đó không phải là năm nhuận.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ứng dụng của hàm MOD() trong định dạng bảng tính</span><br />
<br />
<br />
Chắc cũng có một lúc nào đó, bạn thích định dạng cho bảng tính của mình theo kiểu Ledger Shading. Ledger Shading là kiểu định dạng các hàng có màu xen kẽ nhau (ví dụ, xanh và trắng). Loại định dạng này thích hợp cho những danh sách dài, có nhiều cột, giúp ta phân biệt được hàng này với hàng kia cách dễ dàng, ít khi bị nhìn lầm dữ liệu giữa các hàng...<br />
<br />
Hình sau đây là một ví dụ:<br />
<br />
undefined<br />
<br />
Dĩ nhiên là việc này rất dễ thực hiện, chúng ta chỉ cần chọn các hàng xen kẽ nhau và tô màu cho nó. Tuy nhiên, nếu làm thủ công bằng tay, thì sẽ có một số bất tiện sau:<br />
<br />
- Rất lâu cho những bảng dữ liệu lớn.<br />
<br />
- Mỗi khi chèn thêm một hàng hoặc xóa bớt một hàng, thì phải định dạng lại.<br />
<br />
<br />
Để tránh những bất tiện đó, bạn có thể dùng một liên kết giữa hàm MOD() và chức năng Conditional Formatting (định dạng có điều kiện) của Excel.<br />
<br />
Cách làm như sau:<br />
<br />
1. Chọn vùng bạn muốn định dạng<br />
<br />
2. Gọi hộp thoại Conditional Formatting, và chọn New Ruler để mở hộp thoại New Formatting Ruler<br />
<br />
3. Chọn Use a Formula to Determine Which Cells to Format<br />
<br />
Trong khung Format values where this formular is true, gõ công thức = MOD(ROW(), 2)<br />
<br />
undefined<br />
<br />
4. Nhấn nút Format... để mở hộp thoại Format Cells<br />
<br />
5. Chọn tab Fills, chọn màu bạn thích tô cho các hàng xen kẽ với màu trắng, rồi nhấn OK để quay về hộp thoại New Formatting Ruler<br />
<br />
6. Nhấn OK <br />
<br />
Công thức = MOD(ROW(), 2) sẽ trả về 1 cho những hàng có số thứ tự lẻ và trả về 0 cho những hàng có số thứ tự chẵn. Bởi vì 1 thì tương đương với TRUE, nên Excel sẽ áp dụng màu tô mà bạn đã chọn cho tất cả những hàng có số thứ tự lẻ trong vùng bạn muốn định dạng, và bỏ qua những hàng có số thứ tự chẵn.<br />
<br />
<br />
Tương tự, <br />
<br />
- Nếu muốn định dạng các cột có màu xen kẽ, bạn chỉ cần thay công thức ở trên thành:<br />
= MOD(COLUMN(), 2)<br />
<br />
- Nếu thích định dạng cho hàng có số thứ tự lẻ thì không tô màu, còn hàng có số thứ tự chẵn mới tô màu, bạn thay đổi công thức trên một tí:<br />
= MOD(ROW() + 1, 2) <br />
<br />
<span style="font-weight: bold;" class="mycode_b">19. Hàm MROUND()</span><br />
<br />
Làm tròn đến bội số của một số khác<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MROUND(number, multiple)<br />
number: Con số sẽ làm tròn<br />
<br />
<br />
multiple: Con số mà bạn cần làm tròn number đến bội số của nó <br />
- Nếu number và multiple khác dấu, hàm sẽ báo lỗi #NUM!<br />
- Nếu number và multiple bằng nhau, kết quả là chính số đó<br />
- MROUND() sẽ làm tròn lên, nếu phần chia của phép chia number cho multiple lớn hơn hoặc bằng 1/2 multiple, và làm tròn xuống nếu phần chia của phép chia number cho multiple nhỏ hơn 1/2 multiple<br />
<br />
<br />
Ví dụ:<br />
MROUND(5, 2) = 6 (do 5/2 &gt; 2/2, bội số của 2 gần nhất mà lớn hơn 5 là 6)<br />
MROUND(11, 5) = 10 (do 11/5 &lt; 5/2, bội số của 5 gần nhất mà nhỏ hơn 11 là 10)<br />
MROUND(13, 5) = 15 (do 13/5 &gt; 5/2, bội số của 5 gần nhất mà lớn hơn 13 là 15)<br />
MROUND(5, 5) = 5 (number và multiple bằng nhau)<br />
MROUND(7.31, 0.5) = 7.5 (do 7.31/0.5 &gt; 0.5/2, bội số của 0.5 gần nhất mà lớn hơn 7.31 là 7.5)<br />
MROUND(-11, -5) = -10 (do -11/-5 &gt; -5/2, bội số của -5 gần nhất mà lớn hơn -11 là -10)<br />
MROUND(-11, 5) = #NUM! (number và multiple khác dấu)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">20. Hàm MULTINOMIAL()</span><br />
<br />
Dùng để tính tỷ lệ giữa giai thừa tổng và tích giai thừa của các số<br />
<br />
Xin ví dụ cho dễ hiểu: Giả sử ta có 3 số a, b và c<br />
<br />
undefined<br />
<br />
Cú pháp: = MULTINOMIAL(number1, number2, ...)<br />
<br />
number1, number2,... : là những con số mà ta muốn tính tỷ lệ giữa giai thừa tổng và tích giai thừa của chúng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ghi chú:</span><br />
<br />
- number1, number2, ... có thể lên đến 255 con số (với Excel 2003 trở về trước, con số này chỉ là 30)<br />
<br />
- Nếu có bất kỳ một number nào không phải là dữ liệu kiểu số, MULTINOMIAL() sẽ báo lỗi #VALUE!<br />
<br />
Nếu có bất kỳ một number nào &lt; 0, MULTINOMIAL() sẽ báo lỗi #NUM! <br />
<br />
Ví dụ: MULTINOMIAL(2, 3, 4) = 1,260 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">admin</span> - April 7, 2008 03:33 AM (GMT)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">21. Hàm EVEN() và Hàm ODD()</span><br />
<br />
Hai hàm này làm tròn rất đơn giản. EVEN() làm tròn đến số nguyên chẵn gần nhất, còn ODD() làm tròn đến số nguyên lẻ gần nhất. Cả hai đều làm tròn theo kiểu chạy xa khỏi số 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = EVEN(number) | = ODD(number)<br />
<br />
<br />
Ví dụ: <br />
<br />
EVEN(14.2) = 16<br />
EVEN(-23) = 24<br />
ODD(58.1) = 59<br />
ODD(-6) = -7<br />
<br />
<span style="font-weight: bold;" class="mycode_b">22. Hàm PI()</span><br />
<br />
Trả về giá trị của số Pi = 3.14159265358979, lấy chính xác đến 15 chữ số.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = PI()<br />
Hàm này không có tham số<br />
<br />
Ví dụ:<br />
PI() = 3.14159265358979<br />
PI()/2 = 1.570796327<br />
PI()*(3^2) = 28.27433388<br />
<br />
<span style="font-weight: bold;" class="mycode_b">23. Hàm POWER()</span><br />
<br />
Tính lũy thừa của một số.<br />
Có thể dùng toán tử ^ thay cho hàm này. Ví dụ: POWER(2, 10) = 2^10<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = POWER(number, power)<br />
<br />
Trong đó:<br />
<br />
number: Số cần tính lũy thừa<br />
<br />
power: Số mũ<br />
<br />
Ví dụ:<br />
POWER(5, 2) = 25<br />
POWER(98.6, 3.2) = 2,401,077<br />
POWER(4, 5/4) = 5.656854<br />
<br />
<span style="font-weight: bold;" class="mycode_b">24. Hàm PRODUCT()</span><br />
<br />
Dùng để tính tích của các số<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = PRODUCT(number1, number2, ...)<br />
<br />
number1, number2,... : là những con số mà ta muốn tính tỷ lệ giữa giai thừa tổng và tích giai thừa của chúng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ghi chú:</span><br />
<br />
- number1, number2, ... có thể lên đến 255 con số (với Excel 2003 trở về trước, con số này chỉ là 30)<br />
<br />
- Nếu các number nằm trong một mảng dữ liệu, thì chỉ có những giá trị kiểu số trong mảng đó mới được tính; những giá trị không phải là kiểu số sẽ được bỏ qua.<br />
<br />
Ví dụ: PRODUCT(2, 3, 4) = 24<br />
<br />
<span style="font-weight: bold;" class="mycode_b">25. Hàm QUOTIENT()</span><br />
<br />
Lấy phần nguyên của phép chia. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = QUOTIENT(numberator, denominator)<br />
<br />
numberator: Số bị chia<br />
<br />
denominator: Số chia<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ghi chú:</span><br />
<br />
- Nếu các thông số không phải là dữ liệu kiểu số, hàm sẽ báo lỗi #VALUE!<br />
<br />
- Hàm này tương đương với hàm INT(): QUOTIENT(a, b) = INT(a/b) <br />
<br />
Ví dụ:<br />
QUOTIENT(5, 2) = 2<br />
QUOTIENT(4.5, 3.1) = 1<br />
QUOTIENT(-10, 3) = -3<br />
<br />
Đôi khi, chúng ta cần có một dữ liệu mô phỏng để thử nghiệm một công việc, một kế hoạch gì đó, và cần điền một vài con số vào để có cái mà thử nghiệm. Trong nhiều trường hợp, chúng ta sẽ cần có những con số ngẫu nhiên, không biết trước. Excel cung cấp cho chúng ta hai hàm để lấy số ngẫu nhiên, đó là RAND() và RANDBETWEEN().<br />
<br />
<span style="font-weight: bold;" class="mycode_b">26. Hàm RAND()</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = RAND()<br />
<br />
Hàm RAND() trả về một con số ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn 1. Nếu dùng hàm để lấy một giá trị thời gian, thì RAND() là hàm thích hợp nhất.<br />
<br />
Bên cạnh đó, cũng có những cách để ép RAND() cung cấp cho chúng ta những con số ngẫu nhiên nằm giữa hai giá trị nào đó.<br />
Để lấy một số ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn n, ta dùng cú pháp: <br />
RAND() * n<br />
Ví dụ, công thức sau đây sẽ cung cấp cho chúng ta một con số ngẫu nhiên giữa 0 và 30:<br />
<br />
= RAND() * 30<br />
<br />
Trường hợp khác, mở rộng hơn, chúng ta cần có một con số ngẫu nhiên lớn hơn hoặc bằng số m nào đó, và nhỏ hơn số n nào đó, ta dùng cú pháp: <br />
RAND() * (n - m) + m<br />
Ví dụ, để lấy một số ngẫu nhiên lớn hơn hoặc bằng 100 và nhỏ hơn 200, ta dùng công thức:<br />
<br />
= RAND() * (200 - 100) + 100<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span> <br />
<br />
Do hàm RAND() là một hàm biến đổi (volatile function), tức là kết quả do RAND() cung cấp có thể thay đổi mỗi khi bạn cập nhật bảng tính hoặc mở lại bảng tính, ngay cả khi bạn thay đổi một ô nào đó trong bảng tính... <br />
<br />
Để có một kết quả ngẫu nhiên nhưng không thay đổi, bạn dùng cách sau:<br />
Sau khi nhập công thức = RAND() vào, bạn nhấn F9 và sau đó nhấn Enter. Động tác này sẽ lấy một con số ngẫu nhiên ngay tại thời điểm gõ công thức, nhưng sau đó thì luôn dùng con số này, vì trong ô nhập công thức sẽ không còn hàm RAND() nữa.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lấy một số ngẫu nhiên nguyên dương, gồm có x chữ số</span><br />
<br />
Trong một số trường hợp, bài toán yêu cầu của chúng ta là lấy một số ngẫu nhiên nguyên, dương và gồm có 6 chữ số; hoặc chúng ta muốn có một cái mã số thuế ngẫu nhiên (nguyên, dương, có 10 chữ số), v.v...<br />
<br />
Dựa vào công thức lấy số ngẫu nhiên trong một khoảng ở ví dụ trên, ta dùng hàm INT() để lấy phần nguyên: <br />
INT(RAND() * (n - m) + m)<br />
<br />
Và trong trường hợp này, để lấy một số ngẫu nhiên mà cố định số chữ số, chúng ta sẽ đặt n = 10^x và m = 10^(x-1); với x là số chữ số theo yêu cầu (dấu ^ là lũy thừa). <br />
<br />
Chẳng hạn, để lấy một con số ngẫu nhiên có 8 chữ số, ta dùng công thức:<br />
<br />
= INT(RAND() * (100000000 - 10000000) + 10000000)<br />
<br />
Công thức này sẽ cho chúng ta một con số ngẫu nhiên lớn hơn hoặc bằng 10,000,000 và nhỏ hơn 99,999,999<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lấy một ký tự ngẫu nhiên</span> <br />
<br />
Ngoài việc cho kết quả là một con số ngẫu nhiên, hàm RAND() có thể cho cho kết quả là một ký tự ngẫu nhiên không ? Thưa được.<br />
<br />
Ví dụ, để lấy một ký tự ngẫu nhiên trong bảng chữ cái tiếng Anh: <br />
<br />
Chúng ta biết rằng bảng chữ cái tiếng Anh có 26 chữ cái, vậy trước hết ta sẽ yêu cầu RAND() cung cấp cho ta một con số ngẫu nhiên giữa 1 và 26:<br />
<br />
INT(RAND() * 26 + 1)<br />
<br />
Bây giờ, dựa theo bảng mã ANSI, ta biết những ký tự viết hoa (A tới Z) nằm từ mã ANSI 65 đến mã ANSI 90, và hàm dùng để lấy kết quả là chữ dựa vào bảng mã ANSI là CHAR(), ta có công thức sau:<br />
<br />
= CHAR(INT(RAND() * 26 + 1) + 64)<br />
<br />
Tương tự, để lấy một ký tự ngẫu nhiên là ký tự viết thường (a tới z), nằm từ mã ANSI 97 đến mã ANSI 122, ta dùng công thức:<br />
<br />
= CHAR(INT(RAND() * 26 + 1) + 96)<br />
<br />
Mỗi ký tự mà chúng ta có thể nhập vào màn hình này, đều mang một mã số (numeric code). Ví dụ, chữ A (hoa) là 65, dấu &amp; (và) là số 38... <br />
<br />
Những ký tự này, có cái chúng ta có thể nhập trực tiếp từ bàn phím, tuy nhiên cũng có những ký tự chúng ta phải nhập bằng phím Alt và một mã số thích hợp ở bên bàn phím số. Ví dụ, mã số của ký tự bản quyền © là 169, để gõ ký tự này, chúng ta sẽ nhấn Alt+0169 (dùng số bên nhóm phím số, và nhớ là luôn luôn thêm số 0 cho những ký tự lớn hơn 127).<br />
<br />
Tất cả những mã số đại diện cho các ký tự này, người ta thường gọi là bảng mã ANSI (The ANSI code). Bảng mã ANSI gồm từ 1 đến 255, tuy nhiên 31 số đầu tiên chỉ là những ký tự rỗng, ký tự đặc biệt (dấu ngắt câu, xuống hàng, v.v...)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">27. Hàm CHAR()</span><br />
<br />
Chuyển đổi một mã số trong bộ mã ANSI (có miền giá trị từ 1 - 255) sang ký tự tương ứng.<br />
<br />
Cú pháp: = CHAR(number)<br />
Number : là một mã số trong bảng mã ANSI.<br />
<br />
<br />
Ví dụ: Để kết quả có được là ký tự bản quyền ©, chúng ta nhập: = CHAR(169)<br />
<br />
Ở bài trên, tôi đã trình bày cách lấy một số ngẫu nhiên nằm trong một khoảng {n, m} nào đó:<br />
= RAND() * (n - m) + m<br />
Có một hàm nữa trong Excel có chức năng tương tự công thức trên: Hàm RANDBETWEEN(). <br />
RANDBETWEEN() chỉ khác RAND() ở chỗ: RANDBETWEEN() cho kết quả là số nguyên, còn RAND() thì cho kết quả vừa là số nguyên vừa là số thập phân.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">28. Hàm RANDBETWEEN()</span><br />
<br />
Hàm RANDBETWEEN() trả về một số nguyên ngẫu nhiên nằm trong một khoảng cho trước.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = RANDBETWEEN(bottom, top)<br />
<br />
bottom: Số nhỏ nhất trong dãy tìm số ngẫu nhiên (kết quả sẽ lớn hơn hoặc bằng số này)<br />
<br />
top: Số lớn nhất trong dãy tìm số ngẫu nhiên (kết quả sẽ nhỏ hơn hoặc bằng số này)<br />
<br />
Ví dụ: = RANDBETWEEN(0, 59) sẽ cho kết quả là một số nguyên nằm trong khoảng 0 tới 59.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">29. Hàm ROMAN()</span><br />
<br />
Dùng để chuyển đổi một số dạng Ả-rập sang dạng số La-mã<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = ROMAN(number, form)<br />
<br />
number: Số cần chuyển đổi<br />
<br />
form: dạng chuyển đổi<br />
0 (hoặc TRUE, hoặc không nhập): Dạng cổ điển<br />
<br />
1 cho đến 3: Dạng cổ điển nhưng được rút gọn, số càng lớn rút gọn càng nhiều (xem thêm ở ví dụ)<br />
<br />
4 (hoặc FALSE): Dạng hiện đại<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Chú ý:</span><br />
<br />
number phải là số dương, nếu number &lt; 0 hàm sẽ báo lỗi #VALUE!<br />
<br />
Nếu number là số thập phân, ROMAN() chỉ chuyển đổi phần nguyên của nó<br />
<br />
Hàm ROMAN() chỉ xử lý được tới số lớn nhất là 3999, nếu number &gt; 3999 hàm sẽ báo lỗi #VALUE!<br />
<br />
Sau khi đã chuyển đổi, kết quả sẽ là một dữ liệu dạng text, và không thể tính toán với nó được nữa<br />
<br />
Ví dụ:<br />
<br />
ROMAN(499, 0) = CDXCIX = ROMAN(499) = ROMAN(499, TRUE) <br />
<br />
ROMAN(499, 1) = LDVLIV<br />
<br />
ROMAN(499, 2) = XDIX<br />
<br />
ROMAN(499, 3) = VDIV<br />
<br />
ROMAN(499, 4) = ID = ROMAN(499, FALSE) <br />
<br />
ROMAN(2008) = MMVIII<br />
<br />
<span style="font-weight: bold;" class="mycode_b">30. Hàm ROUND()</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = ROUND(number, num_digits)<br />
<br />
number: Con số sẽ làm tròn<br />
num_digits: Là một số nguyên, chỉ cách mà bạn muốn làm tròn <br />
num_digits &gt; 0 : làm tròn đến số thập phân được chỉ định<br />
num_digits = 0 : làm tròn đến số nguyên gần nhất<br />
num_digits &lt; 0 : làm tròn đến phần nguyên được chỉ định<br />
<br />
Ví dụ: Với con số 1234.5678<br />
ROUND(1234.5678, 3) = 1234.568<br />
ROUND(1234.5678, 2) = 1234.57<br />
ROUND(1234.5678, 1) = 1234.6<br />
ROUND(1234.5678, 0) = 1235<br />
ROUND(1234.5678, -1) = 1230<br />
ROUND(1234.5678, -2) = 1200<br />
ROUND(1234.5678, -3) = 1000 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">admin</span> - April 7, 2008 03:57 AM (GMT)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">31. Hàm ROUNDDOWN() và Hàm ROUNDUP()</span><br />
<br />
Hai hàm này, về cơ bản thì giống hàm ROUND(), chỉ khác là chúng chỉ làm tròn theo một chiều: ROUNDDONW() luôn luôn làm tròn một số về số 0, còn ROUNDUP() thì luôn luôn làm tròn một số ra xa số 0.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span><br />
<br />
= ROUNDDOWN(number, num_digits)<br />
= ROUNDUP(number, num_digits)<br />
<br />
number: Con số sẽ làm tròn<br />
num_digits: Là một số nguyên, chỉ cách mà bạn muốn làm tròn <br />
num_digits &gt; 0 : làm tròn đến số thập phân được chỉ định<br />
<br />
num_digits = 0 : làm tròn đến số nguyên gần nhất<br />
<br />
num_digits &lt; 0 : làm tròn đến phần nguyên được chỉ định<br />
<br />
<br />
Ví dụ: So sánh giữa ROUNDDOWN() và ROUNDUP()<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">32. Hàm SERIESSUM()</span><br />
<br />
Dùng để tính tổng lũy thừa của một chuỗi số, theo công thức sau đây:<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SERIESSUM(x, n, m, coefficients)<br />
<br />
x : giá trị nhập vào cho chuỗi lũy thừa<br />
<br />
n : lũy thừa khởi tạo để tăng tới x<br />
<br />
m : bước tăng cho mỗi phần tử trong chuỗi<br />
<br />
coefficients : tập hợp hệ số sẽ được nhân với mỗi lũy thừa của x<br />
<br />
Các thông số này phải là các dữ liệu kiểu số, nếu không, hàm sẽ báo lỗi #VALUE!<br />
<br />
<br />
Ví dụ:<br />
<br />
SERIESSUM(5, 0, 2, {1, 2, 3, 4}) = 64,426<br />
<br />
Diễn giải chi tiết: (x = 5, n = 0, m = 2, coefficients = 1, 2, 3, 4)<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">33. Hàm SIGN()</span><br />
<br />
Trả về dấu của số: 1 nếu là số dương, 0 (zero) nếu là số 0 và -1 nếu là số âm.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SIGN(number)<br />
<br />
Ví dụ:<br />
SIGN(10) = 1<br />
SIGN(4-4) = 0<br />
SIGN(-0.057) = -1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">34. Hàm SQRT()</span><br />
<br />
Dùng để tính căn bậc hai của một số<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SQRT(number)<br />
<br />
number: Số thực, dương (nếu number &lt; 0 hàm sẽ báo lỗi #NUM!)<br />
<br />
<br />
Ví dụ: Giả sử ở ô A2, có con số -16<br />
<br />
SQRT(16) = 4<br />
SQRT(A2) = #NUM!<br />
SQRT(ABS(A2)) = 4<br />
<br />
<span style="font-weight: bold;" class="mycode_b">35. Hàm SQRTPI()</span><br />
<br />
Dùng để tính căn bậc hai của một số nhân với Pi (= 3.14159265358979)<br />
<br />
Cú pháp: = SQRTPI(number)<br />
<br />
number: Số thực, dương nhân với Pi (nếu number &lt; 0 hàm sẽ báo lỗi #NUM!)<br />
<br />
Ví dụ: Giả sử ở ô A2, có con số -16<br />
<br />
SQRT(1) = 1.772454 (căn bậc hai của Pi)<br />
SQRT(2) = 2.506628 (căn bậc hai của 2*Pi)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">36. Hàm SUBTOTAL()</span><br />
<br />
Hàm SUBTOTAL là một hàm rất linh hoạt nhưng cũng là một trong các hàm hơi khó sử dụng của Excel. Điều khó hiểu thứ nhất chính là cái tên của nó, vì nó thực sự làm được nhiều thứ hơn ý nghĩa của tên hàm. Đối số thứ nhất của hàm bắt buộc bạn phải nhớ con số đại diện cho phép tính cần thực hiện trên tập số liệu (trong Excel 2007 có tính năng AutoComplete giúp chúng ta khỏi nhớ các con số này). Hàm SUBTOTAL được Microsoft nâng cấp kể từ phiên bản Excel 2003 với sự gia tăng các tuỳ chọn cho đối số thứ nhất của hàm, tuy nhiên điều này dẫn đến sự không tương thích với các phiên bản cũ nếu chúng ta sử dụng các tính năng mới bổ sung này.<br />
<br />
Đối số đầu tiên của của hàm SUBTOTAL xác định hàm thực sự nào sẽ được sử dụng khi tính toán (xem trong danh sách bên dưới). Ví dụ nếu đối số là 1 thì hàm SUBTOTAL hoạt động giống nhưng hàm AVERAGE, nếu đối số thứ nhất là 9 thì hàm hàm SUBTOTAL hoạt động giống nhưng hàm SUM.<br />
<br />
SUBTOTAL là hàm tính toán cho một nhóm con trong một danh sách hoặc bảng dữ liệu tuỳ theo phép tính mà bạn chọn lựa trong đối số thứ nhất. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SUBTOTAL(function_num, ref1, ref2,...)<br />
Function_num: Các con số từ 1 đến 11 (hay 101 đến 111) qui định hàm nào sẽ được dùng để tính toán trong SUBTOTAL<br />
<br />
undefined<br />
<br />
Ref1, ref2: Các vùng địa chỉ tham chiếu mà bạn muốn thực hiện phép tính trên đó.<br />
Trong Excel 2007, bạn có thể dùng đến 254 ref (với Excel 2003 trở vế trước thì con số này chỉ là 29) <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ghi chú:</span><br />
<br />
- Nếu có hàm SUBTOTAL khác đặt lồng trong các đối số ref1, ref2,… thì các hàm lồng này sẽ bị bỏ qua không được tính, nhằm tránh trường hợp tính toán 2 lần. <br />
- Đối số function_num nếu từ 1 đến 11 thì hàm SUBTOTAL tính toán bao gồm cả các giá trị ẩn trong tập số liệu (hàng ẩn). Đối số function_num nếu từ 101 đến 111 thì hàm SUBTOTAL chỉ tính toán cho các giá trị không ẩn trong tập số liệu (bỏ qua các giá trị ẩn). <br />
- Hàm SUBTOTAL sẽ bỏ qua không tính toán tất cả các hàng bị ẩn bởi lệnh Filter (Auto Filter) mà không phụ thuộc vào đối số function_num được dùng (1 giống 101...). <br />
- Hàm SUBTOTAL được thiết kế để tính toán cho các cột số liệu theo chiều dọc, nó không được thiết kế để tính theo chiều ngang. <br />
- Hàm này chỉ tính toán cho dữ liệu 2-D, do vậy nếu dữ liệu tham chiếu dạng 3-D (Ví dụ về tham chiếu 3-D: =SUM(Sheet2:Sheet13!B5) thì hàm SUBTOTAL báo lỗi #VALUE! <br />
<br />
Ví dụ:<br />
SUBTOTAL(9, {120, 10, 150, 23}) = 303 = 120 + 10 + 150 + 23<br />
SUBTOTAL(1, {120, 10, 150, 23}) = 75.75 = (120 + 10 + 150 + 23) / 4<br />
<br />
<span style="font-weight: bold;" class="mycode_b">37. Hàm SUM()</span><br />
<br />
Khi cộng các giá trị với nhau trong Excel, ta có thể dùng dấu cộng (+) hoặc dùng hàm SUM() <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SUM(number1 [, number2...])<br />
<br />
Trong Excel 2007, bạn có thể dùng SUM() để để tính tổng của 255 giá trị lại với nhau (trong những version trước, con số này chỉ là 30)<br />
<br />
Ví dụ: = SUM(A2:A13, C2:C13, E2:E13)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Phép cộng lũy tiến</span><br />
<br />
Tôi có một bảng công nợ khách hàng như sau:<br />
Ở cột I, tôi muốn rằng mỗi khi có một phát sinh nào đó (mua hàng thêm, hoặc trả tiền hàng, trả hàng, v.v...) thì cột Số Nợ sẽ phản ánh con số nợ còn lại ngay tại thời điểm có phát sinh.<br />
<br />
undefined<br />
<br />
Tôi dùng công thức sau (tại I12 và kéo xuống cho cả cột I):<br />
= SUM(&#36;G&#36;12:G12) - SUM(&#36;H&#36;12:H12)<br />
<br />
"Bí quyết" ở đây là dùng địa chỉ tuyệt đối để giữ G12 và H12 lại.<br />
Ví dụ, tại I20, tôi sẽ có công thức:<br />
= SUM(&#36;G&#36;12:G20) - SUM(&#36;H&#36;12:H20)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cộng riêng số dương và số âm</span><br />
<br />
Tôi có một vùng dữ liệu, trong đó có cả số dương và số âm lẫn lộn. Làm cách nào để tôi biết tổng của tất cả những số dương, hoặc tổng của tất cả những số âm? <br />
Tính tổng, thì dùng SUM(), nhưng làm sao cho nó biết số nào là dương số nào là âm để cộng lại?<br />
Thoạt tiên tôi nghĩ đến hàm SUMIF... Nhưng, có một cách hay hơn, là dùng công thức mảng cho SUM:<br />
<br />
Tổng các số âm trong vùng dữ liệu (tạm đặt tên cho nó là range):<br />
<br />
{= SUM((range &lt; 0) * range)}<br />
<br />
Xin nhắc lại, cặp dấu {} không phải do ta gõ vào, mà là do ta nhấn Ctrl-Shift-Enter sau khi nhập công thức bình thường.<br />
<br />
Tương tự, tổng các số dương trong vùng dữ liệu range<br />
<br />
{= SUM((range &gt; 0) * range)}<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">38. Hàm SUMIF()</span><br />
<br />
Tính tổng các ô trong một vùng thỏa một điều kiện cho trước.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SUMIF(range, criteria, sum_range)<br />
<br />
Range : Dãy các ô để tính tổng, có thể là ô chứa số, tên, mảng, hay tham chiếu đến các ô chứa số. Ô rỗng và ô chứa giá trị text sẽ được bỏ qua. <br />
<br />
Criteria : Điều kiện để tính tổng. Có thể ở dạng số, biểu thức, hoặc text. Ví dụ, criteria có thể là 32, "32", "&gt; 32", hoặc "apple", v.v...<br />
<br />
Sum_range : Là vùng thực sự để tính tổng. Nếu bỏ qua, Excel sẽ coi như sum_range = range.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
- Sum_range không nhất thiết phải cùng kích thước với range. Vùng thực sự để tính tổng được xác định bằng ô đầu tiên phía trên bên trái của sum_range, và bao gồm thêm những ô tương ứng với kích thước của range. Ví dụ:<br />
- Nếu Range là A1:A5, Sum_range là B1:B5, thì vùng thực sự để tính tổng là B1:B5<br />
- Nếu Range là A1:A5, Sum_range là B1:B3, thì vùng thực sự để tính tổng là B1:B5<br />
- Nếu Range là A1:B4, Sum_range là C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4, thì vùng thực sự để tính tổng là C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4<br />
- Nếu Range là A1:B4, Sum_range là C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />2, thì vùng thực sự để tính tổng là C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />4<br />
Có thể dùng các ký tự đại diện trong điều kiện: dấu ? đại diện cho một ký tự, dấu * đại diện cho nhiều ký tự (nếu như điều kiện là tìm những dấu ? hoặc *, thì gõ thêm dấu ~ ở trước dấu ? hay *). <br />
Khi điều kiện để tính tổng là những ký tự, SUMIF() không phân biệt chữ thường hay chữ hoa. <br />
<br />
Ví dụ: Có bảng tính như sau<br />
<br />
undefined<br />
<br />
Tính tổng của những huê hồng mà có doanh thu &gt; 160,000 ?<br />
= SUMIF(A2:A5, "&gt;160000", B2:B5) = 63,000 <br />
Tính tổng của những doanh thu &gt; 160,000 ?<br />
= SUMIF(A2:A5, "&gt;160000") = 900,000 <br />
Tính tổng của những huê hồng mà có doanh thu = 300,000 ?<br />
= SUMIF(A2:A5, "=300000", B2:B3) = 21,000<br />
<br />
<span style="font-weight: bold;" class="mycode_b">39. Hàm SUMPRODUCT()</span><br />
<br />
Sum = Tổng / Product = Tích<br />
SUMPRODUCT = Tổng của tích (các mảng dữ liệu)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SUMPRODUCT(array1, array2, ...)<br />
array1, array2, ... : Có thể dùng từ 2 tới 255 mảng (với Excel 2003 trở về trước thì con số này chỉ là 30) và các mảng này phải cùng kích thước với nhau<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span><br />
<br />
- Nếu các mảng không cùng kích thước, SUMPRODUCT sẽ báo lỗi #VALUE!<br />
<br />
- Bất kỳ một phần tử nào trong mảng không phải là dữ liệu kiểu số, sẽ được SUMPRODUCT coi như bằng 0 (zero) <br />
<br />
Ví dụ:<br />
<br />
undefined<br />
<br />
SUMPRODUCT(A1:B3, C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />3) = 156<br />
<br />
Cách tính: 156 = (3*2)+(4*7)+(8*6)+(6*7)+(1*5)+(9*3)<br />
<br />
Nếu dùng SUM() với công thức mảng, sẽ cho kết quả tương đương:<br />
<br />
{SUM(A1:B3 * C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />3)} = SUMPRODUCT(A1:B3, C1<img src="https://duytuan2002.github.io/mybbscr/4.gif" alt="big green" title="big green" class="smilie smilie_229" />3) = 156<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Mình xin phân tích cách dùng SumProduct và Công thức mảng.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Hàm SumProduct:</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cấu trúc:</span> SUMPRODUCT(array1,array2,array3, ...)<br />
<br />
Array - Mảng dữ liệu là một tập hợp dãy giá trị liên tiếp trong một khảng nào đó. VD A1:C1 hoặ A1:A10,...<br />
<br />
Phép tính này cho phép chúng ta tính tổng của tích array1*array2*array3* ...array30.<br />
VD: A: Số lượng; B: Đơn giá<br />
A1 =2 B1=20 C1="Cam" D1="Giống lai"<br />
A2 =3 B2=10 C2="Bưởi" D2="Không"<br />
A3 =4 B3=25 C3="Cam" D3="Không"<br />
<br />
Bây giờ cần tính doanh thu của các loại hoa quả<br />
array1=A1:A3<br />
array2=B1:B3<br />
Công thức =SumProduct(A1:A3, B1:B3) = 170<br />
Bản chất công thức làm việc như thế này =A1*B1+A2*B2+A3*B3 kết quả là 170<br />
Nhắc lại về phép tính logic:<br />
Giá trị kiểu logic chỉ cho ra 1 trong 2 giá trị là TRUE/1, FALSE/0<br />
Phép toán logic:&lt;, &gt;, &lt;&gt;, =, &gt;=, &lt;=, Not()<br />
VD:<br />
2&gt;3=False<br />
3&gt;1=True<br />
4&gt;3=True<br />
*) Logic và - AND<br />
=(2&gt;3)*(3&gt;1)*(4&gt;3)=False*True*True=0*1*1=False/0 tương đương với hàm AND(2&gt;3,3&gt;1,4&gt;3). Ít nhất một logic=False thì kết quả sẽ là False hay 0.<br />
* Logic hoặc - OR<br />
=(2&gt;3)+(3&gt;1)+(4&gt;3)=False+True+True=0+1=True/1 tương đương với hàm OR(2&gt;3,3&gt;1,4&gt;3). Ít nhất một logic=True thì kết quả sẽ là True hay 1. <br />
Lưu ý tổng của các giá trị là True=True=1).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">*) Tính tổng có nhiều điều kiện:</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cách 1:</span> dùng SUMPRODUCT<br />
<br />
Tính tổng doanh thu của loại là "Cam"<br />
=SUMPRODUCT(A1:A3,B1:B3*(C1:C3="Cam")) hoặc =SUMPRODUCT(A1:A3*B1:B3*(C1:C3="Cam")) = 140<br />
Công thức tính như sau: <br />
=A1*B1*(C1="Cam")+A2*B2*(C2="Cam")+A3*B3*(C3="Cam" ) <br />
=2*20*True+3*10*False+4*25*True<br />
=2*20*1+3*10*0+4*25*1= 140<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cách 2:</span> Dùng Công thức mảng - "Formula Array"<br />
<br />
=Sum(IF(C1:C3="Cam",A1:A3*B1:B3,0))<br />
Kết thức nhẫn tổ hợp CTRL+SHIFT+ENTER. Với cách làm này EXCEL sẽ phân tích như sau:<br />
Xét trên từng dòng trong mảng (array)<br />
dòng1: (c1="Cam")=true nên lấy A1*B1=2*20<br />
dòng2: (c2="Cam")=false nên lấy 0 (theo cách của lấy của hàm IF)<br />
dòng3: (c3="Cam")=true nên lấy A3*B3=4*25<br />
Sau khi chạy hết các dòng, EXCEL sẽ dùng hàm SUM để tính tổng kết quả tính được ở từng dòng=2*20+0+2*25=140. Nếu trong công thức là hàm khác hàm SUM thì cách tính sẽ theo hàm đó.<br />
<br />
Như vậy có 2 cách tính:<br />
<br />
=SUMPRODUCT(A1:A3*B1:B3*(C1:C3="Cam")) và<br />
=Sum(IF(C1:C3="Cam",A1:A3*B1:B3,0))<br />
<br />
*) Vậy tại sao không dùng là =SUM(A1:A3*B1:B3*(C1:C3="Cam"))<br />
mà phải dùng hàm =SUMPRODUCT(A1:A3*B1:B3*(C1:C3="Cam")) ?<br />
<br />
Các bạn nhớ lại cấu trúc của SUM là<br />
SUM(number1,number2, ...)<br />
Còn SUMPRODUCT là<br />
SUMPRODUCT(array1,array2,array3, ...)<br />
number &lt;&gt; array<br />
<br />
Nếu SUMPRODUCT(A1:A3*B1:B3*(C1:C3="Cam")) rồi ENTER là đúng vì đối số của nó phải là mảng - Array.<br />
<br />
Nếu công thức =SUM(A1:A3*B1:B3*(C1:C3="Cam")) rồi ENTER kết quả là #VALUE! -lỗi vì A1:A3 là một array chứ không phải là một number.<br />
<br />
Nếu nhấn tổ hợp CTRL+SHIFT+ENTER. Với cách làm này EXCEL sẽ phân tích như sau:<br />
Xét trên từng dòng trong mảng (array)<br />
dòng1: A1*B1*(c1="Cam")=2*20*True=2*20*1<br />
dòng2: A2*B2*(c2="Cam")=3*10*False=3*10*0<br />
dòng3: A3*B3*(c3="Cam")=2*25*True=4*25*1<br />
<br />
Sau khi chạy hết các dòng, EXCEL sẽ dùng hàm SUM để tính tổng kết quả tính được ở từng dòng=2*20*1+3*10*0<br />
+4*25*1=140.<br />
<br />
Vậy vẫn dùng được =SUM(A1:A3*B1:B3*(C1:C3="Cam")) với điều kiện nhấn tổ hợp phím CTRL+SHIFT+ENTER<br />
<br />
<br />
Như vậy đến đây chúng ta có có 3 cách tính:<br />
<br />
=SUMPRODUCT(A1:A3*B1:B3*(C1:C3="Cam")) nhấn phím ENTER<br />
=SUM(IF(C1:C3="Cam",A1:A3*B1:B3,0)) nhấn phím CTRL+SHIFT+ENTER<br />
=SUM(A1:A3*B1:B3*(C1:C3="Cam")) nhấn phím CTRL+SHIFT+ENTER<br />
<br />
Chúng có thể kết hợp rất nhiều điều kiện vào trong hàm thông qua phép toán logic nhân-và- And, cộng - hoặc - Or. <br />
<br />
*) Dùng hàm SUMPRODUCT hay dùng SUM kết hợp CTRL+SHIFT+ENTER đều cho ra được kết quả như nhau chính là do phép toán logic của bạn.<br />
*) Hàm SUMPRODUCT chỉ có thể tính tổng theo nhiều điều kiện<br />
*) Công thức mảng - Formula Array ngoài việc tính tổng có nhiều điều kiện còn làm rất nhiều phép tính khác do cách sử dụng hàm mà thôi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">40. Hàm SUMSQ()</span><br />
<br />
Dùng để tính tổng các bình phương của các số<br />
<br />
Cú pháp: = SUMSQ(number1, number2, ...)<br />
<br />
number1, number2, ... : Có thể dùng đến 255 tham số (với Excel 2003 trở về trước, con số này chỉ là 30)<br />
Các tham số (number) có thể là một số, là một mảng, một tên, hay là một tham chiếu đến một ô chứa số, v.v...<br />
<br />
Ví dụ: SUMSQ(3, 4) = (3^2) + (4^2) = 9 + 16 = 25<br />
<br />
<span style="font-weight: bold;" class="mycode_b">41. Hàm SUMX2MY2(), Hàm SUMXPY2() và Hàm SUMXMY2()</span><br />
<br />
Để dễ nhớ tên của ba hàm này, bạn đọc chúng từ trái sang phải với các quy ước sau:<br />
<br />
SUM = Tổng, M (Minus) = Trừ (hiệu số), P (Plus) = Cộng (tổng số), 2 = Bình phương, X và Y là hai mảng gì đó, có chứa nhiều phần tử x và y <br />
Vậy, định nghĩa và cách tính toán của 3 hàm này là: <br />
<br />
- SUMX2MY2: Tổng của hiệu hai bình phương của các phần tử tương ứng trong 2 mảng dữ liệu<br />
<br />
undefined<br />
<br />
- SUMX2PY2: Tổng của tổng hai bình phương của các phần tử tương ứng trong 2 mảng dữ liệu <br />
<br />
undefined<br />
<br />
- SUMXMY2: Tổng của bình phương của hiệu các phần tử tương ứng trong 2 mảng dữ liệu <br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp: </span><br />
<br />
= SUMX2MY2(array_x, array_y)<br />
<br />
= SUMX2PY2(array_x, array_y)<br />
<br />
= SUMXMY2(array_x, array_y)<br />
<br />
array_x và array_y là các dãy ô hoặc giá trị kiểu mảng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý: </span><br />
<br />
- array_x và array_y bắt buộc phải có cùng kích thước, nếu không, hàm sẽ báo lỗi #NA!<br />
<br />
- Nếu trong array_x hoặc array_y có những giá trị kiểu text, kiểu logic hoặc rỗng, thì sẽ được bỏ qua (không tính), tuy nhiên các giá trị = 0 vẫn được tính. <br />
<br />
Ví dụ:<br />
Với hai mảng X = {1, 2, 3, 4} và Y = {5, 6, 7, 8}<br />
<br />
SUMX2MY2({1, 2, 3, 4}, {5, 6, 7, 8}) = -144<br />
<br />
= (1^2 - 5^2) + (2^2 - 6^2) + (3^2 - 7^2) + (4^2 - 8^2) = -144<br />
<br />
SUMX2PY2({1, 2, 3, 4}, {5, 6, 7, 8}) = 204<br />
<br />
= (1^2 + 5^2) + (2^2 + 6^2) + (3^2 + 7^2) + (4^2 + 8^2) = -204<br />
SUMXMY2({1, 2, 3, 4}, {5, 6, 7, 8}) = 64<br />
<br />
= (1 - 5)^2 + (2 - 6)^2 + (3 - 7)^2 + (4 - 8)^2 = 64]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Tổng hợp hàm xử lý văn bản và chuỗi ( Có ví dụ)]]></title>
			<link>https://thuthuataccess.com/forum/thread-9205.html</link>
			<pubDate>Sat, 16 Apr 2016 05:17:16 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-9205.html</guid>
			<description><![CDATA[<span style="text-decoration: underline;" class="mycode_u"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Các hàm xử lý chuỗi</span></span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Space (Num as Long)</span> 'trả về chuỗi chỉ toàn khoảng trống với số khoảng trống được ấn định bởi tham số Num<br />
VD: str = space (3) ---&gt; str = " "<br />
<br />
<span style="font-weight: bold;" class="mycode_b">String (Num as Long, character)</span> 'trả về một chuõi (theo dạng variant) gồm các ký tự lặp lại. Ký tự lặp lại là ký tự đầu của biểu thức chuổi được truyền ở tham số thứ hai của hàm (character). Tham số thứ nhất (Num) xác nhận số lần lặp lại.<br />
VD: str = string (5, "a") <br />
str = string (5, "abc")<br />
str = string (5, 97) <br />
cả 3 ví dụ này đều cho ra chuỗi "aaaaa"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Trim (String)</span> ' cắt các khoảng trống ở 2 đầu chuỗi<br />
VD: str = Trim (" Yêu em ") ----&gt; str = "Yeu em"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">LTrim (String)</span> ' cắt các khoảng trống ở đầu chuỗi<br />
<br />
<span style="font-weight: bold;" class="mycode_b">RTrim (String)</span> ' cắt các khoảng trống cuối chuõi<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Len ( )</span> ' trả về chiều dài của chuỗi bao gồm các khoảng trống và các ký tự<br />
VD: str = Len ("caulacboVB") ---&gt; str = 10<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Mid (string, start as Long, length)</span> ' trích từ tham số 1(string) một chuỗi ở vị trí bắt đầu được xác định bởi tham số 2(start), với số ký tự được qui định bởi tham số 3(length). Nếu bỏ wa tham số length thì hàm Mid sẽ trích đến hết chuỗi.<br />
VD: str = Mid ("caulacboVB", 1, 8) ---&gt; str = "caulacbo"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">InStr (start, string1, string2, compare)</span> ' trả về vị trí bắt đầu của một chuỗi con cần tìm trong một chuỗi mẹ. tham số 1(start) xác định vị trí bắt đầu tìm, tham sô 2(string1) là chuỗi mẹ, tham số 3(string2) là chuỗi cần tìm, tham số 4(compare) mặc định là so sánh nhạy ký tự.<br />
Khi bỏ wa tham số thứ nhất thì vị trí bắt đầu tìm mặc định là 1<br />
VD: pos = InStr ("caulacboVB", "VB") ---&gt; pos = 9 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">InStrRev (StringCheck as string, StringMatch as string, Start as Long, Compare)</span> ' chức năng như InStr nhưng InStrRev hoạt động ngược lại từ cuối chuỗi và cú pháp khác hơn. Cả hai hàm đều là hàm tìm kiếm nhạy ký tự nên cần chú ý chữ thường và chữ HOA. InStrRev thường kết hơp với Mid để tách một tên File khỏi đường dẫn và tên mở rộng.<br />
VD: <br />
PathFile = "C:\temp\001.tmp"<br />
Pos = InStrRev (pathFile, "\")<br />
PathFile = Mid (PathFile, Pos + 1)<br />
Pos = InStrRev (PathFile, ".")<br />
PathFile = Mid (PathFile, 1, Pos - 1) ---&gt;PathFile = "001"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Left (String, Length as Long)</span> ' trích từ đầu một chuỗi của tham số 1(String) với số lượng xác định bởi tham số 2(Length)<br />
VD: str = Left ("caulacboVB", 6) ---&gt; str = "caulac"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Right (String, Length as Long)</span> ' như Left nhưng trích ngược từ cuối chuỗi<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Replace (Expression as string, Find as string, Replace as string, start, count, compare)</span> ' tìm trong tham số thứ 1(Expression) một chuỗi xác định bởi tham số 2(Find) và thay thế bằng một chuỗi được đặt ở tham số 3(Replace). Ba tham số còn lại là tùy chọn. Start qui định vị trí bắt đầu tìm chuỗi cần được thay, nếu bỏ wa mặc định la 1. Count qui định số lần thay thế trong chuỗi, nếu bỏ wa mặc định Replace sẽ tìm và thay thế cho đến hết chuỗi.<br />
VD: str = "bcbcbc"<br />
tmp = Replace (str, "b", "a") ---&gt; str = "acacac"<br />
tmp = Replace (str, "b", "a", 2) ---&gt; str = "cacac"<br />
tmp = Replace (str, "b", "a", 1, 1) ---&gt; str = "acbcbc"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">StrComp (String1, String2, Compare)</span> ' dùng để so sánh 2 chuỗi.<br />
Trị trả về: (String1 &lt; String2) = -1; (String1 = String2) = 0; (String1 &gt; String2) = 1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Like</span> ' so sánh 2 chuỗi cho phép sử dụng biệt ngữ ( như dùng ký tự đại diện trong Dos) trị trả về = True nếu tương hợp<br />
VD: "abcd" Like "*bcd" = True <br />
"abcd" Like "a?cd" = True<br />
"a1cd" Like "a#cd" = True<br />
Chú ý hàm Like mặc định cũng là hàm nhạy ký tự, theo thiết lập Option Compare ở form hoặc module<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Chr(charcode as Long)</span> ' Chuyển mã Ascii thành ký tự<br />
VD:<br />
MyChar = Chr(65) ' Returns A.<br />
MyChar = Chr(97) ' Returns a.<br />
MyChar = Chr(62) ' Returns &gt;.<br />
MyChar = Chr(37) ' Returns %.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Asc(String as String)</span> ' trả về mã Ascii của ký tự<br />
VD: Asc ("a") = 65<br />
<br />
<span style="font-weight: bold;" class="mycode_b">ChrW(charcode)</span> ' Chuyển mã Ascii thành ký tự (Hỗ trợ Unicode)<br />
VD: ChrW(&amp;H1EC7) = “ệ”<br />
<br />
<span style="font-weight: bold;" class="mycode_b">AscW (string)</span> ' Chuyển ký tự thành mã Ascii (hỗ trợ Unicode)<br />
VD: AscW(“ệ”) = 7879 = H1EC7<br />
<br />
<span style="font-weight: bold;" class="mycode_b">LCase(String)</span> ' chuyển đổi chuỗi sang chữ in thường<br />
<br />
<span style="font-weight: bold;" class="mycode_b">UCase (String)</span> ' ngược với LCase<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Join (SourceArray, Delimiter)</span> ' tạo chuỗi mới từ một mảng chuỗi (SourceArray) với các phần tử được phân định bởi tham số Delimiter<br />
VD: Arr (0) = "a"<br />
Arr (1) = "b"<br />
Arr (2)= "c"<br />
Print Join (Arr, " ") = "a b c"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Split (Expression as String, Delimiter, Count, Compare)</span> ' tạo mảng chuỗi từ một chuỗi (Expression). Đặt tham số Delimiter để chuyên biệt chỗ ngắt, nếu bỏ wa tham số này mặc định Split sẽ tách tại các khoảng trống của chuỗi. Tham số Count qui định số lần tách. Ba tham số cuối là tùy chọn<br />
VD: Dim str as string, Arr as Variant<br />
str = "cau lac bo vb"<br />
Arr = Split (str) ' dùng For duyệt mảng Arr sẽ cho ra : Arr ( 0 ) = "cau"; Arr ( 1 ) = "lac" ...Arr ( 3 ) = "vb"<br />
Arr = Split (str, "a") ---&gt; Arr (0) = "c"; Arr (1) = "u l"; Arr (2) = "c bo vb"<br />
Arr = Split (str, " ", 2) ---&gt; Arr (0) = "cau"; Arr(1) = "lac bo vb" <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Filter (sourcearray, match [, include [, compare]])</span> ' Lọc mảng sourcesrray với giá trị lọc là match ; include: Lọc đảo (True hoặc False) ; compare: chỉ rõ kiểu dữ liệu để so sánh trong quá trình lọc.<br />
<span style="font-style: italic;" class="mycode_i">Dùng cho tham số compare</span><br />
vbUseCompareOption = –1 : Chế độ tùy chọn, VB sẽ tự động lựa lọai dữ liệu thích hợp<br />
vbBinaryCompare = 0 : So sánh nhị phân<br />
vbTextCompare = 1 : So sánh chuỗi<br />
vbDatabaseCompare = 2 : So sánh dữ liệu<br />
VD:<br />
Dim selNames() As String<br />
Dim Names(1 To 5) As String<br />
Names(1) = "A"<br />
Names(2) = "B"<br />
Names(3) = "C"<br />
Names(4) = "D"<br />
Names(5) = "E"<br />
selNames = Filter(Names, "A") ' Returns "A"<br />
selNames = Filter(Names, "B", False) 'Returns "A" , "C", "D", "E"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">StrReverse(expression as String)</span> ' Đảo chuỗi expression<br />
VD: StrReverse("1234567") ' Returns "7654321"<br />
<br />
<br />
Trên Excel dùng được và Access cũng thế.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Hàm ASC()</span><br />
<br />
Dùng để đổi các ký tự double-byte sang các ký tự single-byte cho những ngôn ngữ sử dụng bộ ký tự double-byte.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = ASC(text)<br />
<br />
text : Là chữ hoặc tham chiếu đến một ô có chứa chữ. Nếu text không chứa bất kỳ mẫu tự nào thuộc loại double-byte, thì text sẽ không được chuyển đổi. <br />
<br />
Ví dụ: <br />
= ASC("Excel") = Excel<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Hàm BAHTTEXT()</span><br />
<br />
Dùng để chuyển đổi một số thành dạng chữ của tiếng Thái, rồi thêm hậu tố "Bath" vào.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = BAHTTEXT(number)<br />
<br />
number : Là một số hoặc tham chiếu đến một ô có chứa số. <br />
<br />
Ví dụ:<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Hàm CHAR()</span><br />
<br />
Chuyển đổi một mã số trong bộ mã ANSI (có miền giá trị từ 1 - 255) sang ký tự tương ứng.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = CHAR(number)<br />
<br />
Number : là một mã số trong bảng mã ANSI.<br />
<br />
Ví dụ: Để kết quả có được là ký tự bản quyền ©, chúng ta nhập: = CHAR(169)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Hàm CLEAN</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Xóa tất cả những ký tự không in ra được (nonprintable characters) trong chuỗi văn bản<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =CLEAN(text)<br />
<br />
___text: chuỗi văn bản cần xóa những ký tự không in ra được <br />
<br />
Những ký tự không in ra được là những ký tự có mã số từ 1 đến 31 trong bảng mã ANSI. <br />
Hàm CLEAN() thường được dùng để gỡ bỏ những dấu ngắt đoạn, ngắt câu (có được do nhấn phím Enter), nghĩa là nối những đoạn bị xuống hàng lại với nhau.<br />
<br />
Ví dụ: Hình sau đây cho thấy công dụng của hàm CLEAN.<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Hàm CODE</span><br />
<br />
Hàm CODE() là ngược lại với hàm CHAR(), nghĩa là, cho 1 ký tự, CODE() sẽ cho biết mã số của ký tự đó. Nếu đối số của CODE() là một chuỗi, thì kết quả trả về sẽ là mã số của ký tự đầu tiên trong chuỗi đó.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = CODE(text)<br />
<br />
text : Là một ký tự hoặc một chuỗi (một câu)<br />
<br />
Ví dụ: <br />
<br />
CODE("a") = 97<br />
CODE("A") = 65<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Hàm CONCATENATE</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng nối nhiều chuỗi lại với nhau<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =CONCATENATE(text1,text2,...)<br />
<br />
Ví dụ: =CONCATENATE("Giải pháp", "Excel", " - ", "Công cụ tuyệt vời của bạn) → Giải pháp Excel - Công cụ tuyệt vời của bạn<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">8. Hàm EXACT</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để so sánh hai chuỗi với nhau. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =EXACT(text1,text2)<br />
<br />
Hàm EXACT phân biệt chữ thường và chữ hoa.<br />
<br />
Nếu 2 chuỗi text1, text2 giống nhau hoàn toàn, hàm sẽ trả về TRUE; nếu không, sẽ trả về trị FALSE<br />
<br />
<br />
Ví dụ: <br />
<br />
=EXACT("Giải pháp", "Giải pháp") → TRUE<br />
=EXACT("Giải pháp", "Giải Pháp") → FALSE<br />
<br />
<span style="font-weight: bold;" class="mycode_b">9. Hàm T</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Trả về một chuỗi nếu trị tham chiếu là chuỗi, ngược lại, sẽ trả về chuỗi rỗng<br />
<br />
Công thức: =T(value)<br />
<br />
Hàm này ít khi được dùng.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">10. Hàm VALUE</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để đổi một chuỗi đại diện cho một số thành kiểu số<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =VALUE(text)<br />
<br />
text phải là định dạng số, ngày tháng hoặc bất kỳ một thời gian nào miễn là được Excel công nhận. <br />
<br />
Nếu 2 chuỗi text1, text2 giống nhau hoàn toàn, hàm sẽ trả về TRUE; nếu không, sẽ trả về trị FALSE<br />
<br />
<br />
Ví dụ:<br />
Để trích ra số 6500 trong SQA6500, bạn có thể dùng hàm RIGHT()<br />
=RIGHT("SQA6500", 4) → 6500<br />
<br />
Tuy nhiên kết quả do hàm RIGHT() có được sẽ ở dạng text, bạn không thể nhân chia cộng trừ gì với cái "6500" này được.<br />
<br />
Để có thể tính toán với "6500", bạn phải đổi nó sang dạng số:<br />
<br />
=VALUE(RIGHT("SQA6500",4)) → 6500<br />
<br />
Cũng là 6500, nhưng bây giờ bạn có thể cộng trừ nhân chia với nó.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">11. Hàm DOLLAR</span><br />
<br />
Chuyển đổi một số thành dạng tiền tệ (dollar Mỹ), có kèm theo dấu phân cách hàng ngàn, và có thể làm tròn theo ý muốn.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = DOLLAR(number, decimals) <br />
<br />
Number : Số cần chuyển sang dạng tiền tệ<br />
<br />
Decimals : Số số thập phân, mặc định là 2, nếu là số âm thì sẽ làm tròn về bên trái<br />
<br />
Ví dụ: <br />
= "Tổng chi phí ngoại tệ của năm 2007 là " &amp; DOLLAR(1500670000, 0) → Tổng chi phí ngoại tệ của năm 2007 là &#36;1,500,670,000<br />
Ở đây, số tiền này đã được định dạng thành số nguyên (decimals = 0).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">12. Hàm FIND và Hàm SEARCH</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để tìm vị trí bắt đầu của một chuỗi con (substring) trong một chuỗi <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span><br />
<br />
__ =FIND(find_text, within_text [, start_num])<br />
<br />
__ =SEARCH(find_text, within_text [, start_num])<br />
<br />
___find_text: chuỗi văn bản cần tìm (chuỗi con)<br />
<br />
___within_text: chuỗi văn bản chứa chuỗi cần tìm (chuỗi mẹ)<br />
<br />
___start_num: vị trí bắt đầu tìm trong chuỗi within_text (mặc định là 1)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Một số lưu ý:</span><br />
<br />
- Kết quả của hai hàm này là một con số, chỉ vị trí bắt đầu (tính từ start_num) của find_text trong within_text<br />
<br />
- Dùng SEARCH() khi muốn tìm một chuỗi bất kỳ. Ví dụ: SEARCH(“e”, “Expenses”) sẽ cho kết quả là 1.<br />
<br />
- Dùng FIND() khi muốn tìm chính xác một chuỗi có phân biệt chữ hoa, chữ thường. Ví dụ: FIND(“e”, “Expenses”) sẽ cho kết quả là 4. <br />
<br />
- Nếu không tìm thấy find_text, hàm sẽ báo lỗi #VALUE<br />
<br />
- Có thể dùng những ký tự đại diện như *, ? trong find_text của hàm SEARCH()<br />
<br />
- Với hàm SEARCH(), nếu muốn tìm chính ký tự * hoặc ? thì gõ dấu ~ trước ký tự đó ( ~* hoặc là ~?)<br />
<br />
Trích xuất họ và tên (ví dụ dùng để trích cho tên tiếng Anh, bỏ qua tên đệm)<br />
<br />
Đây là dạng bài toán đã được rất nhiều bạn hỏi trên GPE.<br />
<br />
Cách làm là dùng hàm FIND() để tìm những khoảng trắng phân cách giữa họ và tên, sau đó dùng hàm LEFT() để tách phần tên, và hàm RIGHT() để tách phần họ.<br />
<br />
Để lấy phần tên (First Name), chúng ta dùng công thức sau (giả sử họ tên nằm ở cell A2):<br />
=LEFT(A2, FIND(" ", A2) - 1)<br />
<br />
Nghĩa là dùng hàm FIND() để tìm vị trí của ký tự trắng đầu tiên kể từ bên trái, ví dụ nó là vị trí thứ 5, <br />
khi đó hàm LEFT() sẽ xác định được cái tên này gồm có 4 chữ (= 5-1).<br />
<br />
Để lấy phần họ (Last Name), chúng ta dùng công thức:<br />
=RIGHT(A2, LEN(A2) - FIND(" ", A2))<br />
<br />
Bạn tự dịch câu này nhé!<br />
<br />
Hình sau đây là một số ví dụ của bài vừa rồi.<br />
<br />
undefined<br />
<br />
Công thức ở D2: =RIGHT(A2, LEN(A2) - FIND(" ", A2)) &amp; ", " &amp; LEFT(A2, FIND(" ", A2) - 1)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">13. Hàm FIXED</span><br />
<br />
Công dụng: Chuyển đổi một số thành dạng văn bản (text), có hoặc không kèm theo dấu phân cách hàng ngàn, và có thể làm tròn theo ý muốn.<br />
<br />
Công thức: =FIXED(number [,decimals] [,no_commas])<br />
___number là số cần chuyển sang dạng text<br />
___decimals là số số thập phân, mặc định là 2, nếu là số âm thì sẽ làm tròn về bên trái<br />
___no_commas: TRUE hoặc FALSE, dùng TRUE nếu không muốn có dấu phân cách hàng ngàn, và FALSE (mặc định) thì có bao gồm cả dấu phân cách hàng ngàn<br />
<br />
Bài tập: Bạn thử dùng hàm FIXED với con số 123456789,85 để ra lập công thức cho ra kết quả giống như cột B nhé.<br />
<br />
undefined<br />
<br />
HÀM TRÍCH XUẤT KÝ TỰ HOẶC CHUỖI (Extracting a Substring) <br />
<br />
--------------------------------------------------------------------------------<br />
<br />
Một giá trị chuỗi có thể bao gồm nhiều chuỗi nhỏ hoặc nhiều từ đơn lẻ. <br />
Ví dụ trong một cột chứa Họ và Tên, có thể bạn chỉ muốn lọc ra Họ mà thôi, hoặc Tên mà thôi, để sắp xếp chẳng hạn; <br />
hoặc có thể bạn muốn trích ra vài ký tự đầu trong một danh sách hàng hóa, để dựa vào đó làm ra mã số hàng hóa, v.v...<br />
<br />
Excel cung cấp cho bạn 3 hàm sau đây, chuyên để trích xuất 1 từ, 1 chữ hoặc nhiều từ, nhiều chữ từ một chuỗi có sẵn: Hàm LEFT, RIGHT và MID.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">14. Hàm LEFT</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để trích xuất phần bên trái của một chuỗi một hoặc nhiều ký tự tùy theo sự chỉ định của bạn<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =LEFT(text [,num_chars])<br />
<br />
___text: chuỗi văn bản cần trích xuất ký tự<br />
___num_chars: số ký tự cần trích ra phía bên trái chuỗi text, mặc định là 1<br />
<br />
- num_chars phải là số nguyên dương<br />
- Nếu num_chars lớn hơn độ dài của chuỗi thì kết quả trả về sẽ là toàn bộ chuỗi text<br />
<br />
<br />
Ví dụ:___=LEFT(“Karen Elizabeth Hammond”, 5) → Karen<br />
<br />
<span style="font-weight: bold;" class="mycode_b">15. Hàm TRIM</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Xóa tất cả những khoảng trắng vô ích trong chuỗi văn bản, chỉ chừa lại những khoảng trắng nào dùng làm dấu cách giữa hai chữ.<br />
Những khoảng trắng vô ích này có thể nằm ở bất kỳ đâu trong đoạn văn: ở đầu, ở cuối hoặc ở giữa...<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =TRIM(text)<br />
___text: chuỗi văn bản cần xóa những khoảng trắng vô ích<br />
<br />
<br />
Ví dụ: Hình sau đây cho thấy công dụng của hàm TRIM. <br />
Mỗi chuỗi văn bản trong khối A2:A7 đều có những khoảng trắng vô ích, nằm ở đầu, ở giữa hoặc ở cuối. <br />
Tôi đặt hàm TRIM ở cột C. <br />
Để các bạn thấy công dụng của hàm TRIM, tôi có dùng thêm hàm LEN() đặt ở cột B và D, để đếm số ký tự trong chuỗi trước và sau khi thực hiện hàm TRIM<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">16. Hàm LEN</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để đếm số ký tự trong một chuỗi văn bản<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =LEN(text)<br />
<br />
___text: chuỗi văn bản mà bạn cần đếm số ký tự có trong đó<br />
<br />
<span style="font-weight: bold;" class="mycode_b">17. Hàm LOWER</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Hàm LOWER đổi tất cả các ký tự trong một chuỗi văn bản thành chữ thường.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =LOWER(text)<br />
<br />
___với text là một chuỗi, hoặc tham chiếu đến một chuỗi cần định dạng<br />
<br />
<br />
Ví dụ: Công thức sau đây sẽ sửa cell A2 (Giải pháp Excel) thành toàn là chữ thường<br />
=LOWER(A2) → giải pháp excel<br />
Hàm LOWER thường được dùng khi bạn cần định dạng lại một câu văn (thường là do chép ở đâu đó dán vào trong Excel) mà trong đó, chữ thường chữ hoa được gõ hoặc bị thay đổi lung tung...<br />
<br />
<span style="font-weight: bold;" class="mycode_b">18. Hàm MID</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để trích xuất một chuỗi con (substring) từ một chuỗi <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =MID(text, start_num, num_chars])<br />
<br />
___text: chuỗi văn bản cần trích xuất<br />
___start_num: vị trí bắt đầu trích ra chuỗi con, tính từ bên trái sang<br />
___num_chars: số ký tự của chuỗi con cần trích ra<br />
<br />
- num_chars phải là số nguyên dương<br />
- start_num phải là số nguyên dương<br />
- Nếu start_num lớn hơn độ dài của chuỗi thì kết quả trả về sẽ là chuỗi rỗng<br />
<br />
<br />
Ví dụ:___=MID(“Karen Elizabeth Hammond”, 7, 9) → Elizabeth<br />
<br />
<span style="font-weight: bold;" class="mycode_b">19. Hàm PROPER</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Hàm PROPER đổi ký tự đầu tiên trong một chữ của một chuỗi văn bản thành chữ in hoa, còn tất cả các ký tự còn lại trong chuỗi đó trở thành chữ thường.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =PROPER(text)<br />
<br />
___với text là một chuỗi, hoặc tham chiếu đến một chuỗi cần định dạng<br />
<br />
<br />
Ví dụ: Công thức sau đây sẽ định dạng lại chuỗi văn bản cell A7 (công cụ tuyệt vời của bạn) theo kiểu Proper<br />
=PROPER(A7) → Công Cụ Tuyệt Vời Của Bạn<br />
<br />
<span style="font-weight: bold;" class="mycode_b">20. Hàm REPLACE</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để thay thế một phần của chuỗi bằng một chuỗi khác, dựa vào số ký tự được chỉ định<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =REPLACE(old_text, start_num, num_chars, new_text)<br />
<br />
___old_text: chuỗi văn bản cần được xử lý<br />
___start_num: vị trí bắt đầu tìm cái sẽ thay thế, tính từ bên trái sang<br />
___num_chars: số ký tự của chuỗi cần được thay thế<br />
___new_text: chuỗi văn bản sẽ thay thế cho số ký tự đã chọn bởi start_num và num_chars <br />
<br />
Cái khó của hàm này là xác định được bởi start_num và num_chars. Làm sao biết được bắt đầu từ đâu và thay thế bao nhiêu chữ? Tôi gợi ý nhé:<br />
<br />
- Bạn dùng hàm FIND() hoặc SEARCH() để xác định vị trí bắt đầu (start_num)<br />
<br />
- Dùng hàm LEN() để xác định số ký tự của chuỗi sẽ được thay thế (num_chars)<br />
<br />
Ví dụ: đế thay số 2007 bằng 2008 trong câu Expense Budget for 2007<br />
<br />
Dùng công thức như sau:<br />
<br />
=REPLACE(A1, FIND("2007", A1), LEN("2007"), "2008")→ Expense Budget for 2008<br />
Với A1 = Expense Budget for 2007<br />
<br />
<span style="font-weight: bold;" class="mycode_b">21. Hàm REPT</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để lập đi lập lại (nhân bản) một ký tự hoặc một từ, với số lần được định trước.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =REPT(text, times)<br />
<br />
___text: ký tự (character), một con số hoặc một từ (string) cần được nhân bản<br />
___times: số lần lập đi lập lại của text<br />
<br />
- Nếu times = 0, hàm REPT() sẽ trả về một chuỗi rỗng<br />
- Nếu text là một con số, REPT() sẽ làm tròn con số đó thành số nguyên<br />
<br />
Điền thêm dấu chấm cuối hàng<br />
<br />
Mời bạn xem hình sau:<br />
<br />
undefined<br />
<br />
Bạn sẽ nghĩ tôi dùng cách "căn đều hai biên" cho mấy cái cell ở cột B ?<br />
<br />
Không đâu, tôi dùng hàm REPT() đấy. Tại B1, tôi gõ công thức:<br />
<br />
=A1 &amp; REPT(“.”, 20 - LEN(A1))<br />
<br />
Rồi tôi kéo công thức xuống tới B5.<br />
Bạn có thể thay con số 20 bằng số khác, tùy vào bạn muốn độ rộng của cột B là bao nhiêu...<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Làm biểu đồ bằng hàm REPT</span><br />
<br />
Mặc dù Excel 2007 đã có những biểu đồ rất đẹp (làm bằng Conditional Formating), <br />
tuy nhiên, chúng ta có thể áp dụng hàm REPT() để làm chuyện này. <br />
<br />
Mời bạn xem hình sau, và để ý công thức ở cell C12 nhé<br />
<br />
undefined<br />
<br />
Thêm một biểu đồ nữa:<br />
<br />
undefined<br />
<br />
Để làm được cái biểu đồ như thế này, tôi dùng font Webbings (một loại font symbol), chọn ký tự tương ứng trên bàn phím là "g", vì nó có hình dạng giống như một khối vuông; rồi tô màu xanh nhạt.<br />
Đế lấy trị giá times cho hàm REPT(), tôi nhân giá trị phần trăm bên cột B cho 100, và để cho mấy "bar" này không quá lớn, tôi chia giá trị đó cho 5.<br />
Và kết quả là như cái hình bạn đang xem đó.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">22. Hàm RIGHT</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để trích xuất phần bên phải của một chuỗi một hoặc nhiều ký tự tùy theo sự chỉ định của bạn<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =RIGHT(text [,num_chars])<br />
<br />
___text: chuỗi văn bản cần trích xuất ký tự<br />
___num_chars: số ký tự cần trích ra phía bên phải của chuỗi text, mặc định là 1<br />
<br />
- num_chars phải là số nguyên dương<br />
- Nếu num_chars lớn hơn độ dài của chuỗi thì kết quả trả về sẽ là toàn bộ chuỗi text<br />
<br />
Ví dụ:___=RIGHT(“Karen Elizabeth Hammond”, 7) → Hammond<br />
<br />
<span style="font-weight: bold;" class="mycode_b">23. Hàm SUBSTITUTE</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để thay thế một chuỗi này bằng một chuỗi khác. Hàm này cũng tương tự hàm REPLACE(), nhưng dễ sử dụng hơn.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =SUBSTITUTE(text, old_text, new_text [,instance_num])<br />
___text: chuỗi văn bản gốc, cần được xử lý<br />
___old_text: chuỗi văn bản cần được thay thế<br />
___new_text: chuỗi văn bản sẽ thay thế vào<br />
___instance_num: số lần thay thế old_text bằng new_text, nếu bỏ qua thì tất cả old_text tìm được sẽ được thay thế bằng new_text<br />
<br />
Ví dụ: Để thay số 2007 bằng 2008 trong câu Expense Budget for 2007<br />
<br />
Dùng công thức như sau:<br />
=SUBSTITUTE("Expense Budget for 2007", "2007", "2008") → Expense Budget for 2008<br />
<br />
<span style="font-weight: bold;" class="mycode_b">24. Hàm TEXT</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Chuyển đổi một số thành dạng văn bản (text) theo định dạng được chỉ định<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =TEXT(number,format)<br />
<br />
___number là số cần chuyển sang dạng text<br />
___format: kiểu định dạng số hoặc ngày tháng năm<br />
<br />
<br />
Ví dụ: Công thức sau sẽ dùng hàm AVERAGE() để tính số trung bình của mảng cell A1:A31, và dùng hàm TEXT để chuyển đổi kết quả ra dạng nhiệt độ<br />
=”Nhiệt độ trung bình của lò phản ứng là “ &amp; TEXT(AVERAGE(A1:A31), “#,##0.00°F”) → Nhiệt độ trung bình của lò phản ứng là 7,560.00°F<br />
<br />
Thể hiện thời gian cập nhật bảng tính lần sau cùng<br />
Có bao giờ bạn muốn biết được lần cuối cùng bảng tính này có thay đổi là khi nào không?<br />
<br />
Một trong những cách làm là đặt chế độ tính toán của Excel là thủ công (manual calculation mode) và sử dụng hàm NOW() trong một cell nào đó (hàm này cho ra kết quả là ngày giờ hiện tại). <br />
<br />
Như vậy, hàm NOW() sẽ không tự cập nhật trừ phi bảng tính được lưu (save), hoặc được tính toán lại (recalculate), và nhờ đó mà bạn luôn biết được lần cuối cùng bảng tính này có thay đổi là khi nào.<br />
<br />
Ví dụ, bạn dùng công thức:<br />
=”This workbook last updated: “ &amp; NOW()<br />
Tuy nhiên, nếu chỉ có chừng đó, thì e rằng kết quả bạn nhận được sẽ không như ý, vì có thể nó sẽ là như thế này:<br />
This workbook last updated: 38572.51001<br />
Do Excel luôn hiểu ngày và giờ là một con số, cho nên con số này: 38572.51001 được hiểu là: con số phía bên trái của dấu phân cách (38572) là số chỉ ngày, và con số phía bên phải của dấu phân cách (51001) là số chỉ giờ... Chỉ có ai rành lắm mới may ra đọc và hiểu được!<br />
<br />
Vì vậy, ta nên sửa công thức trên bằng cách dùng hàm TEXT để định dạng nó ra kiểu ngày giờ đàng hoàng, chẳng hạn kiểu DD/MM/YYYY HH:MM<br />
=”This workbook last updated: “ &amp; TEXT(NOW(), “dd/mm/yy hh:mm”) → This workbook last updated: 08/08/2005 12:14:00 PM<br />
<br />
<span style="font-weight: bold;" class="mycode_b">25. Hàm UPPER</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Hàm UPPER đổi tất cả các ký tự trong một chuỗi văn bản thành chữ in hoa.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> = UPPER(text)<br />
<br />
___với text là một chuỗi, hoặc tham chiếu đến một chuỗi cần định dạng<br />
<br />
<br />
Ví dụ: <br />
Công thức sau đây sẽ nối chuỗi văn bản trong cell A5 (Giải pháp) và cell B5 (Excel) lại với nhau, ở giữa có một dấu cách, tất cả ký tự cell mới toàn là chữ in hoa.<br />
=UPPER(A5) &amp; " " &amp; UPPER(B5) → GIẢI PHÁP EXCEL]]></description>
			<content:encoded><![CDATA[<span style="text-decoration: underline;" class="mycode_u"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Các hàm xử lý chuỗi</span></span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Space (Num as Long)</span> 'trả về chuỗi chỉ toàn khoảng trống với số khoảng trống được ấn định bởi tham số Num<br />
VD: str = space (3) ---&gt; str = " "<br />
<br />
<span style="font-weight: bold;" class="mycode_b">String (Num as Long, character)</span> 'trả về một chuõi (theo dạng variant) gồm các ký tự lặp lại. Ký tự lặp lại là ký tự đầu của biểu thức chuổi được truyền ở tham số thứ hai của hàm (character). Tham số thứ nhất (Num) xác nhận số lần lặp lại.<br />
VD: str = string (5, "a") <br />
str = string (5, "abc")<br />
str = string (5, 97) <br />
cả 3 ví dụ này đều cho ra chuỗi "aaaaa"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Trim (String)</span> ' cắt các khoảng trống ở 2 đầu chuỗi<br />
VD: str = Trim (" Yêu em ") ----&gt; str = "Yeu em"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">LTrim (String)</span> ' cắt các khoảng trống ở đầu chuỗi<br />
<br />
<span style="font-weight: bold;" class="mycode_b">RTrim (String)</span> ' cắt các khoảng trống cuối chuõi<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Len ( )</span> ' trả về chiều dài của chuỗi bao gồm các khoảng trống và các ký tự<br />
VD: str = Len ("caulacboVB") ---&gt; str = 10<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Mid (string, start as Long, length)</span> ' trích từ tham số 1(string) một chuỗi ở vị trí bắt đầu được xác định bởi tham số 2(start), với số ký tự được qui định bởi tham số 3(length). Nếu bỏ wa tham số length thì hàm Mid sẽ trích đến hết chuỗi.<br />
VD: str = Mid ("caulacboVB", 1, 8) ---&gt; str = "caulacbo"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">InStr (start, string1, string2, compare)</span> ' trả về vị trí bắt đầu của một chuỗi con cần tìm trong một chuỗi mẹ. tham số 1(start) xác định vị trí bắt đầu tìm, tham sô 2(string1) là chuỗi mẹ, tham số 3(string2) là chuỗi cần tìm, tham số 4(compare) mặc định là so sánh nhạy ký tự.<br />
Khi bỏ wa tham số thứ nhất thì vị trí bắt đầu tìm mặc định là 1<br />
VD: pos = InStr ("caulacboVB", "VB") ---&gt; pos = 9 <br />
<br />
<span style="font-weight: bold;" class="mycode_b">InStrRev (StringCheck as string, StringMatch as string, Start as Long, Compare)</span> ' chức năng như InStr nhưng InStrRev hoạt động ngược lại từ cuối chuỗi và cú pháp khác hơn. Cả hai hàm đều là hàm tìm kiếm nhạy ký tự nên cần chú ý chữ thường và chữ HOA. InStrRev thường kết hơp với Mid để tách một tên File khỏi đường dẫn và tên mở rộng.<br />
VD: <br />
PathFile = "C:\temp\001.tmp"<br />
Pos = InStrRev (pathFile, "\")<br />
PathFile = Mid (PathFile, Pos + 1)<br />
Pos = InStrRev (PathFile, ".")<br />
PathFile = Mid (PathFile, 1, Pos - 1) ---&gt;PathFile = "001"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Left (String, Length as Long)</span> ' trích từ đầu một chuỗi của tham số 1(String) với số lượng xác định bởi tham số 2(Length)<br />
VD: str = Left ("caulacboVB", 6) ---&gt; str = "caulac"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Right (String, Length as Long)</span> ' như Left nhưng trích ngược từ cuối chuỗi<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Replace (Expression as string, Find as string, Replace as string, start, count, compare)</span> ' tìm trong tham số thứ 1(Expression) một chuỗi xác định bởi tham số 2(Find) và thay thế bằng một chuỗi được đặt ở tham số 3(Replace). Ba tham số còn lại là tùy chọn. Start qui định vị trí bắt đầu tìm chuỗi cần được thay, nếu bỏ wa mặc định la 1. Count qui định số lần thay thế trong chuỗi, nếu bỏ wa mặc định Replace sẽ tìm và thay thế cho đến hết chuỗi.<br />
VD: str = "bcbcbc"<br />
tmp = Replace (str, "b", "a") ---&gt; str = "acacac"<br />
tmp = Replace (str, "b", "a", 2) ---&gt; str = "cacac"<br />
tmp = Replace (str, "b", "a", 1, 1) ---&gt; str = "acbcbc"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">StrComp (String1, String2, Compare)</span> ' dùng để so sánh 2 chuỗi.<br />
Trị trả về: (String1 &lt; String2) = -1; (String1 = String2) = 0; (String1 &gt; String2) = 1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Like</span> ' so sánh 2 chuỗi cho phép sử dụng biệt ngữ ( như dùng ký tự đại diện trong Dos) trị trả về = True nếu tương hợp<br />
VD: "abcd" Like "*bcd" = True <br />
"abcd" Like "a?cd" = True<br />
"a1cd" Like "a#cd" = True<br />
Chú ý hàm Like mặc định cũng là hàm nhạy ký tự, theo thiết lập Option Compare ở form hoặc module<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Chr(charcode as Long)</span> ' Chuyển mã Ascii thành ký tự<br />
VD:<br />
MyChar = Chr(65) ' Returns A.<br />
MyChar = Chr(97) ' Returns a.<br />
MyChar = Chr(62) ' Returns &gt;.<br />
MyChar = Chr(37) ' Returns %.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Asc(String as String)</span> ' trả về mã Ascii của ký tự<br />
VD: Asc ("a") = 65<br />
<br />
<span style="font-weight: bold;" class="mycode_b">ChrW(charcode)</span> ' Chuyển mã Ascii thành ký tự (Hỗ trợ Unicode)<br />
VD: ChrW(&amp;H1EC7) = “ệ”<br />
<br />
<span style="font-weight: bold;" class="mycode_b">AscW (string)</span> ' Chuyển ký tự thành mã Ascii (hỗ trợ Unicode)<br />
VD: AscW(“ệ”) = 7879 = H1EC7<br />
<br />
<span style="font-weight: bold;" class="mycode_b">LCase(String)</span> ' chuyển đổi chuỗi sang chữ in thường<br />
<br />
<span style="font-weight: bold;" class="mycode_b">UCase (String)</span> ' ngược với LCase<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Join (SourceArray, Delimiter)</span> ' tạo chuỗi mới từ một mảng chuỗi (SourceArray) với các phần tử được phân định bởi tham số Delimiter<br />
VD: Arr (0) = "a"<br />
Arr (1) = "b"<br />
Arr (2)= "c"<br />
Print Join (Arr, " ") = "a b c"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Split (Expression as String, Delimiter, Count, Compare)</span> ' tạo mảng chuỗi từ một chuỗi (Expression). Đặt tham số Delimiter để chuyên biệt chỗ ngắt, nếu bỏ wa tham số này mặc định Split sẽ tách tại các khoảng trống của chuỗi. Tham số Count qui định số lần tách. Ba tham số cuối là tùy chọn<br />
VD: Dim str as string, Arr as Variant<br />
str = "cau lac bo vb"<br />
Arr = Split (str) ' dùng For duyệt mảng Arr sẽ cho ra : Arr ( 0 ) = "cau"; Arr ( 1 ) = "lac" ...Arr ( 3 ) = "vb"<br />
Arr = Split (str, "a") ---&gt; Arr (0) = "c"; Arr (1) = "u l"; Arr (2) = "c bo vb"<br />
Arr = Split (str, " ", 2) ---&gt; Arr (0) = "cau"; Arr(1) = "lac bo vb" <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Filter (sourcearray, match [, include [, compare]])</span> ' Lọc mảng sourcesrray với giá trị lọc là match ; include: Lọc đảo (True hoặc False) ; compare: chỉ rõ kiểu dữ liệu để so sánh trong quá trình lọc.<br />
<span style="font-style: italic;" class="mycode_i">Dùng cho tham số compare</span><br />
vbUseCompareOption = –1 : Chế độ tùy chọn, VB sẽ tự động lựa lọai dữ liệu thích hợp<br />
vbBinaryCompare = 0 : So sánh nhị phân<br />
vbTextCompare = 1 : So sánh chuỗi<br />
vbDatabaseCompare = 2 : So sánh dữ liệu<br />
VD:<br />
Dim selNames() As String<br />
Dim Names(1 To 5) As String<br />
Names(1) = "A"<br />
Names(2) = "B"<br />
Names(3) = "C"<br />
Names(4) = "D"<br />
Names(5) = "E"<br />
selNames = Filter(Names, "A") ' Returns "A"<br />
selNames = Filter(Names, "B", False) 'Returns "A" , "C", "D", "E"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">StrReverse(expression as String)</span> ' Đảo chuỗi expression<br />
VD: StrReverse("1234567") ' Returns "7654321"<br />
<br />
<br />
Trên Excel dùng được và Access cũng thế.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Hàm ASC()</span><br />
<br />
Dùng để đổi các ký tự double-byte sang các ký tự single-byte cho những ngôn ngữ sử dụng bộ ký tự double-byte.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = ASC(text)<br />
<br />
text : Là chữ hoặc tham chiếu đến một ô có chứa chữ. Nếu text không chứa bất kỳ mẫu tự nào thuộc loại double-byte, thì text sẽ không được chuyển đổi. <br />
<br />
Ví dụ: <br />
= ASC("Excel") = Excel<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Hàm BAHTTEXT()</span><br />
<br />
Dùng để chuyển đổi một số thành dạng chữ của tiếng Thái, rồi thêm hậu tố "Bath" vào.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = BAHTTEXT(number)<br />
<br />
number : Là một số hoặc tham chiếu đến một ô có chứa số. <br />
<br />
Ví dụ:<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Hàm CHAR()</span><br />
<br />
Chuyển đổi một mã số trong bộ mã ANSI (có miền giá trị từ 1 - 255) sang ký tự tương ứng.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = CHAR(number)<br />
<br />
Number : là một mã số trong bảng mã ANSI.<br />
<br />
Ví dụ: Để kết quả có được là ký tự bản quyền ©, chúng ta nhập: = CHAR(169)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Hàm CLEAN</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Xóa tất cả những ký tự không in ra được (nonprintable characters) trong chuỗi văn bản<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =CLEAN(text)<br />
<br />
___text: chuỗi văn bản cần xóa những ký tự không in ra được <br />
<br />
Những ký tự không in ra được là những ký tự có mã số từ 1 đến 31 trong bảng mã ANSI. <br />
Hàm CLEAN() thường được dùng để gỡ bỏ những dấu ngắt đoạn, ngắt câu (có được do nhấn phím Enter), nghĩa là nối những đoạn bị xuống hàng lại với nhau.<br />
<br />
Ví dụ: Hình sau đây cho thấy công dụng của hàm CLEAN.<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Hàm CODE</span><br />
<br />
Hàm CODE() là ngược lại với hàm CHAR(), nghĩa là, cho 1 ký tự, CODE() sẽ cho biết mã số của ký tự đó. Nếu đối số của CODE() là một chuỗi, thì kết quả trả về sẽ là mã số của ký tự đầu tiên trong chuỗi đó.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = CODE(text)<br />
<br />
text : Là một ký tự hoặc một chuỗi (một câu)<br />
<br />
Ví dụ: <br />
<br />
CODE("a") = 97<br />
CODE("A") = 65<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Hàm CONCATENATE</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng nối nhiều chuỗi lại với nhau<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =CONCATENATE(text1,text2,...)<br />
<br />
Ví dụ: =CONCATENATE("Giải pháp", "Excel", " - ", "Công cụ tuyệt vời của bạn) → Giải pháp Excel - Công cụ tuyệt vời của bạn<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">8. Hàm EXACT</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để so sánh hai chuỗi với nhau. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =EXACT(text1,text2)<br />
<br />
Hàm EXACT phân biệt chữ thường và chữ hoa.<br />
<br />
Nếu 2 chuỗi text1, text2 giống nhau hoàn toàn, hàm sẽ trả về TRUE; nếu không, sẽ trả về trị FALSE<br />
<br />
<br />
Ví dụ: <br />
<br />
=EXACT("Giải pháp", "Giải pháp") → TRUE<br />
=EXACT("Giải pháp", "Giải Pháp") → FALSE<br />
<br />
<span style="font-weight: bold;" class="mycode_b">9. Hàm T</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Trả về một chuỗi nếu trị tham chiếu là chuỗi, ngược lại, sẽ trả về chuỗi rỗng<br />
<br />
Công thức: =T(value)<br />
<br />
Hàm này ít khi được dùng.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">10. Hàm VALUE</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để đổi một chuỗi đại diện cho một số thành kiểu số<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =VALUE(text)<br />
<br />
text phải là định dạng số, ngày tháng hoặc bất kỳ một thời gian nào miễn là được Excel công nhận. <br />
<br />
Nếu 2 chuỗi text1, text2 giống nhau hoàn toàn, hàm sẽ trả về TRUE; nếu không, sẽ trả về trị FALSE<br />
<br />
<br />
Ví dụ:<br />
Để trích ra số 6500 trong SQA6500, bạn có thể dùng hàm RIGHT()<br />
=RIGHT("SQA6500", 4) → 6500<br />
<br />
Tuy nhiên kết quả do hàm RIGHT() có được sẽ ở dạng text, bạn không thể nhân chia cộng trừ gì với cái "6500" này được.<br />
<br />
Để có thể tính toán với "6500", bạn phải đổi nó sang dạng số:<br />
<br />
=VALUE(RIGHT("SQA6500",4)) → 6500<br />
<br />
Cũng là 6500, nhưng bây giờ bạn có thể cộng trừ nhân chia với nó.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">11. Hàm DOLLAR</span><br />
<br />
Chuyển đổi một số thành dạng tiền tệ (dollar Mỹ), có kèm theo dấu phân cách hàng ngàn, và có thể làm tròn theo ý muốn.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = DOLLAR(number, decimals) <br />
<br />
Number : Số cần chuyển sang dạng tiền tệ<br />
<br />
Decimals : Số số thập phân, mặc định là 2, nếu là số âm thì sẽ làm tròn về bên trái<br />
<br />
Ví dụ: <br />
= "Tổng chi phí ngoại tệ của năm 2007 là " &amp; DOLLAR(1500670000, 0) → Tổng chi phí ngoại tệ của năm 2007 là &#36;1,500,670,000<br />
Ở đây, số tiền này đã được định dạng thành số nguyên (decimals = 0).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">12. Hàm FIND và Hàm SEARCH</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để tìm vị trí bắt đầu của một chuỗi con (substring) trong một chuỗi <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span><br />
<br />
__ =FIND(find_text, within_text [, start_num])<br />
<br />
__ =SEARCH(find_text, within_text [, start_num])<br />
<br />
___find_text: chuỗi văn bản cần tìm (chuỗi con)<br />
<br />
___within_text: chuỗi văn bản chứa chuỗi cần tìm (chuỗi mẹ)<br />
<br />
___start_num: vị trí bắt đầu tìm trong chuỗi within_text (mặc định là 1)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Một số lưu ý:</span><br />
<br />
- Kết quả của hai hàm này là một con số, chỉ vị trí bắt đầu (tính từ start_num) của find_text trong within_text<br />
<br />
- Dùng SEARCH() khi muốn tìm một chuỗi bất kỳ. Ví dụ: SEARCH(“e”, “Expenses”) sẽ cho kết quả là 1.<br />
<br />
- Dùng FIND() khi muốn tìm chính xác một chuỗi có phân biệt chữ hoa, chữ thường. Ví dụ: FIND(“e”, “Expenses”) sẽ cho kết quả là 4. <br />
<br />
- Nếu không tìm thấy find_text, hàm sẽ báo lỗi #VALUE<br />
<br />
- Có thể dùng những ký tự đại diện như *, ? trong find_text của hàm SEARCH()<br />
<br />
- Với hàm SEARCH(), nếu muốn tìm chính ký tự * hoặc ? thì gõ dấu ~ trước ký tự đó ( ~* hoặc là ~?)<br />
<br />
Trích xuất họ và tên (ví dụ dùng để trích cho tên tiếng Anh, bỏ qua tên đệm)<br />
<br />
Đây là dạng bài toán đã được rất nhiều bạn hỏi trên GPE.<br />
<br />
Cách làm là dùng hàm FIND() để tìm những khoảng trắng phân cách giữa họ và tên, sau đó dùng hàm LEFT() để tách phần tên, và hàm RIGHT() để tách phần họ.<br />
<br />
Để lấy phần tên (First Name), chúng ta dùng công thức sau (giả sử họ tên nằm ở cell A2):<br />
=LEFT(A2, FIND(" ", A2) - 1)<br />
<br />
Nghĩa là dùng hàm FIND() để tìm vị trí của ký tự trắng đầu tiên kể từ bên trái, ví dụ nó là vị trí thứ 5, <br />
khi đó hàm LEFT() sẽ xác định được cái tên này gồm có 4 chữ (= 5-1).<br />
<br />
Để lấy phần họ (Last Name), chúng ta dùng công thức:<br />
=RIGHT(A2, LEN(A2) - FIND(" ", A2))<br />
<br />
Bạn tự dịch câu này nhé!<br />
<br />
Hình sau đây là một số ví dụ của bài vừa rồi.<br />
<br />
undefined<br />
<br />
Công thức ở D2: =RIGHT(A2, LEN(A2) - FIND(" ", A2)) &amp; ", " &amp; LEFT(A2, FIND(" ", A2) - 1)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">13. Hàm FIXED</span><br />
<br />
Công dụng: Chuyển đổi một số thành dạng văn bản (text), có hoặc không kèm theo dấu phân cách hàng ngàn, và có thể làm tròn theo ý muốn.<br />
<br />
Công thức: =FIXED(number [,decimals] [,no_commas])<br />
___number là số cần chuyển sang dạng text<br />
___decimals là số số thập phân, mặc định là 2, nếu là số âm thì sẽ làm tròn về bên trái<br />
___no_commas: TRUE hoặc FALSE, dùng TRUE nếu không muốn có dấu phân cách hàng ngàn, và FALSE (mặc định) thì có bao gồm cả dấu phân cách hàng ngàn<br />
<br />
Bài tập: Bạn thử dùng hàm FIXED với con số 123456789,85 để ra lập công thức cho ra kết quả giống như cột B nhé.<br />
<br />
undefined<br />
<br />
HÀM TRÍCH XUẤT KÝ TỰ HOẶC CHUỖI (Extracting a Substring) <br />
<br />
--------------------------------------------------------------------------------<br />
<br />
Một giá trị chuỗi có thể bao gồm nhiều chuỗi nhỏ hoặc nhiều từ đơn lẻ. <br />
Ví dụ trong một cột chứa Họ và Tên, có thể bạn chỉ muốn lọc ra Họ mà thôi, hoặc Tên mà thôi, để sắp xếp chẳng hạn; <br />
hoặc có thể bạn muốn trích ra vài ký tự đầu trong một danh sách hàng hóa, để dựa vào đó làm ra mã số hàng hóa, v.v...<br />
<br />
Excel cung cấp cho bạn 3 hàm sau đây, chuyên để trích xuất 1 từ, 1 chữ hoặc nhiều từ, nhiều chữ từ một chuỗi có sẵn: Hàm LEFT, RIGHT và MID.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">14. Hàm LEFT</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để trích xuất phần bên trái của một chuỗi một hoặc nhiều ký tự tùy theo sự chỉ định của bạn<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =LEFT(text [,num_chars])<br />
<br />
___text: chuỗi văn bản cần trích xuất ký tự<br />
___num_chars: số ký tự cần trích ra phía bên trái chuỗi text, mặc định là 1<br />
<br />
- num_chars phải là số nguyên dương<br />
- Nếu num_chars lớn hơn độ dài của chuỗi thì kết quả trả về sẽ là toàn bộ chuỗi text<br />
<br />
<br />
Ví dụ:___=LEFT(“Karen Elizabeth Hammond”, 5) → Karen<br />
<br />
<span style="font-weight: bold;" class="mycode_b">15. Hàm TRIM</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Xóa tất cả những khoảng trắng vô ích trong chuỗi văn bản, chỉ chừa lại những khoảng trắng nào dùng làm dấu cách giữa hai chữ.<br />
Những khoảng trắng vô ích này có thể nằm ở bất kỳ đâu trong đoạn văn: ở đầu, ở cuối hoặc ở giữa...<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =TRIM(text)<br />
___text: chuỗi văn bản cần xóa những khoảng trắng vô ích<br />
<br />
<br />
Ví dụ: Hình sau đây cho thấy công dụng của hàm TRIM. <br />
Mỗi chuỗi văn bản trong khối A2:A7 đều có những khoảng trắng vô ích, nằm ở đầu, ở giữa hoặc ở cuối. <br />
Tôi đặt hàm TRIM ở cột C. <br />
Để các bạn thấy công dụng của hàm TRIM, tôi có dùng thêm hàm LEN() đặt ở cột B và D, để đếm số ký tự trong chuỗi trước và sau khi thực hiện hàm TRIM<br />
<br />
undefined<br />
<br />
<span style="font-weight: bold;" class="mycode_b">16. Hàm LEN</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để đếm số ký tự trong một chuỗi văn bản<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =LEN(text)<br />
<br />
___text: chuỗi văn bản mà bạn cần đếm số ký tự có trong đó<br />
<br />
<span style="font-weight: bold;" class="mycode_b">17. Hàm LOWER</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Hàm LOWER đổi tất cả các ký tự trong một chuỗi văn bản thành chữ thường.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =LOWER(text)<br />
<br />
___với text là một chuỗi, hoặc tham chiếu đến một chuỗi cần định dạng<br />
<br />
<br />
Ví dụ: Công thức sau đây sẽ sửa cell A2 (Giải pháp Excel) thành toàn là chữ thường<br />
=LOWER(A2) → giải pháp excel<br />
Hàm LOWER thường được dùng khi bạn cần định dạng lại một câu văn (thường là do chép ở đâu đó dán vào trong Excel) mà trong đó, chữ thường chữ hoa được gõ hoặc bị thay đổi lung tung...<br />
<br />
<span style="font-weight: bold;" class="mycode_b">18. Hàm MID</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để trích xuất một chuỗi con (substring) từ một chuỗi <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =MID(text, start_num, num_chars])<br />
<br />
___text: chuỗi văn bản cần trích xuất<br />
___start_num: vị trí bắt đầu trích ra chuỗi con, tính từ bên trái sang<br />
___num_chars: số ký tự của chuỗi con cần trích ra<br />
<br />
- num_chars phải là số nguyên dương<br />
- start_num phải là số nguyên dương<br />
- Nếu start_num lớn hơn độ dài của chuỗi thì kết quả trả về sẽ là chuỗi rỗng<br />
<br />
<br />
Ví dụ:___=MID(“Karen Elizabeth Hammond”, 7, 9) → Elizabeth<br />
<br />
<span style="font-weight: bold;" class="mycode_b">19. Hàm PROPER</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Hàm PROPER đổi ký tự đầu tiên trong một chữ của một chuỗi văn bản thành chữ in hoa, còn tất cả các ký tự còn lại trong chuỗi đó trở thành chữ thường.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =PROPER(text)<br />
<br />
___với text là một chuỗi, hoặc tham chiếu đến một chuỗi cần định dạng<br />
<br />
<br />
Ví dụ: Công thức sau đây sẽ định dạng lại chuỗi văn bản cell A7 (công cụ tuyệt vời của bạn) theo kiểu Proper<br />
=PROPER(A7) → Công Cụ Tuyệt Vời Của Bạn<br />
<br />
<span style="font-weight: bold;" class="mycode_b">20. Hàm REPLACE</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để thay thế một phần của chuỗi bằng một chuỗi khác, dựa vào số ký tự được chỉ định<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =REPLACE(old_text, start_num, num_chars, new_text)<br />
<br />
___old_text: chuỗi văn bản cần được xử lý<br />
___start_num: vị trí bắt đầu tìm cái sẽ thay thế, tính từ bên trái sang<br />
___num_chars: số ký tự của chuỗi cần được thay thế<br />
___new_text: chuỗi văn bản sẽ thay thế cho số ký tự đã chọn bởi start_num và num_chars <br />
<br />
Cái khó của hàm này là xác định được bởi start_num và num_chars. Làm sao biết được bắt đầu từ đâu và thay thế bao nhiêu chữ? Tôi gợi ý nhé:<br />
<br />
- Bạn dùng hàm FIND() hoặc SEARCH() để xác định vị trí bắt đầu (start_num)<br />
<br />
- Dùng hàm LEN() để xác định số ký tự của chuỗi sẽ được thay thế (num_chars)<br />
<br />
Ví dụ: đế thay số 2007 bằng 2008 trong câu Expense Budget for 2007<br />
<br />
Dùng công thức như sau:<br />
<br />
=REPLACE(A1, FIND("2007", A1), LEN("2007"), "2008")→ Expense Budget for 2008<br />
Với A1 = Expense Budget for 2007<br />
<br />
<span style="font-weight: bold;" class="mycode_b">21. Hàm REPT</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để lập đi lập lại (nhân bản) một ký tự hoặc một từ, với số lần được định trước.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =REPT(text, times)<br />
<br />
___text: ký tự (character), một con số hoặc một từ (string) cần được nhân bản<br />
___times: số lần lập đi lập lại của text<br />
<br />
- Nếu times = 0, hàm REPT() sẽ trả về một chuỗi rỗng<br />
- Nếu text là một con số, REPT() sẽ làm tròn con số đó thành số nguyên<br />
<br />
Điền thêm dấu chấm cuối hàng<br />
<br />
Mời bạn xem hình sau:<br />
<br />
undefined<br />
<br />
Bạn sẽ nghĩ tôi dùng cách "căn đều hai biên" cho mấy cái cell ở cột B ?<br />
<br />
Không đâu, tôi dùng hàm REPT() đấy. Tại B1, tôi gõ công thức:<br />
<br />
=A1 &amp; REPT(“.”, 20 - LEN(A1))<br />
<br />
Rồi tôi kéo công thức xuống tới B5.<br />
Bạn có thể thay con số 20 bằng số khác, tùy vào bạn muốn độ rộng của cột B là bao nhiêu...<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Làm biểu đồ bằng hàm REPT</span><br />
<br />
Mặc dù Excel 2007 đã có những biểu đồ rất đẹp (làm bằng Conditional Formating), <br />
tuy nhiên, chúng ta có thể áp dụng hàm REPT() để làm chuyện này. <br />
<br />
Mời bạn xem hình sau, và để ý công thức ở cell C12 nhé<br />
<br />
undefined<br />
<br />
Thêm một biểu đồ nữa:<br />
<br />
undefined<br />
<br />
Để làm được cái biểu đồ như thế này, tôi dùng font Webbings (một loại font symbol), chọn ký tự tương ứng trên bàn phím là "g", vì nó có hình dạng giống như một khối vuông; rồi tô màu xanh nhạt.<br />
Đế lấy trị giá times cho hàm REPT(), tôi nhân giá trị phần trăm bên cột B cho 100, và để cho mấy "bar" này không quá lớn, tôi chia giá trị đó cho 5.<br />
Và kết quả là như cái hình bạn đang xem đó.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">22. Hàm RIGHT</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để trích xuất phần bên phải của một chuỗi một hoặc nhiều ký tự tùy theo sự chỉ định của bạn<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =RIGHT(text [,num_chars])<br />
<br />
___text: chuỗi văn bản cần trích xuất ký tự<br />
___num_chars: số ký tự cần trích ra phía bên phải của chuỗi text, mặc định là 1<br />
<br />
- num_chars phải là số nguyên dương<br />
- Nếu num_chars lớn hơn độ dài của chuỗi thì kết quả trả về sẽ là toàn bộ chuỗi text<br />
<br />
Ví dụ:___=RIGHT(“Karen Elizabeth Hammond”, 7) → Hammond<br />
<br />
<span style="font-weight: bold;" class="mycode_b">23. Hàm SUBSTITUTE</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Dùng để thay thế một chuỗi này bằng một chuỗi khác. Hàm này cũng tương tự hàm REPLACE(), nhưng dễ sử dụng hơn.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =SUBSTITUTE(text, old_text, new_text [,instance_num])<br />
___text: chuỗi văn bản gốc, cần được xử lý<br />
___old_text: chuỗi văn bản cần được thay thế<br />
___new_text: chuỗi văn bản sẽ thay thế vào<br />
___instance_num: số lần thay thế old_text bằng new_text, nếu bỏ qua thì tất cả old_text tìm được sẽ được thay thế bằng new_text<br />
<br />
Ví dụ: Để thay số 2007 bằng 2008 trong câu Expense Budget for 2007<br />
<br />
Dùng công thức như sau:<br />
=SUBSTITUTE("Expense Budget for 2007", "2007", "2008") → Expense Budget for 2008<br />
<br />
<span style="font-weight: bold;" class="mycode_b">24. Hàm TEXT</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Chuyển đổi một số thành dạng văn bản (text) theo định dạng được chỉ định<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> =TEXT(number,format)<br />
<br />
___number là số cần chuyển sang dạng text<br />
___format: kiểu định dạng số hoặc ngày tháng năm<br />
<br />
<br />
Ví dụ: Công thức sau sẽ dùng hàm AVERAGE() để tính số trung bình của mảng cell A1:A31, và dùng hàm TEXT để chuyển đổi kết quả ra dạng nhiệt độ<br />
=”Nhiệt độ trung bình của lò phản ứng là “ &amp; TEXT(AVERAGE(A1:A31), “#,##0.00°F”) → Nhiệt độ trung bình của lò phản ứng là 7,560.00°F<br />
<br />
Thể hiện thời gian cập nhật bảng tính lần sau cùng<br />
Có bao giờ bạn muốn biết được lần cuối cùng bảng tính này có thay đổi là khi nào không?<br />
<br />
Một trong những cách làm là đặt chế độ tính toán của Excel là thủ công (manual calculation mode) và sử dụng hàm NOW() trong một cell nào đó (hàm này cho ra kết quả là ngày giờ hiện tại). <br />
<br />
Như vậy, hàm NOW() sẽ không tự cập nhật trừ phi bảng tính được lưu (save), hoặc được tính toán lại (recalculate), và nhờ đó mà bạn luôn biết được lần cuối cùng bảng tính này có thay đổi là khi nào.<br />
<br />
Ví dụ, bạn dùng công thức:<br />
=”This workbook last updated: “ &amp; NOW()<br />
Tuy nhiên, nếu chỉ có chừng đó, thì e rằng kết quả bạn nhận được sẽ không như ý, vì có thể nó sẽ là như thế này:<br />
This workbook last updated: 38572.51001<br />
Do Excel luôn hiểu ngày và giờ là một con số, cho nên con số này: 38572.51001 được hiểu là: con số phía bên trái của dấu phân cách (38572) là số chỉ ngày, và con số phía bên phải của dấu phân cách (51001) là số chỉ giờ... Chỉ có ai rành lắm mới may ra đọc và hiểu được!<br />
<br />
Vì vậy, ta nên sửa công thức trên bằng cách dùng hàm TEXT để định dạng nó ra kiểu ngày giờ đàng hoàng, chẳng hạn kiểu DD/MM/YYYY HH:MM<br />
=”This workbook last updated: “ &amp; TEXT(NOW(), “dd/mm/yy hh:mm”) → This workbook last updated: 08/08/2005 12:14:00 PM<br />
<br />
<span style="font-weight: bold;" class="mycode_b">25. Hàm UPPER</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công dụng:</span> Hàm UPPER đổi tất cả các ký tự trong một chuỗi văn bản thành chữ in hoa.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Công thức:</span> = UPPER(text)<br />
<br />
___với text là một chuỗi, hoặc tham chiếu đến một chuỗi cần định dạng<br />
<br />
<br />
Ví dụ: <br />
Công thức sau đây sẽ nối chuỗi văn bản trong cell A5 (Giải pháp) và cell B5 (Excel) lại với nhau, ở giữa có một dấu cách, tất cả ký tự cell mới toàn là chữ in hoa.<br />
=UPPER(A5) &amp; " " &amp; UPPER(B5) → GIẢI PHÁP EXCEL]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Tổng hợp các hàm Toán học nâng cao: thống kê, xác xuất, tuyến tính..(Ví dụ)]]></title>
			<link>https://thuthuataccess.com/forum/thread-9204.html</link>
			<pubDate>Sat, 16 Apr 2016 05:15:23 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-9204.html</guid>
			<description><![CDATA[Các hàm thống kê có thể chia thành 3 nhóm nhỏ sau: Nhóm hàm về Thống Kê, nhóm hàm về Phân Phối Xác Suất, và nhóm hàm về Tương Quan và Hồi Quy Tuyến Tính<br />
<br />
<br />
<span style="color: red;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">1. NHÓM HÀM VỀ THỐNG KÊ</span></span><br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">1. AVEDEV (number1, number2, ...):</span></span> Tính trung bình độ lệch tuyệt đối các điểm dữ liệu theo trung bình của chúng. Thường dùng làm thước đo về sự biến đổi của tập số liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">2. AVERAGE (number1, number2, ...):</span></span> Tính trung bình cộng<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">3. AVERAGEA (number1, number2, ...):</span></span> Tính trung bình cộng của các giá trị, bao gồm cả những giá trị logic<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">4. AVERAGEIF (range, criteria1):</span></span> Tính trung bình cộng của các giá trị trong một mảng theo một điều kiện<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">5. AVERAGEIFS (range, criteria1, criteria2, ...):</span></span> Tính trung bình cộng của các giá trị trong một mảng theo nhiều điều kiện<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">6. COUNT (value1, value2, ...):</span></span> Đếm số ô trong danh sách<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">7. COUNTA (value1, value2, ...):</span></span> Đếm số ô có chứa giá trị (không rỗng) trong danh sách<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">8. COUNTBLANK (range):</span></span> Đếm các ô rỗng trong một vùng<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">9. COUNTIF (range, criteria):</span></span> Đếm số ô thỏa một điều kiện cho trước bên trong một dãy<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">10. COUNTIFS (range1, criteria1, range2, criteria2, …):</span></span> Đếm số ô thỏa nhiều điều kiện cho trước<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">11. DEVSQ (number1, number2, ...):</span></span> Tính bình phương độ lệch các điểm dữ liệu từ trung bình mẫu của chúng, rồi cộng các bình phương đó lại.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">12. FREQUENCY (data_array, bins_array):</span></span> Tính xem có bao nhiêu giá trị thường xuyên xuất hiện bên trong một dãy giá trị, rồi trả về một mảng đứng các số. Luôn sử dụng hàm này ở dạng công thức mảng<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">13. GEOMEAN (number1, number2, ...):</span></span> Trả về trung bình nhân của một dãy các số dương. Thường dùng để tính mức tăng trưởng trung bình, trong đó lãi kép có các lãi biến đổi được cho trước…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">14. HARMEAN (number1, number2, ...):</span></span> Trả về trung bình điều hòa (nghịch đảo của trung bình cộng) của các số<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">15. KURT (number1, number2, ...):</span></span> Tính độ nhọn của tập số liệu, biểu thị mức nhọn hay mức phẳng tương đối của một phân bố so với phân bố chuẩn<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">16. LARGE (array, k):</span></span> Trả về giá trị lớn nhất thứ k trong một tập số liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">17. MAX (number1, number2, ...):</span></span> Trả về giá trị lớn nhất của một tập giá trị<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">18. MAXA (number1, number2, ...):</span></span> Trả về giá trị lớn nhất của một tập giá trị, bao gồm cả các giá trị logic và text<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">19. MEDIAN (number1, number2, ...):</span></span> Tính trung bình vị của các số. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">20. MIN (number1, number2, ...):</span></span> Trả về giá trị nhỏ nhất của một tập giá trị<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">21. MINA (number1, number2, ...):</span></span> Trả về giá trị nhỏ nhất của một tập giá trị, bao gồm cả các giá trị logic và text<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">22. MODE (number1, number2, ...):</span></span> Trả về giá trị xuất hiện nhiều nhất trong một mảng giá trị<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">23. PERCENTILE (array, k):</span></span> Tìm phân vị thứ k của các giá trị trong một mảng dữ liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">24. PERCENTRANK (array, x, significance):</span></span> Trả về thứ hạng (vị trí tương đối) của một trị trong một mảng dữ liệu, là số phần trăm của mảng dữ liệu đó<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">25. PERMUT (number, number_chosen):</span></span> Trả về hoán vị của các đối tượng. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">26. QUARTILE (array, quart):</span></span> Tính điểm tứ phân vị của tập dữ liệu. Thường được dùng trong khảo sát dữ liệu để chia các tập hợp thành nhiều nhóm…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">27. RANK (number, ref, order):</span></span> Tính thứ hạng của một số trong danh sách các số<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">28. SKEW (number1, number2, ...):</span></span> Trả về độ lệch của phân phối, mô tả độ không đối xứng của phân phối quanh trị trung bình của nó<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">29. SMALL (array, k):</span></span> Trả về giá trị nhỏ nhất thứ k trong một tập số <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">30. STDEV (number1, number2, ...):</span></span> Ước lượng độ lệch chuẩn trên cơ sở mẫu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">31. STDEVA (value1, value2, ...):</span></span> Ước lượng độ lệch chuẩn trên cơ sở mẫu, bao gồm cả những giá trị logic<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">32. STDEVP (number1, number2, ...):</span></span> Tính độ lệch chuẩn theo toàn thể tập hợp<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">33. STDEVPA (value1, value2, ...):</span></span> Tính độ lệch chuẩn theo toàn thể tập hợp, kể cả chữ và các giá trị logic<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">34. VAR (number1, number2, ...):</span></span> Trả về phương sai dựa trên mẫu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">35. VARA (value1, value2, …):</span></span> Trả về phương sai dựa trên mẫu, bao gồm cả các trị logic và text<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">36. VARP (number1, number2, ...):</span></span> Trả về phương sai dựa trên toàn thể tập hợp<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">37. VARPA (value1, value2, …):</span></span> Trả về phương sai dựa trên toàn thể tập hợp, bao gồm cả các trị logic và text.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">38. TRIMMEAN (array, percent):</span></span> Tính trung bình phần trong của một tập dữ liệu, bằng cách loại tỷ lệ phần trăm của các điểm dữ liệu ở đầu và ở cuối tập dữ liệu.<br />
<br />
<span style="color: red;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">2. NHÓM HÀM VỀ PHÂN PHỐI XÁC SUẤT</span></span><br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">1. BETADIST (x, alpha, beta, A, B):</span></span> Trả về giá trị của hàm tính mật độ phân phối xác suất tích lũy beta.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">2. BETAINV (probability, alpha, beta, A, B):</span></span> Trả về nghịch đảo của hàm tính mật độ phân phối xác suất tích lũy beta.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">3. BINOMDIST (number_s, trials, probability_s, cumulative):</span></span> Trả về xác suất của những lần thử thành công của phân phối nhị phân.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">4. CHIDIST (x, degrees_freedom):</span></span> Trả về xác xuất một phía của phân phối chi-squared. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">5. CHIINV (probability, degrees_freedom):</span></span> Trả về nghịch đảo của xác xuất một phía của phân phối chi-squared.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">6. CHITEST (actual_range, expected_range):</span></span> Trả về giá trị của xác xuất từ phân phối chi-squared và số bậc tự do tương ứng.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">7. CONFIDENCE (alpha, standard_dev, size):</span></span> Tính khoảng tin cậy cho một kỳ vọng lý thuyết<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">8. CRITBINOM (trials, probability_s, alpha):</span></span> Trả về giá trị nhỏ nhất sao cho phân phối nhị thức tích lũy lớn hơn hay bằng giá trị tiêu chuẩn. Thường dùng để bảo đảm các ứng dụng đạt chất lượng…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">9. EXPONDIST (x, lambda, cumulative):</span></span> Tính phân phối mũ. Thường dùng để mô phỏng thời gian giữa các biến cố…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">10. FDIST (x, degrees_freedom1, degrees_freedom2):</span></span> Tính phân phối xác suất F. Thường dùng để tìm xem hai tập số liệu có nhiều mức độ khác nhau hay không…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">11. FINV (probability, degrees_freedom1, degrees_freedom2):</span></span> Tính nghịch đảo của phân phối xác suất F. Thường dùng để so sánh độ biến thiên trong hai tập số liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">12. FTEST (array1, array2):</span></span> Trả về kết quả của một phép thử F. Thường dùng để xác định xem hai mẫu có các phương sai khác nhau hay không…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">13. FISHER (x):</span></span> Trả về phép biến đổi Fisher tại x. Thường dùng để kiểm tra giả thuyết dựa trên hệ số tương quan…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">14. FISHERINV (y):</span></span> Tính nghịch đảo phép biến đổi Fisher. Thường dùng để phân tích mối tương quan giữa các mảng số liệu…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">15. GAMMADIST (x, alpha, beta, cumulative):</span></span> Trả về phân phối tích lũy gamma. Có thể dùng để nghiên cứu có phân bố lệch<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">16. GAMMAINV (probability, alpha, beta):</span></span> Trả về nghịch đảo của phân phối tích lũy gamma. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">17. GAMMLN (x):</span></span> Tính logarit tự nhiên của hàm gamma<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">18. HYPGEOMDIST (number1, number2, ...):</span></span> Trả về phân phối siêu bội (xác suất của một số lần thành công nào đó…)<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">19. LOGINV (probability, mean, standard_dev):</span></span> Tính nghịch đảo của hàm phân phối tích lũy lognormal của x (LOGNORMDIST)<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">20. LOGNORMDIST (x, mean, standard_dev):</span></span> Trả về phân phối tích lũy lognormal của x, trong đó logarit tự nhiên của x thường được phân phối với các tham số mean và standard_dev.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">21. NEGBINOMDIST (number_f, number_s, probability_s):</span></span> Trả về phân phối nhị thức âm (trả về xác suất mà sẽ có number_f lần thất bại trước khi có number_s lần thành công, khi xác suất không đổi của một lần thành công là probability_s)<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">22. NORMDIST (x, mean, standard_dev, cumulative):</span></span> Trả về phân phối chuẩn (normal distribution). Thường được sử dụng trong việc thống kê, gồm cả việc kiểm tra giả thuyết<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">23. NORMINV (probability, mean, standard_dev):</span></span> Tính nghịch đảo phân phối tích lũy chuẩn<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">24. NORMSDIST (z):</span></span> Trả về hàm phân phối tích lũy chuẩn tắc (standard normal cumulative distribution function), là phân phối có trị trung bình cộng là zero (0) và độ lệch chuẩn là 1<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">25. NORMSINV (probability):</span></span> Tính nghịch đảo của hàm phân phối tích lũy chuẩn tắc<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">26. POISSON (x, mean, cumulative):</span></span> Trả về phân phối poisson. Thường dùng để ước tính số lượng biến cố sẽ xảy ra trong một khoảng thời gian nhất định<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">27. PROB (x_range, prob_range, lower_limit, upper_limit):</span></span> Tính xác suất của các trị trong dãy nằm giữa hai giới hạn<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">28. STANDARDIZE (x, mean, standard_dev):</span></span> Trả về trị chuẩn hóa từ phân phối biểu thị bởi mean và standard_dev<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">29. TDIST (x, degrees_freedom, tails):</span></span> Trả về xác suất của phân phối Student (phân phối t), trong đó x là giá trị tính từ t và được dùng để tính xác suất. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">30. TINV (probability, degrees_freedom):</span></span> Trả về giá trị t của phân phối Student.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">31. TTEST (array1, array2, tails, type):</span></span> Tính xác xuất kết hợp với phép thử Student.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">32. WEIBULL (x, alpha, beta, cumulative):</span></span> Trả về phân phối Weibull. Thường sử dụng trong phân tích độ tin cậy, như tính tuổi thọ trung bình của một thiết bị.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">33. ZTEST (array, x, sigma):</span></span> Trả về xác suất một phía của phép thử z.<br />
<br />
<span style="color: red;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">3. NHÓM HÀM VỀ TƯƠNG QUAN VÀ HỒI QUY TUYẾN TÍNH</span></span><br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">1. CORREL (array1, array2):</span></span> Tính hệ số tương quan giữa hai mảng để xác định mối quan hệ của hai đặc tính<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">2. COVAR (array1, array2):</span></span> Tính tích số các độ lệch của mỗi cặp điểm dữ liệu, rồi tính trung bình các tích số đó<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">3. FORECAST (x, known_y's, known_x's):</span></span> Tính toán hay dự đoán một giá trị tương lai bằng cách sử dụng các giá trị hiện có, bằng phương pháp hồi quy tuyến tính<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">4. GROWTH (known_y's, known_x's, new_x's, const):</span></span> Tính toán sự tăng trưởng dự kiến theo hàm mũ, bằng cách sử dụng các dữ kiện hiện có. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">5. INTERCEPT (known_y's, known_x's):</span></span> Tìm điểm giao nhau của một đường thẳng với trục y bằng cách sử dụng các trị x và y cho trước<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">6. LINEST (known_y's, known_x's, const, stats):</span></span> Tính thống kê cho một đường bằng cách dùng phương pháp bình phương tối thiểu (least squares) để tính đường thẳng thích hợp nhất với dữ liệu, rồi trả về mảng mô tả đường thẳng đó. Luôn dùng hàm này ở dạng công thức mảng<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">7. LOGEST (known_y's, known_x's, const, stats):</span></span> Dùng trong phân tích hồi quy. Hàm sẽ tính đường cong hàm mũ phù hợp với dữ liệu được cung cấp, rồi trả về mảng gía trị mô tả đường cong đó. Luôn dùng hàm này ở dạng công thức mảng<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">8. PEARSON (array1, array2):</span></span> Tính hệ số tương quan momen tích pearson ®, một chỉ mục không thứ nguyên, trong khoảng từ -1 đến 1, phản ánh sự mở rộng quan hệ tuyến tính giữa hai tập số liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">9. RSQ (known_y's, known_x's):</span></span> Tính bình phương hệ số tương quan momen tích Pearson ®, thông qua các điểm dữ liệu trong known_y's và known_x's<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">10. SLOPE (known_y's, known_x's):</span></span> Tính hệ số góc của đường hồi quy tuyến tính thông qua các điềm dữ liệu<br />
liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">11. STEYX (known_y's, known_x's):</span></span> Trả về sai số chuẩn của trị dự đoán y đối với mỗi trị x trong hồi quy.]]></description>
			<content:encoded><![CDATA[Các hàm thống kê có thể chia thành 3 nhóm nhỏ sau: Nhóm hàm về Thống Kê, nhóm hàm về Phân Phối Xác Suất, và nhóm hàm về Tương Quan và Hồi Quy Tuyến Tính<br />
<br />
<br />
<span style="color: red;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">1. NHÓM HÀM VỀ THỐNG KÊ</span></span><br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">1. AVEDEV (number1, number2, ...):</span></span> Tính trung bình độ lệch tuyệt đối các điểm dữ liệu theo trung bình của chúng. Thường dùng làm thước đo về sự biến đổi của tập số liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">2. AVERAGE (number1, number2, ...):</span></span> Tính trung bình cộng<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">3. AVERAGEA (number1, number2, ...):</span></span> Tính trung bình cộng của các giá trị, bao gồm cả những giá trị logic<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">4. AVERAGEIF (range, criteria1):</span></span> Tính trung bình cộng của các giá trị trong một mảng theo một điều kiện<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">5. AVERAGEIFS (range, criteria1, criteria2, ...):</span></span> Tính trung bình cộng của các giá trị trong một mảng theo nhiều điều kiện<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">6. COUNT (value1, value2, ...):</span></span> Đếm số ô trong danh sách<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">7. COUNTA (value1, value2, ...):</span></span> Đếm số ô có chứa giá trị (không rỗng) trong danh sách<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">8. COUNTBLANK (range):</span></span> Đếm các ô rỗng trong một vùng<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">9. COUNTIF (range, criteria):</span></span> Đếm số ô thỏa một điều kiện cho trước bên trong một dãy<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">10. COUNTIFS (range1, criteria1, range2, criteria2, …):</span></span> Đếm số ô thỏa nhiều điều kiện cho trước<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">11. DEVSQ (number1, number2, ...):</span></span> Tính bình phương độ lệch các điểm dữ liệu từ trung bình mẫu của chúng, rồi cộng các bình phương đó lại.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">12. FREQUENCY (data_array, bins_array):</span></span> Tính xem có bao nhiêu giá trị thường xuyên xuất hiện bên trong một dãy giá trị, rồi trả về một mảng đứng các số. Luôn sử dụng hàm này ở dạng công thức mảng<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">13. GEOMEAN (number1, number2, ...):</span></span> Trả về trung bình nhân của một dãy các số dương. Thường dùng để tính mức tăng trưởng trung bình, trong đó lãi kép có các lãi biến đổi được cho trước…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">14. HARMEAN (number1, number2, ...):</span></span> Trả về trung bình điều hòa (nghịch đảo của trung bình cộng) của các số<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">15. KURT (number1, number2, ...):</span></span> Tính độ nhọn của tập số liệu, biểu thị mức nhọn hay mức phẳng tương đối của một phân bố so với phân bố chuẩn<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">16. LARGE (array, k):</span></span> Trả về giá trị lớn nhất thứ k trong một tập số liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">17. MAX (number1, number2, ...):</span></span> Trả về giá trị lớn nhất của một tập giá trị<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">18. MAXA (number1, number2, ...):</span></span> Trả về giá trị lớn nhất của một tập giá trị, bao gồm cả các giá trị logic và text<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">19. MEDIAN (number1, number2, ...):</span></span> Tính trung bình vị của các số. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">20. MIN (number1, number2, ...):</span></span> Trả về giá trị nhỏ nhất của một tập giá trị<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">21. MINA (number1, number2, ...):</span></span> Trả về giá trị nhỏ nhất của một tập giá trị, bao gồm cả các giá trị logic và text<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">22. MODE (number1, number2, ...):</span></span> Trả về giá trị xuất hiện nhiều nhất trong một mảng giá trị<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">23. PERCENTILE (array, k):</span></span> Tìm phân vị thứ k của các giá trị trong một mảng dữ liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">24. PERCENTRANK (array, x, significance):</span></span> Trả về thứ hạng (vị trí tương đối) của một trị trong một mảng dữ liệu, là số phần trăm của mảng dữ liệu đó<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">25. PERMUT (number, number_chosen):</span></span> Trả về hoán vị của các đối tượng. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">26. QUARTILE (array, quart):</span></span> Tính điểm tứ phân vị của tập dữ liệu. Thường được dùng trong khảo sát dữ liệu để chia các tập hợp thành nhiều nhóm…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">27. RANK (number, ref, order):</span></span> Tính thứ hạng của một số trong danh sách các số<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">28. SKEW (number1, number2, ...):</span></span> Trả về độ lệch của phân phối, mô tả độ không đối xứng của phân phối quanh trị trung bình của nó<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">29. SMALL (array, k):</span></span> Trả về giá trị nhỏ nhất thứ k trong một tập số <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">30. STDEV (number1, number2, ...):</span></span> Ước lượng độ lệch chuẩn trên cơ sở mẫu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">31. STDEVA (value1, value2, ...):</span></span> Ước lượng độ lệch chuẩn trên cơ sở mẫu, bao gồm cả những giá trị logic<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">32. STDEVP (number1, number2, ...):</span></span> Tính độ lệch chuẩn theo toàn thể tập hợp<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">33. STDEVPA (value1, value2, ...):</span></span> Tính độ lệch chuẩn theo toàn thể tập hợp, kể cả chữ và các giá trị logic<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">34. VAR (number1, number2, ...):</span></span> Trả về phương sai dựa trên mẫu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">35. VARA (value1, value2, …):</span></span> Trả về phương sai dựa trên mẫu, bao gồm cả các trị logic và text<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">36. VARP (number1, number2, ...):</span></span> Trả về phương sai dựa trên toàn thể tập hợp<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">37. VARPA (value1, value2, …):</span></span> Trả về phương sai dựa trên toàn thể tập hợp, bao gồm cả các trị logic và text.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">38. TRIMMEAN (array, percent):</span></span> Tính trung bình phần trong của một tập dữ liệu, bằng cách loại tỷ lệ phần trăm của các điểm dữ liệu ở đầu và ở cuối tập dữ liệu.<br />
<br />
<span style="color: red;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">2. NHÓM HÀM VỀ PHÂN PHỐI XÁC SUẤT</span></span><br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">1. BETADIST (x, alpha, beta, A, B):</span></span> Trả về giá trị của hàm tính mật độ phân phối xác suất tích lũy beta.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">2. BETAINV (probability, alpha, beta, A, B):</span></span> Trả về nghịch đảo của hàm tính mật độ phân phối xác suất tích lũy beta.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">3. BINOMDIST (number_s, trials, probability_s, cumulative):</span></span> Trả về xác suất của những lần thử thành công của phân phối nhị phân.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">4. CHIDIST (x, degrees_freedom):</span></span> Trả về xác xuất một phía của phân phối chi-squared. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">5. CHIINV (probability, degrees_freedom):</span></span> Trả về nghịch đảo của xác xuất một phía của phân phối chi-squared.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">6. CHITEST (actual_range, expected_range):</span></span> Trả về giá trị của xác xuất từ phân phối chi-squared và số bậc tự do tương ứng.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">7. CONFIDENCE (alpha, standard_dev, size):</span></span> Tính khoảng tin cậy cho một kỳ vọng lý thuyết<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">8. CRITBINOM (trials, probability_s, alpha):</span></span> Trả về giá trị nhỏ nhất sao cho phân phối nhị thức tích lũy lớn hơn hay bằng giá trị tiêu chuẩn. Thường dùng để bảo đảm các ứng dụng đạt chất lượng…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">9. EXPONDIST (x, lambda, cumulative):</span></span> Tính phân phối mũ. Thường dùng để mô phỏng thời gian giữa các biến cố…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">10. FDIST (x, degrees_freedom1, degrees_freedom2):</span></span> Tính phân phối xác suất F. Thường dùng để tìm xem hai tập số liệu có nhiều mức độ khác nhau hay không…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">11. FINV (probability, degrees_freedom1, degrees_freedom2):</span></span> Tính nghịch đảo của phân phối xác suất F. Thường dùng để so sánh độ biến thiên trong hai tập số liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">12. FTEST (array1, array2):</span></span> Trả về kết quả của một phép thử F. Thường dùng để xác định xem hai mẫu có các phương sai khác nhau hay không…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">13. FISHER (x):</span></span> Trả về phép biến đổi Fisher tại x. Thường dùng để kiểm tra giả thuyết dựa trên hệ số tương quan…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">14. FISHERINV (y):</span></span> Tính nghịch đảo phép biến đổi Fisher. Thường dùng để phân tích mối tương quan giữa các mảng số liệu…<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">15. GAMMADIST (x, alpha, beta, cumulative):</span></span> Trả về phân phối tích lũy gamma. Có thể dùng để nghiên cứu có phân bố lệch<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">16. GAMMAINV (probability, alpha, beta):</span></span> Trả về nghịch đảo của phân phối tích lũy gamma. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">17. GAMMLN (x):</span></span> Tính logarit tự nhiên của hàm gamma<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">18. HYPGEOMDIST (number1, number2, ...):</span></span> Trả về phân phối siêu bội (xác suất của một số lần thành công nào đó…)<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">19. LOGINV (probability, mean, standard_dev):</span></span> Tính nghịch đảo của hàm phân phối tích lũy lognormal của x (LOGNORMDIST)<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">20. LOGNORMDIST (x, mean, standard_dev):</span></span> Trả về phân phối tích lũy lognormal của x, trong đó logarit tự nhiên của x thường được phân phối với các tham số mean và standard_dev.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">21. NEGBINOMDIST (number_f, number_s, probability_s):</span></span> Trả về phân phối nhị thức âm (trả về xác suất mà sẽ có number_f lần thất bại trước khi có number_s lần thành công, khi xác suất không đổi của một lần thành công là probability_s)<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">22. NORMDIST (x, mean, standard_dev, cumulative):</span></span> Trả về phân phối chuẩn (normal distribution). Thường được sử dụng trong việc thống kê, gồm cả việc kiểm tra giả thuyết<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">23. NORMINV (probability, mean, standard_dev):</span></span> Tính nghịch đảo phân phối tích lũy chuẩn<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">24. NORMSDIST (z):</span></span> Trả về hàm phân phối tích lũy chuẩn tắc (standard normal cumulative distribution function), là phân phối có trị trung bình cộng là zero (0) và độ lệch chuẩn là 1<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">25. NORMSINV (probability):</span></span> Tính nghịch đảo của hàm phân phối tích lũy chuẩn tắc<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">26. POISSON (x, mean, cumulative):</span></span> Trả về phân phối poisson. Thường dùng để ước tính số lượng biến cố sẽ xảy ra trong một khoảng thời gian nhất định<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">27. PROB (x_range, prob_range, lower_limit, upper_limit):</span></span> Tính xác suất của các trị trong dãy nằm giữa hai giới hạn<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">28. STANDARDIZE (x, mean, standard_dev):</span></span> Trả về trị chuẩn hóa từ phân phối biểu thị bởi mean và standard_dev<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">29. TDIST (x, degrees_freedom, tails):</span></span> Trả về xác suất của phân phối Student (phân phối t), trong đó x là giá trị tính từ t và được dùng để tính xác suất. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">30. TINV (probability, degrees_freedom):</span></span> Trả về giá trị t của phân phối Student.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">31. TTEST (array1, array2, tails, type):</span></span> Tính xác xuất kết hợp với phép thử Student.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">32. WEIBULL (x, alpha, beta, cumulative):</span></span> Trả về phân phối Weibull. Thường sử dụng trong phân tích độ tin cậy, như tính tuổi thọ trung bình của một thiết bị.<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">33. ZTEST (array, x, sigma):</span></span> Trả về xác suất một phía của phép thử z.<br />
<br />
<span style="color: red;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">3. NHÓM HÀM VỀ TƯƠNG QUAN VÀ HỒI QUY TUYẾN TÍNH</span></span><br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">1. CORREL (array1, array2):</span></span> Tính hệ số tương quan giữa hai mảng để xác định mối quan hệ của hai đặc tính<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">2. COVAR (array1, array2):</span></span> Tính tích số các độ lệch của mỗi cặp điểm dữ liệu, rồi tính trung bình các tích số đó<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">3. FORECAST (x, known_y's, known_x's):</span></span> Tính toán hay dự đoán một giá trị tương lai bằng cách sử dụng các giá trị hiện có, bằng phương pháp hồi quy tuyến tính<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">4. GROWTH (known_y's, known_x's, new_x's, const):</span></span> Tính toán sự tăng trưởng dự kiến theo hàm mũ, bằng cách sử dụng các dữ kiện hiện có. <br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">5. INTERCEPT (known_y's, known_x's):</span></span> Tìm điểm giao nhau của một đường thẳng với trục y bằng cách sử dụng các trị x và y cho trước<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">6. LINEST (known_y's, known_x's, const, stats):</span></span> Tính thống kê cho một đường bằng cách dùng phương pháp bình phương tối thiểu (least squares) để tính đường thẳng thích hợp nhất với dữ liệu, rồi trả về mảng mô tả đường thẳng đó. Luôn dùng hàm này ở dạng công thức mảng<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">7. LOGEST (known_y's, known_x's, const, stats):</span></span> Dùng trong phân tích hồi quy. Hàm sẽ tính đường cong hàm mũ phù hợp với dữ liệu được cung cấp, rồi trả về mảng gía trị mô tả đường cong đó. Luôn dùng hàm này ở dạng công thức mảng<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">8. PEARSON (array1, array2):</span></span> Tính hệ số tương quan momen tích pearson ®, một chỉ mục không thứ nguyên, trong khoảng từ -1 đến 1, phản ánh sự mở rộng quan hệ tuyến tính giữa hai tập số liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">9. RSQ (known_y's, known_x's):</span></span> Tính bình phương hệ số tương quan momen tích Pearson ®, thông qua các điểm dữ liệu trong known_y's và known_x's<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">10. SLOPE (known_y's, known_x's):</span></span> Tính hệ số góc của đường hồi quy tuyến tính thông qua các điềm dữ liệu<br />
liệu<br />
<br />
<span style="color: blue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">11. STEYX (known_y's, known_x's):</span></span> Trả về sai số chuẩn của trị dự đoán y đối với mỗi trị x trong hồi quy.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Tổng hợp các hàm ngày tháng ( Vidu minh họa)]]></title>
			<link>https://thuthuataccess.com/forum/thread-9203.html</link>
			<pubDate>Sat, 16 Apr 2016 05:12:31 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-9203.html</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">1. Hàm DATE()</span><br />
<br />
Trả về một ngày tháng năm nào đó<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = DATE(year, month, day)<br />
<br />
year: Số chỉ năm<br />
Con số này có thể là 1 đến 4 ký số. <br />
- Nếu nhỏ hơn 1900, Excel sẽ tự động cộng thêm 1900 vào để tính (ví dụ year = 100 thì Excel sẽ hiểu đó là năm 2000)<br />
- Nếu từ 1900 đến 9999, thì Excel sẽ coi đó chính là năm cần tính<br />
- Nếu nhỏ hơn 0 hoặc lớn hơn 10.000, Excel sẽ báo lỗi #NUM!<br />
<br />
month: Số chỉ tháng<br />
Nếu con số này lớn hơn 12, thì Excel sẽ tự động quy đổi thành 12 bằng 1 năm và tăng số năm lên. <br />
<br />
day: Số chỉ ngày<br />
Nếu con số này lớn hơn số ngày của tháng, thì Excel sẽ tự động quy đổi thành số ngày nhiều nhất của tháng cho phù hợp và tăng số tháng lên, nếu cần thì tăng cả số năm lên luôn.<br />
<br />
Ví dụ: <br />
DATE(2007, 12, 25) = Giáng Sinh năm 2007 <br />
<br />
DATE(2007, 12, 32) = 01/01/2008 <br />
<br />
DATE(2007, 13, 25) = 25/01/2008 <br />
<br />
DATE(7, 25, 32) = 01/02/1909 <br />
(số ngày (date) = 32, lớn hơn số ngày nhiều nhất của một tháng (31), do đó, Excel sẽ lấy ngày là 01, và tăng số tháng (month) thêm 1; số tháng (month) = 25 + 1 = 26 = 2 + (2 x 12), do đó Excel sẽ lấy tháng là 02, và tăng số năm thêm 2; số năm (year) = 7 + 2 = 9, Excel sẽ cộng thêm 1900 = 1909) <br />
<br />
Hàm DATE() rất hữu dụng khi year, month, day là những công thức mà không phải là một con số, nó sẽ giúp chúng ta tính toán chính xác hơn <br />
Khi nhập hàm DATE(), bạn phải cẩn thận thứ tự year, month, day, vì nó rất dễ nhầm lẫn (theo kiểu VN chúng ta: ngày, tháng, năm) <br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Hàm DATEVALUE()</span><br />
<br />
Chuyển đổi một chuỗi văn bản có dạng ngày tháng năm thành một giá trị ngày tháng năm để có thể tính toán được<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = DATEVALUE(date_text)<br />
<br />
- date_text: Chuỗi văn bản cần chuyển đổi<br />
- date_text có giới hạn trong khoảng từ 01/01/1900 đến 31/12/9999, nếu nằm ngoài khoảng này, hàm sẽ báo lỗi #VALUE! <br />
- date_text phải được nhập trong cặp dấu móc kép ("") <br />
- Nếu date_text chỉ có hai phần, Excel sẽ hiểu như sau: nếu phần sau là một giá trị &lt; 13 và phần đầu là một giá trị &lt; 32, nó xem như phần đầu là ngày, phần sau là tháng, và lấy năm hiện hành làm giá trị để tính năm; còn nếu phần sau là một giá trị &gt; 12 và phần đầu là một giá trị &lt; 13, nó xem như phần đầu là tháng, phần sau là năm, và cho giá trị tính ngày là 1. <br />
<br />
Ví dụ:<br />
DATEVALUE("25/12/2007") = 39441 (= 25/12/2007)<br />
<br />
DATEVALUE("25/12") = 39807 (= 25/12/2008)<br />
<br />
DATEVALUE("12/25") = 45992 (= 01/12/2025)<br />
<br />
DATEVALUE("12/25/2007") = #VALUE!<br />
<br />
DATEVALUE("25 December 2009") = 40172 = 25/12/2009<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Hàm YEAR()</span><br />
<br />
Cho biết số chỉ năm trong một giá trị ngày tháng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = YEAR(serial_number)<br />
serial_number: Biểu thức ngày tháng hoặc là một con số chỉ giá trị ngày tháng<br />
<br />
Ví dụ: YEAR(TODAY()) = 2008<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Hàm MONTH()</span><br />
<br />
Cho biết số chỉ tháng trong một giá trị ngày tháng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MONTH(serial_number)<br />
<br />
serial_number: Biểu thức ngày tháng hoặc là một con số chỉ giá trị ngày tháng<br />
<br />
Ví dụ: MONTH(TODAY()) = 1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Hàm DAY()</span><br />
<br />
Cho biết số chỉ ngày trong một giá trị ngày tháng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = DAY(serial_number)<br />
<br />
serial_number: Biểu thức ngày tháng hoặc là một con số chỉ giá trị ngày tháng<br />
<br />
Ví dụ: DAY(TODAY()) = 3<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tính số ngày chênh lệch theo kiểu một năm có 360 ngày</span><br />
<br />
Hiện nay, vẫn còn một số hệ thống kế toán dùng kiểu tính thời gian là một tháng coi như có 30 ngày và một năm coi như có 360 ngày!<br />
Gặp trường hợp này, việc tính toán thời gian sẽ không đơn giản, vì thực tế thì số ngày trong mỗi tháng đâu có giống nhau.<br />
Có lẽ vì nghĩ đến chuyện đó, nên Excel có một hàm dành riêng cho các hệ thống kế toán dựa trên cơ sở một năm có 360 ngày, đó là hàm DAYS360.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Hàm DAYS360()</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = DAYS360(start_date, end_date [, method])<br />
<br />
start_date, end_date: Ngày tháng đại diện cho ngày bắt đầu và ngày kết thúc của khoảng thời gian cần tính toán. Nên nhập bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text. <br />
<br />
method: Một giá trị logic (TRUE, FALSE) để chỉ cách tính toán, theo kiểu châu Âu hay theo kiểu Mỹ. <br />
<br />
FALSE: (hoặc không nhập) Tính toán theo kiểu Mỹ: Nếu start_date là ngày 31 của tháng, thì nó được đổi thành ngày 30 của tháng đó. Nếu end_date là ngày 31 của tháng và start_date nhỏ hơn 30, thì end_date được đổi thành ngày 1 của tháng kế tiếp. <br />
<br />
<br />
TRUE: Tính toán theo kiểu châu Âu: Hễ start_date hoặc end_date mà rơi vào ngày 31 của một tháng thì chúng sẽ được đổi thành ngày 30 của tháng đó. <br />
<br />
Ví dụ: So sánh số ngày chênh lệch giữa 01/01/2008 và 31/5/2008 theo kiểu một năm có 360 ngày và theo kiểu thường (dùng hàm DATEDIF)<br />
<br />
DAYS360("01/01/2008", "31/5/2008") = 150<br />
<br />
DAYS360("01/01/2008", "31/5/2008", TRUE) = 149<br />
<br />
DATEDIF("01/01/2008", "31/5/2008", "d") = 151<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Vấn đề với việc cộng trừ tháng</span><br />
<br />
Đôi khi, chúng ta muốn tính một ngày trước hay sau vài tháng nữa, lấy số tháng cộng trừ, dùng hàm DATE() chẳng hạn ? <br />
Vấn đề là: số ngày trong mỗi tháng đâu có bằng nhau, khi cộng trừ theo tháng, Excel sẽ tự động tính số ngày trong mỗi tháng cho phù hợp, và như thế, nhiều lúc không ra cái chúng ta mong muốn.<br />
<br />
Tôi ví dụ, ô A1 đang chứa ngày 31/1/2008, có bạn đã dùng công thức sau để tính ngày cuối tháng của tháng 4, với mong muốn kết quả cho ra ngày 30/4/2008:<br />
<br />
= DATE(YEAR(A1), MONTH(A1) + 3, DAY(A1))<br />
<br />
Mới xem qua, thì hợp lý chứ... lấy tháng 1 cộng thêm 3 tháng nữa. Nhưng, nếu làm như vậy thì kết quả sẽ ra là ngày 31/4/2008, mà tháng 4 có 30 ngày thôi, nên Excel sẽ tự động cộng thêm 1 ngày sau ngày 30/4/2008, và kết quả của công thức trên sẽ là ngày 01/5/2008.<br />
<br />
Vậy thì làm sao, ví dụ như để tìm ngày cuối tháng của một tháng nào đó?<br />
Chúng ta cùng xem hai hàm sau đây (cũng trong nhóm Analysis Toolpak): EDATE() và EOMONTH()<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Hàm EDATE()</span><br />
<br />
Hàm này trả về một ngày nào đó tính từ mốc thời gian cho trước và cách mốc thời gian này một số tháng được chỉ định<br />
Thường người ta dùng hàm này để tính hạn bảo hành cho một sản phẩm, hoặc ngày đáo hạn hợp đồng...<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = EDATE(start_date, months)<br />
start_date: Ngày dùng làm mốc để tính. Nên nhập ngày này bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text.<br />
<br />
months: Số tháng trước hoặc sau mốc thời gian start_date (nếu trước thì dùng số âm). Trong trường hợp months là số không nguyên, nó sẽ được làm tròn.<br />
<br />
<br />
Xin lấy lại ví dụ đã nói ở đầu bài: ô A1 đang chứa ngày cuối tháng 01/2008, tính ngày cuối tháng sau 3 tháng nữa, dùng công thức:<br />
= EDATE(A1, 3) = 30/4/2008<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span> EDATE() không phải là hàm để tính ngày cuối tháng, mà cho kết quả là ngày trùng với ngày của mốc thời gian muốn tính (start_date). Nếu như trường hợp kết quả trả về là một ngày không hợp lệ của một tháng (ngày 31/4 chẳng hạn), thì EDATE() sẽ lấy ngày cuối tháng của tháng đó (30/4).<br />
<br />
Ví dụ khác: Tôi mua một cái USB ngày hôm nay (08/01/2008), hạn bảo hành 36 tháng, vậy nó được bảo hành tới ngày nào?<br />
= EDATE(TODAY(), 36) = 08/01/2011<br />
<br />
<span style="font-weight: bold;" class="mycode_b">8. Hàm EOMONTH()</span><br />
<br />
Xin dịch ra để dễ hiểu: End Of Month = Ngày cuối tháng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = EOMONTH(start_date, months)<br />
<br />
start_date: Ngày dùng làm mốc để tính. Cũng giống hàm EDATE(), nên nhập ngày này bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text.<br />
<br />
months: Số tháng trước hoặc sau mốc thời gian start_date (nếu trước thì dùng số âm). Trong trường hợp months là số không nguyên, nó sẽ được làm tròn.<br />
<br />
<br />
Ví dụ: EOMONTH(TODAY(), 25) = 40237 = 28/02/2010<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tính ngày cuối tháng của một tháng bất kỳ</span><br />
<br />
Hàm EOMONTH() ở trên cho biết ngày cuối tháng của một tháng nào đó trong tương lai hoặc trong quá khứ.<br />
Bây giờ, nếu bạn có một dữ liệu ngày tháng năm, và bạn muốn biết ngày cuối tháng của tháng trong cái dữ liệu đó (28, 29, 30, hay 31), thì làm sao?<br />
<br />
Chúng ta đã biết rằng hàm DATE() sẽ tự động sửa ngày, tháng, năm thành một ngày hợp lệ, tùy vào các thông số ngày, tháng, năm chúng ta nhập trong công thức. Đây là một cái "mánh" của tôi: <br />
<br />
Vì ngày cuối tháng bao giờ cũng là ngày trước ngày đầu tiên của tháng kế tiếp, ta cứ cho thông số ngày trong hàm DATE() là 0, và tăng số tháng muốn tính thêm 1; mà làm gì có ngày 0, nên chắc chắn DATE() sẽ cho ra kết quả là ngày cuối tháng của tháng trước tháng bị cộng 1, tức là ngay tháng ta muốn tính!<br />
<br />
Và đây là công thức để tính ngày cuối tháng của một ngày tháng năm nào đó (MyDate)<br />
<br />
= DATE(YEAR(MyDate), MONTH(MyDate) + 1, 0)<br />
<br />
Ví dụ: <br />
<br />
Today = 08/01/2008<br />
= DATE(YEAR(TODAY()), MONTH(TODAY()) + 1, 0) = 31/01/2008<br />
<br />
Năm nay có nhuận không? <br />
= DATE(YEAR("01/02/2008"), MONTH("01/02/2008") + 1, 0) = 29/02/2008: Nhuận (!)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Trích ra từng giá trị của thời gian</span><br />
<br />
Thời gian có 3 phần: Giờ, Phút và Giây. Khi cần trích ra riêng từng giá trị này, chúng ta dùng 3 hàm sau đây:<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">9. Hàm HOUR()</span><br />
<br />
Cho biết số chỉ giờ trong một giá trị thời gian<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = HOUR(serial_number)<br />
serial_number: Biểu thức thời gian hoặc là một con số chỉ giá trị thời gian<br />
<br />
Ví dụ: HOUR(0.5) = 12 (giờ)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">10. Hàm MINUTE()</span><br />
<br />
Cho biết số chỉ phút trong một giá trị thời gian<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MINUTE(serial_number)<br />
serial_number: Biểu thức thời gian hoặc là một con số chỉ giá trị thời gian<br />
Ví dụ: Bây giờ là 10:20 PM, MINUTE(NOW()) = 20 (phút)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">11. Hàm SECOND()</span><br />
<br />
Cho biết số chỉ giây trong một giá trị thời gian<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SECOND(serial_number)<br />
serial_number: Biểu thức thời gian hoặc là một con số chỉ giá trị thời gian<br />
Ví dụ: SECOND("2:45:30 PM") = 30 (giây)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tính số ngày làm việc giữa hai khoảng thời gian</span><br />
<br />
Bình thường, nếu lấy ngày tháng trừ ngày tháng, kết quả sẽ bao gồm luôn những ngày lễ, ngày nghỉ, v.v... Còn nếu tính số ngày làm việc trong một khoảng thời gian, thì phải trừ bớt đi những ngày không làm việc.<br />
<br />
Trong Excel có một hàm chuyên để tính toán những ngày làm việc giữa hai khoảng thời gian mà không bao gồm các ngày thứ Bảy, Chủ Nhật và những ngày nghỉ khác được chỉ định: Hàm NETWORKDAYS (đúng nguyên nghĩa của nó: net workdays). <br />
<br />
Dĩ nhiên hàm này chỉ thích hợp với những cơ quan làm việc 5 ngày một tuần, chứ như chúng ta, làm tuốt, có khi là 365 ngày một năm (hic) thì hàm này vô tác dụng! <br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">12. Hàm NETWORKDAYS()</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = NETWORKDAYS(start_date, end_date [, holidays])<br />
start_date, end_date: Ngày tháng đại diện cho ngày bắt đầu và ngày kết thúc công việc. Nên nhập bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text. <br />
<br />
holidays: Danh sách những ngày nghỉ ngoài những ngày thứ Bảy và Chủ Nhật. Danh sách này có thể là một vùng đã được đặt tên. Nếu nhập trực tiếp thì phải bỏ trong cặp dấu móc {}. <br />
<br />
Ví dụ: Công thức tính số ngày làm việc giữa ngày 1/12/2007 và ngày 10/1/2008, trong đó có nghỉ ngày Noel (25/12) và ngày Tết Tây (1/1):<br />
= NETWORKDAYS("01/12/2007", "10/01/2008", {"12/25/2007", "1/1/2008"})<br />
<br />
<span style="font-weight: bold;" class="mycode_b">13. Hàm TODAY()</span><br />
<br />
Trả về ngày tháng năm hiện hành<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = TODAY()<br />
Hàm này không có thông số nào kèm theo cả. <br />
<br />
Kết quả của hàm TODAY() là một con số, đại diện cho ngày tháng năm hiện hành, với thời gian được ngầm hiểu là 0 giờ (nửa đêm). <br />
Ví dụ, hôm nay là ngày 02/01/2008, hàm TODAY() sẽ cho ra con số 39449.0, để xem được theo dạng "dễ nhìn", bạn chỉ cần định dạng lại ô.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">14. Hàm NOW()</span><br />
<br />
Trả về ngày tháng năm và giờ phút giây hiện hành<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = NOW()<br />
Hàm này cũng không có thông số nào kèm theo cả. <br />
<br />
Kết quả của hàm NOW() là một con số, đại diện cho ngày tháng năm và thời gian của hệ thống lúc vừa nhập xong công thức. <br />
Ví dụ, hôm nay, và lúc này là 11 giờ 56 phút ngày 09/01/2008, hàm NOW() sẽ cho ra con số 39456.49643. Để xem được theo dạng "dễ nhìn", bạn chỉ cần định dạng lại ô, theo kiểu dd/mm/yyyy hh:ss:mm chẳng hạn.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ghi chú:</span><br />
- Không phải lúc nào hàm TODAY() và NOW() cũng cho ra một kết quả như nhau, mà mỗi khi bạn sửa chữa bảng tính, gõ một công thức khác, tính toán lại bảng tính, hoặc mở lại bảng tính... thì hàm TODAY() và NOW() sẽ cập nhật theo ngày giờ của hệ thống. <br />
Sự khác nhau giữa hai hàm này chính là: <br />
- TODAY nghĩa là hôm nay, mà lúc 7 giờ sáng hay 9 giờ 30 tối thì cũng là hôm nay. Kết quả của TODAY() vào những lúc khác nhau trong ngày sẽ giống nhau.<br />
- NOW nghĩa là chính lúc này, là lúc ta vừa nhập xong NOW() và nhấn Enter... Kết quả của NOW() vào những lúc khác nhau trong ngày sẽ khác nhau. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">15. Hàm TIME()</span><br />
<br />
Trả về một giá trị thời gian nào đó<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = TIME(hour, minute, second)<br />
hour: Số chỉ giờ, là một con số từ 0 đến 23. Nếu lớn hơn 23, Excel sẽ tự trừ đi một bội số của 24.<br />
<br />
minute: Số chỉ phút, là một con số từ 0 đến 59. Nếu lớn hơn 59, Excel sẽ tính lại và tăng số giờ lên tương ứng.<br />
<br />
second: Số chỉ giây, là một con số từ 0 đến 59. Nếu lớn hơn 59, Excel sẽ tính lại và tăng số phút, số giờ lên tương ứng.<br />
<br />
Ví dụ:<br />
TIME(14, 45, 30) = 2:45:30 PM<br />
<br />
TIME(14, 65, 30) = 3:05:30 PM <br />
<br />
TIME(25, 85, 75) = 2:26:15 AM <br />
<br />
<br />
Cũng như DATE(), hàm TIME() rất hữu dụng khi hour, minute, second là những công thức mà không phải là một con số, nó sẽ giúp chúng ta tính toán chính xác hơn <br />
<br />
<span style="font-weight: bold;" class="mycode_b">16. Hàm TIMEVALUE()</span><br />
<br />
Chuyển đổi một chuỗi văn bản có dạng thời gian thành một giá trị thời gian để có thể tính toán được<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = TIMEVALUE(time_text)<br />
time_text: Chuỗi văn bản cần chuyển đổi<br />
Ví dụ:<br />
TIMEVALUE("26:15") = 0.09375 (= 2:15:00 AM)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">17. Hàm WEEKDAY()</span><br />
<br />
Cho biết số thứ tự của ngày trong tuần<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = WEEKDAY(serial_number [, return_type])<br />
serial_number: Biểu thức ngày tháng hoặc là một con số chỉ giá trị ngày tháng <br />
<br />
return_type: Chọn kiểu kết quả trả về<br />
return_type = 1 (mặc định): Chủ Nhật là 1 (thứ Bảy là 7) <br />
return_type = 2: Thứ Hai là 1 (Chủ Nhật là 7) <br />
return_type = 3: Thứ Hai là 0 (Chủ Nhật là 6) <br />
Ví dụ: (Today = 03/01/2008)<br />
WEEKDAY(TODAY()) = 5<br />
WEEKDAY(TODAY(), 2) = 4<br />
WEEKDAY(TODAY(), 3) = 3<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">18. Hàm WEEKNUM()</span><br />
<br />
Cho biết số thứ tự của tuần trong năm<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = WEEKNUM(serial_number [, return_type])<br />
serial_number: Biểu thức ngày tháng hoặc là một con số chỉ giá trị ngày tháng <br />
<br />
return_type: Chọn kiểu trả về (tùy thuộc vào cách chọn ngày đầu tiên trong tuần)<br />
return_type = 1 (mặc định): Chủ Nhật là ngày đầu tuần <br />
return_type = 2: Thứ Hai là ngày đầu tuần <br />
Ví dụ: Thử xem ngày hạnh phúc của ANHPHUONG nằm vào tuần nào trong năm nay...<br />
WEEKNUM("06/01/2008") = 2<br />
WEEKNUM("06/01/2008", 2) = 1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Dự đoán ngày sẽ hoàn thành một công việc</span><br />
<br />
Giả sử chúng ta có một dự án, theo dự tính sẽ hoàn thành trong một thời gian nào đó (tính bằng ngày), nhưng khoảng thời gian này, bình thường sẽ bao gồm cả số ngày làm việc, số ngày cuối tuần, và cả số ngày lễ nghỉ... Vấn đề là phải dự đoán được ngày nào sẽ hoàn thành dự án này, mà đã trừ bớt đi những ngày nghỉ, không làm...<br />
<br />
Bạn có thể làm điều đó, bằng cách dùng hàm WORKDAY(), một hàm thuộc nhóm Analysis Toolpak (phải cài Add-in này thì mới sử dụng được), hàm này trả về số ngày làm việc trước hoặc sau ngày được chỉ định, và trừ đi những ngày nghỉ.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">19. Hàm WORKDAY()</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = WORKDAY(start_day, days [, holidays])<br />
<br />
start_day: Ngày làm mốc để tính.<br />
<br />
days: Số ngày làm việc trước hoặc sau start_day. Dùng days &gt; 0 cho số ngày làm việc của một dự án chưa hoàn thành, dùng days &lt; 0 cho số ngày làm việc của một dự án đã kết thúc.<br />
<br />
holidays: Danh sách các ngày nghỉ. Có thể gõ trực tiếp một ngày cụ thể, trong trường hợp có nhiều ngày thì các ngày cách nhau bằng dấu phẩy, và đặt tất cả trong một cặp dấu móc {}.<br />
<br />
<br />
Ví dụ, để tính số ngày làm việc cho một dự án 30 ngày. tính từ hôm nay, ta dùng công thức:<br />
<br />
= WORKDAY(TODAY(), 30)<br />
<br />
Tính ngày hoàn thành của một dự án 30 ngày, khởi công ngày 1/12/2007, trong đó nghỉ ngày Noel (25/12) và ngày đầu năm (01/01/2008), dùng công thức:<br />
<br />
= WORKDAY("1/12/2007", 30, {"25/12/2007", "1/1/2008"})<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tính tỷ lệ của một khoảng thời gian so với một năm</span><br />
<br />
Trong công việc hằng ngày, chắc hẳn chúng ta hay nghĩ đến chuyện việc làm này của mình mất hết mấy phần trăm của một năm, ví dụ, một ngày ngủ hết 6 tiếng, là 1/4 ngày, vậy một năm chúng ta ngủ hết 25% (hic) thời gian... <br />
Hoặc một nhân viên của công ty xin nghỉ việc vào tháng 5, lương tính theo năm, vậy công ty phải trả cho người đó bao nhiêu phần trăm lương khi cho nghỉ việc? <br />
Excel có một hàm để tính tỷ lệ của một khoảng thời gian trong một năm, và cho phép tính theo nhiều kiểu (năm 365 ngày, hay năm 360 ngày, tính theo kiểu Mỹ hay theo kiểu châu Âu...):<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">20. Hàm YEARFRAC()</span><br />
<br />
(Dịch từ chữ Year: năm, và Frac = Fraction: tỷ lệ)<br />
<br />
Cú pháp: = YEARFRAC(start_date, end_date [, basis])<br />
start_date, end_date: Ngày tháng đại diện cho ngày bắt đầu và ngày kết thúc của khoảng thời gian cần tính toán. Nên nhập bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text. <br />
<br />
basis: Một con số, quy định kiểu tính: <br />
<br />
0 : (hoặc không nhập) Tính toán theo kiểu Bắc Mỹ, một năm có 360 ngày chia cho 12 tháng, một tháng có 30 ngày. <br />
<br />
<br />
1 : Tính toán theo số ngày thực tế của năm và số ngày thực tế của từng tháng <br />
<br />
<br />
2 : Tính toán theo một năm có 360 ngày, nhưng số ngày là số ngày thực tế của từng tháng <br />
<br />
<br />
3 : Tính toán theo một năm có 365 ngày, và số ngày là số ngày thực tế của từng tháng <br />
<br />
<br />
4 : Tính toán theo kiểu Châu Âu,mỗi tháng có 30 ngày (nếu start_date hoặc end_date mà rơi vào ngày 31 của một tháng thì chúng sẽ được đổi thành ngày 30 của tháng đó) <br />
<br />
<br />
<br />
Ví dụ: Tính tỷ lệ giữa ngày 15/3/2007 và ngày 30/7/2007 so với 1 năm:<br />
<br />
YEARFRAC("15/3/2007", "30/7/2007") = 37%]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">1. Hàm DATE()</span><br />
<br />
Trả về một ngày tháng năm nào đó<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = DATE(year, month, day)<br />
<br />
year: Số chỉ năm<br />
Con số này có thể là 1 đến 4 ký số. <br />
- Nếu nhỏ hơn 1900, Excel sẽ tự động cộng thêm 1900 vào để tính (ví dụ year = 100 thì Excel sẽ hiểu đó là năm 2000)<br />
- Nếu từ 1900 đến 9999, thì Excel sẽ coi đó chính là năm cần tính<br />
- Nếu nhỏ hơn 0 hoặc lớn hơn 10.000, Excel sẽ báo lỗi #NUM!<br />
<br />
month: Số chỉ tháng<br />
Nếu con số này lớn hơn 12, thì Excel sẽ tự động quy đổi thành 12 bằng 1 năm và tăng số năm lên. <br />
<br />
day: Số chỉ ngày<br />
Nếu con số này lớn hơn số ngày của tháng, thì Excel sẽ tự động quy đổi thành số ngày nhiều nhất của tháng cho phù hợp và tăng số tháng lên, nếu cần thì tăng cả số năm lên luôn.<br />
<br />
Ví dụ: <br />
DATE(2007, 12, 25) = Giáng Sinh năm 2007 <br />
<br />
DATE(2007, 12, 32) = 01/01/2008 <br />
<br />
DATE(2007, 13, 25) = 25/01/2008 <br />
<br />
DATE(7, 25, 32) = 01/02/1909 <br />
(số ngày (date) = 32, lớn hơn số ngày nhiều nhất của một tháng (31), do đó, Excel sẽ lấy ngày là 01, và tăng số tháng (month) thêm 1; số tháng (month) = 25 + 1 = 26 = 2 + (2 x 12), do đó Excel sẽ lấy tháng là 02, và tăng số năm thêm 2; số năm (year) = 7 + 2 = 9, Excel sẽ cộng thêm 1900 = 1909) <br />
<br />
Hàm DATE() rất hữu dụng khi year, month, day là những công thức mà không phải là một con số, nó sẽ giúp chúng ta tính toán chính xác hơn <br />
Khi nhập hàm DATE(), bạn phải cẩn thận thứ tự year, month, day, vì nó rất dễ nhầm lẫn (theo kiểu VN chúng ta: ngày, tháng, năm) <br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Hàm DATEVALUE()</span><br />
<br />
Chuyển đổi một chuỗi văn bản có dạng ngày tháng năm thành một giá trị ngày tháng năm để có thể tính toán được<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = DATEVALUE(date_text)<br />
<br />
- date_text: Chuỗi văn bản cần chuyển đổi<br />
- date_text có giới hạn trong khoảng từ 01/01/1900 đến 31/12/9999, nếu nằm ngoài khoảng này, hàm sẽ báo lỗi #VALUE! <br />
- date_text phải được nhập trong cặp dấu móc kép ("") <br />
- Nếu date_text chỉ có hai phần, Excel sẽ hiểu như sau: nếu phần sau là một giá trị &lt; 13 và phần đầu là một giá trị &lt; 32, nó xem như phần đầu là ngày, phần sau là tháng, và lấy năm hiện hành làm giá trị để tính năm; còn nếu phần sau là một giá trị &gt; 12 và phần đầu là một giá trị &lt; 13, nó xem như phần đầu là tháng, phần sau là năm, và cho giá trị tính ngày là 1. <br />
<br />
Ví dụ:<br />
DATEVALUE("25/12/2007") = 39441 (= 25/12/2007)<br />
<br />
DATEVALUE("25/12") = 39807 (= 25/12/2008)<br />
<br />
DATEVALUE("12/25") = 45992 (= 01/12/2025)<br />
<br />
DATEVALUE("12/25/2007") = #VALUE!<br />
<br />
DATEVALUE("25 December 2009") = 40172 = 25/12/2009<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Hàm YEAR()</span><br />
<br />
Cho biết số chỉ năm trong một giá trị ngày tháng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = YEAR(serial_number)<br />
serial_number: Biểu thức ngày tháng hoặc là một con số chỉ giá trị ngày tháng<br />
<br />
Ví dụ: YEAR(TODAY()) = 2008<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Hàm MONTH()</span><br />
<br />
Cho biết số chỉ tháng trong một giá trị ngày tháng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MONTH(serial_number)<br />
<br />
serial_number: Biểu thức ngày tháng hoặc là một con số chỉ giá trị ngày tháng<br />
<br />
Ví dụ: MONTH(TODAY()) = 1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Hàm DAY()</span><br />
<br />
Cho biết số chỉ ngày trong một giá trị ngày tháng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = DAY(serial_number)<br />
<br />
serial_number: Biểu thức ngày tháng hoặc là một con số chỉ giá trị ngày tháng<br />
<br />
Ví dụ: DAY(TODAY()) = 3<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tính số ngày chênh lệch theo kiểu một năm có 360 ngày</span><br />
<br />
Hiện nay, vẫn còn một số hệ thống kế toán dùng kiểu tính thời gian là một tháng coi như có 30 ngày và một năm coi như có 360 ngày!<br />
Gặp trường hợp này, việc tính toán thời gian sẽ không đơn giản, vì thực tế thì số ngày trong mỗi tháng đâu có giống nhau.<br />
Có lẽ vì nghĩ đến chuyện đó, nên Excel có một hàm dành riêng cho các hệ thống kế toán dựa trên cơ sở một năm có 360 ngày, đó là hàm DAYS360.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Hàm DAYS360()</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = DAYS360(start_date, end_date [, method])<br />
<br />
start_date, end_date: Ngày tháng đại diện cho ngày bắt đầu và ngày kết thúc của khoảng thời gian cần tính toán. Nên nhập bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text. <br />
<br />
method: Một giá trị logic (TRUE, FALSE) để chỉ cách tính toán, theo kiểu châu Âu hay theo kiểu Mỹ. <br />
<br />
FALSE: (hoặc không nhập) Tính toán theo kiểu Mỹ: Nếu start_date là ngày 31 của tháng, thì nó được đổi thành ngày 30 của tháng đó. Nếu end_date là ngày 31 của tháng và start_date nhỏ hơn 30, thì end_date được đổi thành ngày 1 của tháng kế tiếp. <br />
<br />
<br />
TRUE: Tính toán theo kiểu châu Âu: Hễ start_date hoặc end_date mà rơi vào ngày 31 của một tháng thì chúng sẽ được đổi thành ngày 30 của tháng đó. <br />
<br />
Ví dụ: So sánh số ngày chênh lệch giữa 01/01/2008 và 31/5/2008 theo kiểu một năm có 360 ngày và theo kiểu thường (dùng hàm DATEDIF)<br />
<br />
DAYS360("01/01/2008", "31/5/2008") = 150<br />
<br />
DAYS360("01/01/2008", "31/5/2008", TRUE) = 149<br />
<br />
DATEDIF("01/01/2008", "31/5/2008", "d") = 151<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Vấn đề với việc cộng trừ tháng</span><br />
<br />
Đôi khi, chúng ta muốn tính một ngày trước hay sau vài tháng nữa, lấy số tháng cộng trừ, dùng hàm DATE() chẳng hạn ? <br />
Vấn đề là: số ngày trong mỗi tháng đâu có bằng nhau, khi cộng trừ theo tháng, Excel sẽ tự động tính số ngày trong mỗi tháng cho phù hợp, và như thế, nhiều lúc không ra cái chúng ta mong muốn.<br />
<br />
Tôi ví dụ, ô A1 đang chứa ngày 31/1/2008, có bạn đã dùng công thức sau để tính ngày cuối tháng của tháng 4, với mong muốn kết quả cho ra ngày 30/4/2008:<br />
<br />
= DATE(YEAR(A1), MONTH(A1) + 3, DAY(A1))<br />
<br />
Mới xem qua, thì hợp lý chứ... lấy tháng 1 cộng thêm 3 tháng nữa. Nhưng, nếu làm như vậy thì kết quả sẽ ra là ngày 31/4/2008, mà tháng 4 có 30 ngày thôi, nên Excel sẽ tự động cộng thêm 1 ngày sau ngày 30/4/2008, và kết quả của công thức trên sẽ là ngày 01/5/2008.<br />
<br />
Vậy thì làm sao, ví dụ như để tìm ngày cuối tháng của một tháng nào đó?<br />
Chúng ta cùng xem hai hàm sau đây (cũng trong nhóm Analysis Toolpak): EDATE() và EOMONTH()<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Hàm EDATE()</span><br />
<br />
Hàm này trả về một ngày nào đó tính từ mốc thời gian cho trước và cách mốc thời gian này một số tháng được chỉ định<br />
Thường người ta dùng hàm này để tính hạn bảo hành cho một sản phẩm, hoặc ngày đáo hạn hợp đồng...<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = EDATE(start_date, months)<br />
start_date: Ngày dùng làm mốc để tính. Nên nhập ngày này bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text.<br />
<br />
months: Số tháng trước hoặc sau mốc thời gian start_date (nếu trước thì dùng số âm). Trong trường hợp months là số không nguyên, nó sẽ được làm tròn.<br />
<br />
<br />
Xin lấy lại ví dụ đã nói ở đầu bài: ô A1 đang chứa ngày cuối tháng 01/2008, tính ngày cuối tháng sau 3 tháng nữa, dùng công thức:<br />
= EDATE(A1, 3) = 30/4/2008<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lưu ý:</span> EDATE() không phải là hàm để tính ngày cuối tháng, mà cho kết quả là ngày trùng với ngày của mốc thời gian muốn tính (start_date). Nếu như trường hợp kết quả trả về là một ngày không hợp lệ của một tháng (ngày 31/4 chẳng hạn), thì EDATE() sẽ lấy ngày cuối tháng của tháng đó (30/4).<br />
<br />
Ví dụ khác: Tôi mua một cái USB ngày hôm nay (08/01/2008), hạn bảo hành 36 tháng, vậy nó được bảo hành tới ngày nào?<br />
= EDATE(TODAY(), 36) = 08/01/2011<br />
<br />
<span style="font-weight: bold;" class="mycode_b">8. Hàm EOMONTH()</span><br />
<br />
Xin dịch ra để dễ hiểu: End Of Month = Ngày cuối tháng<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = EOMONTH(start_date, months)<br />
<br />
start_date: Ngày dùng làm mốc để tính. Cũng giống hàm EDATE(), nên nhập ngày này bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text.<br />
<br />
months: Số tháng trước hoặc sau mốc thời gian start_date (nếu trước thì dùng số âm). Trong trường hợp months là số không nguyên, nó sẽ được làm tròn.<br />
<br />
<br />
Ví dụ: EOMONTH(TODAY(), 25) = 40237 = 28/02/2010<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tính ngày cuối tháng của một tháng bất kỳ</span><br />
<br />
Hàm EOMONTH() ở trên cho biết ngày cuối tháng của một tháng nào đó trong tương lai hoặc trong quá khứ.<br />
Bây giờ, nếu bạn có một dữ liệu ngày tháng năm, và bạn muốn biết ngày cuối tháng của tháng trong cái dữ liệu đó (28, 29, 30, hay 31), thì làm sao?<br />
<br />
Chúng ta đã biết rằng hàm DATE() sẽ tự động sửa ngày, tháng, năm thành một ngày hợp lệ, tùy vào các thông số ngày, tháng, năm chúng ta nhập trong công thức. Đây là một cái "mánh" của tôi: <br />
<br />
Vì ngày cuối tháng bao giờ cũng là ngày trước ngày đầu tiên của tháng kế tiếp, ta cứ cho thông số ngày trong hàm DATE() là 0, và tăng số tháng muốn tính thêm 1; mà làm gì có ngày 0, nên chắc chắn DATE() sẽ cho ra kết quả là ngày cuối tháng của tháng trước tháng bị cộng 1, tức là ngay tháng ta muốn tính!<br />
<br />
Và đây là công thức để tính ngày cuối tháng của một ngày tháng năm nào đó (MyDate)<br />
<br />
= DATE(YEAR(MyDate), MONTH(MyDate) + 1, 0)<br />
<br />
Ví dụ: <br />
<br />
Today = 08/01/2008<br />
= DATE(YEAR(TODAY()), MONTH(TODAY()) + 1, 0) = 31/01/2008<br />
<br />
Năm nay có nhuận không? <br />
= DATE(YEAR("01/02/2008"), MONTH("01/02/2008") + 1, 0) = 29/02/2008: Nhuận (!)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Trích ra từng giá trị của thời gian</span><br />
<br />
Thời gian có 3 phần: Giờ, Phút và Giây. Khi cần trích ra riêng từng giá trị này, chúng ta dùng 3 hàm sau đây:<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">9. Hàm HOUR()</span><br />
<br />
Cho biết số chỉ giờ trong một giá trị thời gian<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = HOUR(serial_number)<br />
serial_number: Biểu thức thời gian hoặc là một con số chỉ giá trị thời gian<br />
<br />
Ví dụ: HOUR(0.5) = 12 (giờ)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">10. Hàm MINUTE()</span><br />
<br />
Cho biết số chỉ phút trong một giá trị thời gian<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = MINUTE(serial_number)<br />
serial_number: Biểu thức thời gian hoặc là một con số chỉ giá trị thời gian<br />
Ví dụ: Bây giờ là 10:20 PM, MINUTE(NOW()) = 20 (phút)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">11. Hàm SECOND()</span><br />
<br />
Cho biết số chỉ giây trong một giá trị thời gian<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = SECOND(serial_number)<br />
serial_number: Biểu thức thời gian hoặc là một con số chỉ giá trị thời gian<br />
Ví dụ: SECOND("2:45:30 PM") = 30 (giây)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tính số ngày làm việc giữa hai khoảng thời gian</span><br />
<br />
Bình thường, nếu lấy ngày tháng trừ ngày tháng, kết quả sẽ bao gồm luôn những ngày lễ, ngày nghỉ, v.v... Còn nếu tính số ngày làm việc trong một khoảng thời gian, thì phải trừ bớt đi những ngày không làm việc.<br />
<br />
Trong Excel có một hàm chuyên để tính toán những ngày làm việc giữa hai khoảng thời gian mà không bao gồm các ngày thứ Bảy, Chủ Nhật và những ngày nghỉ khác được chỉ định: Hàm NETWORKDAYS (đúng nguyên nghĩa của nó: net workdays). <br />
<br />
Dĩ nhiên hàm này chỉ thích hợp với những cơ quan làm việc 5 ngày một tuần, chứ như chúng ta, làm tuốt, có khi là 365 ngày một năm (hic) thì hàm này vô tác dụng! <br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">12. Hàm NETWORKDAYS()</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = NETWORKDAYS(start_date, end_date [, holidays])<br />
start_date, end_date: Ngày tháng đại diện cho ngày bắt đầu và ngày kết thúc công việc. Nên nhập bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text. <br />
<br />
holidays: Danh sách những ngày nghỉ ngoài những ngày thứ Bảy và Chủ Nhật. Danh sách này có thể là một vùng đã được đặt tên. Nếu nhập trực tiếp thì phải bỏ trong cặp dấu móc {}. <br />
<br />
Ví dụ: Công thức tính số ngày làm việc giữa ngày 1/12/2007 và ngày 10/1/2008, trong đó có nghỉ ngày Noel (25/12) và ngày Tết Tây (1/1):<br />
= NETWORKDAYS("01/12/2007", "10/01/2008", {"12/25/2007", "1/1/2008"})<br />
<br />
<span style="font-weight: bold;" class="mycode_b">13. Hàm TODAY()</span><br />
<br />
Trả về ngày tháng năm hiện hành<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = TODAY()<br />
Hàm này không có thông số nào kèm theo cả. <br />
<br />
Kết quả của hàm TODAY() là một con số, đại diện cho ngày tháng năm hiện hành, với thời gian được ngầm hiểu là 0 giờ (nửa đêm). <br />
Ví dụ, hôm nay là ngày 02/01/2008, hàm TODAY() sẽ cho ra con số 39449.0, để xem được theo dạng "dễ nhìn", bạn chỉ cần định dạng lại ô.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">14. Hàm NOW()</span><br />
<br />
Trả về ngày tháng năm và giờ phút giây hiện hành<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = NOW()<br />
Hàm này cũng không có thông số nào kèm theo cả. <br />
<br />
Kết quả của hàm NOW() là một con số, đại diện cho ngày tháng năm và thời gian của hệ thống lúc vừa nhập xong công thức. <br />
Ví dụ, hôm nay, và lúc này là 11 giờ 56 phút ngày 09/01/2008, hàm NOW() sẽ cho ra con số 39456.49643. Để xem được theo dạng "dễ nhìn", bạn chỉ cần định dạng lại ô, theo kiểu dd/mm/yyyy hh:ss:mm chẳng hạn.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Ghi chú:</span><br />
- Không phải lúc nào hàm TODAY() và NOW() cũng cho ra một kết quả như nhau, mà mỗi khi bạn sửa chữa bảng tính, gõ một công thức khác, tính toán lại bảng tính, hoặc mở lại bảng tính... thì hàm TODAY() và NOW() sẽ cập nhật theo ngày giờ của hệ thống. <br />
Sự khác nhau giữa hai hàm này chính là: <br />
- TODAY nghĩa là hôm nay, mà lúc 7 giờ sáng hay 9 giờ 30 tối thì cũng là hôm nay. Kết quả của TODAY() vào những lúc khác nhau trong ngày sẽ giống nhau.<br />
- NOW nghĩa là chính lúc này, là lúc ta vừa nhập xong NOW() và nhấn Enter... Kết quả của NOW() vào những lúc khác nhau trong ngày sẽ khác nhau. <br />
<br />
<span style="font-weight: bold;" class="mycode_b">15. Hàm TIME()</span><br />
<br />
Trả về một giá trị thời gian nào đó<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = TIME(hour, minute, second)<br />
hour: Số chỉ giờ, là một con số từ 0 đến 23. Nếu lớn hơn 23, Excel sẽ tự trừ đi một bội số của 24.<br />
<br />
minute: Số chỉ phút, là một con số từ 0 đến 59. Nếu lớn hơn 59, Excel sẽ tính lại và tăng số giờ lên tương ứng.<br />
<br />
second: Số chỉ giây, là một con số từ 0 đến 59. Nếu lớn hơn 59, Excel sẽ tính lại và tăng số phút, số giờ lên tương ứng.<br />
<br />
Ví dụ:<br />
TIME(14, 45, 30) = 2:45:30 PM<br />
<br />
TIME(14, 65, 30) = 3:05:30 PM <br />
<br />
TIME(25, 85, 75) = 2:26:15 AM <br />
<br />
<br />
Cũng như DATE(), hàm TIME() rất hữu dụng khi hour, minute, second là những công thức mà không phải là một con số, nó sẽ giúp chúng ta tính toán chính xác hơn <br />
<br />
<span style="font-weight: bold;" class="mycode_b">16. Hàm TIMEVALUE()</span><br />
<br />
Chuyển đổi một chuỗi văn bản có dạng thời gian thành một giá trị thời gian để có thể tính toán được<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = TIMEVALUE(time_text)<br />
time_text: Chuỗi văn bản cần chuyển đổi<br />
Ví dụ:<br />
TIMEVALUE("26:15") = 0.09375 (= 2:15:00 AM)<br />
<br />
<span style="font-weight: bold;" class="mycode_b">17. Hàm WEEKDAY()</span><br />
<br />
Cho biết số thứ tự của ngày trong tuần<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = WEEKDAY(serial_number [, return_type])<br />
serial_number: Biểu thức ngày tháng hoặc là một con số chỉ giá trị ngày tháng <br />
<br />
return_type: Chọn kiểu kết quả trả về<br />
return_type = 1 (mặc định): Chủ Nhật là 1 (thứ Bảy là 7) <br />
return_type = 2: Thứ Hai là 1 (Chủ Nhật là 7) <br />
return_type = 3: Thứ Hai là 0 (Chủ Nhật là 6) <br />
Ví dụ: (Today = 03/01/2008)<br />
WEEKDAY(TODAY()) = 5<br />
WEEKDAY(TODAY(), 2) = 4<br />
WEEKDAY(TODAY(), 3) = 3<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">18. Hàm WEEKNUM()</span><br />
<br />
Cho biết số thứ tự của tuần trong năm<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = WEEKNUM(serial_number [, return_type])<br />
serial_number: Biểu thức ngày tháng hoặc là một con số chỉ giá trị ngày tháng <br />
<br />
return_type: Chọn kiểu trả về (tùy thuộc vào cách chọn ngày đầu tiên trong tuần)<br />
return_type = 1 (mặc định): Chủ Nhật là ngày đầu tuần <br />
return_type = 2: Thứ Hai là ngày đầu tuần <br />
Ví dụ: Thử xem ngày hạnh phúc của ANHPHUONG nằm vào tuần nào trong năm nay...<br />
WEEKNUM("06/01/2008") = 2<br />
WEEKNUM("06/01/2008", 2) = 1<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Dự đoán ngày sẽ hoàn thành một công việc</span><br />
<br />
Giả sử chúng ta có một dự án, theo dự tính sẽ hoàn thành trong một thời gian nào đó (tính bằng ngày), nhưng khoảng thời gian này, bình thường sẽ bao gồm cả số ngày làm việc, số ngày cuối tuần, và cả số ngày lễ nghỉ... Vấn đề là phải dự đoán được ngày nào sẽ hoàn thành dự án này, mà đã trừ bớt đi những ngày nghỉ, không làm...<br />
<br />
Bạn có thể làm điều đó, bằng cách dùng hàm WORKDAY(), một hàm thuộc nhóm Analysis Toolpak (phải cài Add-in này thì mới sử dụng được), hàm này trả về số ngày làm việc trước hoặc sau ngày được chỉ định, và trừ đi những ngày nghỉ.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">19. Hàm WORKDAY()</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Cú pháp:</span> = WORKDAY(start_day, days [, holidays])<br />
<br />
start_day: Ngày làm mốc để tính.<br />
<br />
days: Số ngày làm việc trước hoặc sau start_day. Dùng days &gt; 0 cho số ngày làm việc của một dự án chưa hoàn thành, dùng days &lt; 0 cho số ngày làm việc của một dự án đã kết thúc.<br />
<br />
holidays: Danh sách các ngày nghỉ. Có thể gõ trực tiếp một ngày cụ thể, trong trường hợp có nhiều ngày thì các ngày cách nhau bằng dấu phẩy, và đặt tất cả trong một cặp dấu móc {}.<br />
<br />
<br />
Ví dụ, để tính số ngày làm việc cho một dự án 30 ngày. tính từ hôm nay, ta dùng công thức:<br />
<br />
= WORKDAY(TODAY(), 30)<br />
<br />
Tính ngày hoàn thành của một dự án 30 ngày, khởi công ngày 1/12/2007, trong đó nghỉ ngày Noel (25/12) và ngày đầu năm (01/01/2008), dùng công thức:<br />
<br />
= WORKDAY("1/12/2007", 30, {"25/12/2007", "1/1/2008"})<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tính tỷ lệ của một khoảng thời gian so với một năm</span><br />
<br />
Trong công việc hằng ngày, chắc hẳn chúng ta hay nghĩ đến chuyện việc làm này của mình mất hết mấy phần trăm của một năm, ví dụ, một ngày ngủ hết 6 tiếng, là 1/4 ngày, vậy một năm chúng ta ngủ hết 25% (hic) thời gian... <br />
Hoặc một nhân viên của công ty xin nghỉ việc vào tháng 5, lương tính theo năm, vậy công ty phải trả cho người đó bao nhiêu phần trăm lương khi cho nghỉ việc? <br />
Excel có một hàm để tính tỷ lệ của một khoảng thời gian trong một năm, và cho phép tính theo nhiều kiểu (năm 365 ngày, hay năm 360 ngày, tính theo kiểu Mỹ hay theo kiểu châu Âu...):<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">20. Hàm YEARFRAC()</span><br />
<br />
(Dịch từ chữ Year: năm, và Frac = Fraction: tỷ lệ)<br />
<br />
Cú pháp: = YEARFRAC(start_date, end_date [, basis])<br />
start_date, end_date: Ngày tháng đại diện cho ngày bắt đầu và ngày kết thúc của khoảng thời gian cần tính toán. Nên nhập bằng hàm DATE(), hoặc dùng một kết quả trả về của một công thức khác, vì có thể sẽ xảy ra lỗi nếu bạn nhập trực tiếp ngày tháng dưới dạng text. <br />
<br />
basis: Một con số, quy định kiểu tính: <br />
<br />
0 : (hoặc không nhập) Tính toán theo kiểu Bắc Mỹ, một năm có 360 ngày chia cho 12 tháng, một tháng có 30 ngày. <br />
<br />
<br />
1 : Tính toán theo số ngày thực tế của năm và số ngày thực tế của từng tháng <br />
<br />
<br />
2 : Tính toán theo một năm có 360 ngày, nhưng số ngày là số ngày thực tế của từng tháng <br />
<br />
<br />
3 : Tính toán theo một năm có 365 ngày, và số ngày là số ngày thực tế của từng tháng <br />
<br />
<br />
4 : Tính toán theo kiểu Châu Âu,mỗi tháng có 30 ngày (nếu start_date hoặc end_date mà rơi vào ngày 31 của một tháng thì chúng sẽ được đổi thành ngày 30 của tháng đó) <br />
<br />
<br />
<br />
Ví dụ: Tính tỷ lệ giữa ngày 15/3/2007 và ngày 30/7/2007 so với 1 năm:<br />
<br />
YEARFRAC("15/3/2007", "30/7/2007") = 37%]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Function] Code Xếp hạng]]></title>
			<link>https://thuthuataccess.com/forum/thread-8655.html</link>
			<pubDate>Mon, 20 Jul 2015 16:31:49 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=15953">tranthanhan1962</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-8655.html</guid>
			<description><![CDATA[Trên Forum các bạn cũng đã có hướng dẫn một vài phương pháp để xử dụng xếp hạng (Cái này access dỡ hơn excel). Mình cũng gởi đến “góp vui cùng các bạn” một code xếp hạng trước đây mình xử dụng để xếp hạng khi còn đi dạy. Lúc trước do yêu cầu xếp hạng theo điểm nên functon này chỉ xếp được điểm lớn thì hạng cao. Nhưng để hoàn chỉnh mình xử lý cả 2 dạng: Điểm lớn hạng cao, điêm nhỏ hạng thấp và ngược lại (Ví dụ thi bơi lội thì thời gian càng ít hạng càng cao).<br />
Tạo một module chứa<br />
 <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Function&nbsp;</span><span style="color: #0000BB">XepHang</span><span style="color: #007700">(</span><span style="color: #0000BB">TenQuery&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">FieldXepHang&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">FieldID&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ValueID</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Kieuxep&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">String<br />On&nbsp;Error&nbsp;</span><span style="color: #007700">GoTo&nbsp;</span><span style="color: #0000BB">BiLoi<br />       &nbsp;Dim&nbsp;CSDL&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Database<br />       &nbsp;Dim&nbsp;Bang&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Recordset<br />       &nbsp;Dim&nbsp;Duocxephang&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br />       &nbsp;Dim&nbsp;Xep&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Double<br />       &nbsp;Dim&nbsp;TrungHang&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Double<br />   &nbsp;Xep&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1<br />   &nbsp;TrungHang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0<br />   &nbsp;Set&nbsp;CSDL&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">CurrentDb<br />   &nbsp;Set&nbsp;Bang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">CSDL</span><span style="color: #007700">.</span><span style="color: #0000BB">OpenRecordset</span><span style="color: #007700">(</span><span style="color: #0000BB">TenQuery</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">dbOpenDynaset</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">dbReadOnly</span><span style="color: #007700">)<br /></span><span style="color: #0000BB">   &nbsp;<br />   &nbsp;Bang</span><span style="color: #007700">.</span><span style="color: #0000BB">FindFirst&nbsp;FieldID&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">"&nbsp;=&nbsp;"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">ValueID<br />   &nbsp;</span><span style="color: #007700">If&nbsp;</span><span style="color: #0000BB">Is_Null</span><span style="color: #007700">(</span><span style="color: #0000BB">Bang</span><span style="color: #007700">(</span><span style="color: #0000BB">FieldXepHang</span><span style="color: #007700">))&nbsp;</span><span style="color: #0000BB">Then&nbsp;</span><span style="color: #007700">Exit&nbsp;Function<br /></span><span style="color: #0000BB">   &nbsp;Duocxephang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Bang</span><span style="color: #007700">(</span><span style="color: #0000BB">FieldXepHang</span><span style="color: #007700">)<br /></span><span style="color: #0000BB">   &nbsp;Bang</span><span style="color: #007700">.</span><span style="color: #0000BB">MoveFirst<br />   &nbsp;<br />Select&nbsp;</span><span style="color: #007700">Case&nbsp;</span><span style="color: #0000BB">Kieuxep<br />   &nbsp;</span><span style="color: #007700">Case&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #DD0000">'&nbsp;Lon&nbsp;hang&nbsp;cao<br />           &nbsp;Do&nbsp;Until&nbsp;Bang.EOF<br />               &nbsp;If&nbsp;Bang(FieldXepHang)&nbsp;&gt;&nbsp;Duocxephang&nbsp;Then&nbsp;Xep&nbsp;=&nbsp;Xep&nbsp;+&nbsp;1<br />               &nbsp;If&nbsp;Bang(FieldXepHang)&nbsp;=&nbsp;Duocxephang&nbsp;Then&nbsp;TrungHang&nbsp;=&nbsp;TrungHang&nbsp;+&nbsp;1<br />               &nbsp;Bang.MoveNext<br />           &nbsp;Loop<br />           &nbsp;If&nbsp;TrungHang&nbsp;&gt;&nbsp;1&nbsp;Then<br />               &nbsp;XepHang&nbsp;=&nbsp;Xep&nbsp;&amp;&nbsp;"="<br />           &nbsp;Else<br />               &nbsp;XepHang&nbsp;=&nbsp;Xep<br />           &nbsp;End&nbsp;If<br />           &nbsp;Bang.Close<br />               &nbsp;Set&nbsp;Bang&nbsp;=&nbsp;Nothing<br />           &nbsp;Set&nbsp;CSDL&nbsp;=&nbsp;Nothing<br /> <br />   &nbsp;Case&nbsp;1&nbsp;'&nbsp;</span><span style="color: #0000BB">Nho&nbsp;hang&nbsp;cao<br />             &nbsp;</span><span style="color: #007700">Do&nbsp;</span><span style="color: #0000BB">Until&nbsp;Bang</span><span style="color: #007700">.</span><span style="color: #0000BB">EOF<br />               &nbsp;</span><span style="color: #007700">If&nbsp;</span><span style="color: #0000BB">Bang</span><span style="color: #007700">(</span><span style="color: #0000BB">FieldXepHang</span><span style="color: #007700">)&nbsp;&lt;&nbsp;</span><span style="color: #0000BB">Duocxephang&nbsp;Then&nbsp;Xep&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Xep&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1<br />               &nbsp;</span><span style="color: #007700">If&nbsp;</span><span style="color: #0000BB">Bang</span><span style="color: #007700">(</span><span style="color: #0000BB">FieldXepHang</span><span style="color: #007700">)&nbsp;=&nbsp;</span><span style="color: #0000BB">Duocxephang&nbsp;Then&nbsp;TrungHang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">TrungHang&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1<br />               &nbsp;Bang</span><span style="color: #007700">.</span><span style="color: #0000BB">MoveNext<br />           &nbsp;Loop<br />           &nbsp;</span><span style="color: #007700">If&nbsp;</span><span style="color: #0000BB">TrungHang&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">1&nbsp;Then<br />               &nbsp;XepHang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Xep&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">"="<br /></span><span style="color: #0000BB">           &nbsp;</span><span style="color: #007700">Else<br /></span><span style="color: #0000BB">               &nbsp;XepHang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Xep<br />           &nbsp;End&nbsp;</span><span style="color: #007700">If<br /></span><span style="color: #0000BB">           &nbsp;Bang</span><span style="color: #007700">.</span><span style="color: #0000BB">Close<br />    &nbsp;       Set&nbsp;Bang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Nothing<br />           &nbsp;Set&nbsp;CSDL&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Nothing<br />   &nbsp;</span><span style="color: #007700">Case&nbsp;Else<br /></span><span style="color: #0000BB">   &nbsp;<br />End&nbsp;Select<br />   &nbsp;<br />BiLoi</span><span style="color: #007700">:<br /></span><span style="color: #0000BB"> <br />End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div><br />
 <br />
Trong đó biến Kieuxep là 0 thì giá trị FieldXepHang càng cao thì hạng càng cao, biến Kieuxep càng thấp thì hạng càng cao.<br />
Để xử lý hàm này thì table của bạn phải có field ID Primary Key.<br />
 <br />
Ví dụ Bạn có table với các field: ID, TenHS, Diem<br />
Tạo query: BangXepHangHocTap<br />
<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">SELECT&nbsp;DiemHocTap</span><span style="color: #007700">.</span><span style="color: #0000BB">ID</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">XepHang</span><span style="color: #007700">(</span><span style="color: #DD0000">"BangXepHangHocTap"</span><span style="color: #007700">,</span><span style="color: #DD0000">"Diem"</span><span style="color: #007700">,</span><span style="color: #DD0000">"ID"</span><span style="color: #007700">,[</span><span style="color: #0000BB">ID</span><span style="color: #007700">],</span><span style="color: #0000BB">0</span><span style="color: #007700">)&nbsp;AS&nbsp;</span><span style="color: #0000BB">ThuHang</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">DiemHocTap</span><span style="color: #007700">.</span><span style="color: #0000BB">TenHS</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">DiemHocTap</span><span style="color: #007700">.</span><span style="color: #0000BB">Diem<br />FROM&nbsp;DiemHocTap<br />ORDER&nbsp;BY&nbsp;DiemHocTap</span><span style="color: #007700">.</span><span style="color: #0000BB">Diem</span><span style="color: #007700">;&nbsp;<br /></span></code></div></div></div><br />
 <br />
Vài điểm cần lưu ý<br />
Field ThuHang có function:<br />
 <br />
ThuHang: XepHang("BangXepHangHocTap","Diem","ID",[ID],0)<br />
 <br />
- "BangXepHangHocTap" là tên của query nó đang xử lý.<br />
- "Diem", là Field để căn cứ giá trị lớn nhỏ để xếp hạng.<br />
- "ID" và [ID] là Tên và giá trị Field Primary Key chỉ mục để vòng lặp xử lý việc xếp hạng. Nhớ là một cái trong " " và một cái trong [ ].<br />
- Giá trị 0 để xếp hạng lớn Diem trước nhỏ sau, giá trị 1 để xếp hạng Diem nhỏ trước lớn sau.<br />
- Nhớ Thay thế từ <span style="font-weight: bold;" class="mycode_b">Is_Null = IsNull </span>trong đoạn mã<br />
Mong rằng function này sẽ hỗ trợ được cho các bạn trong công việc<br />
 <br />
 <a href="http://www.mediafire.com/download/e2qb2j0anth82mx/XepHang.mdb" target="_blank" rel="noopener" class="mycode_url">Function Xep Hang</a>]]></description>
			<content:encoded><![CDATA[Trên Forum các bạn cũng đã có hướng dẫn một vài phương pháp để xử dụng xếp hạng (Cái này access dỡ hơn excel). Mình cũng gởi đến “góp vui cùng các bạn” một code xếp hạng trước đây mình xử dụng để xếp hạng khi còn đi dạy. Lúc trước do yêu cầu xếp hạng theo điểm nên functon này chỉ xếp được điểm lớn thì hạng cao. Nhưng để hoàn chỉnh mình xử lý cả 2 dạng: Điểm lớn hạng cao, điêm nhỏ hạng thấp và ngược lại (Ví dụ thi bơi lội thì thời gian càng ít hạng càng cao).<br />
Tạo một module chứa<br />
 <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Function&nbsp;</span><span style="color: #0000BB">XepHang</span><span style="color: #007700">(</span><span style="color: #0000BB">TenQuery&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">FieldXepHang&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">FieldID&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">ValueID</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Kieuxep&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">String<br />On&nbsp;Error&nbsp;</span><span style="color: #007700">GoTo&nbsp;</span><span style="color: #0000BB">BiLoi<br />       &nbsp;Dim&nbsp;CSDL&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Database<br />       &nbsp;Dim&nbsp;Bang&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Recordset<br />       &nbsp;Dim&nbsp;Duocxephang&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Long<br />       &nbsp;Dim&nbsp;Xep&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Double<br />       &nbsp;Dim&nbsp;TrungHang&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Double<br />   &nbsp;Xep&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1<br />   &nbsp;TrungHang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0<br />   &nbsp;Set&nbsp;CSDL&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">CurrentDb<br />   &nbsp;Set&nbsp;Bang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">CSDL</span><span style="color: #007700">.</span><span style="color: #0000BB">OpenRecordset</span><span style="color: #007700">(</span><span style="color: #0000BB">TenQuery</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">dbOpenDynaset</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">dbReadOnly</span><span style="color: #007700">)<br /></span><span style="color: #0000BB">   &nbsp;<br />   &nbsp;Bang</span><span style="color: #007700">.</span><span style="color: #0000BB">FindFirst&nbsp;FieldID&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">"&nbsp;=&nbsp;"&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">ValueID<br />   &nbsp;</span><span style="color: #007700">If&nbsp;</span><span style="color: #0000BB">Is_Null</span><span style="color: #007700">(</span><span style="color: #0000BB">Bang</span><span style="color: #007700">(</span><span style="color: #0000BB">FieldXepHang</span><span style="color: #007700">))&nbsp;</span><span style="color: #0000BB">Then&nbsp;</span><span style="color: #007700">Exit&nbsp;Function<br /></span><span style="color: #0000BB">   &nbsp;Duocxephang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Bang</span><span style="color: #007700">(</span><span style="color: #0000BB">FieldXepHang</span><span style="color: #007700">)<br /></span><span style="color: #0000BB">   &nbsp;Bang</span><span style="color: #007700">.</span><span style="color: #0000BB">MoveFirst<br />   &nbsp;<br />Select&nbsp;</span><span style="color: #007700">Case&nbsp;</span><span style="color: #0000BB">Kieuxep<br />   &nbsp;</span><span style="color: #007700">Case&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #DD0000">'&nbsp;Lon&nbsp;hang&nbsp;cao<br />           &nbsp;Do&nbsp;Until&nbsp;Bang.EOF<br />               &nbsp;If&nbsp;Bang(FieldXepHang)&nbsp;&gt;&nbsp;Duocxephang&nbsp;Then&nbsp;Xep&nbsp;=&nbsp;Xep&nbsp;+&nbsp;1<br />               &nbsp;If&nbsp;Bang(FieldXepHang)&nbsp;=&nbsp;Duocxephang&nbsp;Then&nbsp;TrungHang&nbsp;=&nbsp;TrungHang&nbsp;+&nbsp;1<br />               &nbsp;Bang.MoveNext<br />           &nbsp;Loop<br />           &nbsp;If&nbsp;TrungHang&nbsp;&gt;&nbsp;1&nbsp;Then<br />               &nbsp;XepHang&nbsp;=&nbsp;Xep&nbsp;&amp;&nbsp;"="<br />           &nbsp;Else<br />               &nbsp;XepHang&nbsp;=&nbsp;Xep<br />           &nbsp;End&nbsp;If<br />           &nbsp;Bang.Close<br />               &nbsp;Set&nbsp;Bang&nbsp;=&nbsp;Nothing<br />           &nbsp;Set&nbsp;CSDL&nbsp;=&nbsp;Nothing<br /> <br />   &nbsp;Case&nbsp;1&nbsp;'&nbsp;</span><span style="color: #0000BB">Nho&nbsp;hang&nbsp;cao<br />             &nbsp;</span><span style="color: #007700">Do&nbsp;</span><span style="color: #0000BB">Until&nbsp;Bang</span><span style="color: #007700">.</span><span style="color: #0000BB">EOF<br />               &nbsp;</span><span style="color: #007700">If&nbsp;</span><span style="color: #0000BB">Bang</span><span style="color: #007700">(</span><span style="color: #0000BB">FieldXepHang</span><span style="color: #007700">)&nbsp;&lt;&nbsp;</span><span style="color: #0000BB">Duocxephang&nbsp;Then&nbsp;Xep&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Xep&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1<br />               &nbsp;</span><span style="color: #007700">If&nbsp;</span><span style="color: #0000BB">Bang</span><span style="color: #007700">(</span><span style="color: #0000BB">FieldXepHang</span><span style="color: #007700">)&nbsp;=&nbsp;</span><span style="color: #0000BB">Duocxephang&nbsp;Then&nbsp;TrungHang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">TrungHang&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1<br />               &nbsp;Bang</span><span style="color: #007700">.</span><span style="color: #0000BB">MoveNext<br />           &nbsp;Loop<br />           &nbsp;</span><span style="color: #007700">If&nbsp;</span><span style="color: #0000BB">TrungHang&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">1&nbsp;Then<br />               &nbsp;XepHang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Xep&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #DD0000">"="<br /></span><span style="color: #0000BB">           &nbsp;</span><span style="color: #007700">Else<br /></span><span style="color: #0000BB">               &nbsp;XepHang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Xep<br />           &nbsp;End&nbsp;</span><span style="color: #007700">If<br /></span><span style="color: #0000BB">           &nbsp;Bang</span><span style="color: #007700">.</span><span style="color: #0000BB">Close<br />    &nbsp;       Set&nbsp;Bang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Nothing<br />           &nbsp;Set&nbsp;CSDL&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Nothing<br />   &nbsp;</span><span style="color: #007700">Case&nbsp;Else<br /></span><span style="color: #0000BB">   &nbsp;<br />End&nbsp;Select<br />   &nbsp;<br />BiLoi</span><span style="color: #007700">:<br /></span><span style="color: #0000BB"> <br />End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div><br />
 <br />
Trong đó biến Kieuxep là 0 thì giá trị FieldXepHang càng cao thì hạng càng cao, biến Kieuxep càng thấp thì hạng càng cao.<br />
Để xử lý hàm này thì table của bạn phải có field ID Primary Key.<br />
 <br />
Ví dụ Bạn có table với các field: ID, TenHS, Diem<br />
Tạo query: BangXepHangHocTap<br />
<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">SELECT&nbsp;DiemHocTap</span><span style="color: #007700">.</span><span style="color: #0000BB">ID</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">XepHang</span><span style="color: #007700">(</span><span style="color: #DD0000">"BangXepHangHocTap"</span><span style="color: #007700">,</span><span style="color: #DD0000">"Diem"</span><span style="color: #007700">,</span><span style="color: #DD0000">"ID"</span><span style="color: #007700">,[</span><span style="color: #0000BB">ID</span><span style="color: #007700">],</span><span style="color: #0000BB">0</span><span style="color: #007700">)&nbsp;AS&nbsp;</span><span style="color: #0000BB">ThuHang</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">DiemHocTap</span><span style="color: #007700">.</span><span style="color: #0000BB">TenHS</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">DiemHocTap</span><span style="color: #007700">.</span><span style="color: #0000BB">Diem<br />FROM&nbsp;DiemHocTap<br />ORDER&nbsp;BY&nbsp;DiemHocTap</span><span style="color: #007700">.</span><span style="color: #0000BB">Diem</span><span style="color: #007700">;&nbsp;<br /></span></code></div></div></div><br />
 <br />
Vài điểm cần lưu ý<br />
Field ThuHang có function:<br />
 <br />
ThuHang: XepHang("BangXepHangHocTap","Diem","ID",[ID],0)<br />
 <br />
- "BangXepHangHocTap" là tên của query nó đang xử lý.<br />
- "Diem", là Field để căn cứ giá trị lớn nhỏ để xếp hạng.<br />
- "ID" và [ID] là Tên và giá trị Field Primary Key chỉ mục để vòng lặp xử lý việc xếp hạng. Nhớ là một cái trong " " và một cái trong [ ].<br />
- Giá trị 0 để xếp hạng lớn Diem trước nhỏ sau, giá trị 1 để xếp hạng Diem nhỏ trước lớn sau.<br />
- Nhớ Thay thế từ <span style="font-weight: bold;" class="mycode_b">Is_Null = IsNull </span>trong đoạn mã<br />
Mong rằng function này sẽ hỗ trợ được cho các bạn trong công việc<br />
 <br />
 <a href="http://www.mediafire.com/download/e2qb2j0anth82mx/XepHang.mdb" target="_blank" rel="noopener" class="mycode_url">Function Xep Hang</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Demo_Tạo ra mật khẩu ngẫu nhiên (2 loại)]]></title>
			<link>https://thuthuataccess.com/forum/thread-8651.html</link>
			<pubDate>Sat, 18 Jul 2015 14:18:26 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-8651.html</guid>
			<description><![CDATA[<span style="color: #3366ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Đôi lúc bạn thấy nhàm chán phải suy nghĩ để tạo ra mật khẩu cho mình hoặc ai đó.<br />
Có khi cần phải tạo ra một mật khẩu khác nhau cho vài trăm hay vài nghìn người thì sẽ ra sau.</span></span><br />
<br />
Vâng đoạn code sau sẽ giúp các bạn tạo ra mật khẩu ấy.<br />
<br />
Ở đây minh sẽ trình bày 2 loại Demo để tạo ra mật khẩu đi kèm với nó là 2 hàm riêng biệt.<br />
<br />
Ở bài này xin trình bày 1 loại đầu tiên, đó là: lấy tất cả các ký tự trên bàn phím của mình, còn cái kế tiếp thì chỉ lấy 33 chữ cái + chữ số thôi.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://sites.google.com/site/thuthuataccess2003/home/demo-hinh/hinhtaopassngaunhien1.jpg" loading="lazy"  alt="[Hình: hinhtaopassngaunhien1.jpg]" class="mycode_img" /></div>
<br />
Demo: Xem file đính kèm.<br />
<br />
Code:<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Public&nbsp;Function&nbsp;</span><span style="color: #0000BB">Taopassngaunhien</span><span style="color: #007700">(</span><span style="color: #0000BB">Dodaimatkhau&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">String<br />   &nbsp;Dim&nbsp;RetVal&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br />   &nbsp;Dim&nbsp;Max&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer<br />   &nbsp;Dim&nbsp;Min&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">i&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer<br />   &nbsp;Max&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">126<br />   &nbsp;Min&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">48<br />   &nbsp;Randomize&nbsp;Timer<br />   &nbsp;</span><span style="color: #007700">For&nbsp;</span><span style="color: #0000BB">i&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1&nbsp;To&nbsp;Dodaimatkhau<br />   &nbsp;RetVal&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">RetVal&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">Chr</span><span style="color: #007700">(</span><span style="color: #0000BB">Int</span><span style="color: #007700">((</span><span style="color: #0000BB">Max&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">Min&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;*&nbsp;</span><span style="color: #0000BB">Rnd&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">Min</span><span style="color: #007700">))<br /></span><span style="color: #0000BB">   &nbsp;Next&nbsp;i<br />   &nbsp;Taopassngaunhien&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">RetVal<br />End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div><br />
<br />
Khi cần thì alo:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Taopassngaunhien</span><span style="color: #007700">(</span><span style="color: #0000BB">8</span><span style="color: #007700">)&nbsp;<br /></span></code></div></div></div><br />
Trong đó: số 8 là độ dài ký tự cần tạo ra.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=656" target="_blank" title="">Demo_Tao pass ngau nhien (Loai 1).zip</a> (Kích cỡ: 14.96 KB / Tải về: 73)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<span style="color: #3366ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Đôi lúc bạn thấy nhàm chán phải suy nghĩ để tạo ra mật khẩu cho mình hoặc ai đó.<br />
Có khi cần phải tạo ra một mật khẩu khác nhau cho vài trăm hay vài nghìn người thì sẽ ra sau.</span></span><br />
<br />
Vâng đoạn code sau sẽ giúp các bạn tạo ra mật khẩu ấy.<br />
<br />
Ở đây minh sẽ trình bày 2 loại Demo để tạo ra mật khẩu đi kèm với nó là 2 hàm riêng biệt.<br />
<br />
Ở bài này xin trình bày 1 loại đầu tiên, đó là: lấy tất cả các ký tự trên bàn phím của mình, còn cái kế tiếp thì chỉ lấy 33 chữ cái + chữ số thôi.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://sites.google.com/site/thuthuataccess2003/home/demo-hinh/hinhtaopassngaunhien1.jpg" loading="lazy"  alt="[Hình: hinhtaopassngaunhien1.jpg]" class="mycode_img" /></div>
<br />
Demo: Xem file đính kèm.<br />
<br />
Code:<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Public&nbsp;Function&nbsp;</span><span style="color: #0000BB">Taopassngaunhien</span><span style="color: #007700">(</span><span style="color: #0000BB">Dodaimatkhau&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">String<br />   &nbsp;Dim&nbsp;RetVal&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br />   &nbsp;Dim&nbsp;Max&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer<br />   &nbsp;Dim&nbsp;Min&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">i&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer<br />   &nbsp;Max&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">126<br />   &nbsp;Min&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">48<br />   &nbsp;Randomize&nbsp;Timer<br />   &nbsp;</span><span style="color: #007700">For&nbsp;</span><span style="color: #0000BB">i&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1&nbsp;To&nbsp;Dodaimatkhau<br />   &nbsp;RetVal&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">RetVal&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">Chr</span><span style="color: #007700">(</span><span style="color: #0000BB">Int</span><span style="color: #007700">((</span><span style="color: #0000BB">Max&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">Min&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;*&nbsp;</span><span style="color: #0000BB">Rnd&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">Min</span><span style="color: #007700">))<br /></span><span style="color: #0000BB">   &nbsp;Next&nbsp;i<br />   &nbsp;Taopassngaunhien&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">RetVal<br />End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div><br />
<br />
Khi cần thì alo:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Taopassngaunhien</span><span style="color: #007700">(</span><span style="color: #0000BB">8</span><span style="color: #007700">)&nbsp;<br /></span></code></div></div></div><br />
Trong đó: số 8 là độ dài ký tự cần tạo ra.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=656" target="_blank" title="">Demo_Tao pass ngau nhien (Loai 1).zip</a> (Kích cỡ: 14.96 KB / Tải về: 73)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Demo_[Hàm] Tính thâm niên như BHXH (maidinhdan)]]></title>
			<link>https://thuthuataccess.com/forum/thread-8602.html</link>
			<pubDate>Tue, 30 Jun 2015 08:03:40 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-8602.html</guid>
			<description><![CDATA[Khu vực thư viện hàm trước đây có 1 bài viết của anh Xuân Thanh để tính thâm niên ( <a href="http://thuthuataccess.com/forum/thread-5623.html" target="_blank" rel="noopener" class="mycode_url">Link bài</a>). Áp dụng ra nhưng vẫn chưa ưng ý theo nhu cầu lắm, nên xin chế ra 1 hàm mới để dùng <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Bước 1: Tạo mới 1 Modules và chép đoạn code dưới đây vào:</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Public&nbsp;Function&nbsp;</span><span style="color: #0000BB">Tinhthamnien</span><span style="color: #007700">(</span><span style="color: #0000BB">Ngaybatdau&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Ngayketthuc&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">String<br /></span><span style="color: #DD0000">'&nbsp;code&nbsp;by&nbsp;maidinhdan<br />Dim&nbsp;Sothang&nbsp;As&nbsp;Long<br />Dim&nbsp;Nam&nbsp;As&nbsp;String<br />Dim&nbsp;Thang&nbsp;As&nbsp;String<br />Sothang&nbsp;=&nbsp;DateDiff("m",&nbsp;Ngaybatdau,&nbsp;Ngayketthuc)<br />Nam&nbsp;=&nbsp;Int((Sothang)&nbsp;/&nbsp;12)&nbsp;<br />Thang&nbsp;=&nbsp;(Sothang)&nbsp;Mod&nbsp;12&nbsp;<br />Tinhthamnien&nbsp;=&nbsp;Nam&nbsp;&amp;&nbsp;"&nbsp;Nam&nbsp;"&nbsp;&amp;&nbsp;Thang&nbsp;&amp;&nbsp;"&nbsp;tháng."&nbsp;<br /><br />End&nbsp;Function&nbsp;<br /></span></code></div></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Bước 2: Khi nào cần sử dụng thì gõ Cú pháp sau: </span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Tinhthamnien</span><span style="color: #007700">([</span><span style="color: #0000BB">txt1</span><span style="color: #007700">],[</span><span style="color: #0000BB">txt2</span><span style="color: #007700">])&nbsp;<br /></span></code></div></div></div><br />
<span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">Trong đó: </span></span><br />
<span style="color: #ff3333;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">- [txt1] là thời gian bắt đầu: ví dụ là ngày bắt đầu tham gia Bảo hiểm xã hội</span></span><br />
<br />
<span style="color: #ff3333;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">- [txt2] là thời gian hiện tại cần tính.</span></span><br />
<br />
<span style="color: #3333ff;" class="mycode_color">=&gt; cú pháp theo Demo của bài mình là: Tinhthamnien([NgaythamgiaBHXH],Date())</span><br />
Hình minh họa: kết quả<br />
<img src="https://sites.google.com/site/bikipaccess/thong-bao/thoi-khoa-bieu/tinhthamnien.png" loading="lazy"  alt="[Hình: tinhthamnien.png]" class="mycode_img" /><br />
<br />
Ghi chú: Hàm này không tính ngày nhé chỉ tính đến tháng thôi.<br />
<br />
Link Demo của ongke ( tính năm, tháng, ngày): <a href="http://www.mediafire.com/download/nrpp41m4rkog177/ThamNien.mdb" target="_blank" rel="noopener" class="mycode_url">http://www.mediafire.com/download/nrpp41...amNien.mdb</a><br />
<br />
Chúc các bạn thành công.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=690" target="_blank" title="">ThamNien(Demo Ongke).zip</a> (Kích cỡ: 18.6 KB / Tải về: 85)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Khu vực thư viện hàm trước đây có 1 bài viết của anh Xuân Thanh để tính thâm niên ( <a href="http://thuthuataccess.com/forum/thread-5623.html" target="_blank" rel="noopener" class="mycode_url">Link bài</a>). Áp dụng ra nhưng vẫn chưa ưng ý theo nhu cầu lắm, nên xin chế ra 1 hàm mới để dùng <br />
<br />
<span style="font-weight: bold;" class="mycode_b">Bước 1: Tạo mới 1 Modules và chép đoạn code dưới đây vào:</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Public&nbsp;Function&nbsp;</span><span style="color: #0000BB">Tinhthamnien</span><span style="color: #007700">(</span><span style="color: #0000BB">Ngaybatdau&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Ngayketthuc&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Date</span><span style="color: #007700">)&nbsp;As&nbsp;</span><span style="color: #0000BB">String<br /></span><span style="color: #DD0000">'&nbsp;code&nbsp;by&nbsp;maidinhdan<br />Dim&nbsp;Sothang&nbsp;As&nbsp;Long<br />Dim&nbsp;Nam&nbsp;As&nbsp;String<br />Dim&nbsp;Thang&nbsp;As&nbsp;String<br />Sothang&nbsp;=&nbsp;DateDiff("m",&nbsp;Ngaybatdau,&nbsp;Ngayketthuc)<br />Nam&nbsp;=&nbsp;Int((Sothang)&nbsp;/&nbsp;12)&nbsp;<br />Thang&nbsp;=&nbsp;(Sothang)&nbsp;Mod&nbsp;12&nbsp;<br />Tinhthamnien&nbsp;=&nbsp;Nam&nbsp;&amp;&nbsp;"&nbsp;Nam&nbsp;"&nbsp;&amp;&nbsp;Thang&nbsp;&amp;&nbsp;"&nbsp;tháng."&nbsp;<br /><br />End&nbsp;Function&nbsp;<br /></span></code></div></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Bước 2: Khi nào cần sử dụng thì gõ Cú pháp sau: </span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Tinhthamnien</span><span style="color: #007700">([</span><span style="color: #0000BB">txt1</span><span style="color: #007700">],[</span><span style="color: #0000BB">txt2</span><span style="color: #007700">])&nbsp;<br /></span></code></div></div></div><br />
<span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">Trong đó: </span></span><br />
<span style="color: #ff3333;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">- [txt1] là thời gian bắt đầu: ví dụ là ngày bắt đầu tham gia Bảo hiểm xã hội</span></span><br />
<br />
<span style="color: #ff3333;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">- [txt2] là thời gian hiện tại cần tính.</span></span><br />
<br />
<span style="color: #3333ff;" class="mycode_color">=&gt; cú pháp theo Demo của bài mình là: Tinhthamnien([NgaythamgiaBHXH],Date())</span><br />
Hình minh họa: kết quả<br />
<img src="https://sites.google.com/site/bikipaccess/thong-bao/thoi-khoa-bieu/tinhthamnien.png" loading="lazy"  alt="[Hình: tinhthamnien.png]" class="mycode_img" /><br />
<br />
Ghi chú: Hàm này không tính ngày nhé chỉ tính đến tháng thôi.<br />
<br />
Link Demo của ongke ( tính năm, tháng, ngày): <a href="http://www.mediafire.com/download/nrpp41m4rkog177/ThamNien.mdb" target="_blank" rel="noopener" class="mycode_url">http://www.mediafire.com/download/nrpp41...amNien.mdb</a><br />
<br />
Chúc các bạn thành công.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=690" target="_blank" title="">ThamNien(Demo Ongke).zip</a> (Kích cỡ: 18.6 KB / Tải về: 85)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hàm xử lý trường Họ Tên (Xóa bỏ khoảng trắng thừa, chữ hoa họ tên)]]></title>
			<link>https://thuthuataccess.com/forum/thread-8587.html</link>
			<pubDate>Wed, 24 Jun 2015 08:15:03 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=15953">tranthanhan1962</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-8587.html</guid>
			<description><![CDATA[Thật là phiền phức khi sau một thời gian trường họ tên trở nên hỗn loạn. Từ tên một người, có bé nhập liệu đã biến ra 5 - 7 tên khác nhau. Đơn giản là cái máy tính không hiểu tiếng người kia nhận diện bằng ký tự chứ không phải bằng âm thanh. Vì thế, "Trần Quốc Tuấn" khác với "Trần    Quốc Tuấn" và khác luôn "     trần quốc    Tuấn". Dù sau cũng còn may mắn vì nó cũng hiểu được "trần quốc Tuấn" cũng là "Trần Quốc Tuấn". Nhưng nếu nhìn vào trường họ tên với một lô, một lốc "trần Quốc tuấn", "lê quý đôn", "TRẦN bình Trọng" mà mặt mày vẫn vui vẻ, giọng nói vẫn nhẹ nhàng với cô bé nhập liệu kia mới lạ.<br />
Có một cách để cô bé kia không làm bạn thất vọng là tặng ngay mấy cái code function vào ngay trường họ tên dưới đây:<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u"><span style="color: #3366ff;" class="mycode_color">1/Cắt bỏ các khoảng trắng thừa không mong muốn:</span></span></span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Function&nbsp;</span><span style="color: #0000BB">Xoakhoangtrang</span><span style="color: #007700">(</span><span style="color: #0000BB">DoanText&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;Dim&nbsp;XulyDoanText&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br /> &nbsp;  <br /> &nbsp; &nbsp; &nbsp; &nbsp;XulyDoanText&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">RTrim</span><span style="color: #007700">(</span><span style="color: #0000BB">DoanText</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;  <br /> &nbsp; &nbsp;</span><span style="color: #007700">Do&nbsp;While&nbsp;</span><span style="color: #0000BB">InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0<br /> &nbsp; &nbsp; &nbsp; &nbsp;XulyDoanText&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Left</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&nbsp;</span><span style="color: #0000BB">Mid</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;Loop<br /> &nbsp;  <br /> &nbsp; &nbsp; &nbsp; &nbsp;Xoakhoangtrang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Trim</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">)<br /></span><span style="color: #0000BB">End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div><br />
Lúc này dù cô bé nhập liệu có vừa đánh một tay, vừa nhai ổi "  công               văn số   145 của Ủy    ban            " thì máy vẫn sửa thành "công văn số 145 của Ủy ban".<br />
<br />
<span style="color: #3366ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">2/Xử lý đối với trường họ tên:</span></span></span><br />
Nếu dữ liệu của bạn là trường họ tên. Xử lý bằng code dưới đây để chuyển chữ hoa đầu từ. (trong code đã có phần xử lý khoảng trắng)<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Function&nbsp;</span><span style="color: #0000BB">HoVaTen</span><span style="color: #007700">(</span><span style="color: #0000BB">strHoTen&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;Dim&nbsp;XulystrHoTen&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br /> &nbsp; &nbsp;Dim&nbsp;SoChu</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">SoLan&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer<br /> &nbsp;  <br /> &nbsp; &nbsp;XulystrHoTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">RTrim</span><span style="color: #007700">(</span><span style="color: #0000BB">strHoTen</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp;  <br /> &nbsp; &nbsp;</span><span style="color: #007700">Do&nbsp;While&nbsp;</span><span style="color: #0000BB">InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0<br /> &nbsp; &nbsp; &nbsp;XulystrHoTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Left</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&nbsp;</span><span style="color: #0000BB">Mid</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;Loop<br /> &nbsp;  <br /> &nbsp; &nbsp;XulystrHoTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Trim</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">)<br /><br /></span><span style="color: #0000BB"> &nbsp; &nbsp;SoChu&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Len</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;HoVaTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">UCase</span><span style="color: #007700">(</span><span style="color: #0000BB">Left</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">))<br /></span><span style="color: #0000BB"> &nbsp;  <br /> &nbsp; &nbsp;</span><span style="color: #007700">For&nbsp;</span><span style="color: #0000BB">SoLan&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1&nbsp;To&nbsp;SoChu&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">1<br /> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">If&nbsp;</span><span style="color: #0000BB">Mid</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">SoLan</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;=&nbsp;</span><span style="color: #DD0000">"&nbsp;"&nbsp;</span><span style="color: #0000BB">Then<br /> &nbsp; &nbsp; &nbsp; &nbsp;HoVaTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">HoVaTen&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">UCase</span><span style="color: #007700">(</span><span style="color: #0000BB">Mid</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">SoLan&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">))<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">Else<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;HoVaTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">HoVaTen&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">LCase</span><span style="color: #007700">(</span><span style="color: #0000BB">Mid</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">SoLan&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">))<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;End&nbsp;</span><span style="color: #007700">If<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;Next&nbsp;SoLan<br /><br />End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div><br />
Chúng ta có thể đưa các Function trên vào Event Textbox_AfterUpdate() khi nhập dữ liệu hoặc tạo query để xử lý lại dữ liệu các table . Các đoạn code trên cũng xử lý tốt trên Excel. Code chỉ được test trên Office 2003 nên không chắc ăn khi chạy với các office khác. Đọc kỹ trước khi sử dụng. <img src="https://thuthuataccess.com/forum/../backlink/images/smilies/Zing/007.gif" alt="007" title="007" class="smilie smilie_193" />]]></description>
			<content:encoded><![CDATA[Thật là phiền phức khi sau một thời gian trường họ tên trở nên hỗn loạn. Từ tên một người, có bé nhập liệu đã biến ra 5 - 7 tên khác nhau. Đơn giản là cái máy tính không hiểu tiếng người kia nhận diện bằng ký tự chứ không phải bằng âm thanh. Vì thế, "Trần Quốc Tuấn" khác với "Trần    Quốc Tuấn" và khác luôn "     trần quốc    Tuấn". Dù sau cũng còn may mắn vì nó cũng hiểu được "trần quốc Tuấn" cũng là "Trần Quốc Tuấn". Nhưng nếu nhìn vào trường họ tên với một lô, một lốc "trần Quốc tuấn", "lê quý đôn", "TRẦN bình Trọng" mà mặt mày vẫn vui vẻ, giọng nói vẫn nhẹ nhàng với cô bé nhập liệu kia mới lạ.<br />
Có một cách để cô bé kia không làm bạn thất vọng là tặng ngay mấy cái code function vào ngay trường họ tên dưới đây:<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u"><span style="color: #3366ff;" class="mycode_color">1/Cắt bỏ các khoảng trắng thừa không mong muốn:</span></span></span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Function&nbsp;</span><span style="color: #0000BB">Xoakhoangtrang</span><span style="color: #007700">(</span><span style="color: #0000BB">DoanText&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;Dim&nbsp;XulyDoanText&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br /> &nbsp;  <br /> &nbsp; &nbsp; &nbsp; &nbsp;XulyDoanText&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">RTrim</span><span style="color: #007700">(</span><span style="color: #0000BB">DoanText</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;  <br /> &nbsp; &nbsp;</span><span style="color: #007700">Do&nbsp;While&nbsp;</span><span style="color: #0000BB">InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0<br /> &nbsp; &nbsp; &nbsp; &nbsp;XulyDoanText&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Left</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&nbsp;</span><span style="color: #0000BB">Mid</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;Loop<br /> &nbsp;  <br /> &nbsp; &nbsp; &nbsp; &nbsp;Xoakhoangtrang&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Trim</span><span style="color: #007700">(</span><span style="color: #0000BB">XulyDoanText</span><span style="color: #007700">)<br /></span><span style="color: #0000BB">End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div><br />
Lúc này dù cô bé nhập liệu có vừa đánh một tay, vừa nhai ổi "  công               văn số   145 của Ủy    ban            " thì máy vẫn sửa thành "công văn số 145 của Ủy ban".<br />
<br />
<span style="color: #3366ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">2/Xử lý đối với trường họ tên:</span></span></span><br />
Nếu dữ liệu của bạn là trường họ tên. Xử lý bằng code dưới đây để chuyển chữ hoa đầu từ. (trong code đã có phần xử lý khoảng trắng)<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Mã PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">Function&nbsp;</span><span style="color: #0000BB">HoVaTen</span><span style="color: #007700">(</span><span style="color: #0000BB">strHoTen&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;Dim&nbsp;XulystrHoTen&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">String<br /> &nbsp; &nbsp;Dim&nbsp;SoChu</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">SoLan&nbsp;</span><span style="color: #007700">As&nbsp;</span><span style="color: #0000BB">Integer<br /> &nbsp;  <br /> &nbsp; &nbsp;XulystrHoTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">RTrim</span><span style="color: #007700">(</span><span style="color: #0000BB">strHoTen</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp;  <br /> &nbsp; &nbsp;</span><span style="color: #007700">Do&nbsp;While&nbsp;</span><span style="color: #0000BB">InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0<br /> &nbsp; &nbsp; &nbsp;XulystrHoTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Left</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&nbsp;</span><span style="color: #0000BB">Mid</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InStr</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"&nbsp; "</span><span style="color: #007700">)&nbsp;+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;Loop<br /> &nbsp;  <br /> &nbsp; &nbsp;XulystrHoTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Trim</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">)<br /><br /></span><span style="color: #0000BB"> &nbsp; &nbsp;SoChu&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Len</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;HoVaTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">UCase</span><span style="color: #007700">(</span><span style="color: #0000BB">Left</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">))<br /></span><span style="color: #0000BB"> &nbsp;  <br /> &nbsp; &nbsp;</span><span style="color: #007700">For&nbsp;</span><span style="color: #0000BB">SoLan&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1&nbsp;To&nbsp;SoChu&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">1<br /> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">If&nbsp;</span><span style="color: #0000BB">Mid</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">SoLan</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;=&nbsp;</span><span style="color: #DD0000">"&nbsp;"&nbsp;</span><span style="color: #0000BB">Then<br /> &nbsp; &nbsp; &nbsp; &nbsp;HoVaTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">HoVaTen&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">UCase</span><span style="color: #007700">(</span><span style="color: #0000BB">Mid</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">SoLan&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">))<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">Else<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;HoVaTen&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">HoVaTen&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">LCase</span><span style="color: #007700">(</span><span style="color: #0000BB">Mid</span><span style="color: #007700">(</span><span style="color: #0000BB">XulystrHoTen</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">SoLan&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">))<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;End&nbsp;</span><span style="color: #007700">If<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;Next&nbsp;SoLan<br /><br />End&nbsp;</span><span style="color: #007700">Function&nbsp;<br /></span></code></div></div></div><br />
Chúng ta có thể đưa các Function trên vào Event Textbox_AfterUpdate() khi nhập dữ liệu hoặc tạo query để xử lý lại dữ liệu các table . Các đoạn code trên cũng xử lý tốt trên Excel. Code chỉ được test trên Office 2003 nên không chắc ăn khi chạy với các office khác. Đọc kỹ trước khi sử dụng. <img src="https://thuthuataccess.com/forum/../backlink/images/smilies/Zing/007.gif" alt="007" title="007" class="smilie smilie_193" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Demo Hàm mở mọi loại file ( Access)]]></title>
			<link>https://thuthuataccess.com/forum/thread-8444.html</link>
			<pubDate>Sun, 19 Apr 2015 14:10:59 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://thuthuataccess.com/forum/member.php?action=profile&uid=1091">maidinhdan</a>]]></dc:creator>
			<guid isPermaLink="false">https://thuthuataccess.com/forum/thread-8444.html</guid>
			<description><![CDATA[Giới hạn của code mở file là phải xác định file đó có phần mềm được cài trên máy hay chưa, sau đó ta phải xác đinh nó được cài trên ổ đĩa nào...sau đó dùng hàm Shell để gọi đến ứng dụng đang cài đặt trên máy...Rất phiền phức, đôi khi lại bất tiện.<br />
<br />
Hôm nay<br />
<br />
<span style="color: #0000CD;" class="mycode_color">Đây là bài thứ 5 mình sẽ giới thiệu đó là: hàm mở mọi loại file gồm file:<br />
<br />
+ Mọi loại file Office 2003,2007,2010,2013<br />
+ Mọi loại file Âm nhạc, Video.....<br />
+ Mọi loại file Nén: zip, rar, iso.....<br />
<br />
Nói chung là muốn mở file nào cũng được, chỉ cần 1 hàm thôi, không cần biết ứng dụng nó được cài lên ổ nào cũng có thể mở nó lên....<br />
<br />
Hình mình họa.<br />
<img src="https://sites.google.com/site/congthucassecc/home/hinh-linh-tinh/demo%20mo%20moi%20file.jpg" loading="lazy"  alt="[Hình: demo%20mo%20moi%20file.jpg]" class="mycode_img" /><br />
<br />
Demo đính kèm.<br />
<br />
Ghi chú: Đường dẫn đến file phải không được có tiếng việt.<br />
<br />
<span style="color: #FF0000;" class="mycode_color">Bài thứ 6: Tạo hàm + form lấy tin Rss từ các trang Web.</span><br />
<br />
Rất mong các ý kiến đóng góp của các anh/chị cùng các bạn.</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=637" target="_blank" title="">Demo mo moi loai file v2(maidinhdan).zip</a> (Kích cỡ: 26.37 KB / Tải về: 394)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Giới hạn của code mở file là phải xác định file đó có phần mềm được cài trên máy hay chưa, sau đó ta phải xác đinh nó được cài trên ổ đĩa nào...sau đó dùng hàm Shell để gọi đến ứng dụng đang cài đặt trên máy...Rất phiền phức, đôi khi lại bất tiện.<br />
<br />
Hôm nay<br />
<br />
<span style="color: #0000CD;" class="mycode_color">Đây là bài thứ 5 mình sẽ giới thiệu đó là: hàm mở mọi loại file gồm file:<br />
<br />
+ Mọi loại file Office 2003,2007,2010,2013<br />
+ Mọi loại file Âm nhạc, Video.....<br />
+ Mọi loại file Nén: zip, rar, iso.....<br />
<br />
Nói chung là muốn mở file nào cũng được, chỉ cần 1 hàm thôi, không cần biết ứng dụng nó được cài lên ổ nào cũng có thể mở nó lên....<br />
<br />
Hình mình họa.<br />
<img src="https://sites.google.com/site/congthucassecc/home/hinh-linh-tinh/demo%20mo%20moi%20file.jpg" loading="lazy"  alt="[Hình: demo%20mo%20moi%20file.jpg]" class="mycode_img" /><br />
<br />
Demo đính kèm.<br />
<br />
Ghi chú: Đường dẫn đến file phải không được có tiếng việt.<br />
<br />
<span style="color: #FF0000;" class="mycode_color">Bài thứ 6: Tạo hàm + form lấy tin Rss từ các trang Web.</span><br />
<br />
Rất mong các ý kiến đóng góp của các anh/chị cùng các bạn.</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://thuthuataccess.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=637" target="_blank" title="">Demo mo moi loai file v2(maidinhdan).zip</a> (Kích cỡ: 26.37 KB / Tải về: 394)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
	</channel>
</rss>