Как определить букву столбца по номеру в excel

 

Tosyan12

Пользователь

Сообщений: 117
Регистрация: 22.04.2018

Есть формула СТОЛБЕЦ(), она возвращает числовой номер столбца, в моём же случае нужно вернуть букву это столбца, как это сделать?

 

БМВ

Модератор

Сообщений: 21383
Регистрация: 28.12.2016

Excel 2013, 2016

=SUBSTITUTE(ADDRESS(1;COLUMN();4);1;)

Изменено: БМВ10.10.2019 13:10:36

По вопросам из тем форума, личку не читаю.

 

Tosyan12

Пользователь

Сообщений: 117
Регистрация: 22.04.2018

А можно русскую формулу? Я переводчиком перевёл но таких функций у меня нет.

 

Настя_Nastya

Пользователь

Сообщений: 801
Регистрация: 14.07.2019

#4

11.10.2019 20:04:12

Код
=ПСТР(АДРЕС(1;СТОЛБЕЦ();2);1;ДЛСТР(АДРЕС(1;СТОЛБЕЦ();2))-НАЙТИ("$";АДРЕС(1;СТОЛБЕЦ();2)))
 

Светлый

Пользователь

Сообщений: 487
Регистрация: 07.03.2019

#5

11.10.2019 20:08:17

До Z включительно:

Код
=СИМВОЛ(СТОЛБЕЦ()+64)
 

GRIM

Пользователь

Сообщений: 232
Регистрация: 21.09.2016

#6

11.10.2019 20:09:31

Цитата
Tosyan12 написал:
Я переводчиком перевёл но таких функций у меня нет.

Не может такого быть.

Код
=SUBSTITUTE(ADDRESS(1;COLUMN();4);1;)

=

Код
=ПОДСТАВИТЬ(АДРЕС(1;СТОЛБЕЦ();4);1;)
 

БМВ

Модератор

Сообщений: 21383
Регистрация: 28.12.2016

Excel 2013, 2016

Светлый,  досокращал формулу до результата сокращенного  :D

GRIM, Thanks for adaption and translation :-)

По вопросам из тем форума, личку не читаю.

 

Tosyan12

Пользователь

Сообщений: 117
Регистрация: 22.04.2018

#8

12.10.2019 11:52:34

Цитата
GRIM написал:
ПОДСТАВИТЬ(АДРЕС(1;СТОЛБЕЦ();4);1;)

Помогите составить формулу из 2ух. Значит есть 2 формулы

Код
=ГИПЕРССЫЛКА("#ЛИСТ1!L"&СТРОКА(N35);"►") и =АДРЕС(СТРОКА();СТОЛБЕЦ();4)

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

Прикрепленные файлы

  • Переход.xlsx (9.74 КБ)

 

buchlotnik

Пользователь

Сообщений: 3863
Регистрация: 31.10.2014

Excel 365 Бета-канал

Tosyan12, а какое отношение этот вопрос имеет к заявленной теме?

Соблюдение правил форума не освобождает от модераторского произвола
<#0>

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Мало того, что никакого, так автор даже не соизволил ответить помогающим — подошли решения или нет?

 

Tosyan12

Пользователь

Сообщений: 117
Регистрация: 22.04.2018

Нет поэтому я спрашиваю как вернуть букву столбца совместив 2 формулы

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#12

12.10.2019 12:00:54

Как вернуть букву — Вам показали, а теперь начинается

Цитата
Tosyan12 написал:
при нажатии на стрелочку вправо можно было попасть на стрелочку влево,

Создавайте новую тему про «стрелочки». А в этой теме неплохо бы поблагодарить тех, кто Вам помогал.

 

Tosyan12

Пользователь

Сообщений: 117
Регистрация: 22.04.2018

#13

12.10.2019 12:29:54

Цитата
Юрий М написал:
Создавайте новую тему про «стрелочки»

Я уже создал 2 и никак, я думал картинки вставить, но тут ограничения на них, создам тогда 3юю тему про стрелочки, я снял видео на фотоаппарат я его в ютуб загружу там я показал что куда оно там стрикает и переходит.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Не нужна третья: у Вас уже есть тема про переход между столбцами.

 

БМВ

Модератор

Сообщений: 21383
Регистрация: 28.12.2016

Excel 2013, 2016

Tosyan12, для стрелочек, галочек, людочек изучите возможности функции адрес и на этом все.

По вопросам из тем форума, личку не читаю.

 

Tosyan12

Пользователь

Сообщений: 117
Регистрация: 22.04.2018

#16

12.10.2019 14:43:06

Цитата
БМВ написал:
для стрелочек, галочек, людочек изучите возможности функции адрес и на этом все

Ну да возможно близко хожу но мозгов не хватает с этим экселем. Я хочу сделать вот такой эффект

https://www.youtube.com/watch?v=So3DBadKLdU&feature=youtu.be

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Tosyan12, забудьте, что существует кнопка цитирования — она не для Вас. Вы не умеете пользоваться этой кнопкой или не знаете, что такое цитата.

 

Tosyan12

Пользователь

Сообщений: 117
Регистрация: 22.04.2018

#18

12.10.2019 14:52:19

Цитата
Юрий М написал:
забудьте, что существует кнопка цитирования — она не для Вас. Вы не умеете пользоваться этой кнопкой или не знаете, что такое цитата.

Человек мне намекнул про функцию АДРЕС(), я с ней экспериментировал, я написал ответ человеку что не хватает мозгов её применить в моей ситуации

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#20

12.10.2019 15:03:50

Бан до понедельника. В понедельник придете — первым делом приведите в порядок сообщения в двух своих темах.

MS Excel columns have a pattern like A, B, C, …, Z, AA, AB, AC, …., AZ, BA, BB, … ZZ, AAA, AAB ….. etc. In other words, column 1 is named “A”, column 2 as “B”, and column 27 as “AA”.
Given a column number, find its corresponding Excel column name. The following are more examples.

Input          Output
 26             Z
 51             AY
 52             AZ
 80             CB
 676            YZ
 702            ZZ
 705            AAC

Thanks to Mrigank Dembla for suggesting the below solution in a comment.
Suppose we have a number n, let’s say 28. so corresponding to it we need to print the column name. We need to take the remainder with 26. 

If the remainder with 26 comes out to be 0 (meaning 26, 52, and so on) then we put ‘Z’ in the output string and new n becomes n/26 -1 because here we are considering 26 to be ‘Z’ while in actuality it’s 25th with respect to ‘A’.

Similarly, if the remainder comes out to be non-zero. (like 1, 2, 3, and so on) then we need to just insert the char accordingly in the string and do n = n/26.

Finally, we reverse the string and print. 

Example: 
n = 700
The remainder (n%26) is 24. So we put ‘X’ in the output string and n becomes n/26 which is 26. 
Remainder (26%26) is 0. So we put ‘Z’ in the output string and n becomes n/26 -1 which is 0.

Following is the implementation of the above approach.

C++

#include <bits/stdc++.h>

#define MAX 50

using namespace std;

void printString(int n)

{

    char str[MAX];

    int i = 0;

    while (n > 0) {

        int rem = n % 26;

        if (rem == 0) {

            str[i++] = 'Z';

            n = (n / 26) - 1;

        }

        else

        {

            str[i++] = (rem - 1) + 'A';

            n = n / 26;

        }

    }

    str[i] = '';

    reverse(str, str + strlen(str));

    cout << str << endl;

    return;

}

int main()

{

    printString(26);

    printString(51);

    printString(52);

    printString(80);

    printString(676);

    printString(702);

    printString(705);

    return 0;

}

Java

public class ExcelColumnTitle {

    private static void printString(int columnNumber)

    {

        StringBuilder columnName = new StringBuilder();

        while (columnNumber > 0) {

            int rem = columnNumber % 26;

            if (rem == 0) {

                columnName.append("Z");

                columnNumber = (columnNumber / 26) - 1;

            }

            else

            {

                columnName.append((char)((rem - 1) + 'A'));

                columnNumber = columnNumber / 26;

            }

        }

        System.out.println(columnName.reverse());

    }

    public static void main(String[] args)

    {

        printString(26);

        printString(51);

        printString(52);

        printString(80);

        printString(676);

        printString(702);

        printString(705);

    }

}

Python

MAX = 50

def printString(n):

    string = [""] * MAX

    i = 0

    while n > 0:

        rem = n % 26

        if rem == 0:

            string[i] = 'Z'

            i += 1

            n = (n / 26) - 1

        else:

            string[i] = chr((rem - 1) + ord('A'))

            i += 1

            n = n / 26

    string[i] = ''

    string = string[::-1]

    print "".join(string)

printString(26)

printString(51)

printString(52)

printString(80)

printString(676)

printString(702)

printString(705)

C#

using System;

class GFG{

static String reverse(String input)

{

    char[] reversedString = input.ToCharArray();

    Array.Reverse(reversedString);

    return new String(reversedString);

}

private static void printString(int columnNumber)

{

    String columnName = "";

    while (columnNumber > 0)

    {

        int rem = columnNumber % 26;

        if (rem == 0)

        {

            columnName += "Z";

            columnNumber = (columnNumber / 26) - 1;

        }

        else

        {

            columnName += (char)((rem - 1) + 'A');

            columnNumber = columnNumber / 26;

        }

    }

    columnName = reverse(columnName);

    Console.WriteLine(columnName.ToString());

}

public static void Main(String[] args)

{

    printString(26);

    printString(51);

    printString(52);

    printString(80);

    printString(676);

    printString(702);

    printString(705);

}

}

Javascript

<script>

function printString(columnNumber)

{

        let columnName = [];

        while (columnNumber > 0) {

            let rem = columnNumber % 26;

            if (rem == 0) {

                columnName.push("Z");

                columnNumber = Math.floor(columnNumber / 26) - 1;

            }

            else

            {

                columnName.push(String.fromCharCode((rem - 1) + 'A'.charCodeAt(0)));

                columnNumber = Math.floor(columnNumber / 26);

            }

        }

        document.write(columnName.reverse().join("")+"<br>");

}

printString(26);

printString(51);

printString(52);

printString(80);

printString(676);

printString(702);

printString(705);

</script>

Output

Z
AY
AZ
CB
YZ
ZZ
AAC

Time Complexity: O(log26n), as we are using a loop and in each traversal, we decrement by floor division of 26.

Auxiliary Space: O(50), as we are using extra space for storing the result.
Method 2 
The problem is similar to converting a decimal number to its binary representation but instead of a binary base system where we have two digits only 0 and 1, here we have 26 characters from A-Z.
So, we are dealing with base 26 instead of base binary. 
That’s not where the fun ends, we don’t have zero in this number system, as A represents 1, B represents 2 and so on Z represents 26. 
To make the problem easily understandable, we approach the problem in two steps:

  1. Convert the number to base 26 representation, considering we have 0 also in the system.
  2. Change the representation to the one without having 0 in its system.

HOW? Here is an example

Step 1: 
Consider we have number 676, How to get its representation in the base 26 system? In the same way, we do for a binary system, Instead of division and remainder by 2, we do division and remainder by 26.

Base 26 representation of 676 is : 100 

Step2
But Hey, we can’t have zero in our representation. Right? Because it’s not part of our number system. How do we get rid of zero? Well it’s simple, but before doing that let’s remind one simple math trick:

Subtraction: 
5000 - 9, How do you subtract 9 from 0 ? You borrow
from next significant bit, right.  
  • In a decimal number system to deal with zero, we borrow 10 and subtract 1 from the next significant.
  • In the Base 26 Number System to deal with zero, we borrow 26 and subtract 1 from the next significant bit.

So Convert 10026 to a number system that does not have ‘0’, we get (25 26)26 
Symbolic representation of the same is: YZ 

Here is the implementation of the same:

C++

#include <iostream>

using namespace std;

void printString(int n)

{

    int arr[10000];

    int i = 0;

    while (n) {

        arr[i] = n % 26;

        n = n / 26;

        i++;

    }

    for (int j = 0; j < i - 1; j++) {

        if (arr[j] <= 0) {

            arr[j] += 26;

            arr[j + 1] = arr[j + 1] - 1;

        }

    }

    for (int j = i; j >= 0; j--) {

        if (arr[j] > 0)

            cout << char('A' + arr[j] - 1);

    }

    cout << endl;

}

int main()

{

    printString(26);

    printString(51);

    printString(52);

    printString(80);

    printString(676);

    printString(702);

    printString(705);

    return 0;

}

Java

import java.util.*;

class GFG{

static void printString(int n)

{

    int []arr = new int[10000];

    int i = 0;

    while (n > 0)

    {

        arr[i] = n % 26;

        n = n / 26;

        i++;

    }

    for(int j = 0; j < i - 1; j++)

    {

        if (arr[j] <= 0)

        {

            arr[j] += 26;

            arr[j + 1] = arr[j + 1] - 1;

        }

    }

    for(int j = i; j >= 0; j--)

    {

        if (arr[j] > 0)

            System.out.print(

                (char)('A' + arr[j] - 1));

    }

    System.out.println();

}

public static void main(String[] args)

{

    printString(26);

    printString(51);

    printString(52);

    printString(80);

    printString(676);

    printString(702);

    printString(705);

}

}

Python3

def printString(n):

    arr = [0] * 10000

    i = 0

    while (n > 0):

        arr[i] = n % 26

        n = int(n // 26)

        i += 1

    for j in range(0, i - 1):

        if (arr[j] <= 0):

            arr[j] += 26

            arr[j + 1] = arr[j + 1] - 1

    for j in range(i, -1, -1):

        if (arr[j] > 0):

            print(chr(ord('A') +

                  (arr[j] - 1)), end = "");

    print();

if __name__ == '__main__':

    printString(26);

    printString(51);

    printString(52);

    printString(80);

    printString(676);

    printString(702);

    printString(705);

C#

using System;

class GFG{

static void printString(int n)

{

  int []arr = new int[10000];

  int i = 0;

  while (n > 0)

  {

    arr[i] = n % 26;

    n = n / 26;

    i++;

  }

  for(int j = 0; j < i - 1; j++)

  {

    if (arr[j] <= 0)

    {

      arr[j] += 26;

      arr[j + 1] = arr[j + 1] - 1;

    }

  }

  for(int j = i; j >= 0; j--)

  {

    if (arr[j] > 0)

      Console.Write((char)('A' +

                     arr[j] - 1));

  }

  Console.WriteLine();

}

public static void Main(String[] args)

{

  printString(26);

  printString(51);

  printString(52);

  printString(80);

  printString(676);

  printString(702);

  printString(705);

}

}

Javascript

<script>

function printString(n){

    let arr = [];

    let i = 0;

    while (n) {

        arr[i] = n % 26;

        n = Math.floor(n / 26);

        i++;

    }

    for (let j = 0; j < i - 1; j++) {

        if (arr[j] <= 0) {

            arr[j] += 26;

            arr[j + 1] = arr[j + 1] - 1;

        }

    }

    let ans = '';

    for (let j = i; j >= 0; j--) {

        if (arr[j] > 0)

            ans += String.fromCharCode(65 + arr[j] - 1);

    }

    document.write(ans + "<br>");

}

printString(26);

printString(51);

printString(52);

printString(80);

printString(676);

printString(702);

printString(705);

</script>

Output

Z
AY
AZ
CB
YZ
ZZ
AAC

Time Complexity: O(log26n), as we are using a loop and in each traversal, we decrement by floor division of 26.

Auxiliary Space: O(10000), as we are using extra space for the array.

Method 3:

We can use a recursive function which definitely reduces the time and  increase the efficiency:

Alphabets are in sequential order like: ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’. You have experienced while using excel when you see columns and rows numbering are done in  Alphabetical ways.

Here’s How I purposefully think about the logic of how it is arranged.

(In Mathematical  terms, [a , b ] means from ‘a’ to ‘b’).

[1,26] = [A,Z] (Understand by ‘1’ stands for ‘A’ and ’26” stands for “Z”). For [27,52] ,it will be like [AA,AZ], For [57,78] it will be [BA,BZ]

Logic is to append an Alphabet sequentially whenever it ends up numbering at 26.

For example, if the number is ’27’ which is greater than  ’26’, then we simply need to divide by 26, and we get the remainder as 1, We see “1” as “A” and can be recursively done.

we will be using python for this.

Algorithm is:

1. Take an array and Sort the letters from A to Z . (You can also use the import string and string function to get “A to Z” in uppercase.)

2. If the number is less than or equal to ’26’, simply get the letter from the array and print it.

3. If it is greater than 26, use the Quotient  Remainder rule, if the remainder is zero, there are 2 possible ways, if the quotient is “1”, simply hash out the letter from the index [r-1]( ‘r’ is remainder), else call out the function from the num =(q-1) and append at the front to the letter indexing [r-1].

4. If the remainder is not equal to “0”, call the function for the num = (q) and append at the front to the letter indexing [r-1].

The code concerned with this is:

C++

#include<bits/stdc++.h>

using namespace std;

string alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

string num_hash(int num){

    if(num < 26){

      string res = "";

      res += alpha[num-1];

      return res;

    }

    else{

      int q = (num / 26);

      int r = num % 26;

      string res = "";

      if(r == 0){

        if(q == 1){

          res.append(1,alpha[(26 + r-1)%26]);

        }

        else{

          res = num_hash(q-1);

          res.append(1,alpha[(26 + r-1)%26]);

        }

      }

      else{

        res = num_hash(q);

        res.append(1,alpha[(26 + r-1)%26]);

      }

      return res;

    }

}

int main () {

    cout<< num_hash(26) << endl;

    cout<< num_hash(51) << endl;

    cout<< num_hash(52) << endl;

    cout<< num_hash(80) << endl;

    cout<< num_hash(676) << endl;

    cout<< num_hash(702) << endl;

    cout<< num_hash(705) << endl;

    return 0;

}

Java

import java.io.*;

class GFG

{

  static String alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

  static String num_hash(int num){

    if(num < 26)

      return Character.toString(alpha.charAt(num-1));

    else{

      int q = Math.floorDiv(num, 26);

      int r = num % 26;

      if(r == 0){

        if(q == 1){

          return Character.toString(alpha.charAt((26 + r-1)%26));

        }

        else

          return num_hash(q-1) + alpha.charAt((26 + r-1)%26);

      }

      else

        return num_hash(q) + alpha.charAt((26 + r-1)%26);

    }

  }

  public static void main (String[] args) {

    System.out.println(num_hash(26));

    System.out.println(num_hash(51));

    System.out.println(num_hash(52));

    System.out.println(num_hash(80));

    System.out.println(num_hash(676));

    System.out.println(num_hash(702));

    System.out.println(num_hash(705));

  }

}

Python3

alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def num_hash(num):

    if num < 26:

        return alpha[num-1]

    else:

        q, r = num//26, num % 26

        if r == 0:

            if q == 1:

                return alpha[r-1]

            else:

                return num_hash(q-1) + alpha[r-1]

        else:

            return num_hash(q) + alpha[r-1]

print(num_hash(26))

print(num_hash(51))

print(num_hash(52))

print(num_hash(80))

print(num_hash(676))

print(num_hash(702))

print(num_hash(705))

C#

using System;

class GFG

{

static string alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

static string num_hash(int num){

    if(num < 26)

    return Char.ToString(alpha[num-1]);

    else{

    int q = num/26;

    int r = num % 26;

    if(r == 0){

        if(q == 1){

        return Char.ToString(alpha[(26 + r-1)%26]);

        }

        else

        return num_hash(q-1) + alpha[(26 + r-1)%26];

    }

    else

        return num_hash(q) + alpha[(26 + r-1)%26];

    }

}

public static void Main(String[] args) {

    Console.WriteLine(num_hash(26));

    Console.WriteLine(num_hash(51));

    Console.WriteLine(num_hash(52));

    Console.WriteLine(num_hash(80));

    Console.WriteLine(num_hash(676));

    Console.WriteLine(num_hash(702));

    Console.WriteLine(num_hash(705));

}

}

Javascript

<script>

let alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

function num_hash(num)

{

    if(num < 26)

        return alpha[num-1]

    else{

        let q = Math.floor(num/26),r = num % 26

        if(r == 0){

            if(q == 1)

                return alpha[(26 + r-1)]

            else

                return num_hash(q-1) + alpha[(26 + r-1)]

        }

        else

            return num_hash(q) + alpha[r-1]

    }

}

document.write(num_hash(26),"</br>")

document.write(num_hash(51),"</br>")

document.write(num_hash(52),"</br>")

document.write(num_hash(80),"</br>")

document.write(num_hash(676),"</br>")

document.write(num_hash(702),"</br>")

document.write(num_hash(705),"</br>")

</script>

Output

Z
AY
AZ
CB
YZ
ZZ
AAC

Time Complexity: O(log26n), as we are using recursion and in each recursive call, we decrement by floor division of 26.

Auxiliary Space: O(1), as we are not using any extra space.
Related Article : 
Find the Excel column number from the column title
This article is contributed by Kartik. Please write comments if you find anything incorrect, or if you want to share more information about the topic discussed above.

Буквенное обозначение столбца по номеру

Владимир

Дата: Пятница, 06.09.2013, 14:59 |
Сообщение № 1

Как можно формулами прописать, что бы по номеру столбца он выдавал его буквенное обозначение? Т.е. при значении «5» выдавал значение «E».

 

Ответить

Serge_007

Дата: Пятница, 06.09.2013, 15:19 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

К сообщению приложен файл:

Vladimir.xls
(23.0 Kb)


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

KuklP

Дата: Пятница, 06.09.2013, 15:22 |
Сообщение № 3

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Серег, а столбец 33, например? :)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Serge_007

Дата: Пятница, 06.09.2013, 15:26 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

В А1 номер столбца:

Код

=ПОДСТАВИТЬ(ЛЕВБ(АДРЕС(1;A1);ПОИСК(«$»;АДРЕС(1;A1);2));»$»;)


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Владимир

Дата: Пятница, 06.09.2013, 15:33 |
Сообщение № 5

Спасибо за ответ!

 

Ответить

MCH

Дата: Пятница, 06.09.2013, 18:41 |
Сообщение № 6

Группа: Админы

Ранг: Старожил

Сообщений: 2002


Репутация:

751

±

Замечаний:
±


Код

=ПОДСТАВИТЬ(АДРЕС(1;A1;4);1;)

 

Ответить

Nic70y

Дата: Пятница, 06.09.2013, 19:41 |
Сообщение № 7

Группа: Друзья

Ранг: Экселист

Сообщений: 8136


Репутация:

1999

±

Замечаний:
0% ±


Excel 2010


ЮMoney 41001841029809

 

Ответить

MCH

Дата: Пятница, 06.09.2013, 19:50 |
Сообщение № 8

Группа: Админы

Ранг: Старожил

Сообщений: 2002


Репутация:

751

±

Замечаний:
±


Nic70y, более внимательно читаем пост № 2 и пост № 3

 

Ответить

Nic70y

Дата: Пятница, 06.09.2013, 21:51 |
Сообщение № 9

Группа: Друзья

Ранг: Экселист

Сообщений: 8136


Репутация:

1999

±

Замечаний:
0% ±


Excel 2010

MCH, извиняюсь, невнимательность, читать не умею, пятница :)


ЮMoney 41001841029809

 

Ответить

   wormselfish

08.11.16 — 18:00

Столбцы в таблице нумеруются буквыми так: A, B, C, … Y, Z, AA, AB, AC, … и т.д.

Задача оптимальным способом по номеру столбца получить его букву. Например:

0 => A

25 => Z

99 => ?

На любом языке программирования.

   разработчик 1с

1 — 08.11.16 — 18:17

целое от деления на 25, потом остаток от деления

через кейс определить буквы

   Мойдодыр

2 — 08.11.16 — 18:20

Это называется перевод в другую систему счисления

   wormselfish

3 — 08.11.16 — 19:15

:)

Ну. Кто первый догадается?

   Живой Ископаемый

4 — 08.11.16 — 19:17

а.. то есть тут призы?

   МихаилМ

5 — 08.11.16 — 19:30

(0)

системы счисления на информатике в школе проходят.

Вам на подростковый форум.

   Torquader

6 — 08.11.16 — 20:29

Система счисления с переменной базой — младший разряд 26, а остальные — 27.

   romix

7 — 08.11.16 — 20:36

В цикле заполнить соответствие…

   Garykom

8 — 08.11.16 — 20:42

(6) ТС просто скосячил, в екселе нумерация с 1 а не с 0, так что никакой переменной базы

   Serginio1

9 — 08.11.16 — 21:41

http://catalog.mista.ru/public/544232/

Можно получить индекс зная смещение символа 64 относительно 1 и 26 разрядную систему

   Serginio1

10 — 08.11.16 — 21:43

Или можно заполнить колонки

Функция ЗаписатьКолонки(Колонки,НачСтр,Разряд,КоличествоРазрядов,Сравнивать,ПоследняяКолонка)

// Процедура создает колонки которые меньше или равны имени последней колоки

// A,B,..,AA..ABC

    Для сч=КодСимвола(«A») по  КодСимвола(«Z») Цикл

        НовСтр=НачСтр+Символ(сч);

        
        Если  Разряд<КоличествоРазрядов Тогда

            рез= ЗаписатьКолонки(Колонки,НовСтр,Разряд+1,КоличествоРазрядов,Сравнивать,ПоследняяКолонка);

            Если Сравнивать и Рез Тогда

                возврат истина

            КонецЕсли;    

        Иначе

            Колонки.Добавить(НовСтр,ОписаниеСтроки());

            
            Если Сравнивать и НовСтр=ПоследняяКолонка Тогда

                возврат  истина

            КонецЕсли

        КонецЕсли;

    КонецЦикла;

    
    
    возврат ложь;

КонецФункции

Процедура СоздатьКолонки(Колонки,ПоследняяКолонка)

    
    // Создадим колонки учитывая разряды

    // Например если имя последней колоки ABC то колонки идут по разрядно

    //A..Z

    //AA..ZZ

    //AAA..ABC

    КоличествоРазрядов=СтрДлина(ПоследняяКолонка);

    
    Для сч=1 По  КоличествоРазрядов Цикл

        Сравнивать=сч=КоличествоРазрядов;

        рез= ЗаписатьКолонки(Колонки,»»,1,сч,Сравнивать,ПоследняяКолонка);

        Если Сравнивать и рез Тогда

            возврат;

        КонецЕсли;    

    КонецЦикла;    

КонецПроцедуры

   wormselfish

11 — 08.11.16 — 23:05

Пока правильного ответа нет. Если не считать (10), так как он громоздкий.

   Yuri 83

12 — 08.11.16 — 23:47

лТЗн.Колонки.Получить(Индекс).Имя?

   Serginio1

13 — 09.11.16 — 00:08

http://stackoverflow.com/questions/181596/how-to-convert-a-column-number-eg-127-into-an-excel-column-eg-aa

private string GetExcelColumnName(int columnNumber)

{

    int dividend = columnNumber;

    string columnName = String.Empty;

    int modulo;

    while (dividend > 0)

    {

        modulo = (dividend — 1) % 26;

        columnName = Convert.ToChar(65 + modulo).ToString() + columnName;

        dividend = (int)((dividend — modulo) / 26);

    }

    return columnName;

}

   wormselfish

14 — 09.11.16 — 04:09

(13) Нагуглил. И все равно громоздко, хотя и правильно. Но у меня короче получилось

   Adilgeriy

15 — 09.11.16 — 05:15

А переключит нумерацию столбов в экселе почему не хочешь?

   Garykom

16 — 09.11.16 — 06:30

Зная что есть ограничение на кол-во столбцов в екселе можно в одну строчку записать, но науя?

   Рэйв

17 — 09.11.16 — 06:38

(0)А зачем? есксель и цифры прекрасно понимает.Да они  наглядне

   Feunoir

18 — 09.11.16 — 08:16

(16) Ограничение столбцов в последних версиях Excel — 16384. Точно одной строкой получится?

   Garykom

19 — 09.11.16 — 08:25

(18) угу всего то максимум 3 буковки

   NikVars

20 — 09.11.16 — 09:51

(0) СТОЛБЕЦ

См. также

Возвращает номер столбца по заданной ссылке.

Синтаксис

СТОЛБЕЦ(ссылка)

Ссылка   — это ячейка или интервал ячеек, для которых определяется номер столбца.

Если ссылка опущена, то предполагается, что это ссылка на ячейку, в которой находится сама функция СТОЛБЕЦ.

Если ссылка является интервалом ячеек, и если функция СТОЛБЕЦ введена как горизонтальный массив, то функция СТОЛБЕЦ возвращает номера столбцов в ссылке в виде горизонтального массива.

Ссылка не может ссылаться на несколько областей.

Пример

Чтобы этот пример проще было понять, скопируйте его на пустой лист.

Показать Инструкции

Создайте пустую книгу или лист.

Выделите пример в разделе справки. Не выделяйте заголовок строки или столбца.

Выделение примера в справке.

Выделение примера в справке.

Нажмите сочетание клавиш CTRL+C

На листе выделите ячейку A1 и нажмите сочетание клавиш CTRL+V.

Чтобы переключиться между просмотром результатов и просмотром формул, возвращающих эти результаты, нажмите сочетание клавиш CTRL+` (апостроф) или в меню Сервис укажите на пункт Зависимости формул и выберите режим Режим проверки формул.

  
1

2

3

A B

Формула Описание (результат)

=СТОЛБЕЦ() Столбец в котором отображается формула (1)

=СТОЛБЕЦ(A10) Столбец ссылки (1)

   wormselfish

21 — 09.11.16 — 17:35

(20) Чувак!

Ну все молодцы. Кроме некоторых. Темку можно закрыть ;)

   Злопчинский

22 — 09.11.16 — 17:38

фигня какая.

давайте-ка решим здачу красиво БЕЗ ЭКСЕЛЯ

  

Garykom

23 — 09.11.16 — 17:43

(21) «Мариуполь, Европа»

Вы когда-нибудь пытались получить букву строки или столбца текущей ячейки в Excel, как показано ниже? Здесь я ввожу несколько формул для быстрого получения буквы строки или буквы столбца активной ячейки.

Получить букву строки или столбца текущей ячейки


Получить букву строки или столбца текущей ячейки

Получить букву строки текущей ячейки

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

= СИМВОЛ (СТРОКА () + 64)

= ЛЕВЫЙ (АДРЕС (1; СТРОКА (); 2); 1 + (СТРОКА ()> 26))

документ получить букву строки столбца 1

Получить букву столбца текущей ячейки

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

= СИМВОЛ (КОЛОНКА () + 64)

= ЛЕВЫЙ (АДРЕС (1; КОЛОНКА (); 2); 1 + (КОЛОНКА ()> 26))

документ получить букву строки столбца 2


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (5)


Номинальный 5 из 5


·


рейтинги 1

Понравилась статья? Поделить с друзьями:
  • Как определить активный лист excel
  • Как определить адрес ячеек в excel
  • Как определить irr в excel
  • Как определить excel какой у меня
  • Как округлить число до тысяч excel