Cảm ơn anh Huy đã khích lệ động viên để PMXD tôi phấn khích để tiếp tục công việc post bài, hy vọng anh duy trì chủ đề này trong mỗi tuần.
Sau khi đưa ra hàm nội suy đầu tiên, tôi thấy anh em trong diễn đàn có vài người vẫn thắc mắc về cách sử dụng. Hôm nay, tôi sẽ gửi cho anh em một bảng Excel ví dụ cụ thể để mọi người cùng tham khảo và sử dụng. Mong anh em sử dụng và đóng góp ý kiến.
QUẢNG CÁO ĐẦU TRANG
Collapse
Thông báo
Collapse
No announcement yet.
Mỗi tuần một hàm trong Excel!
Collapse
X
-
Thay mặt diễn đàn, xin cảm ơn các chú PMXD, CNPM và các thành viên khác đã, đang và sẽ chia sẻ các hàm VBA lên cho các anh em còn chưa biết học tập .
Mỗi tuần được một hàm của PMXD thì quý hoá quá! Còn chú CNPM thì mấy tuần một hàm đấy ?
Leave a comment:
-
Nguyên văn bởi PMXDGửi GK:
Bạn có thể dùng chức năng Zoomin của Visual Studio để làm việc này
Hình như trong diễn đàn có rất ít người quan tâm đến VBA thì phải). Mong các anh tiếp tục phát triển thêm chủ đề này. Hàng tuần vẫn ngóng các hàm excel mới
Leave a comment:
-
Gửi GK:
Bạn có thể dùng chức năng Zoomin của Visual Studio để làm việc này
Hình như trong diễn đàn có rất ít người quan tâm đến VBA thì phải
Leave a comment:
-
Cho em hỏi là có phần mềm nào phóng to 1 vùng màn hình lên fullscreen ko ah? Chẳng hạn như khi đang chiếu PowerPoint muốn phóng một vùng lên nhìn cho rõ.
Xin lỗi, em không biết pót bài này vào đâu cả nên pót vào đây, các anh thông cảm.
Leave a comment:
-
Tôi sẽ cố gắng để mỗi tuần gửi một hàm trong Excel do tôi viết. Những hàm này tôi sẽ Open code và hướng dẫn mọi người cùng sử dụng hàm. Nếu ai biết sâu về VBA thì tham khảo thêm, còn ai biết ít thì cứ dùng thôi, không cần đọc hiểu.
Những dòng mã trong VBA cần chú ý khi quét Virus bằng BKAV của bác Quảng sẽ bị tiêu hết, hãy nén các file này lại rồi Scan là Ok thôi.
Gửi CNPM:
bạn cứ thử dùng hàm trabang của tôi sẽ thấy ngay được việc nội suy 1 hay 2 chiều đều được, chúc vui vẻ nhé.
Leave a comment:
-
Nhiệt liệt ủng hộ PMXD mỗi tuần viết một bài VBA
>>> Vẫn không hiểu ý bác PMXD như thế nào. Bác code lại gửi lên cho anh em tham khảo đi.
>>> Thực chất thuật toán của hai hàm PMXD và CNPM Viết đều như nhau. Nhưng hai cách viết khác nhau, gửi lên để mọi người tham khảo thôi.
>>> Rất nhiệt liệt hưởng việc bác PMXD mỗi tuần gửi một bài. Nhưng xin góp ý là bác gửi bài dễ thôi (Ví dụ như bài vừa rồi), chứ khó quá thì mọi người đọc chẳng hiểu gì đâu. Mục đích là để giới thiệu với mọi người cách truy xuất, trích dữ liệu trong excel và biết cách sử dụng các hàm VB cũng như hàm trong excel. Ngày trước CNPM cũng làm một ít nhưng không may bị bác Nguyễn Tử Quảng lấy hết lúc nào không biết, Nên giờ chẳng còn file nào cả.
Hôm qua thấy bác gửi Function nội suy nên góp vui với bác thế thôi.
---------------------------------------------------------------
---------------------------------------------------------------
Đây là chương trình cắt ảnh từ màn hình, dùng rất hay. Mọi người download về mà dùng.
=================================================
CNPM
Leave a comment:
-
Gửi CNPM
Hàm của bạn và hàm của tôi bản chất là giống nhau, nhưng tôi xin góp ý về cách sử dụng để có thể dùng được cả 1 và 2 chiều cho cùng một hàm:
1- Vòng lặp For của bạn cứ cho chạy từ 1 đến n(hoặc m)
2- Giá trị đầu tiên của mỗi hàng và mỗi cột được lấy làm tiêu chí so sánh. Trường hợp hàng đầu tiên(Hoặc cột đầu tiên) không phải là số(Ví dụ là kí tự) thì ta c tự đánh số cho chúng.
'=======================VÍ DỤ
Sau đây là ví dụ về tra bảng Xác định Các hệ số A,B, D trong tính toán Sức chịu tải của nền đất
Bảng số liệu như sau: (Xem file Đính kèm)
Và trên địa chỉ hàm ta viết:
=trabang([Hang],[Cot],Data!$A$25:$D$49)
Ở ví dụ này, vì tra bảng 1 chiều nên [Hàng]=1 hoặc 2 hoặc 3 tương ứng với việc tìm A,B,D.
Như vậy hàm sẽ tra được cả 1 chiều lẫn 2 chiều
Leave a comment:
-
Góp vui cùng PMXD
Đây là bản nội suy của tui, Tuy nhiên nó chưa hoàn chỉnh !
==================================================
Function Noisuy(Hang, Cot As Double, ByVal bangns As Range) As Double
' Ham sau cho phep noi suy ca bang mot chieu va hai chieu
Dim Tg1, Tg2, Delta As Double
Dim m As Long ' so hang
Dim n As Long ' so cot
Dim i, j As Long
Dim Found As Boolean
n = bangns.Columns.Count
m = bangns.Rows.Count
Found = False
' bay gio chung ta co mot mang hai chieu kich thuoc m x n
For j = 2 To n - 1
If (bangns(1, j) <= Cot) And (bangns(1, j + 1) >= Cot) Then
Delta = (Cot - bangns(1, j)) / (bangns(1, j + 1) - bangns(1, j))
Found = True
Exit For
End If
Next j
If Not Found Then
MsgBox ("So noi suy nam ngoai Hang cua BangNS")
End
End If
For i = 2 To m - 1
If (bangns(i, 1) <= Hang) And (bangns(i + 1, 1) >= Hang) Then
Tg1 = bangns(i, j) + (bangns(i, j + 1) - bangns(i, j)) * Delta
Tg2 = bangns(i + 1, j) + (bangns(i + 1, j + 1) - bangns(i + 1, j)) * Delta
Delta = (Hang - bangns(i, 1)) / (bangns(i + 1, 1) - bangns(i, 1))
Noisuy = Tg1 + (Tg2 - Tg1) * Delta
Found = True
Exit For
End If
Next i
If Not Found Then
MsgBox ("So noi suy nam ngoai cot cua BangNS")
End
End If
End Function
==================================================
Nhưng đây chỉ là nội suy hai chiều, nếu là nội suy một chiều thì ta chỉ việc kiểm tra lai số hàng và số cột (bằng 2), và viết thêm code cho nội suy một cột.
------------------
Tuy nhiên chúng ta có thể nghĩ ra cách khác như sau :
Thông thường nếu bangns là kiểu array (kiểu mảng) ta thêm đoạn sau vào chương trình
.......Phần bên trên của hàm .......
n = bangns.Columns.Count
m = bangns.Rows.Count
Found = False
For j = 1 To n
Bangns(m + 1, j) = Bangns(m, j)
Next j
For i = 1 To m
Bangns(i, n + 1) = Bangns(i, n)
Next i
' bay gio chung ta co mot mang hai chieu kich thuoc m x n
For j = 2 To n - 1
......Phần tiếp của hàm.......
Có nghĩa là ta thêm một hàng và một cột vào sau cùng của mảng, hang cột mới thêm vào có giá trị bằng hàng cột sau cùng của mảng.
Sau đó chạy bình thường, như thế là ta có thể nội suy được cả hai chiều lẫn một chiều. Tuy nhiên Bangns là kiểu range, do vậy ta không thể gán giá trị bangns được mà chỉ lấy được giá trị từ bangns mà thôi. Ai có cao kiến gì để có thể dùng thuật toán trên sửa nội suy hai chiều thành nội suy cả 1 chiều và hai chiều.
------------------------
PMXD có ý kiến gì không.
=================================================Last edited by CNPM; 17-11-2004, 12:38 AM.
Leave a comment:
-
Thì Mấy Anh Em đang Chờ Xem đây !!!
Viết Nhiều Lên đi......ủng Hộ Cả Hai Tay Mà......ai Cũng Muốn Học Hỏi ở Bác Hết...vậy Nha
Leave a comment:
-
Mỗi tuần một hàm trong Excel!
Chào các anh em trong diễn đàn!
Từ ngày hôm nay, tôi sẽ cố gắng post mỗi tuần một hàm Excel mà tôi đã từng dùng để tính toán thiết kế. Ai ủng hộ tôi xin hãy lên tiếng cho diễn đàn them khí thế!
'==================HÀM SỐ 1===========================
' NỘI SUY MỘT BẢNG THEO GIÁ TRỊ
'====================================================
Function TraBang2Chieu(ByVal Hang, ByVal Cot, VungChon As Range)
Dim i As Long, j As Long
Dim TangAnPha
Dim NoiSuy1 As Double, NoiSuy2 As Double
For i = 1 To UBound(VungChon.Value, 2) ' Theo phuong ngang
If Hang = VungChon(1, i) Then
For j = 1 To UBound(VungChon.Value, 1) - 1
If (Cot - VungChon(j, 1)) * (Cot - VungChon(j + 1, 1)) <= 0 Then
TangAnPha = (VungChon(j + 1, i) - VungChon(j, i)) / (VungChon(j + 1, 1) - VungChon(j, 1))
TraBang2Chieu = VungChon(j, i) + (Cot - VungChon(j, 1)) * TangAnPha
GoTo Thoat:
End If
Next j
ElseIf (Hang - VungChon(1, i)) * (Hang - VungChon(1, i + 1)) < 0 Then
For j = 1 To UBound(VungChon.Value, 1) - 1
If (Cot - VungChon(j, 1)) * (Cot - VungChon(j + 1, 1)) < 0 Then
TangAnPha = (VungChon(j, i + 1) - VungChon(j, i)) / (VungChon(1, i + 1) - VungChon(1, i))
NoiSuy1 = VungChon(j, i) + (Hang - VungChon(1, i)) * TangAnPha
TangAnPha = (VungChon(j + 1, i + 1) - VungChon(j + 1, i)) / (VungChon(1, i + 1) - VungChon(1, i))
NoiSuy2 = VungChon(j + 1, i) + (Hang - VungChon(1, i)) * TangAnPha
TangAnPha = (NoiSuy2 - NoiSuy1) / (VungChon(j + 1, 1) - VungChon(j, 1))
TraBang2Chieu = NoiSuy1 + (Cot - VungChon(j, 1)) * TangAnPha
GoTo Thoat:
End If
Next j
End If
Next i
Thoat:
'TraBang = UBound(VungChon.Value, 2)
End Function
'=====================================================
Mời các bác Copy hàm này vào Excel và sử dụng theo từng bước như sau:
1- Mở Excel
2- Nhấn Ctrl+F11
3- Insert 1 Module trong môi trường VBA
4- Copy hàm bên trên vào
5- Sử dụng như 1 hàm Excel thông thường với 3 tham số:
+ Giá trị của hàng
+ Giá trị của cột
+ Vùng giá trị của bảng
Ghi chú: Bác nào vẫn còn lơ mơ thì cứ A lô nhé
'===============================
Nguyễn Việt Anh
Phòng KCXD- IBST
047544277Tags: None
Quảng cáo cuối trang
Collapse
Leave a comment: