Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

6 Март 2021, 17:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Массивы из диапазона ячеек  (Прочитано 3910 раз)
0 Пользователей и 1 Гость смотрят эту тему.
foxyra
Участник
**
Offline Offline

Сообщений: 24


« Стартовое сообщение: 31 Май 2019, 02:42 »

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

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

За ранее спасибо.
« Последнее редактирование: 31 Май 2019, 03:01 от foxyra » Записан
foxyra
Участник
**
Offline Offline

Сообщений: 24


« Ответ #1: 31 Май 2019, 07:53 »

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

Сообщений: 1 396


« Ответ #2: 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
Next
End sub

PS Забыл Next. Это VBA-код, который работает в StarBasic.
« Последнее редактирование: 31 Май 2019, 17:17 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
foxyra
Участник
**
Offline Offline

Сообщений: 24


« Ответ #3: 31 Май 2019, 09:31 »

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
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #4: 31 Май 2019, 10:00 »

Код:
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
А что это было Непонимающий

как сам массив объявить ?
Код:
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
Участник
**
Offline Offline

Сообщений: 24


« Ответ #5: 31 Май 2019, 10:11 »

oSheet.getCellRangeByName("B2:B10")

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

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

Спасибо всем большое ,ща проверять буду
Записан
foxyra
Участник
**
Offline Offline

Сообщений: 24


« Ответ #6: 31 Май 2019, 10:43 »

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).а дальше?
« Последнее редактирование: 31 Май 2019, 10:57 от foxyra » Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 066


« Ответ #7: 31 Май 2019, 10:57 »

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

Записан

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

Сообщений: 24


« Ответ #8: 31 Май 2019, 11:03 »

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

Пол: Мужской
Сообщений: 1 066


« Ответ #9: 31 Май 2019, 11:06 »

Ищите по форуму, недавно была тема по раскраске ячеек слов в ячейках, если они равны.
еще варианты
1. можно по индексу массива, вычислить адрес ячейки
2. раз с данными вы ничего не делаете, можно вообще обойтись без массива и перебирать ячейки, сравнивать, раскрашивать
3. условное форматирование
« Последнее редактирование: 31 Май 2019, 11:08 от Bigor » Записан

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

Сообщений: 24


« Ответ #10: 31 Май 2019, 11:26 »

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

Пол: Мужской
Сообщений: 1 066


« Ответ #11: 31 Май 2019, 12:10 »

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

 
Код:
oCellRange.getCellByPosition(0, i)
Записан

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

Сообщений: 24


« Ответ #12: 31 Май 2019, 12:44 »

Все заработало спасибо ,огромное товарищи. Низкий Вам поклон.
Записан
foxyra
Участник
**
Offline Offline

Сообщений: 24


« Ответ #13: 31 Май 2019, 13:53 »

а как можно покрасить фон ячейки соседней в строке в тот же цвет?
« Последнее редактирование: 31 Май 2019, 14:02 от foxyra » Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 066


« Ответ #14: 31 Май 2019, 17:06 »

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

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

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!