VBA & Macro Problems

How to Fix Excel VBA Adding @ Operator (Use Formula2R1C1)

Huma Ashraf ChHuma Ashraf Ch Nov 10, 2026 869 views

Question details

The user needs to fix a VBA macro that incorrectly adds the implicit intersection operator (@) when converting array formulas between relative, absolute, and mixed references.

How to Prevent Excel VBA from Adding the @ Operator in Array Formulas
Product
Excel
Device & OS
not provided
Scenario
Converting array formulas using VBA macros.
Observed behavior
The macro adds an unwanted '@' symbol to the formulas, which triggers legacy implicit intersection and disrupts modern dynamic array behavior.
Before you start

Ensure you have saved and backed up your Excel workbook containing the VBA macro before modifying the code.

Solution 1Recommended

Use Formula2R1C1 Instead of FormulaR1C1

Update your VBA code to use the dynamic-array-aware Formula2R1C1 property, which preserves modern array behavior and prevents the @ operator.

In modern versions of Excel, dynamic arrays are the default calculation engine. The older FormulaR1C1 property triggers Excel's legacy behavior, which automatically inserts the implicit intersection operator (@) to force the formula to return a single value.

Using Formula2R1C1 tells the application to treat the formula as a modern dynamic array, preventing the unwanted @ symbol and allowing the results to spill across cells.

1
Open the VBA Editor

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

2
Locate the Macro

In the Project Explorer pane, find the module and the specific macro where the formula conversion is taking place.

3
Update the Code

Find the line using ConvertFormula and replace .FormulaR1C1 with .Formula2R1C1. For example, change it to: .Formula2R1C1 = Application.ConvertFormula(.Formula2R1C1, xlR1C1, xlR1C1, absRelMode, oneCell)

4
Save and Run

Save your VBA project, close the editor, and run the macro again to verify that the @ operator is no longer added.

Use Formula2R1C1 Instead of FormulaR1C1
Dynamic Arrays Preserved: Using Formula2 ensures your formulas spill correctly across cells without legacy intersection constraints.
Free Microsoft Office alternative

Try WPS Office for Seamless Spreadsheet Management

If you are frustrated by complex formula behaviors and legacy macro intersections, consider switching to WPS Office. It offers a lightweight, highly compatible spreadsheet tool that handles complex formulas and data processing with ease.

  1. 1. Download and Install: Get WPS Office Free from the official website and install it on your computer.
  2. 2. Open Your Workbook: Launch WPS Spreadsheet and open your existing .xlsm or .xlsx files directly without any formatting loss.
  3. 3. Edit and Save: Work on your formulas and macros with full compatibility, then save your progress.
Fully compatible with Microsoft Excel formats (.xlsx, .xlsm, .csv)Supports advanced formulas and array calculations nativelyLightweight and fast, ensuring smooth performance even with large datasetsFamiliar user interface for a zero-learning-curve transition
microsoft office alternative - wps office

Frequently Asked Questions

What does the @ symbol mean in Excel formulas?

The @ symbol is the implicit intersection operator introduced in modern spreadsheet engines. It indicates that a formula which could return an array is being forced to return a single value, ensuring backward compatibility with older software versions.

What is the difference between FormulaR1C1 and Formula2R1C1?

FormulaR1C1 is the legacy property that triggers older formula behavior, often adding the @ symbol to array formulas. Formula2R1C1 is the newer, dynamic-array-aware property that allows formulas to spill across multiple cells without implicit intersection.

Why did my VBA macro suddenly start adding @ to formulas?

This typically happens after updating to a version of the software that supports dynamic arrays (like Microsoft 365 or Excel 2021). Older macros using .Formula or .FormulaR1C1 are treated as legacy code, prompting the engine to insert the @ operator to maintain old calculation behaviors.