Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 2)

Автор: nick7inc
Дата сообщения: 14.08.2007 23:06
ol7ca
Используй что-то вроде:
Application.WorksheetFunction.Min(myRange)
где Min() - англоязычный аналог руссской функции МИН()

А конкретно по вопросу - вот, что я нашёл в поиске:

Цитата:
подскажите аналог вункции ВПР в VBA.
[...]
application.worksheetfunction.vlookup
На будущее.
Найди в папке с Офисом файл funcs.xls. Открой. И вопросы твои исчезнут.

Взято здесь.
Автор: PavelO
Дата сообщения: 14.08.2007 23:26
Всем привет. Мои вопросы касаются всех продвинутых пользователей VBA
1. Почему через следующий код не выдает имя заголовка окна?

Declare Function WindowFromPoint Lib "user32.dll" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Declare Function GetCursorPos Lib "user32.dll" (lpPoint As POINTAPI) As Long
Declare Function GetActiveWindow Lib "user32.dll" () As Long
Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, lpRect As Rect) As Long
Declare Function Rectangle Lib "gdi32.dll" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function GetCursor Lib "user32.dll" () As Long
Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Type Rect
left As Long
top As Long
right As Long
bottom As Long
End Type

Type POINTAPI
x As Long
y As Long
End Type

Private Sub CommandButton1_Click()
Dim mousepos As POINTAPI
Dim wintext As String, slength As Long
Dim hwnd As Long
Dim retval As Long
Dim titlebar As String

SendKeys "%{TAB}", True

retval = GetCursorPos(mousepos)
hwnd = WindowFromPoint(mousepos.x, mousepos.y)
If hwnd = 0 Then
MsgBox "Çäåñü íè÷åãî íåò."
End
End If
Dim r As Rect

retval = GetWindowRect(hwnd, r)

Sheets(1).Cells(1, 1) = r.right
Sheets(1).Cells(2, 1) = r.left
Sheets(1).Cells(3, 1) = r.bottom
Sheets(1).Cells(4, 1) = r.top
titlebar = String$(256, " ")
slength = GetWindowText(hwnd, titlebar, 255)
titlebar = left$(titlebar, InStr(titlebar, vbNullChar) - 1)
Sheets(1).Cells(5, 1) = titlebar
End Sub
Автор: CEMEH
Дата сообщения: 15.08.2007 00:13
У меня вопрос вот какого плана:
Каким образом в VBA использовать формулы не для записи в ячейки, а для вычислений внутри VBA
Одно дело записать в ячейку A1 =СЦЕПИТЬ(A2;A3)
а мне надо присвоить значение переменной AAA = СЦЕПИТЬ (значения ячеек а2;а3)
по всякому пробовал, что то программа ругается...

Т е мне надо производить вычисления не используя листы книги.
Автор: SERGE_BLIZNUK
Дата сообщения: 15.08.2007 08:04
CEMEH

Цитата:
мне надо присвоить значение переменной AAA = СЦЕПИТЬ (значения ячеек а2;а3)
А попробуй так:
AAA = Cells(2, "A").Value & Cells(3, "A").Value
Автор: Troitsky
Дата сообщения: 15.08.2007 10:59
PavelO

Цитата:
Почему через следующий код не выдает имя заголовка окна?

Выдает, но только в тех случаях, когда при нажатии кнопки курсор находится над окном, имеющим заголовок. А ведь при нажатии кнопки активным становится окно, в котором курсор может находиться над неизвестно каким элементом (тоже, по сути, являющимся окном), у которого, в свою очередь, заголовка по определению может и не быть.

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

Да и что то я не пойму с какой целью твой код вообще может быть применен?


Добавлено:
CEMEH

Цитата:
Каким образом в VBA использовать формулы не для записи в ячейки, а для вычислений внутри VBA

см. Application.WorksheetFunction
Автор: StdNet
Дата сообщения: 15.08.2007 11:48
Доброго дня. Подскажите как работать с SQL запросами. Мне нада что бы юзер ввел в ячейки данные, а они подставились в запрос и запрос выполнился и заполнил лист данными.
запорс создан как хранимая процедура на sql сарвере. как передать параметр нигде немогу найти инфу
Прошу сильно не ругать так как делаю только первые шаги в работе экселя с sql
Автор: jeep
Дата сообщения: 16.08.2007 14:23
Здравствуйте!
У меня такая вот проблема. Есть прога на вба. Эта прога делает вот что.
Она берет и складывает в определ папке определенный диапазон во всех книгах в этой папке.
те
книга1 лист1 диапазон1
+
книга2 лист1 диапазон1
+....
Вот кода


Private Sub CommandButton1_Click()
Dim fp As String
fp = Trim(UserForm1.TextBox1.Value)
Dim wb As Variant
Dim str As String
Dim arr() As Variant
Dim rng As Range
Dim buf As Variant
Dim ws As Variant
Dim strref As String
'Ïîëó÷àåì ñ ôîðìû äèàïàçîí ñêëàäûâàåìûõ ÿ÷ååê, êîòîðûå áóäóò ñëîæåíû âî âñåõ êíèãàõ
strref = RefEdit1.Value

Set rng = Worksheets(1).Range(strref)

ReDim arr(0 To rng.Rows.Count - 1, 0 To rng.Columns.Count - 1)
For i = 0 To ListBox1.ListCount - 1

str = fp + Trim(ListBox1.Column(0, i))
Set wb = Workbooks.Open(str)
Set rng = Worksheets(1).Range(strref)
For k = 0 To rng.Columns.Count - 1
For j = 0 To rng.Rows.Count - 1
arr(j, k) = arr(j, k) + rng(j + 1, k + 1)
Next j
Next k

wb.Close
Next i
ThisWorkbook.Activate
RefEdit1.SetFocus
Set rng = Range(RefEdit1.Value)
For k = 0 To rng.Columns.Count - 1
For j = 0 To rng.Rows.Count - 1
rng(j + 1, k + 1) = arr(j, k)
Next j
Next k

End Sub

Проблемный код здесь Set rng = Worksheets(1).Range(strref).
Странно, что когда писал код IntellySence не определили Range.
Пишет Application-defined or object-defined error
Как это лечить?

Автор: Oyger
Дата сообщения: 16.08.2007 15:48
Ребята.
Предположим в Excel'е открыто книг 10. В каждой мин. по 5 листов. На листе куча строк - сейчас около 200 (и продолжает расти). В каждой строке формулы (много).
Я запускаю макрос который обрабатывает только одну книгу. В начале макроса отключаю пересчет формул командой Application.Calculation=xlCalculationManual. По окончании - включаю Application.Calculation=xlCalculationAutomatic.
А теперь, внимане, вопросы:
1) Той ли командой я отключаю/включаю автоматический пересчет ячеек? Если это не та команда, то что делает эта и какая команда правильная?
2) Если я при данном условии отключу пересчет ячеек, а потом его включу, то Excel будет пересчитывать все формулы на всех книгах или только на тех, с которыми работал макрос?
Спасибо.

Добавлено:
StdNet

А SQL запрос где? Точнее в чем: access или что-то другое?
Автор: ri
Дата сообщения: 17.08.2007 03:43
Здравствуйте! Помогите пожалуйста реализовать следующую вещь:
есть некая таблица в ячейках которой находится число и сделан комментарий, нужно как-то просканировать все ячейки данной таблицы и создать табличку вида "комментарий" | "сумма цифр в ячейке с таким комментарием". Говорят должно быть не слишком сложно, в vba ничего никогда еще не делал...
Автор: Anton T
Дата сообщения: 17.08.2007 09:41
Список содержит набор строк и столбец, создает новая книга и вставляет данных из списки.


Код:
Private Sub CommandButton1_Click() 'создать отчет
Dim XL As Object
Dim WB As Workbook
Dim WS As Worksheet

Set XL = CreateObject("excel.application")
Set WB = XL.Workbooks.Add
Set WS = WB.Worksheets(1)

Dim rw As Long
Dim cl As Long

rw = ListBox1.ListCount
cl = ListBox1.ColumnCount

WS.Range(WS.Cells(1, 1), WS.Cells(rw, cl)) = ListBox1.List
WS.Cells.EntireColumn.AutoFit
WS.Cells(1, 1).Select
XL.Visible = True
End Sub
Автор: SERGE_BLIZNUK
Дата сообщения: 17.08.2007 11:44
ri

Цитата:
есть некая таблица в ячейках которой находится число и сделан комментарий, нужно как-то просканировать все ячейки данной таблицы и создать табличку вида "комментарий" | "сумма цифр в ячейке с таким комментарием".


вот решение вашей задачи - [more= модуль ScanAndSumComments]

Не забудьте проставить Ваши строчки и столбы в секциях, где задаётся исходная и итоговая таблица!


Код:
Sub ScanAndSumComments()
Dim pComments As New Scripting.Dictionary
Dim i, iRow, RowFirst, rowLast, RowItogFirst As Long
Dim vEntry As String
Dim ColComment, ColQ, ColItogComment, ColItogQ As String

' ---------------- Исходная таблица ----------------
ColComment = "A" ' исходный столбец, в котором комментарии
ColQ = "B" ' исходный столбец, в котором числа
RowFirst = 6 ' строчка, где начинаются комментарии (первая строка исходной таблицы)

rowLast = 13 ' строчка, где заканчиваются комментарии (последняя строка исходной таблицы)
' в принципе последнюю строчку легко определять автоматически -
' но в постановке задачи такого не было

' ---------------- итоговая таблица ----------------
ColItogComment = "F" ' итоговый столбец, куда результат - список комментариев
ColItogQ = "G" ' итоговый столбец, куда результат - сумма
RowItogFirst = 2 ' строчка, куда начинать писать итоги


For iRow = RowFirst To rowLast
vEntry = CStr(Cells(iRow, ColComment).Value)
If Not pComments.Exists(vEntry) Then
pComments.Add vEntry, Cells(iRow, ColQ).Value
Else
' TempSum = pComments.Item(vEntry)
pComments.Item(vEntry) = pComments.Item(vEntry) + CDbl(Cells(iRow, ColQ).Value)
End If
Next iRow

For i = 0 To pComments.Count - 1
Cells(i + RowItogFirst, ColItogComment).Value = pComments.Keys(i)
Cells(i + RowItogFirst, ColItogQ).Value = pComments.Items(i)
Next i


End Sub
Автор: aks_sv
Дата сообщения: 17.08.2007 12:30
Подскажите как сделать, чтобы при открытии формы с элементом Календарь устанавливаласть текущая дата?

Добавлено:

Цитата:
Подскажите как сделать, чтобы при открытии формы с элементом Календарь устанавливаласть текущая дата?

Оказалось просто:

Код: Private Sub UserForm_Initialize()
Calendar1.Value = Now
End Sub
Автор: Oyger
Дата сообщения: 17.08.2007 15:22
Люди. Halp'те мне. Ну очень надо! Комп не выдерживает нагрузки...
Вопрос от 16:48 16-08-2007
Автор: vasiliy74
Дата сообщения: 17.08.2007 15:31
Oyger
я далеко не гуру, вот список может поможет...
Автор: SERGE_BLIZNUK
Дата сообщения: 17.08.2007 15:33
Oyger

Цитата:
Application.Calculation=xlCalculationManual

ну, раз никто не отвечает, значит нечего сказать!!!!!!!
я бы сказал, что Вы всё делаете правильно.
(я бы ещё добавил
Application.ScreenUpdating = False
...
Application.ScreenUpdating = True
но, подозреваю, что Вы и так это сделали...)

может алгоритм обработки можно оптимизировать...

а по поводу включения расчётов - пересчитает Excle данные или нет - надеюсь, что да (причём, скорее всего все - потому что никто не будет фиксировать, что и где Вы меняли!!)
может быть, Вам вообще не включать автоматический пересчёт?!

Автор: vasiliy74
Дата сообщения: 17.08.2007 15:40
aks_sv
а что такое форма календарь? в какой версии*?
Автор: Oyger
Дата сообщения: 17.08.2007 16:07
SERGE_BLIZNUK

Цитата:
а по поводу включения расчётов - пересчитает Excle данные или нет - надеюсь, что да (причём, скорее всего все - потому что никто не будет фиксировать, что и где Вы меняли!!)
может быть, Вам вообще не включать автоматический пересчёт?!


То, что после включения пересчета Excel пересчитывает формулы - однозначно. Почти на 100% был уверен, что везде, но на всякий случай решил спросить (в частности ждал и твоего мнения).
Вся фишка в чем:
Человек написал макрос. Сейчас человека нет (отпуск) - я за него. А макрос открывает книги и пошел работать. Он изменяет, пересчитывает, изменяет, пересчитывает, изменяет........ И так много-много раз. Первый пересчет ячеек происходит быстренько, второй - помедленнее. И, наконец, ближе к концу он просто тормозится на простом удалении столбца. Может ты об этом знаешь. Выглядит так:
В цикле задано удаление столбца в зависимости он содержимого ячейки в этом столбце. Иначе - пропуск. Так вот, он заходит на удаление и... стоп. Причем стоп не системный, а просто... Жмешь Ctrl + Break и выбираем Debug. Вываливаемся в окно макроса, где желтой строй строчкой показано, что он "висит" на удалении. Причем курсор мигает и потдается движениям всего секунды 2. Потом он проподает и никакой реакции при нажатии на "обычные" клавиши и переключения окон. Выводится из такого состояния чегез Ctrl + Break и Debug. Но опять на две секунды.
Теперь идем дальше. Жмем Ctrl + Break и Contine. Хоп - столбец удалился и снова "висим". Жмем еще Ctrl + Break и Contine - удалился следующий. Таким образом этот цикл можно проскачить... Дальше идет само, но раз в 1000 медленнее чем обычно. Копирование книги приходится ждать ух сколько...
Потом напарываемся на удаление столбцов в другой книге и все повторяется...

Мой диагноз - нехватает ему памяти - системного ресурса. Но беда вся в том, что Calculation и так уже отключен... Что делать. Приму любую помощь.
Автор: Kafka17
Дата сообщения: 17.08.2007 17:47

Цитата:
Мой диагноз - нехватает ему памяти - системного ресурса. Но беда вся в том, что Calculation и так уже отключен... Что делать. Приму любую помощь.

Скиньте кусок кода на котором он висит, с 2-3 строчками до и после.
Автор: SERGE_BLIZNUK
Дата сообщения: 17.08.2007 19:18
Oyger

Цитата:
А макрос открывает книги и пошел работать. Он изменяет, пересчитывает, изменяет, пересчитывает, изменяет........ И так много-много раз.

надеюсь, что макрос запускается руками и никак не связан с пересчётом ячеек??? (к событиям книги он не привязан?!!)
и второй вопрос - что означает "много-много раз"??? Это какая-то рекурсия? Или интерактивный алгоритм?...
и правда, привидите пример кода...
Автор: ri
Дата сообщения: 18.08.2007 10:57
SERGE_BLIZNUK

Цитата:
вот решение вашей задачи - модуль ScanAndSumComments


Почти самое оно! Вот только данные и комментарий находятся в одной ячейке (комментарий записан по "правая кнопка мыши->добавить комментарий"). Каким образом их можно просканировать, и можно ли? И вывести в таком виде как в предложенном вами примере, ага.
Автор: SERGE_BLIZNUK
Дата сообщения: 18.08.2007 14:26
ri
Цитата:
комментарий записан по "правая кнопка мыши->добавить комментарий").

1) Сразу предупреждать надо!
2) если у Вас русский Excel, то там не "добавить комментарий", а
"Добавить примечание", так?!..

но можно и так - [more= переделанный ScanAndSumComments]

не забудьте поправить секцию "Исходная таблица" - занести Ваш столбец, начальную и конечную строки исходного диапазона


Код: [no]
Sub ScanAndSumComments()
Dim pComments As New Scripting.Dictionary
Dim i, iRow, RowFirst, rowLast, RowItogFirst As Long
Dim vEntry As String
Dim ColSource, ColItogComment, ColItogQ As String

' ---------------- Исходная таблица ----------------
ColSource = "B" ' исходный столбец, в котором числа (и комментарии)
RowFirst = 2 ' строчка, где начинаются комментарии (первая строка исходной таблицы)

rowLast = 7 ' строчка, где заканчиваются комментарии (последняя строка исходной таблицы)
' в принципе последнюю строчку легко определять автоматически -
' но в постановке задачи такого не было

' ---------------- итоговая таблица ----------------
ColItogComment = "F" ' итоговый столбец, куда результат - список комментариев
ColItogQ = "G" ' итоговый столбец, куда результат - сумма
RowItogFirst = 2 ' строчка, куда начинать писать итоги


For iRow = RowFirst To rowLast
If Cells(iRow, ColSource).Comment Is Nothing Then
' ну нет тут примечания
vEntry = "_no-comments_"
Else
vEntry = Cells(iRow, ColSource).Comment.Text
End If
If Not pComments.Exists(vEntry) Then
pComments.Add vEntry, Cells(iRow, ColSource).Value
Else
pComments.Item(vEntry) = pComments.Item(vEntry) + CDbl(Cells(iRow, ColSource).Value)
End If
Next iRow

For i = 0 To pComments.Count - 1
Cells(i + RowItogFirst, ColItogComment).Value = pComments.Keys(i)
Cells(i + RowItogFirst, ColItogQ).Value = pComments.Items(i)
Next i

End Sub
[/no]
Автор: ri
Дата сообщения: 18.08.2007 16:58
SERGE_BLIZNUK


Цитата:
1) Сразу предупреждать надо!
2) если у Вас русский Excel, то там не "добавить комментарий", а
"Добавить примечание", так?!..


Ой, простите пожалуйста, да, оно самое, то что надо было. вставил - работает!
Единственное, не могу найти как мне сделать цикл не только по строкам но и по столбцам - чтобы обрабатывался не только столбец В как в примере, а диапазон от В до F.


Автор: SERGE_BLIZNUK
Дата сообщения: 18.08.2007 18:41
ri

Цитата:
мне сделать цикл не только по строкам но и по столбцам - чтобы обрабатывался не только столбец В как в примере, а диапазон от В до F.

итоговая таблица одна на все столбцы иди для каждого столбца своя?

p.s. а что, Вас Спасибо не учили говорить?.. Или это принципиальная позиция?...
Автор: CEMEH
Дата сообщения: 18.08.2007 23:40
Подскажите, в чем ошибка?

SSS = ComboBox1
TTT = Application.WorksheetFunction.Value(Right(SSS, 5))' =ЗНАЧЕН(ЛЕВСИМВ(SSS,5)
Cells(1, 3).Value = TTT

ругается...
Run-time error '438':
Object doesn't support this property or method
Автор: SERGE_BLIZNUK
Дата сообщения: 19.08.2007 01:07
CEMEH
к своему стыду вынужден заметить, что я абсолютно не умею пользоваться элементами управления (кто подскажет кинжку или url, где это толково разжёвано?..)

но, как мне кажется, Вы забыли, что Вам нужно у ComboBox определённое свойство,
может быть так:
SSS = ComboBox1.Text

И ещё,
1) если вам нужно брать часть строки -
то есть прекрасные функции Mid(), Left(), Right() - и не надо дёргать WorksheetFunction
TTT = Right(SSS, 5)
2) Не знаю, важно ли,но в комментариях справа из строки получаются 5 символов слева...
Автор: ri
Дата сообщения: 19.08.2007 03:22
SERGE_BLIZNUK


Цитата:
итоговая таблица одна на все столбцы иди для каждого столбца своя?


одна на все столбцы


Цитата:
p.s. а что, Вас Спасибо не учили говорить?.. Или это принципиальная позиция?...


И в мыслях не было вас таким образом обидеть!
Вы уже помогли мне сделать то, что, к сожалению, вот уже год я делаю вручную
Спасибо!
Автор: CEMEH
Дата сообщения: 19.08.2007 08:17
SERGE_BLIZNUK
С данным примером работает Left(), но мне придется все равно использовать формулы и вот уже четвертый день не найду хелпа по их использованию
Автор: SERGE_BLIZNUK
Дата сообщения: 19.08.2007 09:56
ri

Цитата:
итоговая таблица одна на все столбцы

[more=макрос]
ну тогда так...
ещё я добавил пропуск пустых ячеек... хотя, может эта проверка и не была нужна...

Код:
Sub ScanAndSumComments()
Dim pComments As New Scripting.Dictionary
Dim i, iRow, RowFirst, rowLast, RowItogFirst As Long
Dim iCol, ColSourceFirst, ColSourceLast As Long
Dim vEntry As String
Dim ColItogComment, ColItogQ As String

' ---------------- Исходная таблица ----------------
ColSourceFirst = 2 ' вместо - "B" исходный столбец, в котором числа (и комментарии)
ColSourceLast = 4 ' а это столбец "D"
RowFirst = 2 ' строчка, где начинаются комментарии (первая строка исходной таблицы)

rowLast = 7 ' строчка, где заканчиваются комментарии (последняя строка исходной таблицы)
' в принципе последнюю строчку легко определять автоматически -
' но в постановке задачи такого не было

' ---------------- итоговая таблица ----------------
ColItogComment = "F" ' итоговый столбец, куда результат - список комментариев
ColItogQ = "G" ' итоговый столбец, куда результат - сумма
RowItogFirst = 2 ' строчка, куда начинать писать итоги

For iCol = ColSourceFirst To ColSourceLast
For iRow = RowFirst To rowLast
If Not IsEmpty(Cells(iRow, iCol)) Then
If Cells(iRow, iCol).Comment Is Nothing Then
' ну нет тут примечания
vEntry = "_no-comments_"
Else
vEntry = Cells(iRow, iCol).Comment.Text
End If
If Not pComments.Exists(vEntry) Then
pComments.Add vEntry, Cells(iRow, iCol).Value
Else
pComments.Item(vEntry) = pComments.Item(vEntry) + _
CDbl(Cells(iRow, iCol).Value)
End If
End If
Next iRow
Next iCol

For i = 0 To pComments.Count - 1
Cells(i + RowItogFirst, ColItogComment).Value = pComments.Keys(i)
Cells(i + RowItogFirst, ColItogQ).Value = pComments.Items(i)
Next i

End Sub
Автор: CEMEH
Дата сообщения: 19.08.2007 11:18
SERGE_BLIZNUK
Да какие там шутки! Я по англицки не силен..
приходится использовать формулы на листах (в ячейка) но это не есть гуд. Формул немяряно и после каждого "ввод" начинается пересчет всех формул на листах. (Успеваю за это время покурить). Отключить автоматическое вычисление тоже не катит - есть и промежуточные вычисления в формулах в ячейках. Выход только один - использовать формулы в коде VBA вот и осваиваю Application.WorksheetFunction
задача элементарная:
переменная А = формула(данные из ячеек)
формулы будут всякие: счётесли, поискпоз, индекс и т. д
о соответствии имен руск/англ уже в курсе.
Автор: SERGE_BLIZNUK
Дата сообщения: 19.08.2007 11:39
CEMEH

Цитата:
Да какие там шутки! Я по англицки не силен..

дай угадаю - а Вас оригинальный офис на АНГЛИЙСКОМ языке?!
понятно... ;-(
просто вот, что даёт мой офис - стандартная справка:
по [more=СЧЁТЕСЛИ]
СЧЁТЕСЛИ

См. также

Подсчитывает количество ячеек внутри диапазона, удовлетворяющих заданному критерию.

Синтаксис

СЧЁТЕСЛИ(диапазон;критерий)

Диапазон — диапазон, в котором нужно подсчитать ячейки.

Критерий — критерий в форме числа, выражения или текста, который определяет, какие ячейки надо подсчитывать. Например, критерий может быть выражен следующим образом: 32, "32", ">32", "яблоки".

Заметки

Microsoft Excel предлагает дополнительные функции, которые можно применять для анализа данных с использованием условий. Например, для вычисления суммы значений, попадающих в интервал, заданный текстовой строкой или числами, используйте функцию СУММЕСЛИ. Для получения формулы, возвращающей в зависимости от выполнения условия одно из двух значений, например вознаграждение по указанному объему продаж, используйте функцию ЕСЛИ.

Пример

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

Инструкции

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


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

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

1
2
3
4
5
A B
Данные Данные
яблоки 32
апельсины 54
персики 75
яблоки 86
Формула Описание (результат)
=СЧЕТЕСЛИ(A2:A5;"яблоки") Количество ячеек с «яблоки» в приведенном выше первом столбце (2)
=СЧЕТЕСЛИ(B2:B5;">55") Количество ячеек со значением выше 55 в приведенном выше втором столбце (2)
[/more]
по [more=ПОИСКПОЗ]
ПОИСКПОЗ

См. также

Возвращает относительное положение элемента массива , который соответствует указанному значению в указанном порядке. Функция ПОИСКПОЗ используется вместо одной из функций ПРОСМОТР, когда требуется позиция элемента в диапазоне, а не сам элемент.

Синтаксис

ПОИСКПОЗ(искомое_значение;просматриваемый_массив;тип_сопоставления)

Искомое_значение — значение, используемое при поиске значения в таблице.

Искомое_значение — это значение, которое сопоставляется со значениями в аргументе просматриваемый_массив. Например, при поиске номера в телефонной книге имя абонента указывается в качестве искомого значения, а требуемым значением будет номер телефона.

Искомое_значение может быть значением (числом, текстом или логическим значением) или ссылкой на ячейку, содержащую число, текст или логическое значение.

Просматриваемый_массив — непрерывный интервал ячеек, возможно, содержащих искомые значения. Просматриваемый_массив может быть массивом или ссылкой на массив.

Тип_сопоставления — число -1, 0 или 1. Тип_сопоставления указывает, как Microsoft Excel сопоставляет искомое_значение со значениями в аргументе просматриваемый_массив.

Если тип_сопоставления равен 1, то функция ПОИСКПОЗ находит наибольшее значение, которое меньше либо равно, чем искомое_значение. Просматриваемый_массив должен быть упорядочен по возрастанию: ..., -2, -1, 0, 1, 2, ..., A-Z, ЛОЖЬ, ИСТИНА.

Если тип_сопоставления равен 0, то функция ПОИСКПОЗ находит первое значение, которое в точности равно аргументу искомое_значение. Просматриваемый_массив может быть не упорядочен.

Если тип_сопоставления равен -1, то функция ПОИСКПОЗ находит наименьшее значение, которое больше либо равно чем искомое_значение. Просматриваемый_массив должен быть упорядочен по убыванию: ИСТИНА, ЛОЖЬ, Z-A, ..., 2, 1, 0, -1, -2, ..., и так далее.

Если тип_сопоставления опущен, то предполагается, что он равен 1.

Заметки

ПОИСКПОЗ возвращает позицию соответствующего значения в аргументе просматриваемый_массив, а не само значение. Например: ПОИСКПОЗ("б";{"а";"б";"в"};0) возвращает 2 — относительную позицию буквы "б" в массиве {"а";"б";"в"}.
ПОИСКПОЗ не различает регистры при сопоставлении текстов.
Если функция ПОИСКПОЗ не находит соответствующего значения, то возвращается значение ошибки #Н/Д.
Если тип_сопоставления равен 0 и искомое_значение является текстом, то искомое_значение может содержать знаки шаблона: звездочку (*) и знак вопроса (?). Звездочка соответствует любой последовательности знаков, знак вопроса соответствует любому одиночному знаку.
Пример

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

Инструкции

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


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

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

1
2
3
4
5
A B
Произведение Количество
Бананы 25
Апельсины 38
Яблоки 40
Груши 41
Формула Описание (результат)
=ПОИСКПОЗ(39;B2:B5;1) Так как точного соответствия нет, возвращается позиция ближайшего меньшего элемента (38) диапазона B2:B5. (2)
=ПОИСКПОЗ(41;B2:B5;0) Позиция числа 41 в диапазоне B2:B5. (4)
=ПОИСКПОЗ(40;B2:B5;-1) Возвращает сообщение об ошибке, т. к. диапазон B2:B5 упорядочен по возрастанию (а не по убыванию). (#Н/Д)

[/more]
я не знаю, в каком файле хранится справка по функциям Excel, иначе, можно было бы его выложить в сеть...
но вы обращайтесь - в принципе, по указанным Вами функциям я могу распечать справку в PDf и выложить в сеть...



Добавлено:

нашёл, в каком файле -
XLMAIN11.CHM 2,834 K 09.10.03
нужен?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.