ExcelでSQLを使う

エクセルでSQLを使う必須の関数を紹介しします。

ExcelでSQLを使う-004: 主Keyを採番する ー MAX() + 1

 

犬とはなんとけなげでいじらしい生き物なのだ。(中略)妻の膝から抱き上げてソファーに座り、その小さくて柔らかな身体を撫でていると、なお一層あたたかくなった。ー本文よりー

◇◇◇◇◇

 

本稿では、IDを採番して「軽井沢のボーイ」を<蔵書一覧>に追加することに挑戦する。

 

 もちろん、VBAのコードを書いて採番するというのはルール違反である。また、複雑なINSERT文を書くなんてのも、SQL文を知らないユーザーを想定している本稿の主旨に反する。極々初歩的なSELECT文を書くことで、目的を達成出来なければ意味がない。

INSERT INTO [蔵書一覧$A1:G100]
 VALUES (
 DLookup("SELECT MAX(ID) FROM [蔵書一覧$A1:G100]") + 1,
  '軽井沢のボーイ',
  null,
  '牧野出版',
  '海老原靖芳'
  '2019/3/15',
  null)

前回のINSERT文と違うのは、只の一ヶ所。

 

4

DLookup("SELECT MAX(ID) FROM [蔵書一覧$A1:G100]") + 1,

 

と、列[ID]の最大値を求めるSELECT文を実行して結果を戻す DLookup関数 の登場。そして、取得した最大値(=3)に1を加算している。だから、4と書くに等しい。一番簡単な定番の採番方式である。次は、その実践の様と結果である。

 

 

? SQLExecute("INSERT INTO [蔵書一覧$A1:G100] VALUES (" &
                          DBLookup("SELECT MAX(ID) FROM [蔵書一覧$A1:G100]") + 1 &
                         ", '軽い沢のボーイ', null, '牧野出版', '海老原 靖芳', '2019/3/15', null)")

True

 

 

 

 






>フムフム、色々と出来るのはよー分かった。

>でも、使い道はねーな!


と言う諸氏が大半であろう。その意見は、今暫く封印して欲しい。

 

 予定では、次は、《外部ブックとアクセスのテーブルを追加・変更・削除するについて書くつもりだ。このレベルの作業をチャッチャと達成する手段としては、SQLExecute()とその姉妹関数である CnnExecute() は便利だ。

 

PS、連番を発生させて表を更新するには?

 

 よく見る質問の一つに「表のある列に連続番号を書き込みたい!」というのがある。これをノンプログラミングで実現するのは不可能なように思われる。しかし、SQLExecute()とDLookup()を組み合わせれば、それが可能になる。この手法の詳細については、後段で触れる。