この記事でできること
Microsoft AccessのSQL(クエリ)を使用して、以下の2つの処理を行う方法を解説します。
- テキスト型で保存されたIPアドレスから、第1から第4までの各オクテットを数値として個別に抽出する。
- 複数のテーブル(T1, T2, T3)のデータを
UNION ALLを使って1つにまとめる。
想定環境・前提条件
- Microsoft Access(2010以降、Microsoft 365 Access環境)
- 対象のIPアドレスは「192.168.1.10」のような標準的なドット区切りのIPv4形式であり、テキスト型(Short Text)で保存されていること。
1. IPアドレス(テキスト型)から各オクテットを抽出するクエリ
テキスト型のIPアドレス文字列から、ドット(.)の位置を検索して各オクテットを切り出し、Val関数で数値に変換します。
SQLコード
SELECT テーブル1.IPアドレス,
Val(Left([IPアドレス],(InStr(1,[IPアドレス],".")-1))) AS 第1オクテット,
Val(Mid([IPアドレス],InStr(1,[IPアドレス],".")+1,InStr(InStr(1,[IPアドレス],".")+1,[IPアドレス],".")-InStr(1,[IPアドレス],".")-1)) AS 第2オクテット,
Val(Mid([IPアドレス],InStr(InStr(1,[IPアドレス],".")+1,[IPアドレス],".")+1,InStr(InStr(InStr(1,[IPアドレス],".")+1,[IPアドレス],".")+1,[IPアドレス],".")-InStr(InStr(1,[IPアドレス],".")+1,[IPアドレス],".")-1)) AS 第3オクテット,
Val(Right([IPアドレス],Len([IPアドレス])-InStr(InStr(InStr(1,[IPアドレス],".")+1,[IPアドレス],".")+1,[IPアドレス],"."))) AS 第4オクテット
FROM テーブル1;
解説と使い方
InStr関数でドットの位置を特定し、Left・Mid・Right関数で文字列を切り出しています。- IPアドレスの形式が不正(ドットが足りないなど)な場合、予期せぬエラーや意図しない値になるため、入力データのクレンジングと併せて使用してください。
2. 複数テーブルをまとめるクエリ(UNION ALL)
構造が同じ複数のテーブル(T1, T2, T3)のレコードを、重複行を含めてすべて垂直方向に結合します。
SQLコード
SELECT * FROM T1
UNION ALL
SELECT * FROM T2
UNION ALL
SELECT * FROM T3;
解説と使い方
UNION ALLは、重複排除を行うUNIONに比べてパフォーマンスが高くなります。重複データも含めて全件結合したい場合に最適です。- 結合するすべてのテーブルで、フィールドの数およびデータ型が一致している必要があります。
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月12日
- 変更HTMLタグやblockquoteで記述されていた古いレイアウトを、現在のCocoonテーマに適した構造化見出しとコードブロックへ修正しました。
- 追加IPアドレスの各オクテット抽出クエリにおける前提条件や動作の解説、および期待される結果を追加しました。
- 追加複数テーブルをUNION ALLでまとめるクエリの前提条件とテーブル構造の注意点を追加しました。
