質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

1562閲覧

ExcelVBAでのSQLで数値_数値のデータがNull判定される

Pure

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/03/19 01:51

ExcelVBAでSQLを書いています。
特定のカラムがNullが格納されており、'--'を置換しているのですが
IIF(カラムA is Null ,'--',カラムA)
と処理しています。

ですが、タイトルにある通り、数値_数値のものがNull判定されてしまい正確な集計ができない状態です。

原因と解決策をお知りの方、ご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/03/19 02:13

「数値_数値」ってなんですか?無知ですみません。 DBはAccess? ExcelVBAを使わないときはどうなりますか? 現在のコードも提示してください。
sazi

2020/03/19 03:08

iif()を使用しているという事は、SQLと言われているのはaccessのクエリーの事ですよね? AccessではNull判定には空文字('')も含まれますけど、そういう事では無くて?
macof

2020/03/23 02:25

細かいことですいません、ACCESS(というよりJET?)における空文字とNULLは区別されます。 ただ、そもそも普通に入力しにくい上に区別もしにくいですし、 カラムのNULLおよび空文字列許可の設定の組み合わせによって入力時に暗黙の変換が行われたりするので紛らわしい挙動になることはあります。
guest

回答1

0

試してみましたが問題なさそうです。(ACCESS-VBAで書いてみましたが)
修正依頼に記載されていますが「数値_数値」というデータが以下の通りなら、、、ですが。

テーブル1

IDData1
10
21
3a
41_1
5

VBA

1Option Compare Database 2 3Sub debug1111() 4 Dim db As Database 5 Dim rs As Recordset 6 Dim sql As String 7 8 Set db = CurrentDb() 9 sql = "select ID," 10 sql = sql + "IIF(Data1 is Null, '--', Data1) as data01" 11 sql = sql + " from テーブル1" 12 sql = sql + " order by ID" 13 14 Set rs = db.OpenRecordset(sql) 15 Do Until rs.EOF 16 Debug.Print "ID=" & rs.Fields("ID").Value & "; Data1=" & rs.Fields("data01").Value 17 rs.MoveNext 18 Loop 19 Set rs = Nothing 20 Set db = Nothing 21End Sub

結果

ID=1; Data1=0
ID=2; Data1=1
ID=3; Data1=a
ID=4; Data1=1_1
ID=5; Data1=--

投稿2020/03/23 01:22

編集2020/03/23 01:24
DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問