Для загрузки товаров в накладную или в каталог из Excel необходимо правильно определить номера столбцов с данными в документе.
В некоторых случаях может оказаться, что данные находятся не в том столбце, в котором кажется.
На примере выше может показаться, что стоимость товара указана в столбце 33, но это не так. Это связано с тем, что несколько ячеек в строке объединены в одну. Для того, чтобы правильно определить, в каком столбце находится информация, кликните на ячейку с данными (она будет выделена зеленым прямоугольником) и посмотрите адрес в информационной строке.
Excel может отображать номера столбцов в разных форматах, разберем ситуация для каждого из них:
Цифровая нумерация столбцов
Адрес ячейки указан как R19C30:
- R, значит “Row” (строка) – 19
- C, значит “Column” (Столбце) – 30
Т.е. в рассматриваемом примере столбец с ценой имеет номер 30. Именно его и необходимо указать.
Буквенная нумерация столбцов
В данном случае адрес ячейки имеет вид: AD19
- AD – номер столбца
- 19 – номер строки
Нас интересует значение номера столбца, именно его и необходимо заполнить. В программе при вводе номера в цифровом значении отображается и буквенный эквивалент:
Как переключить вид нумерации
В Excel можно переключить вид отображения адреса ячейки. Сделать это можно, открыв Файл-Параметры, вкладка “Формулы”:
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:
- Convert the number to base 26 representation, considering we have 0 also in the system.
- 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.
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Ну, собственно, вопрос — в заголовке… С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Не придумал ничего лучше, чем это: Sub test() Function БукваСтолбца(ByVal col As Long) As String Вопрос — а нафига это нужно? |
|
Serge Пользователь Сообщений: 11308 |
А таблицу соответствий в ВБА можно сделать? |
Nicks Пользователь Сообщений: 71 |
{quote}{login=Alex_ST}{date=10.09.2010 10:57}{thema=Как по номеру столбца узнать его букву (VBA)?}{post}Ну, собственно, вопрос — в заголовке…{/post}{/quote} |
Немного ошибся — правильно будет так: Sub test() Function БукваСтолбца(ByVal col As Long) As String |
|
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Спасибо. С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Спасибо большое, Учитель джедаев! С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Алексей, так может легче и быстрее методом «Find» воспользоваться? |
|
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
{quote}{login=Дъмитръ}{date=10.09.2010 11:40}{thema=}{post}… методом «Find» воспользоваться?{/post}{/quote} С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
{quote}{login=Alex_ST}{date=10.09.2010 11:20}{thema=}{post}А нужно мне это чтобы… {/post}{/quote} |
«Данные, введённые Вами в ячейку А2, не совместимы с данными, введёнными в ячейку Р5» + Юрия предложение. Кусочик примера. |
|
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Блин… С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Алексей… Не надо: Надо так: Пятница наверное, отдыхать пора. |
|
{quote}{login=Alex_ST}{date=10.09.2010 12:09}{thema=}{post} Склероз+переклин… 2. Я вас не запутывал. |
|
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Да, точно! С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
{quote}{login=Alex_ST}{date=10.09.2010 12:09}{thema=}{post}Мало того, что сам затупил, так ещё и Йодо запутал…{/post}{/quote} Моя реплика должна была, естественно, звучать так: Посыпаю голову пеплом и бьюсь лбом об стол (между «клавой» и мышкой, конечно). С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Ну вот, уезжаете и еще уважаемого EducatedFool обидели, хотя и ему пора отдыхать, переработался. |
|
Привет всем. Function Num2ABC(ByVal x As Long) As String Она работает в 25 раз быстрее, чем функция, основанная на Application.ConvertFormula. |
|
Somebody Пользователь Сообщений: 169 |
Узнаём имя 6-го столбца MsgBox Split(Cells(1, 6).Address, «$»)(1) P.S. Скорость не замерял |
В связи с проявленным интересом к этой теме ( http://programmersforum.ru/showthread.php?t=166788 ), выкладываю функцию для обратного преобразования, «заголовка столбца» в число. В кавычках, потому что диапазон возвращаемого числа не ограничен числом столбцов: ?ABC2Num(«a») Два варианта функции, один с разбором строки по символам, другой — через массив байт. Мой результат (Pentium M 1.6, WinXP, Office 2000): символы: 4,1875 Function ABC2Num(ByVal x As String) As Double Function ABC2Num2(x As String) As Double Sub test() |
|
nerv Пользователь Сообщений: 3071 |
Прошу прощения, а зачем оно может понадобиться?) Sub io() Sub io2() >>В кавычках, потому что диапазон возвращаемого числа не ограничен числом столбцов: |
egonomist Пользователь Сообщений: 409 |
для разнообразия немного изварщеный вариант Public Function xlsColName(j As Integer) As String osnova = 26 GoTo xlsColNameEnd xlsColNameError: End Function ‘Кол-во кругов GoTo xlsColIndexEnd xlsColIndexError: End Function |
VovaK Пользователь Сообщений: 1716 |
Нормальные герои всегда идут в обход |
tol64 Пользователь Сообщений: 99 |
А что означает (1) ? Посмотрел в справке функцию Split и не нашёл объяснения. Вот как можно было прийти к тому, что в конце нужно добавить (1), чтобы получить такое элегантное решение? ))) |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
В скобках порядковый номер элемента массива (отсчёт с нуля). |
Kuzmich Пользователь Сообщений: 7998 |
Cells(1, 6).Address будет $F$1 |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Ещё пример: |
tol64 Пользователь Сообщений: 99 |
#30 30.03.2012 19:25:52 Спасибо за примеры. То есть, если разделитель не указан, то в качестве разделителя выступает пробел, если он есть. Если же нет ни одного пробела, то в массиве один элемент. В качестве разделителей выступают любые указанные знаки. Правильно? Hello! My blog: TRADING WAY |
Содержание
- Поисковая функция в Excel
- Способ 1: простой поиск
- Способ 2: поиск по указанному интервалу ячеек
- Способ 3: Расширенный поиск
- Вопросы и ответы
В документах Microsoft Excel, которые состоят из большого количества полей, часто требуется найти определенные данные, наименование строки, и т.д. Очень неудобно, когда приходится просматривать огромное количество строк, чтобы найти нужное слово или выражение. Сэкономить время и нервы поможет встроенный поиск Microsoft Excel. Давайте разберемся, как он работает, и как им пользоваться.
Поисковая функция в Excel
Поисковая функция в программе Microsoft Excel предлагает возможность найти нужные текстовые или числовые значения через окно «Найти и заменить». Кроме того, в приложении имеется возможность расширенного поиска данных.
Способ 1: простой поиск
Простой поиск данных в программе Excel позволяет найти все ячейки, в которых содержится введенный в поисковое окно набор символов (буквы, цифры, слова, и т.д.) без учета регистра.
- Находясь во вкладке «Главная», кликаем по кнопке «Найти и выделить», которая расположена на ленте в блоке инструментов «Редактирование». В появившемся меню выбираем пункт «Найти…». Вместо этих действий можно просто набрать на клавиатуре сочетание клавиш Ctrl+F.
- После того, как вы перешли по соответствующим пунктам на ленте, или нажали комбинацию «горячих клавиш», откроется окно «Найти и заменить» во вкладке «Найти». Она нам и нужна. В поле «Найти» вводим слово, символы, или выражения, по которым собираемся производить поиск. Жмем на кнопку «Найти далее», или на кнопку «Найти всё».
- При нажатии на кнопку «Найти далее» мы перемещаемся к первой же ячейке, где содержатся введенные группы символов. Сама ячейка становится активной.
Поиск и выдача результатов производится построчно. Сначала обрабатываются все ячейки первой строки. Если данные отвечающие условию найдены не были, программа начинает искать во второй строке, и так далее, пока не отыщет удовлетворительный результат.
Поисковые символы не обязательно должны быть самостоятельными элементами. Так, если в качестве запроса будет задано выражение «прав», то в выдаче будут представлены все ячейки, которые содержат данный последовательный набор символов даже внутри слова. Например, релевантным запросу в этом случае будет считаться слово «Направо». Если вы зададите в поисковике цифру «1», то в ответ попадут ячейки, которые содержат, например, число «516».
Для того, чтобы перейти к следующему результату, опять нажмите кнопку «Найти далее».
Так можно продолжать до тех, пор, пока отображение результатов не начнется по новому кругу.
- В случае, если при запуске поисковой процедуры вы нажмете на кнопку «Найти все», все результаты выдачи будут представлены в виде списка в нижней части поискового окна. В этом списке находятся информация о содержимом ячеек с данными, удовлетворяющими запросу поиска, указан их адрес расположения, а также лист и книга, к которым они относятся. Для того, чтобы перейти к любому из результатов выдачи, достаточно просто кликнуть по нему левой кнопкой мыши. После этого курсор перейдет на ту ячейку Excel, по записи которой пользователь сделал щелчок.
Способ 2: поиск по указанному интервалу ячеек
Если у вас довольно масштабная таблица, то в таком случае не всегда удобно производить поиск по всему листу, ведь в поисковой выдаче может оказаться огромное количество результатов, которые в конкретном случае не нужны. Существует способ ограничить поисковое пространство только определенным диапазоном ячеек.
- Выделяем область ячеек, в которой хотим произвести поиск.
- Набираем на клавиатуре комбинацию клавиш Ctrl+F, после чего запуститься знакомое нам уже окно «Найти и заменить». Дальнейшие действия точно такие же, что и при предыдущем способе. Единственное отличие будет состоять в том, что поиск выполняется только в указанном интервале ячеек.
Способ 3: Расширенный поиск
Как уже говорилось выше, при обычном поиске в результаты выдачи попадают абсолютно все ячейки, содержащие последовательный набор поисковых символов в любом виде не зависимо от регистра.
К тому же, в выдачу может попасть не только содержимое конкретной ячейки, но и адрес элемента, на который она ссылается. Например, в ячейке E2 содержится формула, которая представляет собой сумму ячеек A4 и C3. Эта сумма равна 10, и именно это число отображается в ячейке E2. Но, если мы зададим в поиске цифру «4», то среди результатов выдачи будет все та же ячейка E2. Как такое могло получиться? Просто в ячейке E2 в качестве формулы содержится адрес на ячейку A4, который как раз включает в себя искомую цифру 4.
Но, как отсечь такие, и другие заведомо неприемлемые результаты выдачи поиска? Именно для этих целей существует расширенный поиск Excel.
- После открытия окна «Найти и заменить» любым вышеописанным способом, жмем на кнопку «Параметры».
- В окне появляется целый ряд дополнительных инструментов для управления поиском. По умолчанию все эти инструменты находятся в состоянии, как при обычном поиске, но при необходимости можно выполнить корректировку.
По умолчанию, функции «Учитывать регистр» и «Ячейки целиком» отключены, но, если мы поставим галочки около соответствующих пунктов, то в таком случае, при формировании результата будет учитываться введенный регистр, и точное совпадение. Если вы введете слово с маленькой буквы, то в поисковую выдачу, ячейки содержащие написание этого слова с большой буквы, как это было бы по умолчанию, уже не попадут. Кроме того, если включена функция «Ячейки целиком», то в выдачу будут добавляться только элементы, содержащие точное наименование. Например, если вы зададите поисковый запрос «Николаев», то ячейки, содержащие текст «Николаев А. Д.», в выдачу уже добавлены не будут.
По умолчанию, поиск производится только на активном листе Excel. Но, если параметр «Искать» вы переведете в позицию «В книге», то поиск будет производиться по всем листам открытого файла.
В параметре «Просматривать» можно изменить направление поиска. По умолчанию, как уже говорилось выше, поиск ведется по порядку построчно. Переставив переключатель в позицию «По столбцам», можно задать порядок формирования результатов выдачи, начиная с первого столбца.
В графе «Область поиска» определяется, среди каких конкретно элементов производится поиск. По умолчанию, это формулы, то есть те данные, которые при клике по ячейке отображаются в строке формул. Это может быть слово, число или ссылка на ячейку. При этом, программа, выполняя поиск, видит только ссылку, а не результат. Об этом эффекте велась речь выше. Для того, чтобы производить поиск именно по результатам, по тем данным, которые отображаются в ячейке, а не в строке формул, нужно переставить переключатель из позиции «Формулы» в позицию «Значения». Кроме того, существует возможность поиска по примечаниям. В этом случае, переключатель переставляем в позицию «Примечания».
Ещё более точно поиск можно задать, нажав на кнопку «Формат».
При этом открывается окно формата ячеек. Тут можно установить формат ячеек, которые будут участвовать в поиске. Можно устанавливать ограничения по числовому формату, по выравниванию, шрифту, границе, заливке и защите, по одному из этих параметров, или комбинируя их вместе.
Если вы хотите использовать формат какой-то конкретной ячейки, то в нижней части окна нажмите на кнопку «Использовать формат этой ячейки…».
После этого, появляется инструмент в виде пипетки. С помощью него можно выделить ту ячейку, формат которой вы собираетесь использовать.
После того, как формат поиска настроен, жмем на кнопку «OK».
Бывают случаи, когда нужно произвести поиск не по конкретному словосочетанию, а найти ячейки, в которых находятся поисковые слова в любом порядке, даже, если их разделяют другие слова и символы. Тогда данные слова нужно выделить с обеих сторон знаком «*». Теперь в поисковой выдаче будут отображены все ячейки, в которых находятся данные слова в любом порядке.
- Как только настройки поиска установлены, следует нажать на кнопку «Найти всё» или «Найти далее», чтобы перейти к поисковой выдаче.
Как видим, программа Excel представляет собой довольно простой, но вместе с тем очень функциональный набор инструментов поиска. Для того, чтобы произвести простейший писк, достаточно вызвать поисковое окно, ввести в него запрос, и нажать на кнопку. Но, в то же время, существует возможность настройки индивидуального поиска с большим количеством различных параметров и дополнительных настроек.
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
Описание
В этой статье приведены пошаговые инструкции по поиску данных в таблице (или диапазоне ячеек) с помощью различных встроенных функций Microsoft Excel. Для получения одного и того же результата можно использовать разные формулы.
Создание образца листа
В этой статье используется образец листа для иллюстрации встроенных функций Excel. Рассматривайте пример ссылки на имя из столбца A и возвращает возраст этого человека из столбца C. Чтобы создать этот лист, введите указанные ниже данные в пустой лист Excel.
Введите значение, которое вы хотите найти, в ячейку E2. Вы можете ввести формулу в любую пустую ячейку на том же листе.
A |
B |
C |
D |
E |
||
1 |
Имя |
Правитель |
Возраст |
Поиск значения |
||
2 |
Анри |
501 |
Плот |
Иванов |
||
3 |
Стэн |
201 |
19 |
|||
4 |
Иванов |
101 |
максималь |
|||
5 |
Ларри |
301 |
составляет |
Определения терминов
В этой статье для описания встроенных функций Excel используются указанные ниже условия.
Термин |
Определение |
Пример |
Массив таблиц |
Вся таблица подстановки |
A2: C5 |
Превышающ |
Значение, которое будет найдено в первом столбце аргумента «инфо_таблица». |
E2 |
Просматриваемый_массив |
Диапазон ячеек, которые содержат возможные значения подстановки. |
A2: A5 |
Номер_столбца |
Номер столбца в аргументе инфо_таблица, для которого должно быть возвращено совпадающее значение. |
3 (третий столбец в инфо_таблица) |
Ресулт_аррай |
Диапазон, содержащий только одну строку или один столбец. Он должен быть такого же размера, что и просматриваемый_массив или Лукуп_вектор. |
C2: C5 |
Интервальный_просмотр |
Логическое значение (истина или ложь). Если указано значение истина или опущено, возвращается приближенное соответствие. Если задано значение FALSE, оно будет искать точное совпадение. |
ЛОЖЬ |
Топ_целл |
Это ссылка, на основе которой вы хотите основать смещение. Топ_целл должен ссылаться на ячейку или диапазон смежных ячеек. В противном случае функция СМЕЩ возвращает #VALUE! значение ошибки #ИМЯ?. |
|
Оффсет_кол |
Число столбцов, находящегося слева или справа от которых должна указываться верхняя левая ячейка результата. Например, значение «5» в качестве аргумента Оффсет_кол указывает на то, что верхняя левая ячейка ссылки состоит из пяти столбцов справа от ссылки. Оффсет_кол может быть положительным (то есть справа от начальной ссылки) или отрицательным (то есть слева от начальной ссылки). |
Функции
LOOKUP ()
Функция Просмотр находит значение в одной строке или столбце и сопоставляет его со значением в той же позицией в другой строке или столбце.
Ниже приведен пример синтаксиса формулы подСТАНОВКи.
= Просмотр (искомое_значение; Лукуп_вектор; Ресулт_вектор)
Следующая формула находит возраст Марии на листе «образец».
= ПРОСМОТР (E2; A2: A5; C2: C5)
Формула использует значение «Мария» в ячейке E2 и находит слово «Мария» в векторе подстановки (столбец A). Формула затем соответствует значению в той же строке в векторе результатов (столбец C). Так как «Мария» находится в строке 4, функция Просмотр возвращает значение из строки 4 в столбце C (22).
Примечание. Для функции Просмотр необходимо, чтобы таблица была отсортирована.
Чтобы получить дополнительные сведения о функции Просмотр , щелкните следующий номер статьи базы знаний Майкрософт:
Использование функции Просмотр в Excel
ВПР ()
Функция ВПР или вертикальный просмотр используется, если данные указаны в столбцах. Эта функция выполняет поиск значения в левом столбце и сопоставляет его с данными в указанном столбце в той же строке. Функцию ВПР можно использовать для поиска данных в отсортированных или несортированных таблицах. В следующем примере используется таблица с несортированными данными.
Ниже приведен пример синтаксиса формулы ВПР :
= ВПР (искомое_значение; инфо_таблица; номер_столбца; интервальный_просмотр)
Следующая формула находит возраст Марии на листе «образец».
= ВПР (E2; A2: C5; 3; ЛОЖЬ)
Формула использует значение «Мария» в ячейке E2 и находит слово «Мария» в левом столбце (столбец A). Формула затем совпадет со значением в той же строке в Колумн_индекс. В этом примере используется «3» в качестве Колумн_индекс (столбец C). Так как «Мария» находится в строке 4, функция ВПР возвращает значение из строки 4 В столбце C (22).
Чтобы получить дополнительные сведения о функции ВПР , щелкните следующий номер статьи базы знаний Майкрософт:
Как найти точное совпадение с помощью функций ВПР или ГПР
INDEX () и MATCH ()
Вы можете использовать функции индекс и ПОИСКПОЗ вместе, чтобы получить те же результаты, что и при использовании поиска или функции ВПР.
Ниже приведен пример синтаксиса, объединяющего индекс и Match для получения одинаковых результатов поиска и ВПР в предыдущих примерах:
= Индекс (инфо_таблица; MATCH (искомое_значение; просматриваемый_массив; 0); номер_столбца)
Следующая формула находит возраст Марии на листе «образец».
= ИНДЕКС (A2: C5; MATCH (E2; A2: A5; 0); 3)
Формула использует значение «Мария» в ячейке E2 и находит слово «Мария» в столбце A. Затем он будет соответствовать значению в той же строке в столбце C. Так как «Мария» находится в строке 4, формула возвращает значение из строки 4 в столбце C (22).
Обратите внимание Если ни одна из ячеек в аргументе «число» не соответствует искомому значению («Мария»), эта формула будет возвращать #N/А.
Чтобы получить дополнительные сведения о функции индекс , щелкните следующий номер статьи базы знаний Майкрософт:
Поиск данных в таблице с помощью функции индекс
СМЕЩ () и MATCH ()
Функции СМЕЩ и ПОИСКПОЗ можно использовать вместе, чтобы получить те же результаты, что и функции в предыдущем примере.
Ниже приведен пример синтаксиса, объединяющего смещение и сопоставление для достижения того же результата, что и функция Просмотр и ВПР.
= СМЕЩЕНИЕ (топ_целл, MATCH (искомое_значение; просматриваемый_массив; 0); Оффсет_кол)
Эта формула находит возраст Марии на листе «образец».
= СМЕЩЕНИЕ (A1; MATCH (E2; A2: A5; 0); 2)
Формула использует значение «Мария» в ячейке E2 и находит слово «Мария» в столбце A. Формула затем соответствует значению в той же строке, но двум столбцам справа (столбец C). Так как «Мария» находится в столбце A, формула возвращает значение в строке 4 в столбце C (22).
Чтобы получить дополнительные сведения о функции СМЕЩ , щелкните следующий номер статьи базы знаний Майкрософт:
Использование функции СМЕЩ