Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Почему меньшая дата больше большей?
 
Добрый день Уважаемые Знатоки Excel.

Позвольте у Вас уточнить нюансы сортировки формата Дата/Время.

Насколько я помню в Excel нет как такого формата Дата/Время.
Поэтому не ясны до конца нюансы сортировки.

В приложенном файле имеется столбец вида Дата/Время.
Столбец отсортирован с помощью Сводной таблицы.

В строке 24 и 25 столбца А (выделено желтым) имеется спорный момент:

- 24 строка:
01.01.2021   18:59:00
- 25 строка
01.01.2021   6:46:00
С точки зрения Экселя 25 строка больше чем 24, проверка выполнена в ячейке C27.

Хотя так не должно быть.
Будьте добры подскажите как корректно сортировать подобный формат Даты/времени.

Благодарю Вас.
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

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

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

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

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

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

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

Позвольте у Вас уточнить каким именно образом следует обращаться к определенному столбу многомерного массива?
Я посчитал, что подобную задачу можно выполнить следующим образом:
Код
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.07.2019 16:27:06
Динамический диапазон в квадратных скобках 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 - 06.03.2019 09:11:29
Номер строки массива при переборе метода 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 при добавлении строк в код
 
Добрый день Уважаемые эксперты.
Может быть кто то сталкивался с подобной проблемой.
При попытке в рабочем файле в редакторе 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 последний заполненный столбец в диапазоне.
 
Еще раз Здравствуйте Уважаемые Эксперты.
Подскажите возможно ли вообще в Диапазоне найти последний заполненный столбец?
Не на листе а в диапазоне?
Я заимствовал с одного схожего сайта конструкцию и на основе ее соорудил следующий код:
Код
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. Как записать формулу с кавычками внутри?
 
Добрый День Уважаемые Эксперты.

Подскажите пожалуйста такой момент. Имеется два схожих между собой варианта заполнения диапазонов через 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 не почему то не хочет.
Подскажите что нужно изменить или добавить, чтобы отработал второй случай?

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

Подскажите пожалуйста есть ли способ вывести на лист массив заполненный с помощью цикла, без циклическим способом?
Вот пример небольшого кода:
Код
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), а как сделать подобное обращение в массиву и вывести на лист?

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

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

Подскажите пожалуйста такой момент. Если идет заполнение массива из диапазона взятого на листе
по следующей технологии:
Код
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
 
Добрый день Уважаемые Эксперты.

Прошу помочь разобраться в следующем вопросе.
У наc имеется диапазон  Range("F4:G9")
Подскажите пожалуйста как с помощью массивов в три захода его перенести в соседний диапазон Range("I4:J9")?
Под речевым оборотом в три захода, я имею ввиду естественно цикл. Т.е. если у нас массив размерностью 6х2 (6 строк Х 2 столбца), то по задумке желательно, чтобы
присваивание шло в переменные массива 2х2 (2 строки и 2 столбца). Координаты начала и конца каждой строки распологаются в диапазоне Range("C4:D6")
Вообщем вот мой вариант:
Код
Sub Maassive()
Dim A As Variant
   Nom_grup = 3
     ReDim A(1 To Nom_grup)

 k = 3
 m = 3

For i = 1 To Nom_grup
    
    k = k + 1
    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

   Nom_grup = Nom_grup + 1
   m = m + 1
   Range("I" & Cells(m, 3) & ":J" & Cells(m, 4)) = A(Nom_grup)

Next i

End Sub
По факту выполнения данного кода заполнятся только диапазон  Range("I8:J9"), т.е. тот A(Nom_grup), при котором Nom_grup = 3.
Соответственно, а как собственно говоря необходимо дополнить или видоизменить данный код, чтобы A() при Nom_grup = 1 и 2, тоже заполнялись?
на свои места, т.е.  Range("I4:J5") и Range("I6:J7")?
Признаю что формулировку проблемы вряд ли можно отнести к разряду удачных, за это отдельно прошу прощения.
Попробую попроще, как диапазон(6Х2) с помощью трех массивов(2Х2) перенести в соседний диапазон с помощью VBA.

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

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

Подскажите пожалуйста как в Экселе с помощью VBA подсчитать выделенные листы?
Только количество. Притом даже если есть функция которая считает именно выделенные листы, прошу указать как это сделать перебором.
Мой вариант:
Код
Sub Podchet_Vydelennyh()

   Vsego_Listov = Worksheets.Count

  For i = 1 To Vsego_Listov

    If Sheets(i).Selection = True Then

       Count_Selestion = Count_Selection + 1
    
    End If

  Next i

MsgBox Count_Selestion

End Sub
На вот этой строке:
Код
If Sheets(i).Selection = True Then
Процедура уходит на 438 ошибку. Что говорит, о том что критерий выделено/не_выделено определяется иным образом.
Как именно я к сожалению сказать не могу.

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

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

Как более старшие и опытные товарищи помогите пожалуйста советом.

Для работы некоторых макросов, необходимо "Циклическое выполнение всей процедуры".
Я имею ввиду прописанные в теле процедуры примерно такой конструкции:
Код
Application.OnTime Now() + TimeSerial(0, 0, 1), "Sub_Name" ' где Sub_Name - Имя процедуры
Подскажите пожалуйста, какие есть способы остановки макросов, с подобным циклическим обращением ко всей процедуре?. Кроме прерывания.
Точнее даже так, если макрос который содержит подобную конструкцию вывести на кнопку, то чтобы его остановить, можно ли обойтись этой кнопкой.
Вообщем будьте добры для начала ответьте каким образом можно останавливать подобные процедуры.

P.S. Прошу прощения перед Админами и старожилами, за отсутствие файла примера. Файла пример не создал, поскольку нет понимания как его сделать. И заранее прошу прощения за название темы, лучше в голову не пришло. Я постараюсь насколько возможно оставаться в рамках темы.

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

Благодарю Вас.
Изменено: IgorBoot - 11.01.2019 20:33:49
VBA. Применение Indirect в стиле R1C1
 
Добрый день Уважаемые Эксперты.

Прошу помочь разобраться в нюансах вывода функции Indirect(двссыл) с помощью VBA на лист.
Есть файл пример, и есть предполагаемая конструкция, которая работает на листе, но в VBA подсвечивается красным,
я так полагаю для стиля R1C1 есть свой отличительный нюанс, который я по всей видимости не знаю.
Сама конструкция вот:
Код
Cells(6, 7).FormulaR1C1 = "=Indirect("RC[-3]",False)"
В редакторе VBE данная строка подсвечивается красным, почему именно подсвечивается красным я сказать к сожалению не могу. Сама конструкция показана в ячейке Cells(7, 7).

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

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

Подскажите пожалуйста, в VBA в принципе возможно склеить название переменной из двух составляющих?
И если да, то подскажите пожалуйста каким образом это можно сделать.
Я когда пробовал получил что то вроде этого:
Код
Sub test()

i = 1
Count1 = 2
'"Count" & i= 2
'a = "Count" & i

If Count1 = CStr(Count & i) Then
If Count1 = Count & i Then
'If Count1 = a Then

  MsgBox 1
  
End If

End Sub
В If я так и не зашел. Как я понимаю, то чтобы VBA воспринимал получившуюся "склейку" не просто как текст, а как переменную, то нужно еще что то прописать?
Или все иначе можно сделать? А вообще можно так делать(Склеивать названия одной переменной из двух составляющих)?

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

Благодарю.
Динамические десятичные числа для Evaluate
 
Добрый день Уважаемые эксперты.

Что то я зачастил в последнее время.
Позвольте у Вас уточнить такой нюанс работы с таким замечательным инструментом как Evaluate, а именно работу с десятичными числами.
т.е. у Нас есть десятичное число = 0,6, и отражено оно в ячейке С2, тип ячейки при этом процентный.

Пробуя решить возникшую проблему я уже понял, что VBA в целом и Evaluate в частности воспринимает десятичные числа, с разделителем в виде точки.
Это будет отражено в файле примере.

Вообщем вот код:
Код
Sub Desyatichnye_chisla()

Dim Chislo As Double

Chislo = Cells(2, 3)

  
  If Evaluate("If(C2=0.6, 1, 0)") = 1 Then
        
     MsgBox 1
           
  End If
  
  
  'If Evaluate("If(C2=" & Chislo & ", 1, 0)") = 1 Then
  'If Evaluate("If(C2=" & Cells(2, 3) & ", 1, 0)") = 1 Then
   If ["If(C2=" & Cells(2, 3) & ", 1, 0)"] = 1 Then
        
     MsgBox 2
           
  End If

End Sub
в первый If программа заходит, т.е. MsgBox выдает 1, а во второй не заходит.

В итоге подскажите, или как привести число вида "0,6" к виду "0.6", чтобы VBA при этом воспринимал как число.
Или как подружить вид "0,6" с Evaluate.
Или другой вариант, но по возможности в рамках Evaluate.

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

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

Позвольте  у Вас уточнить. Каким образом можно получить динамический диапазон для конструкции типа Evaluate.
А если быть более точным нюансы синтаксиса конструкций с применением  Evaluate, когда используется Амперсант.

На днях я спрашивал на форуме про поиск наибольшего по условию. Я получил много ответов, и все были хороши, но в абсолютнейшем большинстве они были формулами Excel.
Короче ближе к делу.
Имеются два столбца
1) столбец 1  - числа от 1 до 4, это номер группы
2) Столбец 2  - произвольные числа

Непроходимо, методами VBA найти первое наибольшее для 2 группы, прописав при этом динамические массивы.
Я подумал что это можно сделать таким кодом:
Код
Sub Naibolshiy()

KolVo_vsego = 20    ' всего строк
Nom_grup = 2        ' характерное число из 1 столбца
i = 1               ' Наибольшее по счету

  B = [LARGE(If(A1:A & KolVo_vsego & = & Nom_grup &,B1:B & KolVo_vsego), i)]  ' Формула с динамическими данными
  
  C = [LARGE(If(A1:A20=2,B1:B20), 1)]                                         ' Формула со статическими данными
  
Cells(27, 6) = B

Cells(28, 6) = C

End Sub
Формула со статическими данными работает прекрасно, но с динамическими никак. Получается ошибка Error 2015.
Судя по всему данная ошибка характерна для синтаксической ошибки в наборе формулы.
В общем. Прошу разъяснить как правильно надо склеивать диапазоны для Evaluete.
И если не трудно прошу разъяснить особенности т.н. формул массива и  Evaluete.

Ну а если вдруг динамические данные для  Evaluete недопустимы (что вряд ли), то прошу помочь с конструцией для VBA которая ищет наибольшее значение по условию. Притом желательно без вывода на лист формулы.

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

Благодарю.
Изменено: IgorBoot - 19.12.2018 14:53:58
Определение номера строки со вторым наибольшим значением
 
Добрый вечер Уважаемые Эксперты.

Помогите с решением следующей проблемы.
У нас имеется два столбца:
1) это номер группы( от 1 до 4)
2) это произвольное число

Необходимо с Помощью  VBA найти второе наибольшее значение из второго столбца,  при условии, что номер группы, т.е значение на аналогичной строке первого столбца, равно 1.
Изначально я предположил, что работоспособными могут оказаться следующие конструкции:
Код
Cells(5, 6) = [Large(If((A:A)=F1,(B:B))*Row(A:A),2)]

Cells(5, 6) = [Large(If((A:A)=F1,(B:B)),2)*Row(A:A)]
Но в первом случае я получил 0, а во втором -30, т.е. просто наибольшее второе значение.
Т,е. я бы хотел получить номер строки, Наибольшего второго значения из второго столбца, при условии, что в первом столбце значение равно 1.

Прошу помочь разобраться.
Благодарю.

UPD.   Я не уточнил, что значения могут повторяться, т.е. просто Индекс-->ПоискПоз сработать не получиться
Изменено: IgorBoot - 16.12.2018 22:38:50
Вставка формулы массива через VBA
 
Добрый вечер Уважаемые Эксперты.

К своему большому стыду не смог самостоятельно разобраться, с тем как с помощью VBA выносить на лист, в диапазон ячеек т.н. формулы массива.
Это даже несмотря на то, что на этом и аналагичных ресурсах подобная проблематика поднималась и показывались некоторые решения.
Итак, у нас имеются три столбца:
- Первый столбец содержит номер текущей строки.
- Второй столбец содержит последовательный набор чисел от 1 до 4, с повторениями, будем считать что это номер участка
- Третий столбец содержит некоторый произвольный набор чисел.
Помимо этого у нас имеется вспомогательная ячейка
- Cells(4, 5) - вспомогательный максимум для столбца с текущими строками
И два столбца для поиска максимума по условию, один на листе, другой на VBA
- Четвертый столбец - Максимум по условию написанные на листе
- Пятый столбец - Максимум по условию написанные с помощью VBA
Формула для  максимума на листе выглядит следующим образом:
Код
{=МАКС(ЕСЛИ(ДВССЫЛ("R10C[-5]:R"&R4C5&"C[-5]";ЛОЖЬ)=RC[-1];ДВССЫЛ("R10C[-4]:R"&R4C5&"C[-4]";ЛОЖЬ)))}
Данная формула на листе работает, к ней притензий нет.
И формула максимума с помощью VBA:
Код
Range(Cells(13, 8), Cells(16, 8)).FormulaArray = "=MAX(IF(INDIRECT(""R10C[-5]:R""&R4C5&""C[-5]"";FALSE)=RC[-1];INDIRECT(""R10C[-4]:R""&R4C5&""C[-4]"";FALSE)))"
При компиляции программы на этой строке выдается ошибка 1004.
Причины мне к сожалению не ясны. И если быть предельно честным, мне не удалось даже значительно более простую формулу массива поместить просто в ячейку используя VBA.

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

Благодарю.
Изменено: IgorBoot - 13.11.2018 22:41:37
Внесение формулы с ДВССЫЛ на лист с помощью VBA
 
Добрый вечер Уважаемые Эксперты.

Подскажите пожалуйста нюанс для работы непосредственно с функцией ДВССЫЛ, когда имеется необходимость вставить ее в определенное место на листе с помощью VBA.

У нас имеется два столбца:
- Первый столбец содержит номер текущей строки.
- Второй столбец содержит некоторый произвольный набор чисел.
- Cells(4, 5) - вспомогательный максимум
- Cells(6, 5) - основной максимум
- Cells(8, 5) - основной максимум  выполненный с помощью VBA
Формула для основного максимума выглядит следующим образом:
Код
=МАКС(ДВССЫЛ("R10C[-3]:R"&R4C5&"C[-3]";ЛОЖЬ))
Формула для основного максимума выполненный с помощью VBA следующим образом:
Код
Cells(8, 5) = "=МАКС(ДВССЫЛ("R10C[-3]:R"&R4C5&"C[-3]";ЛОЖЬ))"
Я не знаю точно причину, но в редакторе VBE, строка подсвечена красным, что по всей видимости говорит о наличии некой синтаксической ошибки.
Позвольте уточнить каким образом стоит составить подобную конструкцию, чтобы ее можно было вывести через VBA

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

Благодарю
Изменено: IgorBoot - 12.11.2018 23:14:55
VBA. Получение текстового файла с помощью двух других текстовых файлов
 
Добрый день Уважаемые Эксперты.

Позвольте у Вас уточнить оптимальный способ решения  следующей задачи.
Имеется два текстовых файла "Донор1.txt" и "Донор2.txt", которые являются выдержками кодов, содержание которых будет чуть ниже.
В них имеются определенные закоментированные строки, а именно "'Маяк". Данная строка есть в каждом файле.
Необходимо в файл "Сборка.txt" построчно последовательно переписывать данные из файла "Донор2.txt" до тех пор пока не встретиться строка значение которой будет равно  "'Маяк". В случае если данная строка встретилась, то перейти в файл "Донор1.txt"  и искать вхождения строки  "'Маяк", и как нашли построчно последовательно переписывать данные из файла "Донор2.txt" в файл "Сборка.txt" , далее возращаемся на то же место в файле "Донор2.txt", и построчно последовательно переписывать данные в файл "Сборка.txt", до следуюещго значения  "'Маяк", где как и ранее переходим в файл "Донор1.txt" на место предыдущей остановки. С возратом к месту предыдущей остановки могут быть определенные трудности.

Файл "Донор1.txt":
Скрытый текст
Файл "Донор2.txt":
Скрытый текст
Мой вариант данного макроса:
Скрытый текст
Я отдаю себе отчет что, данный код довольно далек для решения описанной выше задачи, в нем есть как минимум затрудения  в плане возращения к определенным строкам. Когда я его запустил, то получил ошибку: "File Already Open", При попытке открыть файл  "Донор2.txt".

Для понимания того что я хочу увидеть после отработки макроса я прикладываю, то что должно быть в файле "Сборка.txt":
Код
Sub Poisk_Znach()

'___//////\\\\\\\______//////\\\\\\\______


' Ситуация 1


If Situation = 1 Then    ' Действия в Ситуации 1

'Маяк
 a = 44 

Else

'Маяк
 a = 45 

End If

'___//////\\\\\\\______//////\\\\\\\______

' Ситуация 2

If Situation = 1 Then  ' Действия в Ситуации 2

'Маяк
 a = 46 

Else

'Маяк
 a = 47 

End If

'___//////\\\\\\\______//////\\\\\\\______

End Sub

Если вдруг кто то знает как копировать определенные куски текстового файла(т.е. определенные строки), и потом вставлять куски в определенные места(т.е. в определенную строку) другого текстового файла, будьте добры подскажите. Эту задачу подобным образом тоже можно решить.

Прошу помочь разобраться.
Благодарю Вас.
Изменено: IgorBoot - 11.11.2018 14:59:33
Подсчет пробелов до первого символа в строке текстового файла. VBA
 
Добрый день Уважаемые Эксперты.

Прошу помочь разобрать в ситуации когда необходимо подсчитать количество пробелов, перед первым символом в определенной строке текстового файла.
Имеется текстовый файл, который содержит небольшую выдержку из кода. Вот его содержимое:
Код
   
   If Arrive > 5 Then    
                 
        Away = 1
        
   End If 

Для подсчета пробелов, в строке содержащей "Away" я решил использовать функцию Instr, и следующий код:
Код
Sub Podschet_Probelov()
  Dim s$()
 
  Open "C:\Подсчет_пробелов.txt" For Input As #1
  s = Split(Input(LOF(1), 1), vbCrLf, Cells(6, 4)) 'Cells(6, 4) - общее количество строк в файле
  Close #1
  
   vi = Cells(4, 4)              ' номер строки в которой считаем
   a = InStr(1, s(vi), "Away")   ' подсчитываем пробелы
   Cells(10, 4) = a              ' помещаем результат в ячейку  
   
End Sub    
Есть определенная особенность, в строке которая содержит "Away", пробелы идут не последовательно друг за другом, а в некоторых местах через несколько позиций.
Непосредственно буква "А" в слове в строке, согласно данным редактора NotePad++ занимает 11 колонку
Предложенный мной макрос считает только 5, т.е. он пропускает те места где идет "перескок" пробелов.

Вопрос, при данных условиях, расположения слова и предварительных пробелов, возможно ли макросом произвести подсчет начала текста по факту его расположения, т.е. 11 колонка или 11 отступов/пробелов от начала строки.

И я хотел бы извиниться перед модераторами за возможное нарушение правил форума, но может быть в текстовом редакторе, в том же NotePad++, есть какая-то встроенная или дополнительная функция, которая по всему тексту съедает эти перенесенные пробелы оставляя при этом слово на том же самом месте?
Прошу еще раз прощения за этот вопрос.

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

Благодарю Вас
Изменено: IgorBoot - 15.10.2018 12:00:00
VBA. Замена в текстовом файле слова на определенной позиции
 
Добрый Вечер Уважаемые Эксперты.

Прошу помочь разобраться в следующей ситуации.
Имеется текстовый файл состоящий из 10 строк. Строки будут приведены чуть ниже и в файле приложения.  Среди этих строк есть 3 повторения одного слова, а именно слова "Стальной". Так вот я не могу понять каким именно образом нужно организовать адресную замену. Т.е. Замену слова "Стальной" на слово- конструкцию "Стальной5" конкретно на 7-ой строке текстового файла? Я использовал для этого функцию Replace и цикл перебор по файлу,  что опять же будет отражено чуть ниже.
Так же я бы хотел уточнить, как, пользуясь функцией Replace, брать информацию о замене с Листа?  Т.е. грубо говоря "взять часть данных из ячейки" или "склеить". Я использовал следующую схему:
Код
ks = Replace(s, "Стальной", "Стальной" & Cells(4, 5))
Собственно содержимое Текстового файла:
Код
Бетонный
Стеклянный
Стальной
Деревянный
Гранитный
Сборнобетонный
Стальной
Чугунный
Композитный
Стальной
И попытка сделать код:

Код
 Sub Zamena1()
  Dim s, ks As String, v As Variant, i As Long, l As Long
  Dim y As Integer
  Open "C:\Тест_Замена.txt" For Input As #1
  s = Input(LOF(1), 1)
  y = 0
  Close #1
  v = Split(s, vbCrLf)
  Open "C:\Тест_Замена.txt" For Append As #2
  For i = 0 To UBound(v) - l
    
    y = y + 1
    s = v(i)
    
   If y = 7 Then
   
    ks = Replace(s, "Стальной", "Стальной" & Cells(4, 5))
    v(i) = ks
    'Print v(i), s
    Print #2, s
    
   End If
  Next
  Close #2
End Sub
Прошу прощения в коде комментариев описывающих переменные нет, но код вроде не очень большой.

UPD.
Собственно маленькая Ремарочка, данная схема переменной присвоения присваивает значение "Стальной" и добавляет его в конце файла, я же хочу увидеить на 7 строке значение "Стальной5".

Прошу помочь разобраться.
Благодарю Вас.
Изменено: IgorBoot - 11.10.2018 17:37:53
VBA: автозаполнения динамического массива в рамках одного столбца.
 
Добрый день Уважаемые Эксперты.

Будьте Добры подскажите способ автозаполнения динамического массива в рамках одного столбца.
На просторах Мировой Сети Интернет я обнаружил подобную конструкцию:
Код
[A1:A10] = "=Row()": [A1:A10] = [A1:A10].Value
В рамках статического массива подобная конструкция работает великолепно. Но лично я не смог самстоятельно разобраться с синтаксисом, когда необходимо, данную конструкцию "Одинамичить".
Под неологизмом "Одинамичить", я подразумеваю заменить номер строки на динамический, во второй части обозначения массива. Лично я предположил что есть возможность пойти по пути аналога функции "Двссыл", а именно функции "INDIRECT".  И составил следующую конструкцию :
Код
[Application.INDIRECT("A1:A"& Cells(4, 5))] = "=Row()": [Application.INDIRECT("A1:A"& Cells(4, 5))] = [Application.INDIRECT("A1:A"& Cells(4, 5))].Value
На что резонно получил ответ Run-Time error 424 Object Required
Какой именно объект не найден я сказать к сожалению не могу. Так же как не могу сказать, как наиболее оптимально производить автозаполнение в VBA.

P.S. Я знаю о возможности прописать цикл перебора, но на больших количествах он (перебор) к сожалению долговат.

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

Подскажите пожалуйста в чем проблема?
Требуется найти максимум по двум условиям.
В приложении к сообщению будет файл в котором 3 столба
1) Это последовательный порядковый номер ( именно в нем ищем максимум).
2) Номер участка (Один из столбцов для отработки условия).
3) Время совершения операции (Один из столбцов для отработки условия).

Ячейки I4 и I3 контрольные условия.

Мне необходимо найти Максимум в столбце А:А, в случае если последнее вхождение на участке до 4 (1, 2, 3, 4), и время было больше чем  12:17:04.
Соответсвенно я предположил что формула будет выглядеть следующим образом:
Код
=МАКС(ЕСЛИ(((B2:B18)<=I4)*И((C2:C18)>=I3);A2:A18))

Я попробовал как в обычном исполнении так и формулу массива (это отражено в файле).
Глазами видно что правильный ответ по описанному условию будет 13.
Но судя по всему я где то ошибся в написании формулы. Потому что ответ Экселя
- 0 для формулы массива
- 17 для обычной формулы

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

Порой в экселе приходится сталкиваться с несовсем стандартными задачами.
В частности, бывает необходимо найти максимум по условию.
В файле примера есть два столба:
-  Массив (А1:А11) буквенное обозначение,
-  Массив (Б1:Б11) некое случайное число.
-  Ячейка F1 значение "Б", контрольное значение

на странице в версии 2010, наиболее удобно это сделать следующей формулой:
Код
{=МАКС(ЕСЛИ((A1:A11)=F1;B1:B11))}

Вопрос как формулу описанную чуть выше записать в VBA?
Я предположил, что наиболее верно это сделать следующим образом:
Код
Cells(5, 4) = [WorksheetFunction.Max(WorksheetFunction.If(Range("A1:A11")=Cells(1, 6), Range("B1:B11"))]
На что в ячейке D5 получил ответ "#ЗНАЧ!". Что говорит о моей ошибке.
Прошу помочь разобраться.

Благодарю Вас.
Изменено: IgorBoot - 11.07.2018 18:36:50
Не работает маркер автозаполнения Excel
 
Добрый день Уважаемые Эксперты.
Прошу помочь разобраться с ситуацией с которой ранее не приходилось сталкиваться.
При попытке совершить Автозаполнение методом нажатия на "Маркер" ничего не происходит.
Ранее!!, Такой проблемы никогда не было.
Т.е. например в ячейку А1 и А2 помещяется значение 5, в ячейку А20 тоже помещяется значение 5, и
при выделении ячеек А1 и А2 вместе, с последующим нажатием на маркер следовало автозаполнение
ряда, до ячейки А19.
Если для ответа на вопрос нужна версия Excel, то версия Excel 2010.

P.S. Уважаемые Модераторы, файл не стал прикреплять по причине того, что есть определенная уверенность
в том, что проблема в сбитии персональных настроек Excel на моем ПК. Т.е., своим файлом я могу ввести в заблуждение
других пользователей, т.к. они открыв его и выполнив это растягивание ошибки не найдут.
Благодарю
Изменено: IgorBoot - 26.05.2018 12:44:45
VBA: выбор по двум критериям
 
Добрый день Уважаемые Эксперты.
Будьте добры подскажите наиболее оптимальный путь решения описанной ниже проблемы.
имеются два ряда чисел по 10 единиц в каждом и два контрольных значения
1)  Ряды А1:А10 и В1:В10
2)  Контрольные значения D2 и D4.
Небходимо по контрольным значениям отобрать номер строки  в рядах.
В ячейке G2 имеется формула массива:
Скрытый текст

Которая в рамках "Обычного Экселя" прекрасно решает данную  задачу.
НО. Задачу по возможности нужно решить посредством VBA.
Поскольку это часть цикла на некоторое количество итераций.
Код
Sub Two_crit()

a = Range("D2")
b = Range("D4")
c = Range("A1:A10")
d = Range("B1:B10")

vybor = WorksheetFunction.Match(a & b, c & d, 1)

End Sub
Данный макрос (есть в файле вложения)  выдает ошибку Run-time error 13:Type Mismatch, на моей практике такая ошибка обычно выскакивает когда имеются разные типы не сопоставимых между собой данных.
Я вполне допускаю ситуацию при которой я допустил критическую синтаксическую ошибку. но, объективно, если не будет ошибки 13, будет ошибка 1004, поскольку данная формула не является формулой массива.

При поиске информации по данному вопросу я встретил в интернете две ссылки на похожие темы. Я прошу прощения у Модераторов, если это не особо приветствуется.

http://www.cyberforum.ru/vba/thread1690948.html   - Index vs Match + 2 criteria + Ctrl-Shift-Enter - VBA.
В этом примере поднималась подобная тема, и в результате было дано два достаточно интересных ответа, но несколько сложноватых.

http://www.excelworld.ru/forum/10-37832-1    - Вычисление формулы массива через VBA и запись результата
В этом примере в ответе показано, каким образом можно создать для формулы VBA формулу массива. Там это показано выводом формулы на лист Excel.
Относительно данного метода возникает такой вопрос как скорость обработки, если уж и считать на листе, то как мне видится стоит просто закрепить формулу на листе-/отключить автоматический пересчет листа -/ и прописать в коде макроса Application.Calculate для ячейки в которой расположена формула.

В итоге вопрос такой можно ли в VBA , посредством фунции Match, создать конструкции наподобии
Скрытый текст
И если нельзя, то какой наиболее оптимальный способ решения данной задачи?
Благодарю.
Изменено: IgorBoot - 22.05.2018 15:16:30
Страницы: 1 2 След.
Наверх