Cách thể hiện góc ở dạng độ

Liên hệ QC

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,121
Được thích
24,279
1. Mẹo thể hiện góc theo độ trong Excel:
Trong kỹ thuật, nhiều công việc phải thể hiện ở dạng độ như 12°15'. Nhưng trong Excel không có, vì vậy bạn có thể tạo dạng này như sau:
+ Chọn ô để thể hiện độ.
+ Vào Format/Cell/Number, chọn mục Custom.
+ Copy nội dung (###"°"##"'") trong Type.
+ Bạn chỉ nhập số liền vào.

Chú ý: Một số font chữ không thể hiện đầy đủ góc theo độ và phải có quy ước khi nhập góc phút, nếu phút < 10 thì phải thêm số 0 trước. :.

2. Tính giá trị trung bình của góc thể hiện ở độ, phút:

Bạn đã biết định dạng góc ở dạng độ & phút, góc đó thể hiện ở dạng số. Ta có thể tính toán được giá trị trung bình của nó bằng hàm sau:

Mã:
Function gocTB(Vung)
    On Error GoTo Sai
    Dim i, Dai, Tong, Goctheophut, TB, Trai, Phai
    Tong = 0
    i = 0
    Dim Ogoc
    For Each Ogoc In Vung
            Dai = Len(Ogoc)
            If Ogoc <> 0 Then
                Goctheophut = Val(Left(Ogoc, Dai - 2) * 60) + Val(Right(Ogoc, 2))
                Tong = Tong + Goctheophut
                i = i + 1
            Else
                i = i
            End If
    
    Next
            TB = Tong / i / 60
            Trai = Int(TB)
            Phai = Round((TB - Trai) * 60, 0)
            If Phai > 10 Then
                gocTB = Trai & "°" & Phai & "'"
            Else
                gocTB = Trai & "°0" & Phai & "'"
            End If
            Exit Function
Sai:
    gocTB = "So lieu sai"
End Function

30.jpg


Nếu bạn nào quan tâm đến góc đầy đủ cả độ, phút, giây thì tôi sẽ bổ sung thêm.

Các bạn cho ý kiến nhé! /-*+/

Để thể hiện ở dạng độ, phút, giây như 12°15'22'', bạn thực hiện như sau:
+ Chọn ô để thể hiện độ.
+ Vào Format/Cell/Number, chọn mục Custom.
+ Copy nội dung ##"°"##"'"##"''" trong Type.
+ Bạn chỉ nhập số liền vào.

Sau đó để tính giá trị trung bình thì copy đoạn code sau:

Function Gocgiay(Vung)
On Error GoTo Sailam
Dim i, Dai, Tong, Goctheogiay, TB, Trai, Giua, Phai
Tong = 0
i = 0
Dim Ogoc
For Each Ogoc In Vung
Dai = Len(Ogoc)
If Ogoc <> 0 Then
Goctheogiay = Val(Left(Ogoc, Dai - 4) * 3600) + Val(Left(Right(Ogoc, 4), 2) * 60) + Val(Right(Ogoc, 2))
Tong = Tong + Goctheogiay
i = i + 1
Else
i = i
End If

Next
TB = Tong / i / 3600
Trai = Int(TB)
Giua = Int((TB - Trai) * 60)
Phai = Round(((TB - Trai) * 60 - Giua) * 60, 0)
If Phai > 10 And Giua > 10 Then
Gocgiay = Trai & "°" & Giua & "'" & Phai & "''"
ElseIf Phai > 10 And Giua < 10 Then
Gocgiay = Trai & "°0" & Giua & "'" & Phai & "''"
ElseIf Phai < 10 And Giua > 10 Then
Gocgiay = Trai & "°" & Giua & "'0" & Phai & "''"
Else
Gocgiay = Trai & "°0" & Giua & "'0" & Phai & "''"
End If
Exit Function
Sailam:
Gocgiay = "So lieu sai"
End Function

Mời bạn tải file chi tiết kèm theo (gồm cả 2 hàm)
 

File đính kèm

  • Gocmasat_giay.xls
    28 KB · Đọc: 937
Lần chỉnh sửa cuối:
Bài của anh PTH rất hay, nhưng theo tôi thì làm như vậy có vẻ như là chương trình tính toán xử lý số liệu thí nghiệm vẫn phải nhập tay giá trị các góc ma sát do đó áp dụng vẫn chưa thật tiện lắm.
Cách của tôi là:
Sau khi thí nghiệm cắt phẳng, Excel sẽ tính cho ta được góc ma sát (phi) và lực dính kết (c). Tuy nhiên góc ở đây là dạng thập phân. Bạn nên viết thêm một hàm đổi giá trị từ độ thập phân sang dạng độ phút giây bằng cách thêm vào ký tự Chr(186).
 
Mã:
'Doi tu do dang thap phan sang dang do, phut
Public Function do_vn(degree As Double) As String
If Round((degree - Int(degree)) * 60, 0) >= 60 Then
do_vn = (Int(degree) + 1) & Chr(186) & "00'"
Else
do_vn = Int(degree) & Chr(186) & Round((degree - Int(degree)) * 60, 0) & "'"
End If
End Function
VD: do_vn(6.38)=6o23'
Thuật toán tính trung bình độ thì đơn giản rất nhiều.
Nếu bạn nào cần tôi sẽ post code hàm chuyển đổi độ sang dạng độ phút giây.
VD: do_tg(6o23')=6.38
 
Những ký tự đặc biệt cũng có gì đâu, vì nó là bảng mã ANSI chuẩn mà!
 

File đính kèm

  • ASCII_ANSI table.xls
    69 KB · Đọc: 439
Lần chỉnh sửa cuối:
À, hàm này tôi cũng đã post bên kết cấu, quên mất. --=0

Hàm chuyển góc ở dạng số thập phân ra góc ở dạng độ (vd:12°15'):

Mã:
Function Chuyengoc(Gocthapphan As Single) 'Đổi thành góc độ
   Goc = Round(Gocthapphan, 2)
   Goctrai = Int(Goc)
   Gocphai = Round(Goctrai * 0.6, 0)
      If Gocphai >= 10 Then
            Chuyengoc = Goctrai & "°" & Gocphai & "'"
        ElseIf Gocphai < 10 Then
             Chuyengoc = Goctrai & "°0" & Gocphai & "'"
        Else
             Chuyengoc = "Sai dau vao roi !!!!!!!!"
      End If
End Function
 
Em có thắc mắc như vầy. Sao các anh ko chuyển góc dạng dms sang radian, với đơn vị radian thì cộng trừ quá dễ dàng rồi, sau đó kết quả sau cùng chuyển từ radian sang dms là xong. Khỏi phải viết thuật toán cộng trừ độ phút giây.
 
Nếu chỉ sử dụng góc Radian hay độ kiểu thập phân thì nói làm gì. Nhiều công việc yêu cầu phải thể hiện rõ góc bao nhiêu độ, phút, giây.
 
Bạn pots bài đầy đủ độ, phút giây cho anh em tham khảo đi
Cảm ơn bạn !
 
PhanTuHuong đã viết:
Nếu chỉ sử dụng góc Radian hay độ kiểu thập phân thì nói làm gì. Nhiều công việc yêu cầu phải thể hiện rõ góc bao nhiêu độ, phút, giây.

PTH có thể post cách chuyển đổi Radian hay độ kiểu thập phân ra độ, phút, giây và ngược lại giúp tôi không? vì tôi không rành VBA lắm. Cảm ơn PTH nhé.
 
Mình rất cảm ơn vì bạn đã viết Cách thể hiện góc ở dạng độ thực sự mình đi kiếm bài này rất hay nhưng có 1 vài vấn đê nhỏ ở code của bạn. Mình ko thể fix được lỗi đó mình mong bạn fix lại giúp mình.
http://www.giaiphapexcel.com/forum/showthread.php?t=96 Bài viết của bạn
Mình dùng ##"°"##"'"##"''" xin lỗi mình đã sửa code tính trung bình thành code tính tổng. Nhưng mình nghĩ ko có gì thay đổi so với code gốc của bạn:
Mã:
Function Gocgiay(Vung)
On Error GoTo Sailam
Dim i, Dai, Tong, Goctheogiay, TB, Trai, Giua, Phai
Tong = 0
i = 0
Dim Ogoc
For Each Ogoc In Vung
Dai = Len(Ogoc)
If Ogoc <> 0 Then
Goctheogiay = Val(Left(Ogoc, Dai - 4) * 3600) + Val(Left(Right(Ogoc, 4), 2) * 60) + Val(Right(Ogoc, 2))
Tong = Tong + Goctheogiay
i = i + 1
Else
i = i
End If

Next
[COLOR=red]TB = Tong  / 3600 [/COLOR][COLOR=black]//*dòng này mình đã sửa TB = Tong / i / 3600
[/COLOR]Trai = Int(TB)
Giua = Int((TB - Trai) * 60)
Phai = Round(((TB - Trai) * 60 - Giua) * 60, 0)
If Phai > 10 And Giua > 10 Then
Gocgiay = Trai & "°" & Giua & "'" & Phai & "''"
ElseIf Phai > 10 And Giua < 10 Then
Gocgiay = Trai & "°0" & Giua & "'" & Phai & "''"
ElseIf Phai < 10 And Giua > 10 Then
Gocgiay = Trai & "°" & Giua & "'0" & Phai & "''"
Else
Gocgiay = Trai & "°0" & Giua & "'0" & Phai & "''"
End If
Exit Function
Sailam:
Gocgiay = "So lieu sai"
End Function

Nhưng khi áp dụng có 2 vấn đề:
- Nếu nhập giá trị theo đúng dạng ##"°"##"'"##"''" thì cho kết quả đúng còn nếu nhập theo dạng 00"°"##"'"##"''" (Ví dụ 00°30'00'') thì lại cho kết quả "So lieu sai".
- Nếu tổng hay trung bình góc mà ra có dạng 30°60'00'' hay 30°00'60'' thì nó ko chuyển thành 31°00'00'' và 30°01'00'' vì thự chất 30°60'00'' và 31°00'00'' hay 30°00'60'' và 30°01'00'' là giống nhau.
Mình mong bạn trả lời giúp mình. Mình cảm ơn bạn nhiều
 
mình dốt exel lắm.Vấn đề của các bạn mình đang tìm mấy bữa nay.May quá bữa nay tìm được.Thanhks nhìu.Có điều bạn ơi cho minh hoi có cách nao tính tổng độ ko bạn?CHo mình vd luon nhe.Thanks!
 
copy đoạn code đó pate vào đâu để chạy vậy các bác. chỉ dùm em với
 
Mình rất cảm ơn vì bạn đã viết Cách thể hiện góc ở dạng độ thực sự mình đi kiếm bài này rất hay nhưng có 1 vài vấn đê nhỏ ở code của bạn. Mình ko thể fix được lỗi đó mình mong bạn fix lại giúp mình.
http://www.giaiphapexcel.com/forum/showthread.php?t=96 Bài viết của bạn
Mình dùng ##"°"##"'"##"''" xin lỗi mình đã sửa code tính trung bình thành code tính tổng. Nhưng mình nghĩ ko có gì thay đổi so với code gốc của bạn:
Mã:
Function Gocgiay(Vung)
On Error GoTo Sailam
Dim i, Dai, Tong, Goctheogiay, TB, Trai, Giua, Phai
Tong = 0
i = 0
Dim Ogoc
For Each Ogoc In Vung
Dai = Len(Ogoc)
If Ogoc <> 0 Then
Goctheogiay = Val(Left(Ogoc, Dai - 4) * 3600) + Val(Left(Right(Ogoc, 4), 2) * 60) + Val(Right(Ogoc, 2))
Tong = Tong + Goctheogiay
i = i + 1
Else
i = i
End If

Next
[COLOR=red]TB = Tong  / 3600 [/COLOR][COLOR=black]//*dòng này mình đã sửa TB = Tong / i / 3600
[/COLOR]Trai = Int(TB)
Giua = Int((TB - Trai) * 60)
Phai = Round(((TB - Trai) * 60 - Giua) * 60, 0)
If Phai > 10 And Giua > 10 Then
Gocgiay = Trai & "°" & Giua & "'" & Phai & "''"
ElseIf Phai > 10 And Giua < 10 Then
Gocgiay = Trai & "°0" & Giua & "'" & Phai & "''"
ElseIf Phai < 10 And Giua > 10 Then
Gocgiay = Trai & "°" & Giua & "'0" & Phai & "''"
Else
Gocgiay = Trai & "°0" & Giua & "'0" & Phai & "''"
End If
Exit Function
Sailam:
Gocgiay = "So lieu sai"
End Function

Nhưng khi áp dụng có 2 vấn đề:
- Nếu nhập giá trị theo đúng dạng ##"°"##"'"##"''" thì cho kết quả đúng còn nếu nhập theo dạng 00"°"##"'"##"''" (Ví dụ 00°30'00'') thì lại cho kết quả "So lieu sai".
- Nếu tổng hay trung bình góc mà ra có dạng 30°60'00'' hay 30°00'60'' thì nó ko chuyển thành 31°00'00'' và 30°01'00'' vì thự chất 30°60'00'' và 31°00'00'' hay 30°00'60'' và 30°01'00'' là giống nhau.
Mình mong bạn trả lời giúp mình. Mình cảm ơn bạn nhiều

nhưng cho mình hỏi làm sao gõ ra kí tự này :"°" ..mình gà lắm xin các bạn giúp đỡ :-=
 
Em có thắc mắc như vầy. Sao các anh ko chuyển góc dạng dms sang radian, với đơn vị radian thì cộng trừ quá dễ dàng rồi, sau đó kết quả sau cùng chuyển từ radian sang dms là xong. Khỏi phải viết thuật toán cộng trừ độ phút giây.

Tôi cũng nghĩ vậy, để tính toán cho tiện, khi thể hiện kết quả thì mình sẽ chuyển ra độ sau bằng hàm của Excel. Tôi cũng đã đọc phần này trong sách hướng dẫn lập trình VBA của Anh phantuhuong, nhưng tôi nghi như thế hơi phức tạp chắc có lẽ không cần thiết.
 
copy đoạn code đó pate vào đâu để chạy vậy các bác. chỉ dùm em với
Bạn nhấn Alt+F11
Để biết cụ thể hơn, bạn vào phần tài liệu học VBA trong diễn đàn, tải mấy quyển sách về đọc. Và tham khảo thêm trên các phần hướng dẫn học VBA trên GPE
 
Nếu chỉ sử dụng góc Radian hay độ kiểu thập phân thì nói làm gì. Nhiều công việc yêu cầu phải thể hiện rõ góc bao nhiêu độ, phút, giây.

Tôi dùng kiểu này anh PhanTuHuong thấy có được không? Chỉ dùng hàm excel thôi
 

File đính kèm

  • Chuyen doi tu do phut giay sang do va nguoc lai.xls
    18.5 KB · Đọc: 179
mình dốt exel lắm.Vấn đề của các bạn mình đang tìm mấy bữa nay.May quá bữa nay tìm được.Thanhks nhìu.Có điều bạn ơi cho minh hoi có cách nao tính tổng độ ko bạn?CHo mình vd luon nhe.Thanks!

Bạn gửi cái file cụ thể mà muốn tính tổng độ lên xem thế nào? Chắc chỉ dùng hàm sum thôi, với điều kiện giá trị trong ô phải là Number.
 
Thầy Phan Tự hướng! em đã có quyển sách xuất bản của thầy về VBA trong excel trong ĐCCT nhưng em không thấy đề cập đến các vấn đề tính toán hay các hàm cao cấp hơn để cố thể giải quyết công việc nhanh hơn. neeus được thầy cho em xin 1 vài hàm liên quan đến ĐCCT được không? Học trò cũ của thầy. Kính gửi ><></
 
Cho mình hỏi nếu thể hiện được độ phút giây rồi thì làm sao để tính lượng giác của các góc đó?
 
Web KT
Back
Top Bottom