ACCESSで作業をし、EXCELにエクスポートしてCSVで配信しています。
CSVに落とす際には必ずカンマ区切りで次の列として認識させたいのですが、
商品の型名などの中には,カンマが含まれている場合があり、CSVに落とす際に
列ずれを起こしてしまいます。
私だけが使用するのであれば、検索置換で毎回確認すればいいのですが、
私以上の初心者の人もこのDBを使用して作業するので、ボタンをクリック
するだけで出来るような物にしたいのです。
初心者の為、質問内容がわかりにくいと思いますがご回答よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
NULLのデータがありましたか(汗;
NULLというのは、「何もない」という意味です。
したがってこの場合は下記のように記述します。
lobjRecordset.Fields(0).Value = IIf(IsNull(lobjRecordset.Fields(0).Value), "", Replace(lobjRecordset.Fields(0).Value, ",", "-"))
これは、型名に何もデータがなかったら(IsNullなら)そのまま、データがあったらカンマをハイフンに置き換えた文字をセットする。
というものです。
この回答への補足
なるほど~。エクセルと似て非なるものなんですね(^^;)
今、試してみましたが、やはり
実行時エラー'94':NULLの使い方が不正です。
モジュールは頂いたものをコピペしました。この通りです。↓
lobjRecordset.Fields(0).Value = IIf(IsNull(lobjRecordset.Fields(0).Value), "", Replace(lobjRecordset.Fields(0).Value, ",", "-"))
忙しい中、申し訳ありません。私も出来るだけ自分で考えてみます。。。
PrintScreeさん、本当に詳しく色々教えていただいてありがとうございましたm(_ _)m
O_cyanさんの方法で無事出来ましたが、PrintScreeさんのおかげでモジュールに触れることが出来、
せっかくなので、モジュールのほうでも、作ってみます。
ただ、締め切らないと、他の回答がどんどん来てしまいそうなので、PrintScreeさんにはもう少し聞きたいことが
ありましたが、締め切りますね(:_;)
本当にありがとうございましたっ!
No.6
- 回答日時:
カンマをスペースに置き換えずに、エクスポート時に列を「"」で囲むのはどうでしょうか?
(例) "06/02/10","商品代","1,000"
この方法でカンマが含まれている場合でも一つの列として認識します。
方法は、エクスポートでファイルの保存画面の時に
ファイルの種類を「テキストファイル(*.txt,*.csv,*.tab,*.asc)」を選択する。
そして[エクスポート]ボタンをクリックすれば『テキストエクスポートウィザード』が立ち上がります。
あとは、
フォーマットを「区切り記号付き」を選択。
フィールド区切り文字「カンマ」、テキスト区切り記号「"」をそれどれ選択。
最後にエクスポート先のファイル名を「○○○.xls」にする。
これでウィザードを完了させればOKです。
O_cyanさんの方法で、無事出来たので今回はそちらでやってみようと思いますが、
5qooさんに教えていただいた方法は今後も使えそうなので覚えます。
これは、文字列として認識させるということですかね?
ありがとうございます。
No.5
- 回答日時:
簡単な方法は
クエリで
Replace([型名],","," ")
として型名にある,をスペースに置き換えます。
そのクエリを元にしてエクスポートすれば簡単にできます。
ExcelにでもCSVにでもどちらにでもエクスポートできます。
このクエリを使ってマクロでも作りボタンのイベントに設定すれば良いのでは
No.3
- 回答日時:
>lstrSqlStmnt = "SELECT 型名 FROM T03 データ統合"
テーブル名にスペースがあるんですね。
その場合はこう記述します。
lstrSqlStmnt = "SELECT 型名 FROM [T03 データ統合]"
Visual Basicはブランクが間にあるとブランクの左側と右側は別物と判断してしまうので、[]記号で「一つである」と教えてやらなければなりません。
本来は、テーブル名やクエリなどではスペースを使用せずアンダーバー(_)を使用するのが、AccessプログラマやVBプログラマの間では暗黙の了解となっています。
この回答への補足
暗黙の了解なんですね。今後は気をつけるようにします(^^)
そして、申し訳ないのですがさらなる問題が起きました。
実行時エラー'94':NULLの使い方が不正です。
モジュールはこの通りです。↓
lobjRecordset.Fields(0).Value = Replace(lobjRecordset.Fields(0).Value, ",", "-")
余分な空白が入っているということでしょうか?
私もPrintScreeさんに教えて頂いた、関数とかの意味を調べて考えてみますが、お時間があれば教えて下さい。
No.2
- 回答日時:
まず、ACCESS側で、オブジェクトをモジュールにし、新規作成をクリックすると、PrintScreeさんのおっしゃる
>【Option Explicit】が表示されず【Option Compare Database】が表示されます。
Option Explicit は Option Compare Databaseの次にあってもなくても構いません。
Option Compare Databaseの下に関数を貼り付けてください。
>モジュールは名前を付けて保存するのでしょうか?
はい、名前を付けて保存してください。
名前は表示されている Module1 のままで構いません。
>フォームのボタンにその関数を割り当てる方法
まず、ボタンを貼り付けボタンの上で右クリックしてプロパティをクリックするとプロパティシートが出てきます。(プロパティシートが表示されているならそのまま)
ボタンを貼り付ける時、「コマンドボタンウィザード」が表示されたらキャンセルしてください。
次に、そのシートの上に[イベント]タグがあるので、そこをクリック。
表示された中に「クリック時」というのがあるので、そこをクリックするとコンボボックスの矢印が表示されるので[イベント プロシージャ]を選択。
その隣にある[...]ボタンをクリックすると、Microsoft Visual Basic の画面になり、下記のような表示になるはずです。
Private Sub コマンド0_Click()
End Sub
これを、次のように書き換えてください。
Private Sub コマンド0_Click()
Call sub置き換え
End Sub
これで、フォームを保存して開けば、コマンドボタンをクリックすると、カンマを置き換える関数「sub置き換え」が実行されます。
関数の中身については、ヘルプを見ながら勉強してください。
Set、Database、Recordset、String、CurrentDB、While、MoveNext、Sub、FunctionなどはVisualBasicの命令なので、ヘルプで検索できます。
まだ分からない所が会ったら、補足質問してください。
この回答への補足
度々、申し訳ありません。
言われたとおり作業をしたのち、ボタンをクリックしたところ、このようなメッセージが表示されました。
実行時エラー'3078'
入力テーブルまたはクエリ'T03'が見つかりませんでした…
モジュールはこうです。↓
lstrSqlStmnt = "SELECT 型名 FROM T03 データ統合"
テーブルのプロパテイなどで名前を調べましたが一見間違っているようには見えません。
ただ、エラーメッセージでは'T03'とテーブル名が途中までしか表示されません。
確認した、テーブル名等は、↓こうでした。
【テーブル名:T03 データ統合 フィールド名:型名】
何か、テーブル名などに問題があるのでしょうか?
No.1
- 回答日時:
モジュールで関数を作成し、Replaceコマンドを使用すれば , → 別の文字 に一括で置き換えることが可能です。
まず、モジュールの編集画面(Microsoft Visual Basic)を開き(モジュールの新規作成)、[ツール] - [参照設定]から「Microsoft DAO 3.6 Object Library」にチェックを入れます。
次に、下記の関数を「Option Explicit」の下に貼り付けてください。
Public Sub sub置き換え()
Dim lobjDB As Database
Dim lobjRecordset As Recordset
Dim lstrSqlStmnt As String
Set lobjDB = CurrentDB()
lstrSqlStmnt = "SELECT 型名 FROM 商品テーブル" ← この部分はご自分で書き換えてください。
Set lobjRecordset = lobjDB.OpenRecordset(lstrSqlStmnt, dbOpenDynaset)
While Not lobjRecordset.EOF
lobjRecordset.Edit
lobjRecordset.Fields(0).value=Replace(lobjRecordset.Fields(0).Value, "," ,"-")
lobjRecordset.Update
lobjRecordset.MoveNext
Wend
lobjRecordseet.Close
lobjDB.Close
Set lobjRecordset = Nothing
Set lobjDB = Nothing
End Sub
そして、フォームを新規作成し、ボタンを貼り付け、「クリック時」のイベントプロシージャ内に、上記関数名を書きます。
これで、フォームのボタンを押すだけで型名内のカンマを(この例だと)ハイフンに置き換えるので、その後でCSVにエクスポートしてください。
この回答への補足
VBをほとんど使ったことがなく知識がなさすぎて申し訳ないのですが、
まず、ACCESS側で、オブジェクトをモジュールにし、新規作成をクリックすると、PrintScreeさんのおっしゃる【Option Explicit】が表示されず【Option Compare Database】が表示されます。
また、その次の段階でこの関数を貼付け後はモジュールは名前を付けて保存するのでしょうか?
あと、フォームのボタンにその関数を割り当てる方法がよくわからないので、よろしければ教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Visual Basic(VBA) vbaマクロについて 次のようなマクロを組みたいです。 自分は初心者なので全くわかりません。 詳しく 8 2023/05/18 18:38
- その他(データベース) 20万行あるデータを動かしたい 2 2023/06/13 15:21
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- Ruby power BI クエリエディター 〇〇を含む文字列置換 1 2022/10/16 17:34
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
ACCESS更新クエリで型変換エラー
Access(アクセス)
-
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
ACCESS で 項目名を出力せずにエクスポートしたい
その他(データベース)
-
-
4
Accessのクエリで、replace関数を使い、データの中にある”をブランクに置き換えたいのですが
Access(アクセス)
-
5
Accessの桁区切りについて教えてください。
Access(アクセス)
-
6
accessのフィールドに10桁の数字は入らない??
Access(アクセス)
-
7
ACCESSでの改行コード
その他(データベース)
-
8
空白をそのままインポートする方法について
その他(データベース)
-
9
ACCESSのデータに自動で半角スペースを入れたい
その他(データベース)
-
10
Access パラメータクエリをcsvでエクスポートしたい
Access(アクセス)
-
11
Accessの文字列部分一致を合計する関数
その他(Microsoft Office)
-
12
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスで「モジュールがあり...
-
EXCEL VBAのユーザーフォームに...
-
access の 閉じるボタンを無効...
-
エクセルVBA オプションボタ...
-
AccessでExcelシートを印刷
-
コマンド入力ができなくなって...
-
JW-CADのAutoモードの解除はで...
-
ExcelVBAで指定外のUserFormを...
-
Accessでエラーメッセージの表...
-
tarコマンドをウインドウズ環境...
-
エクセルVBA ユーザーフォーム...
-
Access レポート印刷するときに...
-
YahooのIDがロックされてしまい...
-
クエリで出来た表にチェックボ...
-
レコードを保存するコード ア...
-
passwordが入れられません・・・・
-
データベースのINT型項目にNULL...
-
アクセスで数値型のフィールド...
-
フォームで入力しても反映されない
-
「フォームを作成できませんで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA オプションボタ...
-
EXCEL VBAのユーザーフォームに...
-
ExcelVBAでセルをクリックして...
-
コマンドプロンプト使用時に「'...
-
アクセスで「モジュールがあり...
-
JW-CADのAutoモードの解除はで...
-
ACCESS フォームでの、データ...
-
Notesでアンケートをとりたい
-
AccessでExcelシートを印刷
-
ACCESS カンマをスペースに置...
-
Accessでエラーメッセージの表...
-
標準モジュールだとエラーにな...
-
Accessでaccdeへ変換で機能しない
-
コマンドボタンに色を付けるこ...
-
エクセルVBAからアクセスフ...
-
ユーザーフォームのスクロール...
-
エクセルVBA ユーザーフォーム...
-
USBメモリを丸ごと仮想イメージ...
-
Autocad LT 引き出し線の上に文...
-
プロシージャの実行方法
おすすめ情報