Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 След.
VBA сравнение элемента строкового массива с текстом
 
Уважаемый Jack Famous.
Подскажите лечится ли это Replace?
VBA сравнение элемента строкового массива с текстом
 
Уважаемый Jack Famous.

Благодарю Вас за ответ. Позвольте уточнить в каком именно окне и что именно написать?
Изменено: IgorBoot - 7 Окт 2019 12:13:39 (Был добавлен Скриншот)
VBA сравнение элемента строкового массива с текстом
 
Добрый день Уважаемые Эксперты.

Позвольте у Вас уточнить какой Путь Решения может быть у следующей проблемы.

Имеется текстовый файл в котором построчно записана следующая информация:
Код
Vasua
Petua
Vovua
Данный текстовый файл заносится в строковый массив построчно функцией Split:
Код
str1 = Split(CreateObject("Scripting.FileSystemObject").Getfile(File_Strok_Poiska).OpenasTextStream(1).ReadAll, vbLf)
Далее следует условная конструкция которая спрашивает, что делать если значение в str1(0) = "Vasua".
Но почему то конструкция не считает что значение взятое из массива равно Текстовому значению
По всей видимости есть некоторый нюанс, который необходимо знать при работе с текстовыми массивами берущими значения из текстовых файлов.

Непосредственно вариант кода:
Код
Sub Obrabotka()

Dim str1() As String
Dim PathFileName$

File_Strok_Poiska = "C:\Тест.txt"
str1 = Split(CreateObject("Scripting.FileSystemObject").Getfile(File_Strok_Poiska).OpenasTextStream(1).ReadAll, vbLf)   'Данный текстовый файл заносится в строковый массив построчно функцией Split

If str1(0) = "Vasua" Then
   MsgBox 1
End If
Stop
End Sub

Прошу помочь разобраться.

Благодарю Вас.
Макрос отключения условного форматирования на листе
 
Огромное спасибо Всем за Ответы.

Уважаемый Ігор Гончаренко, Вам отдельное Спасибо за пояснение.

Благодарю Вас всех
Изменено: IgorBoot - 11 Сен 2019 16:08:08
Макрос отключения условного форматирования на листе
 
Уважаемый Ігор Гончаренко, Благодарю Вас за ответ.

Я прошу прощения, я некорректно сформулировал, как удалить?
Макрос отключения условного форматирования на листе
 
Добрый день Уважаемые Эксперты.

Прошу у Вас уточнения, возможно ли программным способом отключить Условное Форматирование на листе?
По крайней мере в Excel 2010 есть возможность отключить УФ через удаление правил. Я хотел записать  код через Макрорекодер но на выходе получился пустой макрос.
Подскажите есть ли вообще способ отключения УФ на листе через VBA?

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

Прошу помочь разобраться.

Благодарю Вас
Работа с определенным столбом многомерного массива
 
Уважаемый Ігор Гончаренко и Уважаемый Sanja.
Благодарю Вас за ответы.
Спасибо Вам.
Работа с определенным столбом многомерного массива
 
Добрый День Уважаемые Эксперты.

Позвольте у Вас уточнить каким именно образом следует обращаться к определенному столбу многомерного массива?
Я посчитал, что подобную задачу можно выполнить следующим образом:
Код
Sub arr_Test()

Dim arr(), arr_mnogom()
Dim k As Integer

k = 73 ' контрольное значение

' //////       одномерный массив  ////

arr = Range(Cells(2, 2), Cells(11, 2))   ' пополнение одномерного массива из диапазона

stroka_v_massive = Application.Match(k, arr())  ' Расположение в массиве
        
' //////       одномерный массив  ////

arr_mnogom = Range(Cells(2, 7), Cells(11, 9))   ' пополнение многомерного массива из диапазона

stroka_v_massive = Application.Match(k, arr_mnogom()(, 3)) ' Расположение в массиве
      
End Sub
На строке:
Код
stroka_v_massive = Application.Match(k, arr_mnogom()(, 3)) ' Расположение в массиве
выходит ошибка Syntax Error. Что по все видимости говорит о несколько неверном моем понимании об обращении к третьему столбцу массива.

Вопроса будет два:
1) Возможно ли обращение к определенному столбцу массива?
2) Возможно ли без циклическим способом пополнить одномерный массив из многомерного?

Прошу прощения у модераторов, если Они посчитают, что вторая часть вопроса "Выходит за Рамки темы". Если подобный способ действительно существует это решит проблему. Но в любом случае если есть возможность непосредственно обратиться к определенному столбцу, то вторая часть вопроса уже не актуальна, но все равно познавательна.

Прошу помочь разобраться.

Благодраю Вас.
Изменено: IgorBoot - 10 Июл 2019 16:27:06
Динамический диапазон в квадратных скобках VBA
 
Уважаемый БМВ Здравствуйте.
Я уже заметил неверное название темы и поправил.
Динамический диапазон в квадратных скобках VBA
 
Добрый день Уважаемые Эксперты.

Подскажите пожалуйста возможно ли для т.н. называемых квадратных скобок примение динамических диапазонов.
Т.е. для примера. Строка:
Код
[I1] = 1
Позволит вывести в ячейку I1 значение равное 1. А существует ли метод который позволит склеить значение под динамический диапазон?
Да признаю была тема:
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=25765
Но к сожалению в ней я не обнаружил подходящего решения. Мои попытки склеить диапазон чуть ниже и в файле примера тоже:
Код
Sub Dinamic_Qvadrato_Scob()

'[I1] = 1
'["J1" & "1"] = 2   ' в Ячейке J1 находится "I"
'[J1 & 1] = 2
[J1 & "1"] = 2

End Sub
Все они к сожалению безрезультатны. Подскажите пожалуйста вообще возможно делать "склеивание" под динамические диапазоны?
И если возможно и это не слишком трудозатратно подскажите пожалуйста каким именно образом это можно делать?

Прошу помочь разобраться.

Благодарю Вас.
Изменено: IgorBoot - 6 Мар 2019 09:11:29
Номер строки массива при переборе метода For Each
 
Спасибо Всем за ответы.
Дисскусия привела довольно неожиданный поворот.
2 цикла так 2 цикла.
Код
Sub Test_Massib()

Dim a(), b1(), b2(), b3()

a = Range("S8:Y14")

Count = 0

For i = 1 To 7

  For j = 1 To 7
  
     If a(i, j) = 4 Then
     
       MsgBox i
       MsgBox j
     
     End If
  
  Next j

Next i

End Sub
Прошу прощения за первоначальный вопрос. Изначально я был уверен, что есть условно простой метод, который позволяет найти координату в массиве по условию.
Благодарю Всех за дисскусию.
Изменено: IgorBoot - 3 Мар 2019 22:16:37
Номер строки массива при переборе метода For Each
 
Уважаемые Ігор Гончаренко и БМВ  
Спасибо Вам за ответы.
Номер строки массива при переборе метода For Each
 
Добрый день Уважаемые Эксперты.

Позвольте у Вас уточнить как быть в следующем случае?
Перебираю массива Методов For Each  и хочу узнать по адрес и номер строки Массива по условию. Делаю я это следующим способом:
Код
Sub Test_Massib_1()
Dim myRow As Long
Dim a()

a = Range("S8:Y14")
Count = 0

For Each Element1 In a
   If Element1 = 4 Then
      'If Element1 = 4 Then myRow = Element1.Row
            
      'C = Element1.Address
      'Stop
      
      Count = Count + 1
      myRow = Element1.Row
      MsgBox myRow 
   End If
Next

MsgBox Count
End Sub
На строке:
Код
myRow = Element1.Row
процедура уходит на 424 ошибку.
Позвольте у Вас уточнить в чем кроется ошибка? Каким образом определить номер строки в массиве по условию.
Это возможно, если делать перебор методом For Each?

Прошу помочь разобраться.

Благодарю Вас.
Out of Memory при добавлении строк в код
 
Спасибо Всем за ответы.
Буду пробовать.
Спасибо.
Out of Memory при добавлении строк в код
 
Уважаемый Anchoret.
Благодарю за ответ. В течении недели файл отлаживался
В конкретно взятом файле, о котором идет речь в первом сообщении темы, запись кода впринципе отстутствовала.

Уважаемый vikttur.
Благодарю за ответ.
Поймите пожалуйста правильно.
Файл в достаточной степени громоздкий по содержанию и по "количеству кода". Такое  стало возникать во время отладки.
Почему именно я понять не могу.
Изменено: IgorBoot - 22 Фев 2019 14:06:30
Out of Memory при добавлении строк в код
 
Добрый день Уважаемые эксперты.
Может быть кто то сталкивался с подобной проблемой.
При попытке в рабочем файле в редакторе VBE внести дополнительную строку возникает ошибка "Out of Memory".
Я понимаю что ошибка сигнализирует о недостатке памяти. Но в решении проблем по этой ошибке, насколько я смог составить
свое суждение, Подобные ошибки возникают все-таки при компиляции, а не при попытке внести в код дополнительную строку.
Подобная ошибка возникает только в одном файле.
Файл относительно небольшой по вместимости (5 МБ) но все равно, с точки зрения правил форума,  выходит за уровень верхне-допустимой границы размещения.
Так вот была у кого нибудь это ошибка именно при попытке добавить в код дополнительные строки?

Благодарю Вас.
Пополнение массива из отфильтрованного диапазона
 
Добрый день Уважаемые Эксперты.

Позвольте у Вас уточнить возможно ли заполнение массива из отфильтрованного диапазона,
по технологии подобной следующей:
Код
A = Range("A2:A26").SpecialCells(xlCellTypeVisible)
В принципе массив заполняется, но только до наступления фильтра.
В кратце о диапазоне(диапазон довольно прост, в нем есть числа 1 2 3 4 5, каждое повторяется по 5 раз. Фильтром исключено число 4.
Вот мой вариант кода:

Код
Sub Popolnenie_Otfiltrovannym()
Dim A() As Variant

' Проверка копированием
Range("A2:A26").SpecialCells(xlCellTypeVisible).Copy
Range("H30").Select
ActiveSheet.Paste

' Проверка копированием
A = Range("A2:A26").SpecialCells(xlCellTypeVisible)[E30].Resize(UBound(A)).Value = A
End Sub
Копирование проходит правильно, а массив же заполняется только до наступления фильтра.
В общем подскажите массив вообще возможно заполнять методом :
Код
.SpecialCells(xlCellTypeVisible)
Если без дополнительных манипуляций не возможно тогда:
- или циклическое заполнение массива
- или предварительное копирование в другое место с отключением фильтра( или копирование на другой лист) с заполнением массива
- или помещение в массив всей базовой выборки с дальнейшей фильтрацией массива функцией Filter.

Прошу помочь разобраться.

Благодарю Вас.
VBA последний заполненный столбец в диапазоне.
 
Уважаемый Sceptic.

Вот это класс так класс. Спасибо Вам.


Уважаемый Sceptic, скажите, а зачем столько запятых?


Я понял почему, это пропуски остальных параметров функции Find
Изменено: IgorBoot - 14 Фев 2019 13:12:16
VBA последний заполненный столбец в диапазоне.
 
Уважаемый Kuzmich.

Благодарю Вас за ответ. Предложенное Вами решение к сожалению ищет последние заполненные на листе, а не в границах диапазона.
Все равно Спасибо Вам большое.


Уважаемый Михаил Лебедев.
Благодарю за наводку. обязательно изучу.
VBA последний заполненный столбец в диапазоне.
 
Уважаемый Михаил Лебедев.
Благодарю Вас за ответ.

Позвольте у Вас уточнить, где идет присвоение rng2? Я этого к сожалению не вижу.

VBA последний заполненный столбец в диапазоне.
 
Уважаемый Sanja.
Источник Вы указали правильно.))

Уважаемый Михаил Лебедев
Значения, ну т.е. константы.

И в принципе если к Range() ничего нельзя добавить, чтобы был адекватный поиск, т.е. уходить на циклы.
то решение я сам докумекаю.

Скажите мне пожалуйста можно все таки с помощью Range() в указанном диапазоне найти последние заполненные строки/столбцы или нет?
VBA последний заполненный столбец в диапазоне.
 
Еще раз Здравствуйте Уважаемые Эксперты.
Подскажите возможно ли вообще в Диапазоне найти последний заполненный столбец?
Не на листе а в диапазоне?
Я заимствовал с одного схожего сайта конструкцию и на основе ее соорудил следующий код:
Код
Sub Posl_stroka()

Dim rF As Range
Dim lLastRow As Long, lLastCol As Long

Set rF = Range("A5:J16").Find("*", , xlValues, xlWhole, xlPrevious)
   lLastRow = rF.Row    'последняя заполненная строка
   lLastCol = rF.Column 'последний заполненный столбец

MsgBox lLastRow
MsgBox lLastCol

End Sub
По его итогу последней строкой оказалось 7, а столбцом 1. Хотя "Глазами" видно что последний заполненный столбец это 8, а строка 9. Складывается такое ощущение, что дальше 1 столбца предложенный выше вариант не анализировал.
Прошу уточнить, возможно ли именно в диапазоне, т.е. в объекте Range(),  найти последнюю заполненную строку и столбец?
Если не возможно, то остаются только циклы?

Прошу помочь разобраться.

Благодарю Вас?
VBA. Как записать формулу с кавычками внутри?
 
Уважаемый  V. Спасибо Вам за ответ.
Опять я на эти Двойные кавычки попадаюсь)).

Уважаемый Sanja. Вам тоже спасибо за ответ.
Изменено: IgorBoot - 14 Фев 2019 12:24:33
VBA. Как записать формулу с кавычками внутри?
 
Добрый День Уважаемые Эксперты.

Подскажите пожалуйста такой момент. Имеется два схожих между собой варианта заполнения диапазонов через VBA:
Код
Sub Proverka_Formula_Local()
Range("B3:B8").FormulaLocal = "=ЕСЛИ((RC[-1]-R[-1]C[-1])<=R2C5;0;RC[-1])"   '1 случай
Range("B3:B8").FormulaLocal = "=ЕСЛИ((RC[-1]-R[-1]C[-1])<=R2C5;"";RC[-1])"  '2 случай
End Sub
В первом случае в случае не выполнения условия в ячейку добавляется 0. Во втором случае пустота.
Первый случай выполняется, второй уходит на ошибку 1004. Если вводить формулу из второго случая на листе, то она работает. А через VBA не почему то не хочет.
Подскажите что нужно изменить или добавить, чтобы отработал второй случай?

Прошу помочь разобраться.
Благодарю Вас.
Вывод массива на лист без циклическим способом
 
Уважаемый Nordheim Благодарю Вас за ответ.
Вы Правы, второй цикл не имеет вообще никакого назначения, он был для проверки правильности вывода.
Спасибо за предложенное решение. Впредь буду более грамотно работать с массивами.
Спасибо Вам.
Вывод массива на лист без циклическим способом
 
Уважаемый k61  Благодарю Вас за ответ.
Все работает. Transpose это ведь транспонирование?
Вывод массива на лист без циклическим способом
 
Добрый День Уважаемые Эксперты.

Подскажите пожалуйста есть ли способ вывести на лист массив заполненный с помощью цикла, без циклическим способом?
Вот пример небольшого кода:
Код
Sub Obmen_Massivami()

Dim Peremennaya_Massiva As Variant
Vsego_Elementov = 10
    
     ReDim Peremennaya_Massiva(1 To Vsego_Elementov)

For i = 1 To Vsego_Elementov
  Peremennaya_Massiva(i) = Cells(i, 1)
Next i

For i = 1 To Vsego_Elementov
   Cells(i, 3) = Peremennaya_Massiva(i)
Next i

[E1].Resize(UBound(Peremennaya_Massiva)).Value = Peremennaya_Massiva     

End Sub
Подскажите что нужно дописать к строке:
Код
[E1].Resize(UBound(Peremennaya_Massiva)).Value = Peremennaya_Massiva
Чтобы выводился весь заполненный первым циклом массив? А не только его Первое(Верхнее) значение.
Т.е. еще раз, как вывести на лист массив, не циклическим способом, но при этом заполненным с помощью цикла?
Или даже так, Есть объект Range(), к нему можно обратиться например так Range(Cells(1, 1), Cells(10, 1)), из этой записи понятно что объект Range обращается к диапазону (A1:A10), а как сделать подобное обращение в массиву и вывести на лист?

Прошу по возможности помочь разобраться.

Благодарю Вас.
Определение значения конкретной позиции массива
 
Уважаемый БМВ Благодарю Вас за ответ и пояснение.

Уважаемый Sanja Благодарю Вас за ответ  и предоставленные конструкции.
Определение значения конкретной позиции массива
 
Добрый день Уважаемы Эксперты.

Подскажите пожалуйста такой момент. Если идет заполнение массива из диапазона взятого на листе
по следующей технологии:
Код
Dim a As Variant
a = Range("A1:A10")
Подскажите в данном одномерном массиве возможно узнать что будет в значении a(5).
Точнее так, можно ли узнать значение определенного места(например a(5)) массива, если при этом массив заполняется не циклическим способом?
Код
Sub Massiv_Diap()

Dim a As Variant
a = Range("A1:A10")

Cells(1, 3) = a(5)

End Sub

И на строке:
Код
Cells(1, 3) = a(5)
получил ошибку Subscrip out of range. Видимо не прав, или в синтаксисе или это вообще не возможно.
Прошу прощения за название темы лучше пока не придумал.

Прошу помочь разобраться.


Благодарю Вас.
Циклическое перемещение диапазона с помощью массивов VBA
 
Вот что я хотел в итоге:
Код
Sub Maassive()

Dim A As Variant

   Nom_grup = 3
     ReDim A(1 To Nom_grup)

'A = Range("F4:G9")

'Range("I4:J9") = A

 k = 3
 m = 3
 
Shag_cikla2 = Nom_grup
Nom_grup = 0

For i = 1 To Shag_cikla2
    
    k = k + 1
    Nom_grup = Nom_grup + 1
    'A(Nom_grup) = Range("F4:G5")
    A(Nom_grup) = Range("F" & Cells(k, 3) & ":G" & Cells(k, 4))
    
Next i

Shag_cikla2 = Nom_grup
Nom_grup = 0

For i = 1 To Shag_cikla2

   m = m + 1
   Nom_grup = Nom_grup + 1

   'Range("I4:J9") = A(Nom_grup)
   Range("I" & Cells(m, 3) & ":J" & Cells(m, 4)) = A(Nom_grup)

Next i

End Sub
Спасибо Всем за участие
Изменено: IgorBoot - 2 Фев 2019 17:49:58
Страницы: 1 2 3 4 5 След.
Наверх