スプレッドシートで緯度・経度を度・分・秒(DMS)形式に変換する3つの方法|数式・カスタム関数・GASで簡単変換!
緯度・経度データを扱うとき、小数形式(例: 35.685085
)では分かりづらいと感じたことはありませんか?
その場合、度・分・秒(DMS)形式(例: 35° 41′ 6.31″
)に変換することで見やすくなり、地図や位置情報の確認が簡単になります。
この記事では、Googleスプレッドシートで緯度・経度を度・分・秒形式に変換する方法を 3つご紹介します。
- 数式
- カスタム関数
- Google Apps Script (GAS)
目的やデータ量に応じて最適な方法をお使い分けください。
緯度・経度を度・分・秒 形式に変換する方法の比較
方法 | 特徴 | 活用する場面 |
---|---|---|
数式 | 簡単に使える セルごとに入力が必要 | 少量のデータを手早く変換したい場合 スクリプトを使いたくない場合 |
カスタム関数 | シンプルな数式で使える セルごとに入力 | 複数シートで繰り返し使いたい場合 |
スクリプト | 大量データを一括で処理可能 | データ量が多く手動入力では非効率な場合 定期的に処理を自動化したい場合 |
DMS形式とは?
DMS形式(Degree, Minute, Second)は、緯度・経度を次のように表現する形式です:
- 度(°):小数部分を切り捨てた整数
- 分(′):小数部分を60倍して整数部分
- 秒(″):分の小数部分をさらに60倍して取得
例:
小数形式:35.685085
DMS形式:35° 41′ 6.31″
方法1: 数式を使ってDMS形式に変換
スプレッドシートの数式を使ってDMS形式に変換できます。
数式
緯度 (B2セルの場合):
=INT(B2) & "° " & INT((B2-INT(B2))*60) & "′ " & ROUND(((B2-INT(B2))*60-INT((B2-INT(B2))*60))*60, 2) & "″"
経度 (C2セルの場合):
=INT(C2) & "° " & INT((C2-INT(C2))*60) & "′ " & ROUND(((C2-INT(C2))*60-INT((C2-INT(C2))*60))*60, 2) & "″"
数式の説明
INT
関数:指定した数値の小数点以下を切り捨てて、整数部分のみを返します。
INT(B2)
:度(°)を取得(B2-INT(B2))*60
:分(′)を取得((B2-INT(B2))*60-INT(...))*60
:秒(″)を取得し、小数点以下2桁に丸める
方法2: カスタム関数を使って変換
カスタム関数を使うことで、スプレッドシートのセル内で直接DMS形式に変換できます。
カスタム関数の数式
緯度 (B2セルの場合):
=DMS(B2)
経度 (C2セルの場合):
=DMS(C2)
カスタム関数の設定
カスタム関数を使用するにあたり、以下の設定をします。
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function DMS(value) {
const degrees = Math.floor(value); // 度
const minutes = Math.floor((value - degrees) * 60); // 分
const seconds = ((value - degrees) * 60 - minutes) * 60; // 秒
return degrees + "° " + minutes + "′ " + seconds.toFixed(2) + "″";
}
スクリプトの説明
Math.floor(value)
-
小数点以下を切り捨てて度(°)を取得。
(value - degrees) * 60
-
小数部分を60倍して分(′)を取得。
(minutesの小数部分 * 60)
-
秒(″)を取得し、小数点以下2桁に丸めます。
スクリプトを書いたら、名前を付けて保存します。
(例:「緯度経度(DMS形式)」)
スクリプトを一度実行して権限を承認します。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
設定が完了したら、セルにカスタム関数を入力して使用します。
方法3: Google Apps Scriptで一括変換
大量のデータを一括で変換する場合は、スクリプトを実行する方法が便利です。
このスクリプトは、B列(緯度)とC列(経度)のデータをDMS形式に変換し、D列 と E列 に出力します。
- 元データ(B列、C列) はそのまま残ります。
- D列:変換後の緯度(DMS形式)
- E列:変換後の経度(DMS形式)
また、シート名を「緯度経度」としてスクリプト実行時に参照します、
GASの実行手順
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function convertToDMS() {
// 特定のシートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("緯度経度");
// シートが存在しない場合は処理を終了
if (!sheet) {
SpreadsheetApp.getUi().alert('「緯度経度」というシートが見つかりません。シート名を確認してください。');
return;
}
// 緯度(B列)と経度(C列)のデータ範囲を指定 (2行目から最終行まで)
const range = sheet.getRange(2, 2, sheet.getLastRow() - 1, 2);
const values = range.getValues();
// D列とE列にDMS形式のデータを書き込む配列を作成
const output = values.map(row => {
const lat = row[0]; // 緯度
const lng = row[1]; // 経度
return [
lat ? convert(lat) : "", // 緯度のDMS形式 (D列)
lng ? convert(lng) : "" // 経度のDMS形式 (E列)
];
});
// D列(4列目)とE列(5列目)に結果を書き込む
sheet.getRange(2, 4, output.length, 2).setValues(output);
}
// 緯度・経度をDMS形式に変換する関数
function convert(value) {
const degrees = Math.floor(value); // 度(°)
const minutes = Math.floor((value - degrees) * 60); // 分(′)
const seconds = ((value - degrees) * 60 - minutes) * 60; // 秒(″)
return degrees + "° " + minutes + "′ " + seconds.toFixed(2) + "″";
}
スクリプトの説明
- シートの取得
-
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("緯度経度");
- シート名を指定して、そのシートを取得します。
- シート名を変更する場合は
'緯度経度'
を実際のシート名(例:'住所リスト'
)に置き換えます。
- シートのデータ取得
-
const range = sheet.getRange(2, 2, sheet.getLastRow() - 1, 2); const values = range.getValues();
- 2行目から最終行までの B列(緯度)と C列(経度)のデータを取得します。
2, 2
: 2行目の2列目(B列)からデータ取得を開始。sheet.getLastRow() - 1
: 最終行までの行数を計算。2
: 2列分(B列とC列)を取得。
- 緯度・経度のDMS変換
-
const output = values.map(row => { const lat = row[0]; // 緯度(B列) const lng = row[1]; // 経度(C列) return [ lat ? convert(lat) : "", // 緯度をDMS形式に変換 lng ? convert(lng) : "" // 経度をDMS形式に変換 ]; });
values
配列の各行に対してmap
を使い、緯度と経度をDMS形式に変換します- 緯度が空なら空白(
""
)、そうでなければDMS形式に変換します。 - 緯度のDMS形式 → D列
- 経度のDMS形式 → E列
- DMS形式への変換関数
-
function convert(value) { const degrees = Math.floor(value); // 度(°) const minutes = Math.floor((value - degrees) * 60); // 分(′) const seconds = ((value - degrees) * 60 - minutes) * 60; // 秒(″) return degrees + "° " + minutes + "′ " + seconds.toFixed(2) + "″"; }
- 緯度・経度の小数形式を「度・分・秒(DMS)」形式に変換します。
Math.floor(value)
: 小数点以下を切り捨てて「度」を取得します。(value - degrees) * 60
: 小数部分を60倍して「分」を取得します。- 「分の小数部分 * 60」: 秒を計算し、小数点以下2桁に丸めます。
- 結果の結合:
35° 41′ 6.31″
のような文字列を返します。
- D列・E列に結果を書き込む
-
sheet.getRange(2, 4, output.length, 2).setValues(output);
- D列(4列目)とE列(5列目)に、DMS形式に変換した結果を出力します。
2
: 出力開始行(2行目)。4
: 出力開始列(D列)。output.length
: 行数(入力データと同じ数)。2
: 列数(D列とE列)。
スクリプトを書いたら、名前を付けて保存します。
(例:「緯度経度(DMS一括)」)
スクリプトを実行してB列,C列の緯度経度をDMS形式にして出力します。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
緯度経度(DMS形式)が一括でD列、E列に出力されます。
まとめ
この記事では、緯度・経度を度・分・秒(DMS)形式に変換する3つの方法をご紹介しました。
- 少量のデータなら「数式」
- 手軽に関数として使いたいなら「カスタム関数」
- 大量のデータを一括処理するなら「Google Apps Script」
用途に合わせて最適な方法を選び、スプレッドシートでのデータ管理や業務効率化にご活用ください。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント