excel: как разбить содержимое ячейки на CODE - PullRequest
1 голос
/ 21 сентября 2010

Существует функция кода, которая возвращает ASCII для каждой буквы.

Я хотел бы использовать ее таким образом, чтобы она разбивала ячейку a1 = "some string"

В ее коды ASCII:

Примерно так: "23423423434634"

Извините, я не знаю точного ASCII этого, но вы меня поняли.

пожалуйста, обратите внимание, что я бынравится делать это специально с формулой, а не с VBA

Ответы [ 4 ]

1 голос
/ 21 сентября 2010

Написать Excel Пользовательская функция .

Псевдокод для функции приведен ниже:

string returnValue;
for each ( char c in string)
   returnValue = returnValue + Chr(char)
return returnValue

Вы можете вызвать UDF как часть формулы исключения, например,

=StringToASCIICodeValues(A1)

Версия формулы

Вы можете сделать это вручную с помощью встроенных формул Excel с помощью ( в Excel нет функции цикла for для формул )

  1. A1= "некоторая строка"
  2. A2 = "= MID ($ A $ 1, COLUMN (A2), 1)"
  3. Перетащите формулу в ячейку A2 вправо.Перетащите в K2 для примера some string.
  4. A3 = "= CODE (A2)"
  5. Перетащите формулу в ячейку A3 вправо.Перетащите на K3 для примера some string.
  6. A4 = "= A3"
  7. B4 = "= CONCATENATE (A4, B3)"
  8. Перетащите формулу в ячейку B4направо.Перетащите в ячейку K4 для примера some string.
  9. Самый правый столбец со значением в строке 4 содержит окончательное значение.Для some string он вернет: 11511110910132115116114105110103 в ячейку K4
1 голос
/ 21 сентября 2010

Одним из способов является использование байтового массива для присвоения пар номеров Unicode для каждого символа:

Sub ByteArray()
    Dim aByte() As Byte
    Dim str1 As String<
    Dim j As Long
    str1 = "ABC"
    aByte = str1
    For j = LBound(aByte) To UBound(aByte)
        MsgBox aByte(j)
    Next j
End Sub
0 голосов
/ 22 мая 2015

Хотя это некрасиво, если ваши строки не слишком длинные, вы можете сделать это с помощью длинной формулы, которая преобразует каждый символ и затем соединяет их вместе.

Например, эта формула может обрабатывать строки, которые имеют20 символов в длину (создание шестнадцатеричных кодов ascii):

=if(len(A1)>=1,DEC2HEX(CODE(MID(A1,1,1))),"")&
if(len(A1)>=2,DEC2HEX(CODE(MID(A1,2,1))),"")&
if(len(A1)>=3,DEC2HEX(CODE(MID(A1,3,1))),"")&
if(len(A1)>=4,DEC2HEX(CODE(MID(A1,4,1))),"")&
if(len(A1)>=5,DEC2HEX(CODE(MID(A1,5,1))),"")&
if(len(A1)>=6,DEC2HEX(CODE(MID(A1,6,1))),"")&
if(len(A1)>=7,DEC2HEX(CODE(MID(A1,7,1))),"")&
if(len(A1)>=8,DEC2HEX(CODE(MID(A1,8,1))),"")&
if(len(A1)>=9,DEC2HEX(CODE(MID(A1,9,1))),"")&
if(len(A1)>=10,DEC2HEX(CODE(MID(A1,10,1))),"")&
if(len(A1)>=11,DEC2HEX(CODE(MID(A1,11,1))),"")&
if(len(A1)>=12,DEC2HEX(CODE(MID(A1,12,1))),"")&
if(len(A1)>=13,DEC2HEX(CODE(MID(A1,13,1))),"")&
if(len(A1)>=14,DEC2HEX(CODE(MID(A1,14,1))),"")&
if(len(A1)>=15,DEC2HEX(CODE(MID(A1,15,1))),"")&
if(len(A1)>=16,DEC2HEX(CODE(MID(A1,16,1))),"")&
if(len(A1)>=17,DEC2HEX(CODE(MID(A1,17,1))),"")&
if(len(A1)>=18,DEC2HEX(CODE(MID(A1,18,1))),"")&
if(len(A1)>=19,DEC2HEX(CODE(MID(A1,19,1))),"")&
if(len(A1)>=20,DEC2HEX(CODE(MID(A1,20,1))),"")

Для более длинных строк вы можете повторить этот шаблон, хотя вы будете ограничены максимальной длиной формулы, допустимой в Excel, , которая кажетсябыть 8 192 символами .

0 голосов
/ 21 сентября 2010
    string someText = "some string";
    CharEnumerator ce = someText.GetEnumerator();
    int counter = 0;
    while (ce.MoveNext())
    {
        char letter = someText[counter];
        //Call the function to get the ascii
        GetAsciiValue(letter);
        //Do something

        counter++;
    }

Может быть, это поможет вам.

С уважением, J'Sinh

...