Массивы из диапазона ячеек

Автор foxyra, 31 мая 2019, 02:42

0 Пользователи и 1 гость просматривают эту тему.

foxyra

Доброго времени суток!
Есть диапазон ячеек. К примеру от B2 до B10 (в столбик) в этих ячейках есть определенные значения .
Если еще одна ячейка к примеру D2 (она не входит в состав массива)в этой ячейке находится число.

задача
как мне создать массив или диапазон ячеек из B2 и B10,
чтобы в D2 вводить число, далее массив перебираем (ячейки) и ищет наличие совпадений.
ну и далее я буду писать выражение IF  и буду работать с ячейками которые совпали со одинаковым значением.

За ранее спасибо.

foxyra

Никто не знает как создать массив из ячеек? И перебрать его каким нибудь методом типо for.

economist

#2

Option VBASupport 1
Option Compatible
'-----------------------------------------------
Sub WorkWithRange()
' [B2:B10] - массив ячеек, т.н. Range (диапазон)
' [D2] - искомое значение
For each n in [B2:B10]
if [D2] = n then
 ' делаем что-то, если истинно
End if
Next
End sub


PS Забыл Next. Это VBA-код, который работает в StarBasic.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

foxyra

Option VBASupport 1
Option Compatible
'-----------------------------------------------
Sub WorkWithRange()
' [B2:B10] - массив ячеек, т.н. Range (диапазон)
' [D2] - искомое значение
For each n in [B2:B10]
if [D2] = n then
 ' делаем что-то, если истинно
End if
End sub

как сам массив объявить ?
и как закончить цикл For ?

Извините я в "Танке"

rami

Цитата: economist от 31 мая 2019, 08:06

Option VBASupport 1
Option Compatible
'-----------------------------------------------
Sub WorkWithRange()
' [B2:B10] - массив ячеек, т.н. Range (диапазон)
' [D2] - искомое значение
For each n in [B2:B10]
if [D2] = n then
  ' делаем что-то, если истинно
End if
End sub

А что это было ???

Цитата: foxyra от 31 мая 2019, 09:31как сам массив объявить ?
Sub Main
Dim oSheet 'объект листа
Dim oCellRange 'объект диапазона ячеек
Dim oDataArray 'массив массивов данных диапазона
Dim oCell 'объект ячейки

oSheet = ThisComponent.Sheets(0)
oCellRange = oSheet.getCellRangeByName("B2:B10")
oDataArray = oCellRange.DataArray()
oCell = oSheet.getCellRangeByName("D2")
For i=0 To UBound(oDataArray)
If oDataArray(i)(0)=oCell.value Then Print "Номер " + i, oDataArray(i)(0)
Next
End Sub

В данном случае объявлять массив не нужно, данные содержатся в объекте диапазона ячеек в виде массива массивов, просто извлекаем данные и перебираем в цикле.

foxyra

oSheet.getCellRangeByName("B2:B10")

ВОт она . Я не знал как обратиться к диапазону, я только знал как к именно координате обратиться .

У меня в редактор не дает после .точки вариантов , вот и парюсь

Спасибо всем большое ,ща проверять буду

foxyra

#6
Sub Main
Dim oSheet         'объект листа
Dim oCellRange      'объект диапазона ячеек
Dim oDataArray      'массив массивов данных диапазона
Dim oCell         'объект ячейки

oSheet = ThisComponent.Sheets(0)
oCellRange = oSheet.getCellRangeByName("B2:B10")
oDataArray = oCellRange.DataArray()
oCell = oSheet.getCellRangeByName("D2")
For i=0 To UBound(oDataArray)
If oDataArray(i)(0)=oCell.value Then Print "Номер " + i, oDataArray(i)(0) Показывает какое число совпало . А как обратиться к ячейке этого числа ?
Next
End Sub

Еще вопросик ,как обратиться к совпавшим ячейкам?
я так понимаю oDataArray(i).а дальше?

bigor

Цитата: foxyra от 31 мая 2019, 10:43Еще вопросик ,как обратиться к совпавшим ячейкам?
а что вы хотите с ними сделать? Можно все изменения внести в массив, а потом накатить его на диапазон ячеек

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

foxyra

я хочу менять цвет ячейки. Без диапазона работает , а с диапазоном только весь диапазон красит.

bigor

#9
Ищите по форуму, недавно была тема по раскраске ячеек слов в ячейках, если они равны.
еще варианты
1. можно по индексу массива, вычислить адрес ячейки
2. раз с данными вы ничего не делаете, можно вообще обойтись без массива и перебирать ячейки, сравнивать, раскрашивать
3. условное форматирование
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

foxyra

а просто к ячейке нельзя обратиться ? уже в if ?  выбрать диапазон(i) и потом путь к цвету?

bigor

Цитата: foxyra от 31 мая 2019, 11:26а просто к ячейке нельзя обратиться ? уже в if ?  выбрать диапазон(i) и потом путь к цвету?
это вариант 1 :)
доступ к ячейки по индексу массива как то так

oCellRange.getCellByPosition(0, i)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

foxyra

Все заработало спасибо ,огромное товарищи. Низкий Вам поклон.

foxyra

#13
а как можно покрасить фон ячейки соседней в строке в тот же цвет?

bigor

Цитата: foxyra от 31 мая 2019, 13:53
а как можно покрасить фон ячейки соседней в строке в тот же цвет?

т.е. те которые слева/справа? Они в диапазон не входят. Или расширять диапазон и тогда
можно обращаться к ним. Либо вариант 2 непосредственный перебор ячеек.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут