Mừng Sinh Nhật GPE 11: sáng 25/6 Hà Nội; 1/7 Huế/Đà Nẵng; Trưa 2/7 TPHCM

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

Thảo luận trong 'Excel và Kỹ Thuật' bắt đầu bởi PhanTuHuong, 16 Tháng sáu 2006.

  1. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    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
    [​IMG]

    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:

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

    Các file đính kèm:

    Lần chỉnh sửa cuối: 14 Tháng tư 2007
  2. nvson

    nvson Geotechnics

    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).
     
  3. nvson

    nvson Geotechnics

    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
     
  4. nvson

    nvson Geotechnics

    Những ký tự đặc biệt cũng có gì đâu, vì nó là bảng mã ANSI chuẩn mà!
     

    Các file đính kèm:

    Lần chỉnh sửa cuối: 22 Tháng mười một 2006
  5. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    À, 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
     
  6. t2k

    t2k Thành viên mới

    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.
     
  7. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    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.
     
  8. Bạn pots bài đầy đủ độ, phút giây cho anh em tham khảo đi
    Cảm ơn bạn !
     
  9. Tran Van Hong

    Tran Van Hong Thành viên mới

    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é.
     
  10. Ae-excel

    Ae-excel Thành viên mớ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
     
  11. khincute

    khincute Thành viên mới

    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!
     
  12. excellson

    excellson Thành viên mới

    copy đoạn code đó pate vào đâu để chạy vậy các bác. chỉ dùm em với
     
  13. jean2007

    jean2007 Thành viên mới

    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 đỡ :-=
     
  14. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Bạn thử bấm tổ hợp phím Alt 0 1 8 6 xem nào
    Số 0 1 8 6 thuộc bàn phím số nha
     
  15. lsxinh

    lsxinh Thành viên chính thức

    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.
     
  16. lsxinh

    lsxinh Thành viên chính thức

    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
     
  17. lsxinh

    lsxinh Thành viên chính thức

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

    Các file đính kèm:

  18. lsxinh

    lsxinh Thành viên chính thức

    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.
     
  19. danghinh86

    danghinh86 Thành viên mới

    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 ><></
     
  20. CDung_K47

    CDung_K47 Thành viên mớ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 đó?
     

Chia sẻ trang này