一回も披露したことのない豆知識

access2010について


以前、教えて!gooで部分一致検索の質問をして回答して頂き下記の写真の様な検索フォ
ームを作成しました。
VBAコードは、下記です。
Option Compare Database
Option Explicit
Private myRecordset As Recordset
Private SQL As String
Private Sub Form_Load()
SQL = ""
End Sub

Private Sub コマンド2_Click()
ResultShow (1)
End Sub

Private Sub ResultShow(flag As Integer)
SQL = "select * from テーブル2 where 商品名 LIKE" & "'*" & テキスト0.Value & "*';"
Set myRecordset = CurrentDb.OpenRecordset(SQL)
リスト5.RowSourceType = "Table/Query"
リスト5.RowSource = SQL
myRecordset.Close
End Sub
ここから質問なのですが検索してリストボックスに表示されたレコードをクリックもしくはダブルクリックなどを行い、クリックしたレコードが別の枠に移動し最終的に移動したレコードの金額が合計されるようなシステムを作ることはできますか?
不可能であれば諦めますが可能であれば教えて下さい。よろしくお願い致します。

「access2010について 以前、教え」の質問画像

A 回答 (1件)

前の質問がどんな物なのかわからないので画像から勝手に判断しています。



ザックリ説明。
現在はリスト5 に SQL を使ってデータを参照させているかと思いますが、これをやめます。
リスト5 の値集合ソースを「テーブル/クエリー」ではなく「値リスト」にし、検索結果のレコードセットから 1件ずつ値を拾って手動で追加していきます。
このため、リスト5 に表示される一覧は [テーブル2] と切り離された関係になります。

リスト5 のダブルクリック イベントを使い、リスト5 で選択されている行の値を取得し、これをリスト6に手動で追加していきます。
すなわちリスト6 もリスト5 と同様に「値リスト」のタイプになっています。
さらに、リスト5 で選択されている行のアイテムをリスト5 から削除します。
これでリスト5 からリスト6 に値が移動しているように見えます。
それと同時に、リスト6 の全ての行をループさせて [金額] の列の合計を算出してテキストボックスに出力しています。

■ テーブル [テーブル2]
フィールド [ID] オートナンバー型
フィールド [商品名] テキスト型
フィールド [納入日] 数値型
フィールド [金額] 数値型
フィールド [セール金額] 数値型

■ フォーム [フォーム1]
コントロール [テキスト0] テキストボックス
コントロール [コマンド2] コマンドボタン
コントロール [リスト5] リストボックス ← 検索結果を表示する
コントロール [リスト6] リストボックス ← リスト5 でダブルクリックされたアイテムの移動先
コントロール [テキスト1] テキストボックス ← リスト6 の全アイテムの [金額] 列の合計値を表示する

■ コントロール [リスト5] と [リスト6] の設定
列数: "5" ← とりあえず ID, 商品名, 納入日, 金額, セール金額の 5列分を格納させる
列幅: "0cm;2cm;2cm;2cm;2cm" ← ID列は表示されないようにする
列見出し: "はい"

Private Sub ResultShow(flag As Integer)
 Dim rs As DAO.Recordset
 Dim sql As String

 sql = "select * from テーブル2 where 商品名 like " & "'*" & テキスト0.Value & "*';"

 ' リスト5 を初期化する
 リスト5.RowSource = ""
 リスト5.RowSourceType = "Value List" ' 値リストにする
 リスト5.AddItem "ID;商品名;納入日;金額;セール金額" ' タイトル行を追加する

 ' リスト6 を初期化する
 リスト6.RowSource = ""
 リスト6.RowSourceType = "Value List" ' 値リストにする
 リスト6.AddItem "ID;商品名;納入日;金額;セール金額" ' タイトル行を追加する

 ' テキスト1 を初期化する
 テキスト1.Value = 0

 ' 検索結果をリスト5 に反映させる
 Set rs = CurrentDB.OpenRecordset(sql, dbOpenSnapshot)
 Do Until rs.EOF
  ' 検索にヒットしたレコードの各フィールドの値をセミコロンで連結してリスト5 に追加する。
  リスト5.AddItem rs.Fields("ID").Value & ";" & rs.Fields("商品名").Value & ";" & rs.Fields("納入日").Value & ";" & rs.Fields("金額").Value & ";" & rs.Fields("セールス金額").Value
  rs.MoveNext
 Loop
 rs.Close
End Sub

Private Sub リスト5_DblClick(Cancel As Integer)
 Dim varSelectedItem As Variant

 ' アイテム以外の場所をダブルクリックした場合は処理を抜ける
 If リスト5.ListIndex = -1 Then
  Exit Sub
 End Sub

 ' リスト5 の選択行の各列の値をセミコロンで連結した値を作成
 varSelectedItem = リスト5.Column(0) & ";" & リスト5.Column(1) & ";" & リスト5.Column(2) & ";" & リスト5.Column(3) & ";" & リスト5.Column(4)

 ' 作成した文字列をリスト6 に追加し、リスト5 で現在選択されている行のアイテムをリスト5 から削除する
 リスト6.AddItem varSelectedItem
 リスト5.RemoveItem リスト5.ItemData(リスト5.ListIndex +1)

 ' 金額の合計を算出
 Dim i As Integer
 Dim sumValue As Long

 If リスト6.ListCount >= 1 Then
  ' リスト6 の 1行目 ( 0行目はタイトル行) から最終行までループ
  For i = 1 To リスト6.ListCount -1
   ' 3列目 (金額の列) の値を加算していく
   ' 金額列の値が数値として評価できない場合は加算しない
   ' Null だった場合は 0 に置き換えて加算する
   If IsNumeric(Nz(リスト6.Column(3, i), 0)) Then
    sumValue = sumValue + Nz(リスト6.Column(3, i), 0)
   End If
  Next
 End If

 テキスト1.Value = sumValue
End Sub
    • good
    • 0
この回答へのお礼

x-1919さん。
回答ありがとうございます。
access初心者なので回答通りに挑戦している所です。
何故かrs.Fields("ID").Value & ";" &
と記述している時に&の位置でコンパイルエラー 修正候補:式というエラーが出て先に進めません。
何が原因なのでしょうか?

お礼日時:2016/09/13 00:30

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


おすすめ情報