ACCESS2000を使用しています。

コンボボックスを使用し、複数の列を表示しています。 連結列以外の列の項目を取得したい場合、どのようにすれば参照できるのでしょうか。

 実際には、名前順に表示しているのですが、同姓同名の人がおり、後ろのデータを選択しても、最初のデータが取得されます。
 なぜかというと、非連結にしてあり、イベントで取得した名前をキーにして再びファイルを読みに行っているからです。

 なぜ、こんな作り方をしているかというと、連結にすると、最後の画面で 不良のデータがあるとそのままACCESSのほうで書き込んでしまうのがあるからです。 連結しても、項目のヌルデータの取得を認めないようにすれば 出来るらしいのですが、 いつも非連結で作っています。

 よろしく御指導ください

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>同姓同名の人がおり、後ろのデータを選択しても、最初のデータが取得されます


この「同姓同名」は、データには漢字(又はひらがな)が使用されていないでしょうか?

連結列に半角英数字以外のものを使用すると、コンボボックス&リストボックスは正常に動作しないことが多々あります

ARCさんがNo.3で記しているイメージように、コンボボックスのコントロールソースには、
ID(絶対に重複しない番号)を含め、なおかつIDは一番左の列にし、連結列にすることがよろしいです
(こうすると、IDの列幅を「0」にすることで、IDはコンボボックスに表示されなくなります)
    • good
    • 0

ん~、どの列を見てもNullっていうのは、[コントロールソース]で指定したフィールドのデータが、[値集合ソース]


で指定したデータの中に見つからないときの症状です。

つまり、
受注明細テーブル
 明細ID
 商品ID
  :

商品マスタテーブル
 商品ID
 商品名
  :

ってなときに商品明細テーブルを表示するフォームを作り、そのフォーム中でコンボボックスを使って、商品名を表示する。

商品明細には商品IDが100番のデータが入力されているのに、商品マスタには商品IDが100番の商品が無い、という、異常なデータが入力されている

のような状況のときに、フォーム上で問題の商品ID=100になっているデータを表示してしまうと、コンボボックスの全ての列がNullになります。

恐らく、今回の場合は、フォーム側には半角空白1コのデータがあるけれども、コンボボックスの「値集合ソース」で指定されているデータの中には、それに対応するデータが無い、っていうような状況が起こっているのでは?
推測なんですが。

それでわ!
    • good
    • 0

例えば String型の変数にNullを代入しようとしてエラーになってしまうってことですか?



その場合は、NZでNULLを打ち消してやるとうまく動作します。

dim strData As String
:
strData = NZ(Me.コンボ0.Column(0),"")

などとすると、データがNullの時は、""が代入されるようになります。

また、IsNull()関数を使って、IsNull(Me.コンボ0.Column(0))とすると、データがNullか否かを知ることが出来ます。

この回答への補足

またすぐに返答頂きありがとうございます

コンボボックスに4つの列を表示しています。
連結列がなぜかヌルデータになっているのです。 DBのテーブルでは1バイトのスペースが入っているのですが無視されているようです。 そして、連結列(1列目)がヌルだと、2列目以降何が入っていようと、すべて参照するときにヌルになっているのです。
 理解に苦しんでいます。

補足日時:2001/10/08 21:21
    • good
    • 0

Me.コンボ0.Column(0) 'コンボボックスの1列目を取り出す



Me.コンボ0.Column(1)'コンボボックスの2列目を取り出す

Me.コンボ0.Column(0, 1)'コンボボックスの2行,1列目を取り出す

こんな感じです。

ちなみに、連結にしておいて、不良データをBeroreUpdateイベントでチェックするようにしてもいいですよ。
もし不良だった場合、オブジェクト.Undo で、変更を元に戻せます。

この回答への補足

早速の回答ありがとうございました。
やってみたら、うまくいきました。

ですが、コンボボックスにヌルデータがあると、うまくいきません。
これは、ファイルをきれいにしておく必要があるのでしょうか。 
イベントで逃げることは出来ないのでしょうか。

また、お願いできるでしょうか

補足日時:2001/10/08 16:57
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

QVB データテーブルA列とB列があった時、B列の1行目から1stepずつデータを入力していきたい

AddDataTableRowメソッドにて
1月として、A列は日付で先に31日分の行が作成されます。その際にB行はNothingで生成しました。
私は、A列はそのままでB列の1行目から1つずつ書き込んでいくコーディングが知りたいです。
現在はAddDataTableRowのためA列の最後の行の次の行が追加され入力されてしまいます。

Aベストアンサー

whereで列BがNothingだけにして、列AのMinの値を取得
列A指定して、狙い打ちでUpdate

QA列にある文字データで△△を含むセルの値をB列に□□にして置き換えしたい

A列に文字データが100行まであります。
   A           B  
1 ミカンを食べた     ZZ
2 イチゴを食べた     XX
3 西瓜を食べた      YY
4 ミカンを捨てた     ZZ
5 西瓜を拾った      YY
6 ミカンを無くした    ZZ
7 西瓜を貰った      YY
8 イチゴをあげた     XX

それを表のようにB列(任意の列)に置き換えたいです。
イチゴを含むセルはB列にXXをミカンはZZみたいな感じです。
A列のセルには同じ文字列は(今のところ)含みません。
文字の一部を置き換えて変換し、それを繰り返すところまではできましたが、上記のことがができません。
VBAを使って一発で変換したいのですが教えていただけますでしょうか?

Aベストアンサー

こんな感じでよい?

Sub test()
Dim a
Dim b
Dim i, j
a = Array("ミカン", "イチゴ", "西瓜")
b = Array("ZZ", "XX", "YY")
For i = 0 To UBound(a)
For j = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If InStr(Cells(j, 1).Value, a(i)) > 0 Then Cells(j, 2).Value = b(i)
Next j
Next i
End Sub

参考まで

QExcel VBA 連続して同じデータが入力されている列を参照し、違う列をセル結合させたい

Excel VBA初心者です。
下記が可能か教えてください。

B列で連続しているデータを参照し、連続したデータと同じ行分A列をセル結合したいのです。

A   B
100  1
100  1
100  2 
200  3



A   B
100  1
    1
100  2
200  3

こんな感じです。

連続したデータが入力されているセルを結合する方法は、検索して見つかったのですが、この場合は、どうしたらいいでしょうか?

どうぞよろしくお願いいたします。

Aベストアンサー

こんにちは。

うまい方法がありそうな気もしますが、そのまま愚直にやればこんな感じでしょうか?

Sub Sample()
 Dim rw As Long, rwMax As Long, r As Long

 rwMax = Cells(Rows.Count, 2).End(xlUp).Row
 For rw = 1 To rwMax
  Cells(rw, 1).MergeArea.UnMerge
 Next rw

 rw = 1
 Do While rw < rwMax
  r = 1
  Do While Cells(rw, 2).Value = Cells(rw + r, 2).Value
   r = r + 1
  Loop
  If r > 1 Then
   Application.DisplayAlerts = False
   Cells(rw, 1).Resize(r, 1).Merge
   Application.DisplayAlerts = True
  End If
  rw = rw + r
 Loop
End Sub

こんにちは。

うまい方法がありそうな気もしますが、そのまま愚直にやればこんな感じでしょうか?

Sub Sample()
 Dim rw As Long, rwMax As Long, r As Long

 rwMax = Cells(Rows.Count, 2).End(xlUp).Row
 For rw = 1 To rwMax
  Cells(rw, 1).MergeArea.UnMerge
 Next rw

 rw = 1
 Do While rw < rwMax
  r = 1
  Do While Cells(rw, 2).Value = Cells(rw + r, 2).Value
   r = r + 1
  Loop
  If r > 1 Then
   Application.DisplayAlerts = False
   Cells(rw, 1).Resize(r, 1)....続きを読む

QAccessからExcelファイルのデータ取得

Access2000かExcelファイルのデータを取得したいのですが、
Excelファイルを一度 CSVファイルに変換し、その後Accessのテーブルへデータ取り込み といった手順をとりたいのです。
この方法って、どうコーディングすればいいのですか?
(Accessのインポート処理は使用しない方法です)

Aベストアンサー

VBAの基本的なことはご存知ですか?
でしたら、
1.Accessで対象のExcelファイルを選択
2.AccessからExcelを制御してCSVにコンバート
3.出来たCSVファイルをAccessに取り込む(テキスト取り込み インポート定義を使うと簡単)
この順序で行えばOKです。
ExcelでVBAを書くことで制御する方法もありますが、
Access側からExcelを制御する方がやりやすいと思います。

QAccess VBA フォームからのデータ取得について

お世話になります。
4月から新社会人となり上司から課題を出されました。
内容はAccessでの売上管理システムなるもので、マクロは一切使わずVBAで組むというものです。
現在苦戦を強いられている箇所が以下になります。
売上入力フォームというものがありフォームの中にサブフォームが存在しているのですが、サブフォームからのデータ取得方法が分からず手詰まりな状態です。
通常のフォームからのデータ取得は「変数 = Me.フィールド名」として問題なく動作しております。
サブフォーム内のデータはクエリから表示をしています。
私自身も自分で何をしているのか理解が足りていないため稚拙な文章になってしまい申し訳ありません。
一応ですが現在のプログラムソースを貼り付けておきます。

----プログラムソース----
Private Sub 保存_Click()
Dim SQL1 As String
Dim SQL2 As String
Dim ID_k As Variant
Dim Name_k As Variant
Dim Date_u As Date
Dim NO_u As Variant
Dim NO_i As Variant
Dim Name_i As Variant
Dim Price As Currency
Dim Count As Variant
Dim Tax As Currency
Dim Price_tax As Currency
Dim Total As Currency

On Error GoTo Err

ID_k = Me.顧客ID
Name_k = Me.顧客名
Date_u = Me.売上日
NO_u = Me.売上NO
NO_i = Me.商品NO
Name_i = Me.商品名
Price = Me.単価
Count = Me.数量
Tax = Me.消費税
Price_tax = Me.税込価格
Total = Me.合計

SQL1 = "INSERT INTO T_売上(顧客ID,顧客名,売上日) VALUES('" & ID_k & "','" & Name_k & "','" & Date_u & "');"
DoCmd.RunSQL SQL1
SQL2 = "INSERT INTO T_売上詳細(売上NO,商品NO,商品名,単価,数量,消費税,税込価格,合計) VALUES('" & NO_u & "','" & NO_i & "','" & Name_i & "','" & Price & "','" & Count & "','" & Tax & "','" & Price_tax & "','" & Total & "')"
DoCmd.RunSQL SQL2

DoCmd.RunCommand acCmdSaveRecord
MsgBox "保存しました"
Exit Sub
Err:
MsgBox "保存できませんでした"
End Sub
----

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

お世話になります。
4月から新社会人となり上司から課題を出されました。
内容はAccessでの売上管理システムなるもので、マクロは一切使わずVBAで組むというものです。
現在苦戦を強いられている箇所が以下になります。
売上入力フォームというものがありフォームの中にサブフォームが存在しているのですが、サブフォームからのデータ取得方法が分からず手詰まりな状態です。
通常のフォームからのデータ取得は「変数 = Me.フィールド名」として問題なく動作しております。
サブフォーム内のデータはクエリ...続きを読む

Aベストアンサー

>サブフォーム内のデータはクエリから表示をしています。
Forms!![メインフォーム名]![サブフォーム名]![フィールド名]
で参照できると思いますが、、、

余計なおせっかいとしては、このエラー処理はまずいね。1回目のSQLが実行できて2回目のSQLでつまずいた場合も同じエラーになってしまう。

あと、、どういう職種なのかわからないけど、人に聞かないで調べる習慣つけたほうが良いよ。


このカテゴリの人気Q&Aランキング

おすすめ情報