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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

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

Access

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

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Q&A

解決済

2回答

626閲覧

CSVデータを変換ソフトでコンバ-トしようとすると、「コンバートできません。Nullの使い方が不正です。」と出ます。

masatsutsui

総合スコア16

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

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

Access

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

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

0グッド

0クリップ

投稿2019/10/19 19:50

住所、戸主姓、戸主名前、家族姓、家族名、家族の続柄などのExcelデータからCSVデータを取り出します。これを対象にXP時代(Win10でも動く)の変換ソフトで、アクセス2000で作成したXP時代のプログラム用にコンバ-トしようとすると、「コンバートできません。Nullの使い方が不正です」と出ます。
これを解消してコンバートしたいです。
Nullを削除しようと、以下で処理しましたが、「出るはずの」イミディエイトウィンドウには何も出ません。
処理後のCSVをコンバートしても、変わらず「Nullの使い方が不正です」が出ます。

基本的に何か間違っているのでしょうか?
ご指摘、ご指導をお願いいたします。

Sub Null問題()
Dim MaxRow As Integer, Cel(3000, 10) As Variant, i As Integer, j As Integer

Sheets("Data").Select MaxRow = Range("H65536").End(xlUp).Row - 1 'データの最大行数を取得 Range("A1").Select For i = 1 To MaxRow For j = 1 To 10 Cel(i, j) = Cells(i, j).Value 'Cel(i, j) にデータを取得 If Cel(i, j) = Null Then Cel(i, j) = "" Debug.Print Cel(i, j) Else Cel(i, j) = Cel(i, j) End If Next j Next i

End Sub

以上です。

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

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

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

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

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

nandymak

2019/10/19 23:39

>XP時代(Win10でも動く)の変換ソフト とは具体的に何ですか? データ量が判りませんが変換ソフトに読み込ませるCSVファイルをテキストエディタで見たときおかしな文字など紛れていませんか?
masatsutsui

2019/10/23 01:48

変換ソフトは年賀状の住所などをアクセスのプログラムに取り込むものです。CSVファイルをテキストエディタで見たときおかしな文字などは見えません。ありがとうございました。
masatsutsui

2019/10/23 01:50

コードについては勉強してみます。有難うございました。
kenshirou

2019/10/26 04:19

変換ソフトでエラーがでるCSVファイルの中身についてですが、各文字列要素は二重引用符"で囲まれていますか? 例えば、住所・電話番号、FAX番号という列があり、FAX番号が空の場合、データは ”東京都○○区××”,"03-3333-4444,"" のようになっていますか、それとも 東京都○○区××,03-3333-4444, のようになっていますか? 文字データが二重引用符"で囲まれていないとうまく読み込めないソフトがあるかも知れません。
masatsutsui

2019/10/27 02:46

ありがとうございます。 これまでは、文字データが二重引用符"で囲まれていないとうまく読み込めないってことはありませんでした。
kenshirou

2019/10/27 03:05

ところで、Cel(3000, 10) As Variantという2次元配列にExcelセルの値を入れていますが、この配列の値がその後どのように使用されているか見えません。 これを元にCSV出力でもしているのでしょうか? あと、変換ソフトはフリーソフトか何かでしょうか? (「Nullの使い方が不正です」と出るのは、変換ソフトでもVBAを使用しているかも?)
masatsutsui

2019/10/27 03:58

ありがとうございます。Nullだと確認されれば、 Cells(i, j).Value = ""の様にセルを書き換える → 変換ソフトで処理 です。変換ソフトは作成者と連絡が取れないのですが、VBAだと思います。ソフトの名前は非常に狭い用途目的のもので、知られていません。ここではごめんなさい。
guest

回答2

0

変換ソフトで変換しようとしているCSVが正しいものであれば、変換ソフト側の不具合なので、おそらくここで回答を得るのは難しいと思います。
変換ソフト側がどのようにしてCSVの内容を読み込んでいるか分かりませんが、例えば以下の点を注意した方が良いかもしれません。
・文字化けするような文字が含まれているかどうか
(変換ソフト側で文字化けの文字をうまく処理できずNULLになっているかも知れない)
・変換しようとするCSVファイルで使用されている文字コード
(おそらくShift_JISであろうと推測するが、そうでない場合、変換ソフトでエラー?)
・変換ソフト側で必須項目のような設定があるかどうか
(必須項目に値がないと、これをNULLとしているかも知れない)
・変換したいCSVにヘッダ(CSV1行目に設定する項目名)がある場合、ヘッダ文字がきちんと入っているか
(項目名が空のヘッダがあるとNULLのエラーとなるかも知れない)
・CSV行の最後尾データの確認
("東京都○○区××","03-3333-4444","" のようになっていればOKだが、
"東京都○○区××","03-3333-4444", のようになっていると値をうまく取得できない?)
・各行でデータ数が同じかどうか

投稿2019/10/27 06:04

編集2019/10/27 07:10
kenshirou

総合スコア772

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

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

masatsutsui

2019/11/06 19:55

データが多すぎて、手作業での確認を諦めました。 今回はここまでとします。 ありがとうございました。
guest

0

ベストアンサー

以下のコードですが、

VBA

1Cel(i, j) = Cells(i, j).Value 'Cel(i, j) にデータを取得 2If Cel(i, j) = Null Then

少なくともNullの判定はIsNull関数を使う必要があります。また、CellsRangeで、あり、Range.ValueプロパティはVariant型なので、IsNull(Cells(i, j).Value)のようにチェックする必要があるはずです。

Microsoft Docs - Cellsプロパティ
同 - Range.Value プロパティ (Excel)

以下のコードで試してみてください。

VBA

1Sub NullFix2() 2 Dim MaxRow As Integer, Cel(3000, 10) As Variant, i As Integer, j As Integer 3 4 Sheets("Data").Select 5 MaxRow = Range("H65536").End(xlUp).Row - 1 'データの最大行数を取得 6 Range("A1").Select 7 For i = 1 To MaxRow 8 For j = 1 To 10 9 ' Cells(i, j).ValueはVariant型であり、IsNull関数を使う必要がある。 10 If IsNull(Cells(i, j).Value) Then 11 Cel(i, j) = "" 12 Debug.Print Cel(i, j) 13 Else 14 Cel(i, j) = Cells(i, j).Value 'Cel(i, j) にデータを取得 15 End If 16 Next j 17 Next i 18End Sub 19

これでもダメなら、コメントいただいているように、変換ソフトに取り込む前のデータから検証する必要があると思います。

投稿2019/10/20 00:39

dodox86

総合スコア9183

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

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

masatsutsui

2019/10/23 01:45

コードまでご親切にありがとうございます。 イミディエイトウィンドウには何も出ませんでした。 変換結果も同じでした。
dodox86

2019/10/23 01:52

改めて私が提示したコードを見直してみると、 > Cel(i, j) = "" > Debug.Print Cel(i, j) だと空文字列をセットしているので、イミディエイトウィンドウに何も表示されていなくても当然な気がしました。この点、すみません。それは置いておいて、「Nullの使い方が不正です」エラーも出るのでしょうか?
masatsutsui

2019/10/24 13:29

If IsNull(Cells(i, j).Value) Thenの直後にDebug.Print Cel(i, j)を入れてみましたが、表示されません。Nullと認識していないようです。コンバートで、「Nullの使い方が不正です」エラーも出ます。
dodox86

2019/10/24 15:16 編集

それでしたらもうこちら側のプログラムでできることはなく、変換ソフトに読ませるデータとしてどうか、データを検証するしかないと思います。
masatsutsui

2019/11/06 19:56

今回はここまでとします。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問