如何用VBA获取列最大值并加1存入另一列?解决类型不匹配错误
Fixing Type 13 Mismatch with MAX in VBA
Hey there! Let's work through that Type 13 mismatch error you're hitting when trying to grab the MAX value from column AM. Here are the most likely culprits and how to fix them:
Common Causes of the Error
- Non-numeric values in your range: If cells in
AM3:AM300contain text, blank cells treated as text, or error values (like #N/A), theMAXfunction will return an error. Trying to assign that error to a numeric variable triggers the mismatch. - Variable type overflow: You declared
LastColumnValue As Integer—but VBA's Integer only goes up to 32767. If your MAX value is larger than that, you'll get either a mismatch or overflow error.
Fixed Code Example
Let's adjust your code to handle these issues, using more reliable VBA practices and adding safeguards:
Private Sub Worksheet_Change(ByVal Target As Range) Dim j As Long Dim LastColumnValue As Long ' Switched to Long to avoid overflow Dim NewColumnValue As Long Dim maxRange As Range ' Define your target range explicitly to avoid ambiguity Set maxRange = Me.Range("AM3:AM300") For j = 1 To 500 ' Check if column AM (col 39) is empty and column A has content If Cells(j, 39).Value = "" And Cells(j, 1).Value <> "" Then ' Safely calculate MAX, catching errors if the range has invalid values On Error Resume Next LastColumnValue = Application.Max(maxRange) On Error GoTo 0 ' Only proceed if MAX returned a valid number If Not IsError(LastColumnValue) Then NewColumnValue = LastColumnValue + 1 Cells(j, 39).Value = NewColumnValue Else ' Fallback if no valid numeric values exist in the range Cells(j, 39).Value = 1 ' Or set to your preferred default End If End If Next j End Sub
Key Improvements
Application.Maxinstead ofEvaluate: This method directly returns a numeric value (or error) without parsing a string formula, reducing mismatch risks.- Error handling: The error trap and
IsErrorcheck prevent crashes when the range has no valid numeric values. - Variable type adjustment: Using
Longinstead ofIntegereliminates overflow issues with larger numbers. - Explicit range reference:
Me.Rangeensures you're working with the sheet that contains the macro, avoiding confusion with other open sheets.
If you still run into issues, double-check AM3:AM300 for hidden error values or text that looks like numbers (e.g., numbers with leading spaces). You can use Excel's ISNUMBER function to quickly verify which cells are valid numeric values.
内容的提问来源于stack exchange,提问作者mflo
相关产品推荐
相关产品推荐

