如何在同一个单元格中将一个单元格数字拆分为两位数以及昏迷?

时间:2019-07-09 04:02:57

标签: excel vba excel-formula

我有一个带有一堆数字的单元格,需要在单元格中将两个数字与逗号(,)分开

例如A2 = 6364656261636062

答案:B2 = 63,64,65,62,61,63,60,62

然后需要从与

相同的值中找到最大值和最小值

Highest = 65 in C2Lowest = 60 in D2

请帮助通过公式或VBA进行获取。

5 个答案:

答案 0 :(得分:1)

对于第一个问题,公式如下:

=+CONCATENATE(MID(A2,1,2),IF(LEN(A2)>3,",",""),MID(A2,3,2),IF(LEN(A2)>5,",",""),MID(A2,5,2),IF(LEN(A2)>7,",",""),MID(A2,7,2),IF(LEN(A2)>9,",",""),MID(A2,9,2),IF(LEN(A2)>11,",",""),MID(A2,11,2),IF(LEN(A2)>13,",",""),MID(A2,13,2),IF(LEN(A2)>15,",",""),MID(A2,15,2),IF(LEN(A2)>17,",",""),MID(A2,17,2),IF(LEN(A2)>19,",",""),MID(A2,19,2),IF(LEN(A2)>21,",",""),MID(A2,21,2))

对于第二部分,您需要一个帮助程序列,以将每个值放在不同的单元格上,然后使用MAX()和MIN()或使用VBA。

答案 1 :(得分:1)

对于串联文本,可以在数组组合中使用TEXTJOINMID

enter image description here

B2中的公式:

=TEXTJOIN(",",TRUE,MID(A2,ROW(A1:INDEX(A:A,LEN(A2)/2))+ROW(A1:INDEX(A:A,LEN(A2)/2))-1,2))

C2中的公式:

=MAX(--MID(A2,ROW(A1:INDEX(A:A;,LEN(A2)/2))+ROW(A1:INDEX(A:A,LEN(A2)/2))-1,2))

D2中的公式:

=MIN(--MID(A2,ROW(A1:INDEX(A:A;,LEN(A2)/2))+ROW(A1:INDEX(A:A,LEN(A2)/2))-1,2))

所有公式都需要通过 Ctrl + Shift + Enter

输入

注意:

如果您没有TEXTJOIN,则可以使用:

=LEFT(CONCAT(MID(A2,ROW(A1:INDEX(A:A,LEN(A2)/2))+ROW(A1:INDEX(A:A,LEN(A2)/2))-1,2)&","),LEN(A2)+((LEN(A2)/2))-1)

再次,输入数组公式!另外,屏幕截图显示了错误的结果,这是固定的。

答案 2 :(得分:1)

您可以将正则表达式与Pattern(\ d {2})一起使用。假设您的数据在从A2开始的(A)列中 使用此宏

Option Explicit
Sub cut_my_number_Please()
Dim reg As Object
Dim MY_match, Matches, My_String$
Dim My_Max As Double: My_Max = -1
Dim My_Min As Double: My_Min = 100
Dim i%, lr%: lr = Cells(Rows.Count, 1).End(3).Row

Range("c2").Resize(lr, 3).ClearContents
Set reg = CreateObject("VBscript.RegExp")

With reg
.Pattern = "(\d{2})"
.Global = True
End With

 For i = 2 To lr
   If reg.test(Range("A" & i)) Then
      Set Matches = reg.Execute(Range("A" & i))
      For Each MY_match In Matches
          My_String = My_String & MY_match & ";"
        If MY_match * 1 >= My_Max Then _
        My_Max = MY_match * 1
        If MY_match * 1 < My_Min Then _
        My_Min = MY_match * 1
      Next MY_match
        Range("C" & i) = Mid(My_String, 1, Len(My_String) - 1)
        Range("D" & i) = My_Max
        Range("E" & i) = My_Min
    End If
     My_Min = 100: My_Max = -1: My_String = ""
 Next i
  Range("D1") = "Max Of My Serial"
  Range("E1") = "Min Of My Serial"
End Sub

答案 3 :(得分:0)

在C2单元格此数组公式中(CTRL + SHIFT + ENTER)

=MAX(--(IF(MID($A2,2*(ROW(INDIRECT("1:"&LEN($A2))))-1,2)="",0,MID($A2,2*(ROW(INDIRECT("1:"&LEN($A2))))-1,2))))

在单元格C3中,此数组公式(CTRL + SHIFT + ENTER)

=MIN(--(IF(MID($A2,2*(ROW(INDIRECT("1:"&LEN($A2))))-1,2)="",1000,MID($A2,2*(ROW(INDIRECT("1:"&LEN($A2))))-1,2))))

答案 4 :(得分:0)

得到杰里的解答。

=MAX(IF(LEN(A2)>1,+MID(A2,1,2),0),IF(LEN(A2)>3,+MID(A2,3,2),0),IF(LEN(A2)>5,+MID(A2,5,2),0),,IF(LEN(A2)>7,+MID(A2,7,2),0),IF(LEN(A2)>9,+MID(A2,9,2),0),IF(LEN(A2)>11,+MID(A2,11,2),0),IF(LEN(A2)>13,+MID(A2,13,2),0),IF(LEN(A2)>15,+MID(A2,15,2),0),IF(LEN(A2)>17,+MID(A2,17,2),0),IF(LEN(A2)>19,+MID(A2,19,2),0),IF(LEN(A2)>21,+MID(A2,21,2),0))

感谢@Jerry Jeremiah。