Как разделить номера клеток на две цифры вместе с комой? - PullRequest
1 голос
/ 09 июля 2019

У меня есть ячейка с кучей чисел, в которой нужно разделить две ячейки вместе с Coma (,)

Пример.A2 = 6364656261636062

Ответ: B2 = 63,64,65,62,61,63,60,62

А затем нужно найти самое высокое и самое низкое значение из того же, что и

Highest = 65 in C2 и Lowest = 60 in D2

пожалуйста, помогите получить его через формулу или VBA.

Ответы [ 5 ]

1 голос
/ 11 июля 2019

Вы можете использовать регулярное выражение с шаблоном (\ d {2}). Предположим, что ваши данные в столбце (A), начиная с A2 Используйте этот макрос

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
1 голос
/ 09 июля 2019

Для объединенного текста вы можете использовать TEXTJOIN и MID в комбинации массивов:

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 + Введите

Примечание:

Если у вас нет 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)

Снова введите формула массива!Кроме того, скриншот показывает неправильный результат, это исправлено.

1 голос
/ 09 июля 2019

Для первого вопроса формула будет иметь вид:

=+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.

0 голосов
/ 11 июля 2019

Ответил Джерри.

=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))

Спасибо за это @ Джерри Иеремия.

0 голосов
/ 09 июля 2019

В ЭЛЕМЕНТЕ ФОРМУЛА СЕТИ C2 (CTRL + SHIFT + ВВОД)

=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 + ВВОД)

=MIN(--(IF(MID($A2,2*(ROW(INDIRECT("1:"&LEN($A2))))-1,2)="",1000,MID($A2,2*(ROW(INDIRECT("1:"&LEN($A2))))-1,2))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...