• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【access】表の値を別項目にセットする方法)

【access】表の値を別項目にセットする方法

このQ&Aのポイント
  • access2010を使用して、TBLの編集を行いたい場合、表の特定の項目にあるカンマ区切りの文字列を、他の項目にセットする方法が知りたいです。
  • 具体的には、TBL1のM1という項目にカンマ区切りの文字列がある場合、それをカンマで区切ってTBL1のM2~M4に順番にセットしたいです。
  • VBAでプログラムを組んでもうまくいかないので、より効率的かつスマートな方法があれば教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

標準モジュールに以下を貼り付け実行してください。 なお、DAOを使っているので参照設定で   Microsoft DAO xxx Object Library にチェックが入っているか確認してください。 一応、テーブルのフィールド数はカンマ切り のデータの最大数ほどは確保されているものと します。 各レコードのカンマの数が違っていてもフィールドの 最大数が確保されていれば問題ありません。 もし、Keyフィールドのデータのカンマの数の最大数が不明で あるような場合はまた別の方法をとるようになります。 Sub test1()   Dim db As DAO.Database   Dim rs As DAO.Recordset   Dim buf As Variant   Dim i As Integer   Set db = CurrentDb   Set rs = db.OpenRecordset("TBL1", dbOpenDynaset)   If rs.RecordCount > 0 Then     rs.MoveFirst     Do Until rs.EOF       'テーブルのKeyフィールドのデータを配列に格納       buf = Split(rs!Key, ",", , vbTextCompare)       '格納した配列のデータを各フィールドに格納       For i = 0 To UBound(buf)         rs.Edit           rs(i + 1) = buf(i)         rs.Update       Next i       rs.MoveNext       buf = ""     Loop   End If   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Sub

その他の回答 (6)

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.7

1.テーブルのレコードをテキスト形式でエキスポート 2.テキストファイル開き、” (ダブルコーテーション)を除去してカンマ区切りにする 3.カンマ区切りのテキストファイルをACCESSへインポート ”除去はメモ帳でも可能ですが、処理できる容量が限られています。 文字列ファイルのみ処理するテキストエディタが必要でしょう 自分はFreeのTeraPadを使っています。

参考URL:
https://terapad.softonic.jp/
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

すみません。あわてもので。No5の >No3の変なところの訂正です。 は、 No4の変なところの訂正です。 です。No3の方も含めてごめんなさい。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

No3の変なところの訂正です。 >No2です。もしKeフィールドのyデータの中に は、 No2です。もしKeyフィールドのデータの中に です。枕の一文の文字の確定が変になっていました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

No2です。もしKeフィールドのyデータの中に     A,,C,D のように空文字が入っているような場合、 該当するフィールドには何も入れずに次に データは次のフィールドに格納するということが あるならば、 Sub test1()   Dim db As DAO.Database   Dim rs As DAO.Recordset   Dim buf As Variant   Dim i As Integer   Set db = CurrentDb   Set rs = db.OpenRecordset("TBL1", dbOpenDynaset)   If rs.RecordCount > 0 Then     rs.MoveFirst     Do Until rs.EOF       'テーブルのKeyフィールドのデータを配列に格納       buf = Split(rs!Key, ",", , vbTextCompare)       '格納した配列のデータを各フィールドに格納       For i = 0 To UBound(buf)         If buf(i) <> "" Then         rs.Edit           rs(i + 1) = buf(i)         rs.Update         End If       Next i       rs.MoveNext       buf = ""     Loop   End If   rs.Close: Set rs = Nothing   db.Close: Set db = Nothing End Sub のように、   If buf(i) <> "" Then   End If を入れておきます。 ほかにKeyフィールドの文字列の構造に何かあるのならば 補足してください。

noname#231195
noname#231195
回答No.3

私はクリエで実現することを考えてみました。 ただ、元のデータは3つの文字列がカンマで区切られていることが前提条件です。 SQL画面でこれを張り付けてください。 SELECT [TBL1].M1, Left([M1],[Location1]-1) AS M2, Mid([M1],[Location1]+1,[Location2]-[Location1]-1) AS M3, Mid([M1],[Location2]+1) AS M4, InStr([M1],",") AS Location1, InStr([Location1]+1,[M1],",") AS Location2 FROM TBL1; これのクエリの結果をコピー&ペーストしてTBL1に張り付けてもいいし、このクエリを更新クエリにしてもいいし、それはお好み次第です。 なおこのクエリでやっていることは、まずカンマの位置を調べて、そのカンマの位置で元の文字列をぶつ切りにしているだけです。

回答No.1

Q、良い方法は無いでしょうか? A、イミディエイトウインドウでSQL文を実行する。 添付図では、M2のみをUPDATEしています。が、M3、M4も同じやり方でOKですよ。 M3=CutSTr(M1, "","", 2)") M4=CutSTr(M1, "","", 3)") なお、CnnExecute()を利用するかどうかは好みの問題です。 Public Function CnnExecute(ByVal strSQL As String) As Boolean On Error GoTo Err_CnnExecute   Dim isOK As Boolean   Dim cnn As ADODB.Connection      isOK = True   Set cnn = CurrentProject.Connection   With cnn     .Errors.Clear     .BeginTrans     .Execute strSQL     .CommitTrans   End With Exit_CnnExecute: On Error Resume Next   cnn.Close   Set cnn = Nothing   CnnExecute = isOK   Exit Function Err_CnnExecute:   isOK = False   If cnn.Errors.Count > 0 Then     ErrMessage cnn.Errors(0), strSQL     cnn.RollbackTrans   Else     MsgBox "プログラムエラーが発生しました。" & _         "システム管理者に報告して下さい。(CnnExecute)", _         vbExclamation, " 関数エラーメッセージ"   End If   Resume Exit_CnnExecute End Function Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)   MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & CnnErrors.Description & Chr$(13) & _       "・Err.Number=" & CnnErrors.Number & Chr$(13) & _       "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _       "・SQL Text=" & strSQL, _       vbExclamation, " ADO関数エラーメッセージ" End Sub Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs(N <= UBound(strDatas))) End Function

関連するQ&A