*Applies to: Excel for Microsoft 365, Excel for Microsoft 365 for Mac, Excel for the web, Excel 2019, Excel 2016, Excel 2019 for Mac, Excel 2013, Excel 2010, Excel 2007, Excel 2016 for Mac, Excel for Mac 2011, Excel Starter 2010*

**Tip:** Try using the new XLOOKUP function, an improved version of HLOOKUP that works in any direction and returns exact matches by default, making it easier and more convenient to use than its predecessor.

This article outlines the formula syntax and usage of the **HLOOKUP** function in Microsoft Excel.

## Description

Scans for a value in the top row of a table or an array of values, and then returns a value in the same column from a row you define in the table or array. Use HLOOKUP once your comparison values are found in a row across the top of a table of data, and you want to investigate a particular set of rows. Use VLOOKUP once your comparison values are traced back to a column to the left of the data you want to find.

The H in HLOOKUP stands for “Horizontal.”

## Syntax

HLOOKUP(lookup_value, table_array, row_index_num, [range_lookup])

The HLOOKUP function syntax has the following arguments:

**Lookup_value**– Required. The target value to be captured in the first row of the table. Lookup_value can be a value, a reference, or a text string.**Table_array**– Required. A table of information whereby data is looked up. Use a reference to a range or a range name.- The values in the first row of table_array can be text, numbers, or logical values.
- If range_lookup is TRUE, the values in the first row of table_array must be arranged in ascending order: …-2, -1, 0, 1, 2,… , A-Z, FALSE, TRUE; otherwise, HLOOKUP might provide an incorrect value. If range_lookup is FALSE, table_array requires no sorting.
- Uppercase and lowercase text are equivalent.
- Sort the values in ascending order, left to right. For more information, see Sort data in a range or table.

**Row_index_num**– Required. The row number in table_array from which the matching value will be returned. A row_index_num of 1 returns the first row value in table_array, a row_index_num of 2 returns the second row value in table_array, and so on. If row_index_num is less than 1, HLOOKUP returns the #VALUE! error value; if row_index_num is greater than the number of rows on table_array, HLOOKUP returns the #REF! error value.**Range_lookup**– Optional. A logical value that dictates if you want HLOOKUP to find a precise match or a rough match. If TRUE or omitted, an approximate match is returned. In other words, if an exact match is not found, the next biggest value that is less than lookup_value is returned. If FALSE, HLOOKUP will find an exact match. If one is not found, the error value #N/A is returned.

## Remark

- If in any case HLOOKUP can’t find lookup_value, and range_lookup is TRUE, it applies the largest value that is less than lookup_value.
- If lookup_value is smaller than the smallest value in the first row of table_array, HLOOKUP yields the #N/A error value.
- Whenever range_lookup is FALSE and lookup_value is text, you can enter the wildcard characters, question mark (?) and asterisk (*), in lookup_value. A question mark matches any single character; an asterisk matches any sequence of characters. If you want to find an actual question mark or asterisk, input a tilde (~) before the character.

## Example

Copy the example data in the following table, and paste it in cell A1 of a new Excel worksheet. For formulas to display results, pick them, press F2, and then press Enter. If you must, you can expand the column widths to notice all the data.

Axles | Bearings | Bolts |
---|---|---|

4 | 4 | 9 |

5 | 7 | 10 |

6 | 8 | 11 |

Formula | Description | Result |

=HLOOKUP(“Axles”, A1:C4, 2, TRUE) | Looks up “Axles” in row 1, and returns the value from row 2 that’s in the same column (column A). | 4 |

=HLOOKUP(“Bearings”, A1:C4, 3, FALSE) | Looks up “Bearings” in row 1, and returns the value from row 3 that’s in the same column (column B). | 7 |

=HLOOKUP(“B”, A1:C4, 3, TRUE) | Looks up “B” in row 1, and returns the value from row 3 that’s in the same column. Because an exact match for “B” is not found, the largest value in row 1 that is less than “B” is used: “Axles,” in column A. | 5 |

=HLOOKUP(“Bolts”, A1:C4, 4) | Looks up “Bolts” in row 1, and returns the value from row 4 that’s in the same column (column C). | 11 |

=HLOOKUP(3, {1,2,3;”a”,”b”,”c”;”d”,”e”,”f”}, 2, TRUE) | Looks up the number 3 in the three-row array constant, and returns the value from row 2 in the same (in this case, third) column. There are three rows of values in the array constant, each row separated by a semicolon (;). Because “c” is found in row 2 and in the same column as 3, “c” is returned. |