出産前後の痔にはご注意!

お世話になります。
検索をかけても望む形の物がでませんのでご教授願います。

おそらくクエリでできると思うのですが、
文字列+数字の連番処理をかけたいです。
具体的には
C0001
C0002
C0003
C0004

こういった形です。

オートナンバーでフォーマットを変える方法を見つけたのですが、保持している情報が
C0001なら1になってしまい、困っています。
C0001という文字列で保存できる方法をお願いいたします。


環境 access2010

質問者からの補足コメント

  • 追記補足です。

    他のテーブルでC0001のオートナンバーを利用したいためです。

    機材在庫_A
    の在庫管理番号が
    A0001

    機材在庫_B
    の在庫管理番号が
    B0001

    機材在庫_C
    の在庫管理番号が
    C0001

    顧客情報テーブルに
    A0001やB0002、C0002を書き込みたいためです。
    よろしくお願いします。

      補足日時:2017/08/23 11:14
  • どう思う?

    おはようございます。
    お返事が遅くなって申し訳ありません
    同じ環境にしたらいけました。

    ただ、追加クエリにて
    C0001などを保存するのは難しいのでしょうか。
    最初の説明不足で申し訳ありません。

    最終的には別テーブルに
    A0001
    B0001
    C0001
    D0001
    などを書き込む処理を考えています。

    在庫テーブル×4
    ID オートナンバー(問題の部分)
    登録日  日付
    シリアルNo 短いテキスト
    貸出フラグ 短いテキスト
    コメント 長いテキスト
    機材コード 短いテキスト

    このうち、コメント以外を別テーブル(中間の処理テーブル)に流して処理を考えています。
    その際にIDを個別処理で流して、A~DのIDを一つの列にまとめようとしています。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/08/24 10:02

A 回答 (3件)

No.1です。


こちらの簡易的なテーブルとクエリでは問題ないのですが、何か当方と異なる点はありますか?

テーブル:機材在庫_C
フィールド: ID   │オートナンバー型
       機材名 │短いテキスト

クエリ:クエリ1
  フィールド│式1: "C" & Format([ID],"0000")│ 機材名
  テーブル │                │機材在庫_C
「accessでの文字列の混ざった連番処理」の回答画像2
この回答への補足あり
    • good
    • 0
この回答へのお礼

お世話になります。
お返事が遅くなって申し訳ありません。
職場が持ち帰り残業がNGですので、明日再度詳細を投稿いたします。
明日、一旦、同じDBを作ってテストしてみます。
正直、Access初心者で、コードがめちゃくちゃなので、一旦綺麗なものを作ってみたいと思います。

お礼日時:2017/08/23 21:36

中間の処理テーブルを「T中間処理」とすると、


在庫テーブル_Aを基に追加クエリを作成します。

追加先のテーブルは「T中間処理」を指定し、登録日、シリアルNo、貸出フラグ、機材コードは
それぞれ対応する「T中間処理」のフィールドを指定します。
オートナンバーから生成した「A0001」の部分は、T中間処理のIDフィールドを指定します。
その際、T中間処理のIDフィールドはオートナンバー型ではなく、
短いテキスト型にしておく必要があります。

残りの在庫テーブルに対しても同様の追加クエリを作り、
このクエリを順に実行していけば T中間処理 のIDフィールドに
A~DのIDが順に並びます。
    • good
    • 0
この回答へのお礼

ここまでご丁寧な対応ありがとうございます。
サンプルデータはできましたので、実プログラムに落とし込んでみます。
ありがとうございます。

お礼日時:2017/08/24 13:30

オートナンバーのフィールド名が「ID」だとして、


クエリのフィールド部分に
式1: "C" & Format([ID],"0000")
とすれば、IDの値に沿って C0001、C0002 となります。
    • good
    • 0
この回答へのお礼

式1: "C" & Format([ID],"0000")にしましたが、
抽出条件でデータの型が一致しません
と出ました。
[ID]は、オートナンバー型になっています。
型の不一致が理由だとは思うのですが、思い当たる節がありません。

よろしくお願いします。

お礼日時:2017/08/23 16:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q更新クエリで日付だけ更新されません。

お世話になります。
以前、ご回答くださった方、ありがとうございます。

質問なのですが、accessでフォームを作り、日付型(と数値型)のカラムのみ更新されません。
どういうことが原因でしょうか。
今までは短いテキストで誤魔化してきていたのですが、今回はどうしても日付型の必要があります。

▼DB
○ シリアルナンバー 短いテキスト
○ 顧客番号 短いテキスト
○ 顧客氏名 短いテキスト
○ フリガナ 短いテキスト
× 貸出日  日付型
× 返却日  日付型

▼フォーム
シリアルナンバー デフォルト
顧客番号 デフォルト
顧客氏名 デフォルト
フリガナ デフォルト
貸出日  日付型 日付(S)
返却日  日付型 日付(S)

短いテキストにすると、更新クエリのうち、×の部分も更新できます。
よろしくお願いします。
参考程度でもいいのですが、数値型も更新できない理由が知りたいです。

Aベストアンサー

なるほど、フォームから更新クエリですね。
お書きになった内容でできるように思うのですが、なぜだろう?^^;
画像がよく見えませんが、2017/08/28の表示形式でしょうか?
8/28と入力すれば2017/08/28になりますか?

とりあえず、No.1の方が仰るようにCDate関数を使ってもできませんか?
患者一覧.貸出日 =CDate([Forms]![フォーム_患者一覧]![貸出日])
またはFormat関数で
患者一覧.貸出日 =Format([Forms]![フォーム_患者一覧]![貸出日],"yyyy/mm/dd")
それでも駄目なら
患者一覧.貸出日 =CDate(Format([Forms]![フォーム_患者一覧]![貸出日],"yyyy/mm/dd"))

QパソコンでACCESSを習おうと思っているのですが

今のパソコン教室はまだ2013でやっているようです。2016になると試験方式が少しかわるみたいですね。新しくFOM出版のサイトを見ていたら2013だと、今まで使っていたCDでは一問一答式でわかりやすかったのですが、そもそも今2013年版Access売ってないですよね。どっちでとったほうがいいのだろうかと悩んでいます。
2016から一問一答式のCDがついてないみたいで。それも不安です。

Aベストアンサー

>そもそも今2013年版Access売ってないですよね。

パッケージ版は製造中止のようですが、Office365ならOffice2016かOffice2013を選択可能(いずれかで片方で有ればいつでも切り替え可能)のようです。

一カ月は無料で試用できますので、切り替えの確認も含めて試されてはどうでしょうか。

Qaccess2016 コンボボックスの取得データについて

access2016を使用しています。
コンボの取得の仕方について、ご教示ください。

異なる下記テーブルのデータがあります。

aテーブル
 項目1  項目2
 aa    b1b1
 aa    b2b23
 aa    b5b5b5

bテーブル
 項目1  項目2
 bb    hhhh
 bb    jjjj
 bb    tttt


1つのフォームに
2つのコンボボックスを作成して 

1つ目のコンボでaaを選択したら、2つ目のコンボでは、aテーブルの項目2の データを一覧表示し
1つ目のコンボでbbを選択したら、2つ目のコンボでは、bテーブルの項目2の データを一覧表示したい

上記コンボのように
最初に選択した内容によって、次のコンボでは、取得元のテーブルを変更したいのですが、
どのようにすればよいのでしょうか。

よろしくお願いいたします。

Aベストアンサー

1つ目のコンボボックスを「コンボ1」、2つ目のコンボボックスを「コンボ2」とします。
コンボ1の値集合ソースを「”aa";"bb"」として、aa か bb を選べるようにします。

コンボ2作成時のコンボウイザードでは「キャンセル」を選択して非連結のコンボボックスを作成します。
プロパティーシートを開いて、列数に「2」、列幅に「0cm;2cm」を記述します。

コンボ1の更新後処理イベントに以下のコードを記述すれば
コンボ1が「aa」ならば「aテーブル」、「bb」ならば「bテーブル」の
項目2 が表示されます。

Select Case Me.コンボ1
Case "aa"
  Me.コンボ2.RowSource = "aテーブル"
Case "bb"
  Me.コンボ2.RowSource = "bテーブル"
Case Else
 Me.コンボ2.RowSource = Null
End Select

QEXCELで今まで保存できていた場所に、EXCEL上からのファイルの保存ができなくなってしまいました

EXCELで今まで保存できていた場所に、EXCEL上からのファイルの保存ができなくなってしまいました。
対処法をご教示いただけませんでしょうか?
(先日、同じ質問投稿をしましたが、解決できず締切となったため、再投稿いたします)

環境、状況は以下のとおりです。

<環境>
・OS:WINDOWS10
・ソフト:EXCEL2016

<状況>
★HDD上のファイル操作について★

・「ドキュメント」フォルダ(ライブラリ?)以下にあるEXCELファイルを開くと「読み取り専用」になってしまう
・開いたファイルを上書き保存しようとすると、エラーとなり保存できない
・名前を付けて保存しようとしても、「ドキュメント」フォルダ以下には、エラーとなり保存できない

ただし、

・「ドキュメント」フォルダ以下での、EXCELファイル自体のコピペ(WINDOWS上の操作)は可能
・「ドキュメント」フォルダの上のフォルダには、名前を付けて保存できる
・「ドキュメント」フォルダの上のフォルダのEXCELファイルを開くと、「読み取り専用」にならない

です。


情報等が足りない場合も、ご指摘いただけましたらお返事したいと思います。
よろしくお願いいたします

EXCELで今まで保存できていた場所に、EXCEL上からのファイルの保存ができなくなってしまいました。
対処法をご教示いただけませんでしょうか?
(先日、同じ質問投稿をしましたが、解決できず締切となったため、再投稿いたします)

環境、状況は以下のとおりです。

<環境>
・OS:WINDOWS10
・ソフト:EXCEL2016

<状況>
★HDD上のファイル操作について★

・「ドキュメント」フォルダ(ライブラリ?)以下にあるEXCELファイルを開くと「読み取り専用」になってしまう
・開いたファイルを上書...続きを読む

Aベストアンサー

ブックを保護する - Office サポート
https://support.office.com/ja-jp/article/ブックを保護する-7e365a4d-3e89-4616-84ca-1931257c1517

ブックの保護がかかっているのでしょう。
上記のページを参考に、解除しましょう。

Q全てのテキストボックスをセルに出力

VBAを使ってシート上の全てのテキストボックスのテキストを取得・出力するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいと思います。

環境:Windows10 Office2016

状況:
既存のエクセルシートに約100個以上のテキストボックスが作成されており
一覧を作成するためにセルにコピーしたい。

テキストボックスの並び順などは一切こだわりません。
そもそも実現可能かでもご存知の方いらっしゃいましたらお教えください。

Aベストアンサー

> 上記は出力結果の例ですが、数字部分はテキストの作成順を表すものでしょうか。
> そうであれば、例えば新規に追加した図形は textbox 164 となるべきだと思いますが

Excelが勝手に付ける番号って以上は、特に決まり無いのでは。
手動でtextbox 165とか、textbox 9999999とか作ったとして、次に連番振らなきゃならないって事もないでしょうし。


> If tx.Type = msoTextBox Then
> のほうが良いかと。

良さげですね。

QExcel.名簿一覧表から別シートの領収書一覧表で印刷してるのですが,名簿を1名削除すると領収書の名

Excel.名簿一覧表から別シートの領収書一覧表で印刷してるのですが,名簿を1名削除すると領収書の名前のセルにエラーが出るだけで領収書1枚は削除されないです。領収書も詰めたり逆に名簿を追加したら領収書も追加するように。領収書シートには文字列.MID関数が入ってます。素人初心者

Aベストアンサー

削除する行の次の行から表の一番下+空白の行を1行までコピーして、削除する行の上に貼り付けてはどうですか?
例:削除対象が4行目の場合、5行目以下をコピー、4行目に貼り付け

QACCESS Dateadd関数による日付フィルターが使えない

ACCESSにて
選択クエリーでDateadd関数を使用して日付の何か月後を取得出来ましたが、
その取得出来た日付(何か月後)に抽出条件を設定して、
特定の日付や範囲で絞り込むことが出来ません。

「抽出条件でデータ型が一致しません。」とメッセージがでます。


どのうようにすればデータ型を一致させることが出来ますか?

よろしくお願いします。

Aベストアンサー

期間_月がNullの場合、DateAdd関数で「#エラー」が返されているのが原因なのかな?
私も詳しい理由の説明はできないのですが、とりあえず以下の方法で「データ型が一致しません」は無くなりました。

クエリの
終了日:DateAdd("m",[期間_月],[売上日])
これを
終了日:IIf([期間_月] Is Null,Null,DateAdd("m",[期間_月],[売上日])) にしてみてください。

これで「#2017/04/13#」でも抽出できました。
また、終了日を日付で抽出するのであれば、上記の式ですと
「抽出条件:Is Not Null で絞込み」は必要ないかもしれません。

正確な理由説明ができずに申し訳ありません。

Qプロシージャの実行方法

Access2016を使用しています。
例えば添付画像のようなフォーム(フォーム1)を作り、非連結のテキストボックス「T_F1」と
「T_F2」、そして「登録」ボタンを配置したとします。
登録ボタンをクリックすると内容をテーブルに追加し、T_F1 と T_F2 をクリアするという動きを
させる場合、以下のようにコードを書いてみました。

Private Sub BT_登録_Click()
 Dim DB As DAO.Database
 Dim RS As DAO.Recordset
 Set DB = CurrentDb
 Set RS = DB.OpenRecordset("TB1", dbOpenDynaset)
 RS.AddNew
  RS.Fields(0) = Me.T_F1
  RS.Fields(1) = Me.T_F2
 RS.Update
 RS.Close: Set RS = Nothing
 DB.Close: Set DB = Nothing
 Call S_clear
End Sub
------------------------------------
Private Sub S_clear()
 Me.T_F1 = Null
 Me.T_F2 = Null
End Sub
------------------------------------

ここで S_clear() の動作テストを行いたいのですが、「F5」や VBAメニューバーの
[実行(R)]-[Sub/ユーザーフォームの実行] ではマクロを選択するウインドウが
開きますが、何も選択することが出来ません。

試しに 「Public Sub S_clear()」にしてみても同様でした。
標準モジュールに記述すれば「F5」で動作確認ができるのですが、
この様な場合の動作確認はどのように行えばよいのでしょうか?

Access2016を使用しています。
例えば添付画像のようなフォーム(フォーム1)を作り、非連結のテキストボックス「T_F1」と
「T_F2」、そして「登録」ボタンを配置したとします。
登録ボタンをクリックすると内容をテーブルに追加し、T_F1 と T_F2 をクリアするという動きを
させる場合、以下のようにコードを書いてみました。

Private Sub BT_登録_Click()
 Dim DB As DAO.Database
 Dim RS As DAO.Recordset
 Set DB = CurrentDb
 Set RS = DB.OpenRecordset("TB1", dbOpenDynaset)
 RS.AddNew
...続きを読む

Aベストアンサー

フォーム内に適当なボタンを一つ作り、クリック時イベント(コード)を Call S_clear とだけ記述すればいいのでは?

T_F1とT_F2に適当な数値や文字を入れ、そのボタンを押すと動作確認できるはずです。

メンドクサイなら、現在のコードでCall S_clearの直前・直後などにメッセージボックスを出すようにしておくのも良いと思います。うまく動作したらRemするなり、削除すればよいのだし。

QSQL文で パラメータが少なすぎます エラー

Access2016 のVBAについて教えてください。
例えば以下のようなテーブルがあるとします

Tテーブル(各フィールドは全てテキスト型)
│ 伝票 │  日付  │ 商品 │ 備考 │
  D001  2017/06/15  商品A  備考A
  D002  2017/07/02  商品B  備考B
  D003  2017/05/30  商品C  備考C
  D004  2017/07/19  商品D  備考D
  D005  2017/07/10  商品E  備考E

Tテーブルの日付フィールドから年月を取り出して(例 D002 ならば ”201707”)、
年月が201707のレコードを抽出するようなSQL構文を記述してみました。
-------------------
mySQL = "SELECT 伝票, 日付, 商品, (Left(日付,4) & Mid(日付,6,2)) AS 年月 FROM Tテーブル "
mySQL = mySQL & "WHERE 年月='201707';"

Set DB = CurrentDb
Set RS = DB.OpenRecordset(mySQL, dbOpenSnapshot)

RS.MoveFirst
Do Until RS.EOF
Debug.Print RS!伝票 & " " & RS!日付 & " " & RS!商品 & " " & RS!年月
RS.MoveNext
Loop
-----------------

ここで1行目のSQL構文までではうまくレコードセットができたのですが、
2行目の WHERE ~ を追記すると以下のエラーとなってしまいます。

実行時エラー ’3061’
パラメーターが少なすぎます。1を指定してください

このエラーを無くすためには、どのようにすればよいのでしょうか?
よろしくお願いいたします。

Access2016 のVBAについて教えてください。
例えば以下のようなテーブルがあるとします

Tテーブル(各フィールドは全てテキスト型)
│ 伝票 │  日付  │ 商品 │ 備考 │
  D001  2017/06/15  商品A  備考A
  D002  2017/07/02  商品B  備考B
  D003  2017/05/30  商品C  備考C
  D004  2017/07/19  商品D  備考D
  D005  2017/07/10  商品E  備考E

Tテーブルの日付フィールドから年月を取り出して(例 D002 ならば ”201707”)、
年月が201707のレコード...続きを読む

Aベストアンサー

WHERE句では列別名が使用できません。決まり事です。
シコシコ書いてください。

QAccessでのNullと長さ0の文字列につきまして

1、AccessにはNullと長さ0の文字列があるそうですが、どちらの空白を使うべきでしょうか?
2、すでに入力した空白をNullもしくは長さ0の文字列に簡単に置き換えができるのでしょうか?
3、長さ0の文字列の入力の際にわざわざ""をいれるのが面倒なことにつきまして
以上のことをお聞きしたいと思います。

今年から顧客情報をデータ管理しようと思い、Excelを利用していたのですが、データが複雑になり、Accesの方が良いと判断したため、数日前使い始めました。
Excelからインポートした今まで作ったデータに新しいデータを追加したのですが、IIfで""に一致する条件分岐をクエリ上に作るも、追加したデータは一致しません。
値要求と空文字の設定を「はい」変えましたが、すでに入力した分が自動的に置き換わることもなく、また、値要求の関係でレコードの追加のたびにいくつもある空白セルに""の入力を要求されたりと、面倒に感じました。

もう一つAccessの質問ではないのですが、Excelで空白を関数を引用すると、0が出現することがあります。
これはAccessのNullと長さ0の文字列と同じようなものなのでしょうか?

調べてもnullと長さ0の文字列についての違いがほとんどわからなかったため、勘違いているところもあると思いますが、ご指摘とご回答をよろしくお願いします。

1、AccessにはNullと長さ0の文字列があるそうですが、どちらの空白を使うべきでしょうか?
2、すでに入力した空白をNullもしくは長さ0の文字列に簡単に置き換えができるのでしょうか?
3、長さ0の文字列の入力の際にわざわざ""をいれるのが面倒なことにつきまして
以上のことをお聞きしたいと思います。

今年から顧客情報をデータ管理しようと思い、Excelを利用していたのですが、データが複雑になり、Accesの方が良いと判断したため、数日前使い始めました。
Excelからインポートした今まで作ったデー...続きを読む

Aベストアンサー

どちらの空白を使うかは、その値(情報)の使い方によって変わってくると思いますので
「どちらを使うべきか」は一概に言えないと思います。

ただ、「備考に特に記述する情報は無い」とか、「Fax番号は必須ではないので記述しなくともよい」等
テーブルのそのフィールドに値が無くてもいい時などは、私はNullを使っています。
理由としては、
1.レコードを追加した状態ではフィールドはNullなので、そのままでよいから
2.フォームから値を代入する場合、フォームのテキストボックスが空の状態ではNullが代入されるから

>2、すでに入力した空白をNullもしくは長さ0の文字列に簡単に置き換えができるのでしょうか?

私の場合ですが、Excelから最初にインポートした後で、VBAでテーブルの全フィールドを検索して
長さ0の文字列("")をNullに置換するルーチンを走らせています。
他にもっと良い方法が有るのかもしれませんが。。。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング