You can write some code to break this data out, and then say add the data to a new table.
So, say we start with your example string. Lets assume that this string is one (some) column from a table that you imported into Access.
so the overall code will look much like this code (air code - just an idea how you could/would go about this).
Sub ProcessData()
Dim rstInData As DAO.Recordset
Dim rstOutData As DAO.Recordset
Dim strBuf As String
Set rstInData = CurrentDb.OpenRecordset("InData")
Set rstOutData = CurrentDb.OpenRecordset("tblOutPut")
Do While rstInData.EOF = False
strBuf = rstInData!myData ' "my data is the column with the long string'
Dim MyBuf() As Variant
Dim MyBuf2() As Variant
MyBuf = Split(strBuf, "@")
MyBuf2 = Split(MyBuf(0), "#")
With rstOutData
.AddNew
!itemType = MyBuf(1)
!PK = MyBuf2(4)
!Whatever = mybuf2(??)
.Update
End With
rstInData.MoveNext
Loop
rstInData.Close
rstOutData.Close
End Sub
So note how we use split command. the first split get us a "group" or array of all the "@" values in an array.
Then, from each of those, we use split on that token, and we split out the "#" elements into an array.
so you need some looping code to process each row of the main import table, and then for each input row, we split out by @, and then for each @ group, we split on #.
So, using split() and a combination of data table looping as per above, in which for each row of the input, we are now able to parse out the given values form that array into the target table.
I not 100% clear (I not looked really really close) that for each row of data, we wind up with one main record, and several child records. In that case (and it looks to be), then you need of course two target tables - one to hold the main record you add, and then a child table to add the repeating data you have for each string row. So, each "string" of data you have looks to be a main record, and then some child data records that belong to the one main "record".
so, this is not lot of code but it is somewhat tedious to write. But break out the above into a similar code loop as per above. So, using split() into a array, and then of course VBA reocrdset processing similar to the above is how you can chew away at this problem.
So without question, you need to be comfortable with VBA code, and also comfortable with using VBA recordsets in code.
Regards,
Albert D. Kallal (Access MVP 2003-2017)
Edmonton, Alberta Canada