• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセス 取り込み時に、桁数(テキスト型)を合わせたい)

アクセス 取り込み時に、桁数(テキスト型)を合わせたい

このQ&Aのポイント
  • CSVファイルをアクセスに取り込んで、桁数が異なる列のデータを合わせたいと思っています。
  • テーブルのフィールド・プロパティで試してみましたがうまくいきませんでした。
  • マクロを使ってデータを取り込んでエクセルに出力する方法もありますが、データ量が多いためアクセスで処理したいです。良い方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • x0000x
  • ベストアンサー率52% (67/127)
回答No.6

#1です。 回答の補足を頂いていたのに、確認が遅くなりました。 既に解決していた場合には、無視してください。 >クエリ[Q_KMM]にてデータ抽出… >DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Q_KMM", Epath & "\費用.xls", True クエリ"Q_KMM"の抽出時にRight関数で処理できます。 Right("0000" & 列,桁) as 列 意味は、抽出列に前ゼロ文字列を付加し、右から必要な桁数を取得。 Right関数で処理した列には、名前が無いので、元の名前を"As 列"で命名してます。 (1)クエリ"Q_KMM"を選択後、コンテキストメニューから「デザイナー」を選択します。 (2)クエリーデザイナーのテーブル表示ペインでコンテキストメニューの「SQLビュー」を開きます。 (3)O列(TBL.O列で示します)を以下に変更します。    SELECT ~ ,TBL.O, ~     ↓    SELECT ~ ,Right("00000000000" & TBL.O,11) AS O, ~ (4)Z列も同様に変更します。    SELECT ~ ,TBL.Z, ~     ↓    SELECT ~ ,Right("000" & TBL.Z,3) AS O, ~ (5)クエリ"Q_KMM"を保存します。 ※念のため、クエリ"Q_KMM"のbackupコピーを作成の上、お試しください。 right("000"&T11.c,11) as c, right("0"&T11.d,3)

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • t-ka
  • ベストアンサー率28% (14/50)
回答No.5

正直言ってVBAを理解してないと厳しいです。個人の開発者(SOHO)さんに依頼してみてはいかがでしょう。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

>アルファベット混じりのテキスト型のためか この数例を具体的に上げていただけませんか アクセスのFormat関数を使えば済む問題ではないですか。 これだけのコードをお書きになる力の方なので、そんなことはわかっている、部類かもしれませんが、 >エクセルに出力して、text関数を使う方法もあるのですが といわれると、上記の可能性がありそうで、気になります。 >O列(8桁と11桁(アルファベット含む)が混在) →8桁のものの頭に「000」を付け加えて、テキスト型で11桁に揃えたい 簡単な場合だと下記でできそうですが、一筋縄で行かない天は? テーブルのフィールド コード2 12345678 asd123456789 sdf12345 123456789012 式 コード2: IIf(Len([体重表]![コード2])=8,"000" & [体重表]![コード2],[体重表]![コード2]) 結果 コード2 00012345678 asd123456789 000sdf12345 123456789012

nekonote19
質問者

補足

ご回答ありがとうございます。 No.1の補足でも触れましたが、このマクロは私が書いたものではありません。 (それどころか、アクセスのマクロは初めてなのです) >エクセルに出力して、text関数を使う方法もあるのですが が一番簡単で良いと考えたのですが、データを扱う人がご年配で、 しかもデータの更新が頻繁にあるため、どうしてもアクセスで自動的に出力する必要があるのですが、正直お手上げです。(苦笑) アクセスのFormat関数>はクエリに設定なので良いのでしょうか? 式1: IIf(Len([コード2])=8,"000" & [コード2],[コード2]) (上記のように試しにやってみたのですが、「式で型が一致しません」とエラーが出てしまいました) どこか間違っているところがあるのでしょうか? 実際のデータは下記のようなものです。 >O列(8桁と11桁(アルファベット含む) 例:12345678 00234567895 C5244300067  >Z列 (空欄と、2桁、3桁が混在) 例: 45 045 975 (空欄) すみませんんが、もしお判りでしたら教えてください。 お願い致します。

すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

登録されていないようなのでもう一度 置換に関しては replace(format("a1jd3","@@@@@@@@")," ","0") で 000a1jd3 となります。 @の数で調整してみてください。 ※Access2000以降で値にスペースがない場合に限ります。 (2000でもクエリだと) http://support.microsoft.com/kb/225956/ja など

すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

置換に関しては replace(format("a1jd3","@@@@@@@@")," ","0") で 000a1jd3 となります。 @の数で調整してみてください。 ※Access2000以降で値にスペースがない場合に限ります。 (2000でもクエリだと) http://support.microsoft.com/kb/225956/ja など

nekonote19
質問者

補足

ご回答ありがとうございます。 No.1の補足にも記入しましたが、恥ずかしながら、私自身はマクロは超初心者です。 取り込みの際に置換する…というのは理解できるのですが、 このコードは、マクロのどこに書き込めばよいのかが わからないのです(汗) ※Access2000以降で値にスペースがない場合に限ります。> という条件はクリアしています。

すると、全ての回答が全文表示されます。
  • x0000x
  • ベストアンサー率52% (67/127)
回答No.1

MS-ACCESSのユーザ定義関数を作成し、QUERYから呼び出す事で可能です。 >strSQL = "INSERT INTO " & UKMM >strSQL = strSQL & " SELECT *" >strSQL = strSQL & "FROM " & TableName & n の[SELECT * "FROM " & TableName & n] を [SELECT A列,B列,C列,…,subO(O列) as O,…,subZ(z列),… FROM " & TableName & n] の様に列毎のSELECT文に再定義します。 処理が必要な列では、列値を引数として、変換後の値を戻すFunctionを定義し、変換後の値でINSERTします。 上記の場合"subO(),subZ()"です。 これらのFunctinは、標準モジュールでPublicで宣言します。 Public Function subO(Byval colO as string) AS string '(1)O列(8桁と11桁(アルファベット含む)が混在) '→8桁のものの頭に「000」を付け加えて、テキスト型で11桁に揃えた結果値を求める。 subO = 処理結果値 End Function 同様に、subZも定義します。 AccessのSql文が解析される際に、subO(),subZ()が1行毎に処理されます。 ”未定義関数…”の実行時エラーが発生した場合は (1)Accessのコンパイル (2)データベース最適化/修復 などを行なった後に再度チャレンジしてください。 まずは、試験的に定義関数をの動作を確認した後、実装されては如何でしょう!

nekonote19
質問者

補足

ご回答ありがとうございます。 ただ…すみません このマクロは前任者が作ったファイルを流用しているので、 私自身には、なんのことやらさっぱりわからないのです。 メインフォームにボタンが設置されていてクリックしたら実行 (指定したフォルダーから読み込み、 同じフォルダー内に出力するようにされています。) マクロもフォームに書かれています。 これらのFunctinは、標準モジュールでPublicで宣言します。> ということは、新たに標準モジュールを作る必要があるのでしょうか? (補足質問が的を得ていないかもしれませんが…)

すると、全ての回答が全文表示されます。

関連するQ&A