如何从一系列细胞中获得最低的字母数字细胞值?我不想对单元格进行排序,我也不想只查看数字值。如果我有以下单元格:
2A1111
4B0011
2Z0011
2A0011
Excel应该知道2A0011是最低值,因为它将它们正确排序为:
2A0011
2A1111
2Z0011
4B0011
在我的宏中,我将一行中每个单元格的值与该行中最低值的单元格进行比较。如果单元格具有更高的值,则会在其位置添加新的(空白)单元格,并且单元格下方的整个列会向下移动。
For cell = 1 To rLastCell.Columns.Count
If Cells(row, cell) > Application.WorksheetFunction.Min(rLastCell.Rows(row)) Then
If Not rng2 Is Nothing Then
Set rng2 = Union(rng2, rLastCell(row, cell))
Else
Set rng2 = rLastCell(row, cell)
End If
End If
Next
这适用于所有带有数字的行 - 仅在我的传感器中,但当行包含字母数字文本时,.Min(rLastCell.Rows(row))
的值为0,因此会将行中的每个单元格向下移动。
作为旁注 - 几乎所有与此相关的帖子都涉及忽略单元格中的字母,这意味着2A0011和2Z0011被视为相等。
编辑:@Ditto我没有足够的代表来发布截图,所以我会尝试在下面格式化它...
2807516 1153634 1153634 3332241
3332241 2319999 2319999 3344644
3344644 2420083 2420083 3347024
3347024 2734988 2734988 3349486
3349486 2807516 2807516 3353163
以上内容将重新格式化为下表。
------- 1153634 1153634 -------
------- 2319999 2319999 -------
------- 2420083 2420083 -------
------- 2734988 2734988 -------
2807516 2807516 2807516 -------
3332241 ------- ------- 3332241
3344644 ------- ------- 3344644
3347024 ------- ------- 3347024
3349486 ------- ------- 3349486
------- ------- ------- 3353163
下面是一些字母数字数据的示例
2P9864 0V5170 0V5170 2P9864
5N7531 2P9864 2P9864 2W8150
3N8572 3L0415 3L0415 3N8572
5N7531 5N7531 4W1704 5N7531
6F5985 6F5985 5N7531 6F5985
抱歉可怕的格式化。发布表格没有好办法!
答案 0 :(得分:0)
数据效果很好..作为截图,我无法在这里查看(从工作中),现在我可以复制/粘贴它了;)
这是我根据你所展示的内容提出的......不确定它是最优化的方式,但它确实有效。希望是否有其他人发现更容易的方式(我实际上希望有一个我不知道的功能):))
Function f_strmin(in_range As Range) As String
Dim lowstr As String
Dim firstpass As Boolean
firstpass = True
For Each cell In in_range
If firstpass And cell.Value <> "" Then
lowstr = cell.Value
firstpass = False
ElseIf cell.Value = "" Then
' do nothing
ElseIf cell.Value < lowstr Then
lowstr = cell.Value
End If
Next cell
f_strmin = lowstr
End Function
Sub test()
Dim r As Integer
Dim vr As String
Dim minval As String
Dim chk As Boolean
r = 1
vr = Trim(Str(r)) & ":" & Trim(Str(r))
' as long as the current row we're on has records .. keep going until we hit a blank row
Do While Application.WorksheetFunction.CountA(Range(vr)) > 0
' get the min value in this row
minval = f_strmin(Range(vr))
For c = 1 To 4
If Cells(r, c).Value > minval Then
chk = Cells(r, c).Insert(xlDown, xlFormatFromLeftOrAbove)
End If
Next c
r = r + 1
vr = Trim(Str(r)) & ":" & Trim(Str(r))
Loop
End Sub
这套:
2807516 1153634 1153634 3332241
3332241 2319999 2319999 3344644
3344644 2420083 2420083 3347024
3347024 2734988 2734988 3349486
3349486 2807516 2807516 3353163
结束于此:
1153634 1153634
2319999 2319999
2420083 2420083
2734988 2734988
2807516 2807516 2807516
3332241 3332241
3344644 3344644
3347024 3347024
3349486 3349486
3353163
这套:
2P9864 0V5170 0V5170 2P9864
5N7531 2P9864 2P9864 2W8150
3N8572 3L0415 3L0415 3N8572
5N7531 5N7531 4W1704 5N7531
6F5985 6F5985 5N7531 6F5985
结果如下:
0V5170 0V5170
2P9864 2P9864 2P9864 2P9864
2W8150
3L0415 3L0415
3N8572
4W1704
5N7531 5N7531 5N7531 5N7531
3N8572
5N7531
6F5985 6F5985 6F5985