# Loop through a column to find the longest string

I need to loop through a column, check each field and determine its length and when compeleted, return from the function the value for the longest string.  I think I can figure out how to loop, but how to I tell it to return only the longest count of characters?  That is, if cell A15 has data that is 15 characters and cell A16 has 22 characters, I want the function to only return 22.
###### Who is Participating?

Solutions ConsultantCommented:
Here is a vba function that will do what you are after

It takes the Column letter as a string and returns the length of the longest string

Michael
``````Function maxInCol(col As String)
Dim lastrow As Long, i As Long

lastrow = Range(col & Rows.Count).End(xlUp).Row
maxInCol = 0

For i = 1 To lastrow
If Len(Range(col & i).Value) > maxInCol Then maxInCol = Len(Range(col & i).Value)
Next

End Function
``````
0

Commented:
You can do this through formulas..in a blank column next to the text, such as B1 put =Len(A1)

then you you put a formula at the bottom e.g.: =Max(B1:B50)
0

Commented:
Before your loop begins, have this:

max = 0

temp = Len(ActiveCell)
if temp > max then max = temp

Len returns the length of the string
0

Commented:
You could use an array formula - enter with ctrl+shift+enter:

=MAX(LEN(A1:A10))
0

Commented:
On column B I putted a formula to get the lenght of column A value. Then on cell D1 I putted an array formula to get the value that corresponds to the value with the highest lenght on column A. To insert an array formula just type in the formula on the cell and instead of pressing just Enter key, Ctrl-Shift-Enter.

The formula will look like this:

{=INDEX(A1:A6,MATCH(MAX(LEN(A:A)),B1:B6,0))}

jppinto

Book2.xlsx
0

RetiredAuthor Commented:
ISorry,  did not mention, this must be all done in VBA code.  Also, I discovered that one field has over 300 characters, which should not be considered as it is a footnote.  Ragnarok89, I think this is what I am looking for, will try and get back.
0

RetiredAuthor Commented:
I have adapted the code incorporating some of the suggestions, but all the Debug.Print intMax returns is 0.  I think I am missing a point somewhere.
``````Public Sub LengthCountTest()
Dim rngCell             As Range
Dim intColTextLength    As Integer
Dim intRowCount         As Integer
Dim intColCount         As Integer
Dim aryColCount()       As Integer
Dim intColumns          As Integer
Dim intMax              As Integer
intMax = 0

'First set the print area to a named range
With ActiveSheet
intRowCount = .Range("ReportArea").Rows.Count
Debug.Print intRowCount
intColCount = .Range("ReportArea").Columns.Count
Debug.Print intColCount
'End With

ReDim aryColCount(1 To intColCount)

intColumns = 1
Do Until intColumns > intColCount
With ActiveSheet
For Each rngCell In Range("A1:A" & intRowCount)
intColTextLength = Len(ActiveCell)
If intColTextLength > intMax Then
intMax = intColTextLength
End If
Debug.Print intMax
Next
intColumns = intColumns + 1
End With
Loop
End With

End Sub
``````
0

RetiredAuthor Commented:
As a side note, evnetually the Rage("A1:A" & intRowCount) will be replaced by code that will move from one colum to another in the range, but right now I just want to get the first column to return data!
0

Solutions ConsultantCommented:
Note - You can use the function above by placing it into a module and then calling it from the sheet by using

=maxInCol("A")

which will give the required result for column A

Michael
0

RetiredAuthor Commented:
This is did it.  Thank you all.  I will be posting another question relative to the fact that I need it to ignore the Max value of 300 +.  The footnote is on different rows depending on the report so I cannot simply tell it to ignore a particular row.  Eventually, all the max values for each of the columns will populate an array, but that is about three questions down the road.
0

Commented:
When asking a question, if you wanted VBA only, you should have mentioned at the beginning! For future reference, please don't forget it...
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.