こんにちは! 健史です。
以下の記事のGAS版です。

Excel-VBA 実例 ExcelデータからSQL文を自動生成
こんにちは! 健史です。オラクルやSQLサーバなどのデータベースを使われている方でSQL文として、ExcelデータからのINSERT文など作成したい!と思ったことありませんか。空白の列に'="INSERT INTO ~"を埋め込むことでもで...
概要説明
シート1データからシート2のINSERTのSQLを作成します。
シート1

シート2

プログラム
//------------------------------
// INSERT SQL 作成
//------------------------------
function myfunc1(){
const TABLENAME = "HANBAIDB.顧客M"
// シート定義
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet1 = ss.getSheets()[0]
var sheet2 = ss.getSheets()[1]
// 変数定義
var ix1,iy1,ix1_max,iy1_max,ix2
var str_sql
// 最大行、最大桁を取得
ix1_max = sheet1.getLastRow()
iy1_max = sheet1.getLastColumn()
// 出力エリアのクリア
sheet2.clear()
ix2 = 2
// ループ処理
for (ix1 = 3 ; ix1 <= ix1_max ;ix1++) {
str_sql = "INSERT INTO " + TABLENAME + " ("
// 項目名をセット
for (iy1 = 1; iy1 <= iy1_max ; iy1++){
str_sql = str_sql + sheet1.getRange(1,iy1).getValue()
if (iy1 == iy1_max) {
str_sql = str_sql + ") VALUES ("
}
else {
str_sql = str_sql + ","
}
}
for (iy1 = 1; iy1 <= iy1_max ; iy1++){
switch(sheet1.getRange(ix1,iy1).getValue()) {
case "":
str_sql = str_sql + "NULL"
break
default:
switch(sheet1.getRange(2,iy1).getValue()) {
case "":
str_sql = str_sql + "'" + sheet1.getRange(ix1,iy1).getValue() + "'"
break
case "N":
str_sql = str_sql + sheet1.getRange(ix1,iy1).getValue()
break
}
break
}
if (iy1 == iy1_max) {
str_sql = str_sql + ");"
}
else {
str_sql = str_sql + ","
}
}
ix2++
sheet2.getRange(ix2,1).setValue(str_sql)
}
}
補足
VBA版のプログラムを置き換えただけなので、特にありません。
詳しくは、冒頭のVBA版の記事をご覧頂ければと思います。
最後に
データベースのデータをダウンロードしたり加工して貼り付けるのに使用するにはEXCELが多く、SQL作成においても冒頭記事のVBA版を利用されるのが多いかと思います。
ですが、プログラムで「データを順次処理する」ことが必要になった際に、ひな形として参考にして頂ければと思います。
ご活用頂ければと思います。



コメント