[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データの変換(60進数から10進数)』(ねぎ)
データの変換についての質問です。
複数のエクセルファイルにある緯度、経度データ取得し、一つのシートにまとめたいのですが、取得元には60進数で緯度経度が入力されており、それを10進数に変換して値を取得したいのですが、どう書けばよいでしょうか。
例えば緯度が
355555.9(60進数)の場合は35.93219444444444になると思います。
上2桁+中2桁/60+下2桁と少数点以下/3600
■データ取得イメージ
.Range("A" & i).Value(取得先) = sh2.Range("A1").Value(取得元)
.Range("B" & i).Value (取得先)= sh2.Range("A2").Value(取得元)
.Range("A" & i).Value(取得先)と.Range("B" & i).Value (取得先)を10進数に変換したいです。
諸事情でまとめ先にエクセル関数で式を書くことはできず、マクロ内で変換したいです。
< 使用 Excel:Office365、使用 OS:Windows10 >
こんな感じで如何でしょうか。
Sub サンプル()
Dim 度分秒 As String 度分秒 = Format(Range("A1").Value, "0000000.0000")
Dim 度 As String, 分 As String, 秒 As String 度 = Left(度分秒, 3) 分 = Mid(度分秒, 4, 2) 秒 = Right(度分秒, Len(度分秒) - 5)
Dim 実数 As Double 実数 = 度 + 分 / 60 + 秒 / 3600 MsgBox 実数
End Sub
(ななし) 2019/02/26(火) 16:15
Sub test() Dim cw As String Dim dw As Double
cw = Format(Range("A1"), "0000000.0000") dw = Mid(cw, 1, 3) * 1 + Mid(cw, 4, 2) / 60 + Mid(cw, 6) / 3600 MsgBox dw, vbInformation End Sub (???) 2019/02/26(火) 16:38
[TEXT(A1,"0"":""00"":""00.00")*24] なんてのはどうだろうか? (ねむねむ) 2019/02/26(火) 16:55
cw = Format(Range("A1"), "0000000.0000")で 型が一致しませんと出ました。 Dim cw As Stringをsingleやdoubleに変えましたが同じエラーが出ました。
初心者レベルで本当に申し訳ないですが、どうすればよいのでしょうか。。
ほかの方の回答も試させていただきますね!!
(ねぎ) 2019/02/26(火) 17:21
■以下私環境のコードです
.Range("BU" & i).Value = sh2.Range("B6").Value
cw = Format(Range("BU" & i), "0000000.0000") dw = Mid(cw, 1, 3) * 1 + Mid(cw, 4, 2) / 60 + Mid(cw, 6) / 3600 MsgBox dw, vbInformation (ねぎ) 2019/02/26(火) 18:23
(ななし) 2019/02/26(火) 19:26
そして、sh2 と i って何ですか? 変数を書くなら、その宣言部分と代入部分を省略せず、全て書いてください。 そうやって小出しにしたり、省略すると、誤解の元です。 そして、多くの場合、質問者が省略した部分にこそ、原因があったりします。(関係ないと思って省略するのでしょうけど、関係あると思っている部分には原因が無いから、自分で見つけられなかった、という感じ)
数字を文字列変換するとエラーだというなら、以下を試してみてください。 数値でない場合は0になります。
Sub test2() Dim sh2 As Worksheet Dim vw As Variant Dim dw As Double
Set sh2 = Sheets("Sheet2")
vw = Split(Format(sh2.Range("B6").Value, "##0|00|00.0"), "|") If 1 < UBound(vw) Then dw = vw(0) * 1 + vw(1) / 60 + vw(2) / 3600 End If MsgBox dw, vbInformation, sh2.Name End Sub (???) 2019/02/27(水) 10:24
関数化してみました。 Function Conv10(val60) Dim val1, val2, val3 Dim tmp1, tmp2 With WorksheetFunction tmp1 = .RoundDown(val60, -2) tmp2 = .RoundDown(tmp1, -4) val1 = (val60 - tmp1) / 3600 val2 = (tmp1 - tmp2) / 100 / 60 val3 = tmp2 / 10000 Conv10 = .Sum(val1, val2, val3) End With End Function (ろっくん) 2019/02/27(水) 17:14
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.