Language: Deutsch English

Last Update: 2018 - 06 - 02

Access/VBA - How to output data from a column as comma separated string

Published: May 25th. 2015

In online forums or newsgroups dealing with Microsoft Access I frequently read questions about how to get the data from one column in a table or query into a comma (or similar) separated list of values in a string. So basically the rows of one column should be transformed to a string, with the values separated by a delimiter. - Instead of writing an individual answer over and over again, I rather try to write a really good one here, and point to it, if the question arises again. - So here we go...

Let?s say you have got a table with a column containing names (actor's names in this sample). Like this one:

sample screenshot of table

And you want the actor names from this table displayed in one line, like this:

sample screenshot of result

You can solve this problem quite easily with a bit of Access and VBA programming experience. You open a recordset with a query to your table (or query) column. Then, while looping through all the records, you concatenate the values with the desired delimiter in a string and finally return the concatenated string minus the last appended delimiter.

The solution could be something like this:

Public Function QueryFieldAsSeparatedString(ByVal fieldName As String, _ ByVal tableOrQueryName As String, _ Optional ByVal criteria As String = "", _ Optional ByVal sortBy As String = "", _ Optional ByVal delimiter As String = ", " _ ) As String ' Paramter description ' fieldName = Is the name of the field containing the values ' we want in our comma separated string ' tableOrQueryName = Is the name of table or query containing the column ' criteria = The criteria to filter the data ' sortBy = An optional sort expression to sort the data ' delimiter = The delimiter used to separate the values. It defaults ' to a comma and a blank, but you can use anything you ' like there Dim db As DAO.Database Dim rs As DAO.Recordset Dim sql As String Dim whereCondition As String Dim sortExpression As String Dim retVal As String Set db = CurrentDb ' If there where any criteria passed to the function, we build a WHERE-condition for SQL If Len(criteria) > 0 Then whereCondition = " WHERE " & criteria End If ' If there was a sort expression passed to the function, we build a ORDER BY for SQL If Len(sortBy) > 0 Then sortExpression = " ORDER BY " & sortBy End If ' building the complete SQL string sql = "SELECT " & fieldName & " FROM " & tableOrQueryName & whereCondition & sortExpression ' opening a recordset Set rs = db.OpenRecordset(sql, dbOpenForwardOnly, dbReadOnly) Do Until rs.EOF ' here we are looping through the records and, if the value is not NULL, ' concatenate the field value of each record with the delimiter If Not IsNull(rs.Fields(0).Value) Then retVal = retVal & Nz(rs.Fields(0).Value, "") & delimiter End If rs.MoveNext Loop ' we cut away the last delimiter retVal = Left(retVal, Len(retVal) - Len(delimiter)) ' setting the return value of the function QueryFieldAsSeparatedString = retVal ' cleaning up our objects rs.Close Set rs = Nothing Set db = Nothing End Function

You can call this function from the Immediate Pane of the VBA-Editor and the output will be printed right below.

demo ouput of result in the Immediate Pane

The function suports filtering and sorting as well. The following screenshot displays only actors with a rating of 4 or more and sorts it alphabetically. In addition to that we use a dash as separator instead of a comma.

demo ouput of result in the Immediate Pane with all paramters supplied

If you put the call to the function in the ControlSource-Property of a textbox control, it will produce the output shown in the screenshot at the beginning of this article.

screenshot property sheet, usage of the function in the ControlSource of a textbox

If you are using DAO for data access there is nothing to add to this. However if you are working with a SQL Server backend and using ADO for data access there might be some other factors to consider. I deal with them in this article describing how to create a comma separated string from an ADO-Recordset in a client-server-scenario using the Clone-, Filter- and Sort- Method/Properties of the ADO-Recordset.

Share this article: Share on Facebook Tweet Share on LinkedIn Share on XING

Subscribe to my newsletter


I will never share your email with anyone. You can unsubscribe any time.
This email list is hosted at Mailchimp in the United States. The data is covered by the EU-U.S. Privacy Shield Framework. See our privacy policy for further details.

© 1999 - 2018 by Philipp Stiefel - Privacy Policiy