![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
ACCESS2007を使用しています。
テーブルのフィールド設定でルックアップを設定しています。
表示コントロール:コンボボックス
値集合タイプ:値リスト
ここで、値集合ソースにリストしたもの以外はテーブルに格納されないように
したいのですが、可能でしょうか?
「入力チェック」を「YES」にしているのですが、
この場合でもテーブルでの直接入力やフォームを使用しての入力ではエラーがでますが、
Excelからの複数セルまとめてのコピー&貼り付けを行うと貼り付けられてしまいます。
解決する方法がありましたら教えてください。
No.2ベストアンサー
- 回答日時:
#1です
やはりデータの持ち方が変わってしまいますが、
元テーブルのフィールド「ID」を数値型(整数)にします。
ルックアップで、値集合ソース部分にクエリを記述します。
例えば、
SELECT ID, データ FROM T_フィールドリスト WHERE タイプ="住所";
連結列: 1
列数: 2
列幅: 0cm;1cm (ID 部を非表示に)
入力チェック: はい
これで、タイプ="住所" で抽出されたものがリスト表示されます。
> 確かに貼り付けた時にエラーが出ましたが、なぜか1セル目だけは貼り付けられてしまいます。
> これはどうにもならないのでしょうか?
これについて、確認できませんでした。
確認の仕方が悪かったのでしょうか。(以下が確認した手順です)
確認用テーブルのフィールド an、ID、src
an: オートナンバー
ID: 数値型(整数)- T_フィールドリストのIDと同じ型
上記内容でルックアップ設定
src: テキスト型
貼り付け用データをメモ帳で準備
東京 A
北海道 B
千葉 C
青森 D
神奈川 E
鹿児島 F
データの空白部分は Tab で、1行目は、(Tab)東京(Tab)A となっています。
この6行をコピーし、確認用テーブルを開いて、新規部分の「*」をクリック後貼り付け。
東京、千葉、神奈川は、追加されましたが、北海道、青森、鹿児島は、貼り付けエラーテーブルへ。
フィールド0 フィールド1 フィールド2
北海道 B
青森 D
鹿児島 F
確認用テーブルには、以下内容で追加されてました。
an ID src
37 東京 A
39 千葉 C
41 神奈川 E
ここで、データの持ち方を元に近くします。
確認用テーブルの ID をテキスト型に変更し、ルックアップの連結列を2に変更します。
(選択した文字列そのものが格納されるように)
貼り付け用データ6行をコピーし、同様に貼り付けます。
すると、エラーもなく6行すべてを追加することができました。
an ID src
43 東京 A
44 北海道 B
45 千葉 C
46 青森 D
47 神奈川 E
48 鹿児島 F
やはり、元テーブルの ID の型をテキスト型から変更する必要があるような気がします。
普通の入力操作を行う分には、リスト以外はエラーとなってました。
Excelからの貼りつけでも同じでした。
(貼り付け用データ6行をExcelに貼り付け後、同じ領域をコピー、そしてテーブルへ貼り付け)
貼り付けエラーテーブルのフィールド名は、F1 ~ F3 に変わりましたが。
再度の回答ありがとうございます。
後半の検証内容は、私の方でも新しくDBを作成してやってみたところ、同様の結果が出ました。
他の多くのクエリにも影響があることもあり、データはやはり実データで保持しておきたいので、
連結列=2でやりたいと思っています。
(であれば、Select文での抽出項目を1つにして、連結列も列数も1にした方がいいですか?)
もし、保持するデータをそのままで制限する方法がありましたら、またご教授ください。
また、前半のクエリでリストを絞る方法は大変に勉強になりました。
今まで、リストに変更がある場合は、値集合ソースとテーブル(T_フィールドリスト)の
データの両方を修正する必要があったため、これが統一できるのは助かります。
No.3
- 回答日時:
#2です
テーブルに直に張り付ける方法ではなくなりますが、どうでしょうか。
確認用テーブルのフィールド an、ID、src
an: オートナンバー
ID: テキスト型- T_フィールドリストのデータと同じ
下記内容でルックアップ設定
src: テキスト型
IDのルックアップ設定
SELECT データ FROM T_フィールドリスト WHERE タイプ="住所";
連結列: 1
列数: 1
列幅: 1cm
入力チェック: はい
このテーブルを元に、フォームウィザードで帳票形式として作成します。
(全フィールドを表示するように)
出来上がったらデザインで既定のビューをデータシートに変更します。
フォームの更新前処理に以下を記述します
Private Sub Form_BeforeUpdate(Cancel As Integer)
If (IsNull(DLookup("データ", "T_フィールドリスト", "タイプ='住所' AND データ='" & Nz(Me.ID,"") & "'"))) Then
Cancel = True
Me.Undo
End If
End Sub
本来の入力操作であれば不要な処理になりますが、貼り付けられた場合にはこの方法しかないように思います。
更新前で、ID に設定された文字列があるか/ないか、を毎回チェックします。
貼り付けた時(まとめて)には、コンボボックス「ID」のリスト外入力時は動かないようです。
また、If 部分で Me.ID.ListIndex = -1 (選択されていなければ)の判別してみましたが、
貼り付け後は常に 0 になっていて、判別には使えないようです。
(初めのデータが一番上の「東京」だったから?)
(2行目からやると -1, 2, 以降 2)
設定後は、保存して、再度起動すればデータシート形式で表示されるので、
従来との違和感はなさそうですが・・・
#2でのエラー切り分けはできていましたし、貼り付けエラーテーブルもできていました。
(6行を貼り付ける操作した時のことになります)
また、フォームの更新前処理ではなくて、「ID」の更新前処理に記述しても同じ動きをしました。
Private Sub ID_BeforeUpdate(Cancel As Integer)
If (IsNull(DLookup("データ", "T_フィールドリスト", "タイプ='住所' AND データ='" & Nz(Me.ID,"") & "'"))) Then
Cancel = True
Me.ID.Undo
End If
End Sub
どちらかで一方で判別処理するようにします。
(フォームの更新前処理の方がイメージしやすいです)
(IDの方では、ID自体はUndoするのに、ID以外で更新に行くのかと思ったら行かなかった??)
後は、わかりません。失礼しました。
重ねての回答ありがとうございます。
また、いろいろと検討していただき感謝します。
ただ、当DBは近い将来に別の人(Access初心者)に引き継ぐ予定があり、
ここまで高度になってしまうと管理面で操作面でも少し厳しくなってきますので、
前回教えていただいたところまでで我慢をしようかと思います。
私、個人としては大変に勉強になりました。
ありがとうございました。
No.1
- 回答日時:
フィールド名を「src」
値リストの内容が "○";"△"
と仮定した時、まとめて貼り付ける時、"□" も入ってしまいますね。
データの持ち方を変えても、いいでしょうか。
(ダメならスルーということで)
"○";"△" を管理するテーブルを作ります。仮にテーブル名を「T図形」とします。
フィールド名を、「src_id」「内容」とします。
src_id:整数型(主キー)
サンプル
src_id 内容
1 ○
2 △
元のテーブルの「src」を整数型に、名前を「src_id」に変更します。
「src_id」のルックアップで、
値集合タイプ: テーブル/クエリ
値集合ソース: T図形
連結列: 1
列数: 2
列幅: 0cm;1cm (src_id 部を非表示に)
入力チェック: はい
この変更を行うと、元のテーブルには文字列ではなく、src_id の値が格納されます。
なので、クエリ等で "○";"△" を表示する時には常に「T図形」と結び付けて、という処理が必要になります。
この構成にすると、貼り付けてもエラーになってくれるようです。
確かめられる時には、試し用のもので、、、
お礼が遅くなりました。
回答ありがとうございます。
できることならデータの持ち方は変えたくないのですが、
変えてできるのであればと思い、試してみました。
確かに貼り付けた時にエラーが出ましたが、なぜか1セル目だけは貼り付けられてしまいます。
これはどうにもならないのでしょうか?
また、T図形に該当するテーブルですが、実はもともと似たようなテーブルがあり、
ただ、1つのテーブルに複数のフィールド用の項目がまとまっています。
(サンプル)T_フィールドリスト
ID タイプ データ
1 住所 東京
2 住所 神奈川
3 住所 千葉
4 性別 男
5 性別 女
6 年代 19歳以下
7 年代 20代
8 年代 30代
このテーブルを使うことは無理でしょうか?
例えば住所フィールドにはT_フィールドリストの「タイプ=住所」に該当するものといった感じです。
今回、ドロップダウンリストで制限したいフィールドが10個近くあり、その数だけテーブルを増やすと
管理が煩雑になるため、できればこのテーブルを活用できないかと思います。
再度の質問になってしまいお手数をおかけしますが、もし分かるようでしたら教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Excel(エクセル) Excelの複数ファイルの複数行を別ファイル1つのシートにVBA、マクロで集約する方法 5 2022/09/13 06:30
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Excel(エクセル) エクセルの表示形式について教えてください あるセルの「A」という値と、別のセルの「B」という値を組み 4 2023/02/21 21:55
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) Excel フィルタ後のコピー貼付けと可視セルの関係について 3 2023/02/07 16:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのフィールド数が255しか...
-
Accessでテーブルの値をテキス...
-
アクセス エラーを数値「0」に...
-
INSERT INTO ステートメントに...
-
ACCESSでオートナンバーを任意...
-
ACCESSで400以上のフィールドが...
-
SQLで特定の文字を含むものを削除
-
Accessで連続データってできま...
-
ACCESS検索★ある文字を複数のフ...
-
ACCESSで和暦を西暦に・・・
-
アクセス VBAで列の入れ替...
-
フィールド数の多すぎる・フィ...
-
【Access】フォームで自動計算...
-
accessで重複を防ぎたい
-
Accessで別途保存の画像ファイ...
-
accessのレポートで元になるテ...
-
ACCESSでの改行コード
-
ACCESSでテーブルのフィールド...
-
ACCESS レーダーチャートのデー...
-
ACCESS VBAにてCSV...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
Accessのフィールド数が255しか...
-
ACCESSでの改行コード
-
INSERT INTO ステートメントに...
-
ACCESSで400以上のフィールドが...
-
Access 昇順・降順で並び替え...
-
SQLServer2005のSQL文での別名...
-
【Access】フォームで自動計算...
-
ACCESSで和暦を西暦に・・・
-
accessで重複を防ぎたい
-
アクセス エラーを数値「0」に...
-
accessのレポートで元になるテ...
-
ExcelのデータをコピーでACCESS...
-
主キーはオートナンバー型のID...
-
アクセス VBAで列の入れ替...
-
Accessで、固定アルファベット+...
-
Access:リンクテーブルマネー...
-
ACCESS検索★ある文字を複数のフ...
-
アクセスのテーブルデータをCSV...
-
ACCESSでテーブルのチェックを...
おすすめ情報