アプリ版:「スタンプのみでお礼する」機能のリリースについて

Access2003を使用しています。

列Aに以下のような値があります。

列A
1111-222
3333-444-55
6666-777-88-99

これをハイフン毎に列を分けて以下のような形に整形したいのです。

列B   |列C   |列D  |列E
1111  |222   |     |
3333  |444  |55   |
6666  |777  |88   | 99

クエリなどで一発で実行できるコマンド等があればご教示いただきたく思います。
説明下手ですみませんが、よろしくお願いします。

A 回答 (11件中11~11件)

クエリでコマンド一発、はありません。

多分・・。
あったら、とっくに回答があると思いますが。

(1)
対象となるデータを入れているテーブルを
「Tデータ」とします。フィールドは質問の
ように列Aとします。

(2)
コードで「Tデータ分割」というテーブルを作成します。

(3)
以下のコードを標準モジュールに貼り付けて保存してください。
コード中には、「Tデータ」と「列A」が出てきます。この二つは
実際に合わせて変更しても差し支えありません。

Dim myCount As Long

Sub funcCount()
Dim db As Database
Dim rs As Recordset
Dim i As Long
Dim j As Long

Set db = CurrentDb
Set rs = db.OpenRecordset("Tデータ", dbOpenDynaset)

If rs.RecordCount > 0 Then
rs.MoveFirst
Do Until rs.EOF
j = 0
For i = 1 To Len(rs!列A)
If Mid(rs!列A, i, 1) = "-" Then
j = j + 1
End If
Next i
If j > myCount Then
myCount = j
End If
rs.MoveNext
Loop
End If
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Sub

Sub cmdMkTable()
Dim db As Database
Dim tdf As TableDef
Dim fld As Field
Dim prp As Property
Dim i As Long

Set db = CurrentDb
Set tdf = db.CreateTableDef("Tデータ分割")
For i = 1 To myCount + 1
Set fld = tdf.CreateField("列" & i, dbText, 50)
tdf.Fields.Append fld
tdf.Fields.Refresh
Next i
db.TableDefs.Append tdf
db.TableDefs.Refresh
db.Close: Set db = Nothing
End Sub

Sub cmdData()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim str As Variant
Dim i As Long
Dim j As Long
Dim k As Long
Dim l As Long

Set db = CurrentDb
Set rs1 = db.OpenRecordset("Tデータ", dbOpenDynaset)
Set rs2 = db.OpenRecordset("Tデータ分割", dbOpenDynaset)

If rs1.RecordCount > 0 Then
rs1.MoveFirst
Do Until rs1.EOF
j = 0
For i = 1 To Len(rs1!列A)
If Mid(rs1!列A, i, 1) = "-" Then
j = j + 1
End If
Next i
str = Split(rs1!列A, "-")
rs2.AddNew
For k = 0 To myCount
rs2.Fields(k) = Null
Next k
rs2.Update
rs2.MoveLast
If j = 0 Then
rs2.Fields(0) = str(0)
End If
If j > 0 Then
rs2.Edit
rs2.Fields(0) = str(0)
rs2.Update
For l = 1 To j
rs2.Edit
rs2.Fields(l).Value = str(l)
rs2.Update
Next l
End If
rs1.MoveNext
str = ""
Loop
End If

rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub

(4)
フォームにボタンを一つ設定し、ボタンのクリック時
のイベントに以下を設定してください。

Private Sub コマンド0_Click()
Call funcCount
Call cmdMkTable
Call cmdData
End Sub

以上です
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A