Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1219 / 9994 ←次へ | 前へ→

【12074】データの統合
質問  snbtkmt  - 11/9/6(火) 22:20 -

引用なし
パスワード
   AテーブルをBテーブルのように店名で統合する記述が下記にありますが
Aテーブルのフィールドを店名、商品1、商品2・・商品100にし
Bテーブルのフィールドを店名、商品1、商品2・・商品999にしたい場合
どこをどのように直せばいいか教えていただけますでしょうか?
宜しくお願いいたします。

Aテーブル
 店名  | 商品 |
 A店  |リンゴ |
 A店  |トマト |
 A店  |ナシ  |
 B店  |リンゴ |
 B店  |みかん |

Bテーブル

店名  |商品1 |商品2 |商品3 |商品4 |
A店  |リンゴ |トマト |ナシ  |   |
B店  |リンゴ |みかん |    |   |

--------------------------------------------------------------------
Function TEST02()
  
  Dim Rec01 As DAO.Recordset
  Dim Sql_Str As String
  Dim ShopName As String
  Dim Shouhin(4) As String
  Dim F_Number As Integer
  Dim i As Integer
  Dim Insert_Str As String
  
  'DoCmd.RunSQL で確認メッセージが出ないようにする
  DoCmd.SetWarnings False
  
  '現在のBテーブルのデータをすべて削除する
  DoCmd.RunSQL "DELETE * FROM Bテーブル;"
  
  Sql_Str = "SELECT * FROM Aテーブル ORDER BY 店名, 商品;"
  Set Rec01 = CurrentDb.OpenRecordset(Sql_Str, dbOpenForwardOnly)
  
  'フィールドの数の上限を入れておく
  F_Number_Max = 4
  
  'ShopName にとりあえずありえないデータを入れておく
  ShopName = "XXX"
  F_Number = 1
  
  For i = 1 To F_Number_Max
    Shouhin(i) = ""
  Next i
  
  Do Until Rec01.EOF
    '最初のレコードではない または 店名が変わったら
    If ShopName <> "XXX" And ShopName <> Rec01!店名 Then
      'INSERT文を作る
      Insert_Str = ""
      
      For i = 1 To F_Number_Max
        If Shouhin(i) <> "" Then
          Insert_Str = Insert_Str & ", '" & Shouhin(i) & "'"
        Else
          Insert_Str = Insert_Str & ", Null"
        End If
      Next i
      
      'Bテーブルにデータを追加
      DoCmd.RunSQL "INSERT INTO Bテーブル" & _
        "(店名, 商品1, 商品2, 商品3, 商品4) " & _
        "VALUES('" & ShopName & "'" & Insert_Str & ");"
      
      F_Number = 1
      
      For i = 1 To F_Number_Max
        Shouhin(i) = ""
      Next i
      
    End If
    
    ShopName = Rec01!店名
    
    '万が一上限の数を超えてしまったら Shouhin への代入は行わない
    If F_Number <= F_Number_Max Then
      Shouhin(F_Number) = Rec01!商品
      F_Number = F_Number + 1
    End If
    
    Rec01.MoveNext
  Loop
  
  Rec01.Close
  
  '最初のレコードではない(最後の店名の分を処理する)
  If ShopName <> "XXX" Then
    'INSERT文を作る
    Insert_Str = ""
    
    For i = 1 To F_Number_Max
      If Shouhin(i) <> "" Then
        Insert_Str = Insert_Str & ", '" & Shouhin(i) & "'"
      Else
        Insert_Str = Insert_Str & ", Null"
      End If
    Next i
    
    'Bテーブルにデータを追加
    DoCmd.RunSQL "INSERT INTO Bテーブル" & _
      "(店名, 商品1, 商品2, 商品3, 商品4) " & _
      "VALUES('" & ShopName & "'" & Insert_Str & ");"
    
    F_Number = 1
    
    For i = 1 To F_Number_Max
      Shouhin(i) = ""
    Next i
    
  End If
  
  '確認メッセージが出るようにする
  DoCmd.SetWarnings True
  
End Function
329 hits

【12074】データの統合 snbtkmt 11/9/6(火) 22:20 質問[未読]
【12078】Re:データの統合 nonon 11/9/15(木) 15:26 発言[未読]
【12081】Re:データの統合 snbtkmt 11/9/17(土) 1:09 発言[未読]
【12085】Re:データの統合 nonon 11/9/22(木) 14:17 発言[未読]
【12086】Re:データの統合 nonon 11/9/22(木) 14:40 発言[未読]

1219 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078193
(SS)C-BOARD v3.8 is Free