0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GAS】市町村の訪問記録を出すためにやったこと

0
Posted at

はじめに

お久しぶりです。黄瀬のん(Xenon_ura118)です。
GASとGoogleスプレッドシートを使用して、自分の人生で訪れた市町村の記録および割合を算出してみました。
GASを利用するのは初回のみなので、備忘録となります。
(1回しか使わないコードだから適当でええやろ!wの精神でいたので、かなり適当です。ゆるしてください)
多分やりたい人はいないと思いますが、参考になることがあれば嬉しいです。

フォルダ作成(半自動)

都道府県コード及び市区町村コードの一を、総務省のHPからExcelファイルでダウンロードしてきます。
ちなみに、現時点では1,747市町村が存在しているらしいですよ。(北方領土含む)
https://www.soumu.go.jp/denshijiti/code.html

そのファイルを参考に、まずはWindowsエクスプローラ上で市町村数分のフォルダを作成していきます。
都道府県フォルダ\市町村フォルダ という階層になるように作成します。
コマンドプロンプトにコマンドを打ち込んで一括で作成してしまいましょう。

mkdir 01_北海道\011002_札幌市
mkdir 01_北海道\012025_函館市
mkdir 01_北海道\012033_小樽市
(中略)
mkdir 47_沖縄県\473758_多良間村
mkdir 47_沖縄県\473812_竹富町
mkdir 47_沖縄県\473821_与那国町

都道府県フォルダが47個、その配下に各々の市町村数のフォルダができたら、Googleドライブにアップロードします。

都道府県フォルダ
スクリーンショット 2026-02-06 194833.png

その配下の市町村フォルダ(例として北海道を挙げておきます)
スクリーンショット 2026-02-06 194901.png

フォルダの情報をスプレッドシートに書き出し(自動)

以下の「urlFunc」メソッドを使用して、フォルダ名とURLをスプレッドシートに書き出しました。

①global.cs

global.cs
//スプレッドシート本体および各シートの定義
const ss = SpreadsheetApp.getActiveSpreadsheet()
const sheet = ss.getSheetByName('フォルダURL')
const folderId = "ここにルートフォルダのIDを記載"

②urlFunc.cs

urlFunc.cs
function urlFunc() {
  let todoufukenFolderArray = [] //都道府県フォルダの配列
  let shichousonFolderArray = [] //市町村フォルダの配列
  let tempFolder //一時用変数

  //各都道府県フォルダのIDを取得し、配列に格納
  let todoufukenRootFolders = DriveApp.getFolderById(folderId)
  let todoufukenRootFolder = todoufukenRootFolders.getFolders()  
  while (todoufukenRootFolder.hasNext()){ 
    tempFolder = todoufukenRootFolder.next()
    todoufukenFolderArray.push([tempFolder.getName(),tempFolder.getId()])
  }

  //都道府県フォルダを1つずつ取り出して各市町村フォルダのIDを取得し、配列に格納
  for(let i = 0; i < todoufukenFolderArray.length; i++){
    let shichousonRootFolders = DriveApp.getFolderById(todoufukenFolderArray[i][1])
    let shichousonRootFolder = shichousonRootFolders.getFolders()
    while (shichousonRootFolder.hasNext()){ 
      tempFolder = shichousonRootFolder.next()
      shichousonFolderArray.push([todoufukenFolderArray[i][0],tempFolder.getName(),"https://drive.google.com/drive/folders/"+tempFolder.getId()])
    }
  }

  //配列をスプレッドシートに書き出す
  sheet.getRange(2,1,shichousonFolderArray.length,3).setValues(shichousonFolderArray)
  SpreadsheetApp.flush()
}

こんな感じになると思います。
(1行目はあらかじめ入力しておきます)
スクリーンショット 2026-02-06 195818.png

フォルダ内にひたすらエビデンス格納(手動)

訪問した記録がある市町村フォルダに、ひたすら写真を格納していきます。
多分ここが一番しんどいと思います。
写真が見つからない場合はテキストファイルでも入れておけばいいでしょう。

フォルダ内にファイルがあるかを判別し、結果をスプレッドシートに書き出し(自動)

以下の「rirekiFunc」メソッドを使用して、結果をURLをスプレッドシートに書き出しました。

rirekiFunc.cs
function rirekiFunc() {
  
  //スプレッドシートのURL列を読み込んで配列に格納
  let readUrlArray = sheet.getRange(2, 3, 1747, 1).getValues()
  let urlArray = readUrlArray.flat()
  let idArray = urlArray.map((value) => {return value.replace("https://drive.google.com/drive/folders/", "")})

  let rirekiArray = []
  let rireki

  //1行ごとにフォルダを見に行き、中身があるかを確認する
  //中身がある場合はフラグを設定する
  for(let i = 0; i < idArray.length; i++){
    let folder = DriveApp.getFolderById(idArray[i])
    let files = folder.getFiles()
    if(files.hasNext()){
      rireki = "○"
    }else{
      rireki = ""
    }
    rirekiArray.push([rireki])
  }
  //配列をスプレッドシートに書き出す
  sheet.getRange(2,4,rirekiArray.length,1).setValues(rirekiArray)
  SpreadsheetApp.flush()
}

警告
上記のコードはあくまで「理想的」な記載です。
繰り返しが多すぎるため、そのまま実行すると制限時間に達してしまい、途中で実行が中止されます。
何行ずつかに区切って処理をするようにしてください。
ちなみにわたしは200行ずつ処理を実行していました。

実行すると、ファイルがある(訪問したことがある)フォルダの行は「○」がついてくれます。
(こちらも、1行目はあらかじめ入力しておきます)

スクリーンショット 2026-02-06 200451.png

都道府県ごとに○の数を集計(半自動)

別シートを作成し、関数を使って都道府県ごとの○の数を集計します。
2026/2/6時点では以下の通りでした。

スクリーンショット 2026-02-06 200824.png

スクリーンショット 2026-02-06 200853.png

スクリーンショット 2026-02-06 200911.png

おわりに

旅行好きで47都道府県全部訪問済みのわたしですが、市町村単位で見ると25%くらいしか訪問できていないことに驚きました。今後の人生でもできる限り多くの場所を訪問したいです。
余談ですが現時点ではどう頑張っても全市町村制覇することはできませんッピ。返せッピィ!

以上です。お読みいただきありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?