VBA & Macro Problems

How to Display Excel VBA List Box Columns from Right to Left

Huda QurayshiHuda Qurayshi Oct 22, 2026 870 views

Question details

The user needs to display the columns of a VBA list box from right to left, but adjusting standard text alignment properties does not change the physical column order.

How to Display Excel VBA List Box Columns from Right to Left
Product
Microsoft Excel
Device & OS
not provided
Scenario
Developing an Excel VBA UserForm where a multi-column list box is linked to a worksheet table and requires a right-to-left column presentation.
Observed behavior
Changing the list box TextAlign property only affects how text is aligned within the columns; it fails to reverse the overall left-to-right sequence of the columns themselves.
Before you start

Determine whether your entire UserForm needs to follow a right-to-left layout or just the specific list box, as the primary solution will affect the entire form.

Solution 1Recommended

Enable the UserForm RightToLeft Property

This is the simplest and most robust method. By setting the parent UserForm to a right-to-left layout, the list box will automatically inherit this behavior and reverse its column order.

The RightToLeft property is a built-in feature for UserForms in VBA designed specifically for Right-to-Left (RTL) formatting. Applying this will flip the layout of the list box so that the first column appears on the far right.

1
Open the VBA Editor

Press Alt + F11 to open the Visual Basic for Applications (VBA) editor in your workbook.

2
Select the UserForm

In the Project Explorer pane, double-click the UserForm that contains your list box to open it in the designer view.

3
Modify the Form Properties

Press F4 to open the Properties window. Make sure the UserForm itself is selected (not the list box), find the 'RightToLeft' property, and change its value to True.

Enable the UserForm RightToLeft Property
Impact on other controls: Changing this property on the UserForm will also apply right-to-left rendering to other controls on the same form. If this is undesirable, consider the data-reversal workaround below.
Free Microsoft Office alternative

Upgrade Your Spreadsheet Experience with WPS Office

If you frequently work with complex macros, UserForms, and advanced spreadsheet functions, WPS Office provides a fully compatible, lightweight, and cost-effective environment to handle all your daily tasks seamlessly.

  1. 1. Download and Install: Visit the official WPS website to download the free installation package for your operating system.
  2. 2. Open your Excel files: Launch WPS Spreadsheets and open your existing .xlsm or .xlsx files directly without any conversion.
  3. 3. Enable Macros: If your file contains VBA code or UserForms, simply enable macros when prompted to continue your work without interruption.
Completely free to download with a familiar, user-friendly interfaceExcellent format compatibility with Microsoft Excel (.xlsx, .xls, .xlsm)Built-in support for advanced formulas and macro executionLightweight installation that runs smoothly on older or lower-spec devices
microsoft office alternative - wps office

Frequently Asked Questions

Does changing the TextAlign property to fmTextAlignRight reverse the columns?

No. The TextAlign property only adjusts the alignment of the text inside each individual column (e.g., aligning text to the right edge of the column). It does not alter the physical sequence or order of the columns in the list box.

Can I set the RightToLeft property only for the List Box?

In standard Excel VBA, the RightToLeft property is typically managed at the UserForm level. Setting it to True on the UserForm cascades the behavior to the controls within it. There is no direct RightToLeft property isolated exclusively for a standard VBA ListBox control without affecting the parent container.

How can I reverse the list box columns using VBA arrays instead of a temporary sheet?

You can use a VBA script to read the source range into a 2D array, use a loop to swap the columns so they are in reverse order, and then assign the modified array to the ListBox.List property. When doing this, leave the RowSource property blank.