Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Запись в коде VBA вычисления по формуле массива - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Запись в коде VBA вычисления по формуле массива
АННА-ЕАО Дата: Пятница, 22.02.2013, 13:12 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте.
Подскажите, пожалуйста, можно ли, а главное как, РЕЗУЛЬТАТ вычисления по формуле массива

[vba]
Код
={МАКС(ЕСЛИ(G3:G21="критерий 1";J3:J21))}
[/vba]

m = WorksheetFunction.Max([IF(G3:G21="критерий 1",J3:J21])
Label5.Caption = m

поместить на Label не производя самих вычислений на листе.

(необходимо найти максимум по критерию).

Пример прикладываю.
К сообщению приложен файл: -1.xls (49.0 Kb)


Сообщение отредактировал АННА-ЕАО - Пятница, 22.02.2013, 13:13
 
Ответить
СообщениеЗдравствуйте.
Подскажите, пожалуйста, можно ли, а главное как, РЕЗУЛЬТАТ вычисления по формуле массива

[vba]
Код
={МАКС(ЕСЛИ(G3:G21="критерий 1";J3:J21))}
[/vba]

m = WorksheetFunction.Max([IF(G3:G21="критерий 1",J3:J21])
Label5.Caption = m

поместить на Label не производя самих вычислений на листе.

(необходимо найти максимум по критерию).

Пример прикладываю.

Автор - АННА-ЕАО
Дата добавления - 22.02.2013 в 13:12
SM Дата: Пятница, 22.02.2013, 14:50 | Сообщение № 2
Группа: Друзья
Ранг: Участник
Сообщений: 64
Репутация: 59 ±
Замечаний: 0% ±

2003
[vba]
Код
m = [MAX(IF(G3:G21="критерий 1",J3:J21))]
[/vba]


Excel изощрён, но не злонамерен
 
Ответить
Сообщение[vba]
Код
m = [MAX(IF(G3:G21="критерий 1",J3:J21))]
[/vba]

Автор - SM
Дата добавления - 22.02.2013 в 14:50
АННА-ЕАО Дата: Пятница, 22.02.2013, 16:00 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

БОЛЬШОЕ СПАСИБО !!! всё гениальное просто!

А я всю голову сломала confused

С НАСТУПАЮЩИМ !‼
 
Ответить
СообщениеБОЛЬШОЕ СПАСИБО !!! всё гениальное просто!

А я всю голову сломала confused

С НАСТУПАЮЩИМ !‼

Автор - АННА-ЕАО
Дата добавления - 22.02.2013 в 16:00
RAN Дата: Пятница, 22.02.2013, 17:09 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А вот меня лично шибко интересует, как это сделать с переменной?

[vba]
Код
Dim a$
a = "критерий 1"
[/vba]

А дальше?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА вот меня лично шибко интересует, как это сделать с переменной?

[vba]
Код
Dim a$
a = "критерий 1"
[/vba]

А дальше?

Автор - RAN
Дата добавления - 22.02.2013 в 17:09
SM Дата: Пятница, 22.02.2013, 18:54 | Сообщение № 5
Группа: Друзья
Ранг: Участник
Сообщений: 64
Репутация: 59 ±
Замечаний: 0% ±

2003
Цитата (RAN)
как это сделать с переменной?

В этом случае нельзя использовать оператор =[Текст_формулы],
т.к. то, что в квадратных скобках, должно быть текстовой константой.

Заменяем скобки на функцию Evaluate(), которая вычисляет вычисляемое smile .

Начало Sub CommandButton1_Click может быть таким:
[vba]
Код
Private Sub CommandButton1_Click()
     Dim n, i, m As Integer
     '
     Dim TRng As Range
     Dim a$
     '
     ListBox1.Clear
     ListBox2.Clear
     ListBox3.Clear
     ListBox4.Clear
      
     '''m = [MAX(IF(G3:G21="критерий 1",J3:J21))]
     Set TRng = Range("A1").CurrentRegion
     Set TRng = Range(TRng.Rows(3), TRng.Rows(TRng.Rows.Count))
     a = "критерий 1"
     m = Evaluate("MAX(IF(" & TRng.Columns("G").Address & "=""" & a & """," & TRng.Columns("J").Address & "))")
     Label5.Caption = m
[/vba]


Excel изощрён, но не злонамерен
 
Ответить
Сообщение
Цитата (RAN)
как это сделать с переменной?

В этом случае нельзя использовать оператор =[Текст_формулы],
т.к. то, что в квадратных скобках, должно быть текстовой константой.

Заменяем скобки на функцию Evaluate(), которая вычисляет вычисляемое smile .

Начало Sub CommandButton1_Click может быть таким:
[vba]
Код
Private Sub CommandButton1_Click()
     Dim n, i, m As Integer
     '
     Dim TRng As Range
     Dim a$
     '
     ListBox1.Clear
     ListBox2.Clear
     ListBox3.Clear
     ListBox4.Clear
      
     '''m = [MAX(IF(G3:G21="критерий 1",J3:J21))]
     Set TRng = Range("A1").CurrentRegion
     Set TRng = Range(TRng.Rows(3), TRng.Rows(TRng.Rows.Count))
     a = "критерий 1"
     m = Evaluate("MAX(IF(" & TRng.Columns("G").Address & "=""" & a & """," & TRng.Columns("J").Address & "))")
     Label5.Caption = m
[/vba]

Автор - SM
Дата добавления - 22.02.2013 в 18:54
RAN Дата: Пятница, 22.02.2013, 19:00 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Пытал Evaluate, но никак пока освоить не могу. sad


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПытал Evaluate, но никак пока освоить не могу. sad

Автор - RAN
Дата добавления - 22.02.2013 в 19:00
SM Дата: Пятница, 22.02.2013, 19:53 | Сообщение № 7
Группа: Друзья
Ранг: Участник
Сообщений: 64
Репутация: 59 ±
Замечаний: 0% ±

2003
Можно сначала протестировать (не экономя на переменных !),
и посмотреть соответствие формулы в Immediate и на листе.

[vba]
Код
Sub Test1()
     Const Br As String = """"
     Dim A1 As String, A2 As String, Criteria As String, F As String
     Dim TRng As Range
     Dim m As Integer, a$
     '
     Set TRng = Range("A1").CurrentRegion
     Set TRng = Range(TRng.Rows(3), TRng.Rows(TRng.Rows.Count))
     '
     A1 = TRng.Columns("G").Address
     A2 = TRng.Columns("J").Address
     a = "критерий 1"
     Criteria = "=" & Br & a & Br
     F = "MAX(IF(" & A1 & Criteria & "," & A2 & "))"
     m = Evaluate(F)
     '
     Debug.Print F
     Debug.Print m
End Sub
[/vba]


Excel изощрён, но не злонамерен

Сообщение отредактировал SM - Пятница, 22.02.2013, 19:58
 
Ответить
СообщениеМожно сначала протестировать (не экономя на переменных !),
и посмотреть соответствие формулы в Immediate и на листе.

[vba]
Код
Sub Test1()
     Const Br As String = """"
     Dim A1 As String, A2 As String, Criteria As String, F As String
     Dim TRng As Range
     Dim m As Integer, a$
     '
     Set TRng = Range("A1").CurrentRegion
     Set TRng = Range(TRng.Rows(3), TRng.Rows(TRng.Rows.Count))
     '
     A1 = TRng.Columns("G").Address
     A2 = TRng.Columns("J").Address
     a = "критерий 1"
     Criteria = "=" & Br & a & Br
     F = "MAX(IF(" & A1 & Criteria & "," & A2 & "))"
     m = Evaluate(F)
     '
     Debug.Print F
     Debug.Print m
End Sub
[/vba]

Автор - SM
Дата добавления - 22.02.2013 в 19:53
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!