• ベストアンサー

ACCESSでの桁数を指定して数値を抜き出し、カンマ区切り表示にする方法

ACCESSでのデータ変換について質問です。 下記のような半角20桁の数値が入力されているフィールドが1~10まであり、 これらの値の左側から7桁目までの数値を抜き出し、それら抜き出した 数値の1桁ごとに「,」で区切って表示したいと思っているのですが、 一括括変換する方法があれば教えて下さい。 例(1)12345678910000000000 →1,2,3,4,5,6,7 例(2)00000000001234567890 →0,0,0,0,0,0,0 例(3)00112233445566778899 →0,0,1,1,2,2,3 私は、アクセスに不慣れなので、数式を入力する方法も合わせて教えて いただけると大変助かります。 MID関数を使えばいいらしいのですが、ACCESSではどうすればよいのか分からないため質問させていただきました。 よろしくお願い致します。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.5

#4です > 前回教えて頂いたSQL文の後ろに追加でよろしいでしょうか? 紛らわしい書き方しましたね、すみません。 #1で示したものへの、部分的修正個所を書いてました。 標準モジュールに記述するのは、以下となります。 Public Function CutAndKamma(vQ As Variant) As String   Dim sRet As String   Dim i As Integer, j As Integer   Const MaxMojiLen As Integer = 7 '★桁数指定   On Error Resume Next   sRet = ""   If (Not IsNull(vQ)) Then     j = Len(vQ)     If (j > MaxMojiLen) Then j = MaxMojiLen     For i = 1 To j       sRet = sRet & "," & Mid(vQ, i, 1)     Next   End If   If (Len(sRet) > 0) Then sRet = Mid(sRet, 2)   CutAndKamma = sRet End Function ※クエリへの記述は  CutAndKamma(テーブル名.そのフィールド名) AS XXXX のように変更ありません(クエリをSQLビューで見た時の) ※桁数を変更する時には、★部分の 7 を書き換えるだけです。

KTN1123
質問者

お礼

30246kiku様 いつも丁寧なご回答をありがとうございます。 早速、試したところ希望通りの結果を得ることができました。 こんなに複雑なSQLを作っていただき、大変感激したと同時に とても勉強にもなりました。ぜひ活用させて頂きますね(*^_^*) この度は、Access初心者のため理解不足などで多々 ご迷惑をお掛けしてしまい申し訳ございませんでした。 また質問等をさせていただくこともあるかと思いますが、 宜しくお願い致します。

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

その他の回答 (4)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.4

#2です > 構文エラー:クエリ式に演算子がありません(構文エラー) このメッセージで一緒に表示されていた文字列は何でしたか。 クエリ式 '・・・・・・・・・・'の 構文エラー:演算子がありません。 の ・・・・・・・・・ 部分になります。 良く間違うのは、( ) や、スペースを全角にしてしまうとか、、、(半角で記述します) で、そのメッセージを閉じた時、どの部分が反転表示されていますか。 その近辺でエラーとなっています。(反転表示されない時もあります) ※ 実現するための方法、やり方は1つということはありません。 複数フィールドに対して同じ処理をしたいということだったので、今後の修正/変更のしやすさからユーザ定義関数を使う方法を提示させていただきました。 現在は7文字ですが、5文字、10文字に変更する時は1箇所変更することで対処できます。 この変更くらいでは、不具合を作りこむことはまずないと思います。 (今後変更なければ、余計なお世話ということに) 処理を確かにするためには、フィールド内の文字の桁が7に満たない時の処理を盛り込むくらいでしょうか。 (それはない、であれば今のままでも)   Dim i As Integer, j As Integer   Const MaxMojiLen As Integer = 7   On Error Resume Next   sRet = ""   If (Not IsNull(vQ)) Then     j = Len(vQ)     If (j > MaxMojiLen) Then j = MaxMojiLen     For i = 1 To j とか、 ※ 実物を見ることができないので、メッセージに表示される内容、メッセージを閉じた後で反転表示される近辺など、少しあたってみてください。 どうしてもダメであれば、そのSQLビューの内容をそのまま提示してください。 (わけあって提示できない内容であれば、一度メモ帳にコピーし、フィールド名/テーブル名を置換機能をつかって置き換えたものを提示してください) (自分で文字消したり追加したりしないでください) (提示される場合は、テーブルのサンプルも5~10行程度欲しいです)

KTN1123
質問者

補足

30246kiku 様 早々のご回答をありがとうございます。 大変分かりやすいご説明をいただき恐縮でございます。 ご指導いただきました「構文エラー」については、テーブル名とフィールド名の記述に誤りがあったようで、それを修正することで解決いたしました。 今回教えていただきました「文字の桁が7に満たない時の処理」の SQL文は、前回教えて頂いたSQL文の後ろに追加でよろしいでしょうか? 追加するとコンパイルエラーが発生し、以下のエラーメッセージが 表示されます。 「同じ適用範囲内で宣言が重複しています」 また、今回のSQLだけを記述した場合は、結果が全て「#エラー」になります。 原因は、私の記述方法にあると思うのですが、アドバイスをいただけると幸いでございます。 お手数お掛け致しますが、宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • mumu_bb
  • ベストアンサー率50% (5/10)
回答No.3

横から失礼します。 クエリでしたら、 クエリの新規作成をして、使用するテーブルを選択して、 「フィールド:」のところに、 Format(Left([フィールド1],7),"@\,@\,@\,@\,@\,@\,@") (フィールド名が不明なので、仮に「フィールド1」としています) と入力すれば、表示出来そうです。 入力後、 式1: みたいなものが先頭に付きますが、そのままにしておいてください。 フィールド10個あるようなので、 右隣の枠に他のフィールドも同じ様な形式で入力していってください。 あと、一括変換したいとのことですが、 テーブル作成クエリで、新しくテーブルを作られてはいかがでしょうか? Access2000~20003では、 テーブル作成クエリは、 メニューバー から クエリ(Q) → テーブル作成(K) で、未使用のテーブル名を入力し、 再度、メニューバー から クエリ(Q) → 実行(R) で、新しいテーブルが作成できます。

KTN1123
質問者

お礼

ご回答くださり誠にありがとうございました。 希望通りの結果を得ることが出来ました。 設定画面の添付画像は、初心者の私には大変分かりやすくて参考になりました。 ありがとうございましたm(__)m

全文を見る
すると、全ての回答が全文表示されます。
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

#1です > 数式を入力する方法も合わせて教えて 失礼しました。 ユーザ定義関数は記述できたものとして、以下手順を。 クエリのデザイン画面を開いているとします。 そこには、対象のテーブル/クエリが四角いテーブルの様な形で表示されているとします。 変更したいフィールドを1つダブルクリックすると、下の方にそのフィールドが表示されると思います。 ここで、クエリをSQLビュー表示に切り替えてみます。 そこに表示されているのは、 SELECT テーブル名.そのフィールド名 FROM テーブル名; のようになっていると思います。 ここを自力で、 SELECT CutAndKamma(テーブル名.そのフィールド名) AS XXXX FROM テーブル名; と書き換えてみます。 その後、クエリをデータシートビュー表示に切り替えてみます。 すると、7つの文字がカンマ区切りで表示されると思います。 その時に表示されるフィールド名が、XXXX になります。 クエリをデザインビュー表示に切り替えてみます。 すると、フィールドの欄は XXXX: CutAndKamma(テーブル名.そのフィールド名) に書き変わっていると思います。 で、これをメモ帳などに張り付けて、XXXX の部分、そのフィールド名の部分を変更したものを、隣のフィールド欄に張り付けていきます。 #1 で示したものは、SQLビュー表示での書き方になります。 (デザインビューを見たまま説明するのが難しいので、クエリの内容についてはSQLビュー表示での書き方を示すことが多いです) ※その変更したいフィールドが10個あるようなので、XXXX も10通りの名前に変更します。 (同じ名前:フィールド名は付けれないので)

KTN1123
質問者

補足

30246kiku 様 早々の御回答をありがとうございます。 ご指示いただきました手順で「SQLビュー表示」画面で、 テーブル名やフィールド名を書き換えた上で、クエリを データシートビュー表示に切り替えようとしたのですが、 「構文エラー:クエリ式に演算子がありません(構文エラー)」 と表示され、次に進むことが出来ませんでした。 原因として考えられることがあれば、教えて頂けると幸いです。 度々お手数お掛けして申し訳ございませんが なにとぞ宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

その数値が入っているフィールドの型はテキスト型ですよね。 編集用にユーザ定義関数を、標準モジュールに作成します。(以下例) Public Function CutAndKamma(vQ As Variant) As String   Dim sRet As String   Dim i As Integer   On Error Resume Next   sRet = ""   If (Not IsNull(vQ)) Then     For i = 1 To 7       sRet = sRet & "," & Mid(vQ, i, 1)     Next   End If   If (Len(sRet) > 0) Then sRet = Mid(sRet, 2)   CutAndKamma = sRet End Function クエリでは、編集の必要なフィールドに対して上記関数名で呼び出します。 そのフィールド名を F1 と仮定すると、 CutAndKamma(F1) AS XXXX XXXX は新しいフィールド名 関数の内容は、1文字づつカンマを先頭に付けた文字列を生成し、 文字列が生成されていたら先頭のカンマを取り除いたものを戻り値として返す。 というものです。 ※ 関数名は適宜変更してください。

KTN1123
質問者

補足

初歩的な質問で恐縮なのですが、【CutAndKamma(F1) AS XXXX】は どこに記述すれば宜しいでしょうか? また、「XXXX は新しいフィールド名」とは、新たにフィールドを追加し、そこに【CutAndKamma(F1) AS XXXX】を記述するのでしょうか? お忙しい所 大変恐縮ではございますが、宜しくお願い致します。

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

関連するQ&A

  • 数値データの一括変換方法について

    「EXCEL」または「ACCESS」でのデータ変換について質問です。 下記のような「0」と「1」からなる10桁の数値があり、 それを特定のルールに従い一括変換する方法があれば教えて下さい。 例(1))0000000000 →0 例(2))1111111111 →1|2|3|4|5|6|7|8|9|10 例(3))1010110000 →1|3|5|6 例(4))0000110010 →5|6|9 例(5))0000000001 →10 10桁の数値の左側から順に「1」になっていれば、その桁の数値に置き換える。(1桁目は「1」、3桁目は「3」、10桁目は「10」) また置き換えた数値が2個以上ある場合は、「|」の記号で区切る。 上記のような数値データが数万個あり、それらを一括で変換できる方法があれば教えて頂けると助かります。 お忙しい所 大変恐縮ではございますが、何卒宜しくお願い致します。    

  • 数値データの最後尾の値から判定し一括変換する

    「EXCEL」または「ACCESS」でのデータ変換について質問です。 下記のような「0」と「1」からなる10桁の数値があり、 値の末尾からみて数値を以下のように括変換する方法があれば教えて下さい。 (本来は10桁の数値なのですが、EXCELの仕様で先頭の「0」は非表示) 例(1)0      →0 例(2)1111111111 →1|2|3|4|5|6|7|8|9|10 例(3)1010110000 →1|3|5|6 例(4)110010   →5|6|9 例(5)1000000010 →1|9 例(6)1      →10 10桁の数値の左側から順に「1」になっていれば、その桁の数値に置き換える。(末尾1桁目は「10」、末尾3桁目は「7」、末尾10桁目は「1」) また置き換えた数値が2個以上ある場合は、「|」の記号で区切る。 上記のような数値データが数万個あり、それらを一括で変換できる方法があれば教えて頂けると助かります。 お忙しい所 大変恐縮ではございますが、何卒宜しくお願い致します。

  • accessで数値の表示桁数を指定する方法

    access2007使用です。 テーブルでは数値の指定が出来ますが、それによって計算結果を出すクエリを作ったところ、小数点で表示されてしまいます。 小数点2桁で全て表示を揃えたいのですが、どこの画面でどのような設定をしたらいいのか分かりません。 その設定の画面と設定方法を教えてください。

  • Accessでテキスト型→数値型への変換方法

    Access2000を使用しており、クエリを作成しています。 テーブルから[回答]というフィールドをひっぱってきています。 フィールド[回答]にて、最初の3文字に対応時間を入れており、 Mid関数にて対応時間を抽出しました。 対応時間:Mid([回答],1,3) しかし、Mid関数でとったフィールドは文字列として認識されています。(Ex:001など) この文字列を数値に変換する関数、又は方法などお教えくださいませ。 よろしくお願い致します。 以下にイメージ図を記載致します。 ================================= 回答            対応時間 001 ●●●~        001 ================================= (対応時間を数値で扱えるようにしたい、ということです)

  • ACCESSでの桁数のあわせ方

    EXCELで (1)ERPソフトからの抽出データと (2)手入力で管理しているデータ をACCESSで取り込んで、加工をします。 それぞれ入力方法が (1)のERPからのデータは必ず10桁(0000012345とか0000000123)で (2)は有効分(12345とか123) となっていますのでACCESSへ、インポートする際に 桁数が異なってしまい、クエリーで結び付けられません。 そこで、(2)のデータを(1)のように必ず10桁にして 桁数あわせに0が入るといった方法、つまり12345なら0000012345、123なら0000000123と変換させる 方法はありませんでしょうか。 出来れば、(2)をACESSで取り込んでからACCESSで処理をしたいです。

  • アクセスの数値入力

    アクセス2002で作製したテーブルの フィールドに受注コードを入力したいの ですが、数値が思うように入力できませ ん。 5桁で00001や00234などと入 力したいのですが、1や234と表示さ れてしまいます。 解決方法をご存知の方アドバイスをお願 いいたします。

  • アクセスで桁数を増やしたい

    アクセスで桁数を増やしたい 従業員のデータベースをアクセスで作成しているのですが、 諸般の事情と従業員の出入りが激しいので桁数を増やしたいのですが、 方法がわかりませんのでお願いします 今現在は、 従業員の個人コードを10001の5桁で管理しておりますが、 それを、7桁にしたいのです。 最初の1は、部署を表し、0001は、個人コードです。 部署 1を11と2桁にし 個人コード0001の4桁を00001の5桁にしたいのです たとえば                   旧個人コード  新個人コード 最初の1を11に  10001   1100001    1を11に  12222   1102222       2を12に  23333   1203333    3を13に  32222   1302222    4を21に  43333   2103333    5を22に  51234   2201234    6を31に  68888   3108888    7を41に  70001   4100001したいのです このフィールドのデータ型は数値型で主インデックスです OSはXP ソフトはオフィス2003です。

  • 【Access97】指定した桁数で区切りたい

    txtファイルをAccessへインポートした後、項目毎に区切るためにMid関数を使用していますが、全角文字を2桁として認識してくれず区切り位置がおかしくなってしまいます。 同様の作業をExcelでやっても同じでした(添付画像参照、データは一部項目のみ抜粋)。 項目数=30個、桁数=一行につき255桁(固定)、1つのtxtファイル内のデータ行=200行以上、そのtxtファイル数が数十個あるので毎回Excelの『区切り位置指定ウィザード』を使用するのも大変です。 何とかAccessの更新クエリーで作業したいのですが、指定した位置で区切る方法、もしくは全角文字を2桁として認識させる方法はありませんか?

  • エクセルで桁数の表示について

    エクセルで入力した数字を6桁の表記変換にする事ってできますか? 例  1   →000001  123  →000123  123456→123456 と言う形に変換したいのですが。 目的は、VLOOKUP検索で検索する値がすべて6桁の 表記になっているので、6桁の文字列にしないと いけないからなんですが。 とりあえず、下記に示すif関数で変換してるんですが もっと簡単なやり方ってないものですか? 宜しくお願いいたします。 現在している変換方法 =IF(C2<10,"00000"&C2,IF(C2<100,"0000"&C2,IF(C2<1000,"000"&C2,IF(C2<10000,"00"&C2,IF(C2<100000,"0"&C2,C2))))) (C2セルに数値を入力)

  • Access フィールド内の値で、右端から5桁目の値だけを抽出する方法について

    Accessのフィールド内にある半角英数字(10桁~20桁)の右端から5桁目(または左端から5桁目)だけを抽出する方法を教えて下さい。 以下のように 各フィールド内に値が入力されています。 入力されている桁数は10桁以上20桁未満です。(全て半角) ◆元データ(レコードが10万件以上ある)  フィールド1    フィールド2     フィールド3 (1) 12345678910    11aa22bb33cc44dd55  1010101010101010 (2) 9876540000     aaaaaabbbbbb1111    11111111111111 ◆右端から5桁目だけを抽出する  フィールド1    フィールド2     フィールド3 (1)  7          4          0 (2)  4           1           b よろしくお願い致します。

専門家に質問してみよう