powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна помощь
11 сообщений из 11, страница 1 из 1
Нужна помощь
    #34454218
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Был бы очень благодарен, если кно нибуть помог разобраться:
1) можно как то в макросе не используя функции рабочего листа посчитать сумму диапазона ячеек

2)Есть функция на рабочем листе
={СУММ(ДЛСТР(A1:B10))}
Хочу так же делать в макросе, возможно ли это?
...
Рейтинг: 0 / 0
Нужна помощь
    #34454288
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad

1. Способов, мне кажется, можно много всяких придумать:
Например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 Sub s_1()
  Dim v_Rng As Range
  Dim v_Sum As Double
  Set v_Rng = Worksheets("Лист1").Range("A1:B1000")
  For i =  1  To v_Rng.Rows.Count
    For j =  1  To v_Rng.Columns.Count
      v_Sum = v_Sum + v_Rng(i, j)
      'или
      'v_Sum = v_Sum + v_Rng(i, j).Value
      'или
      'v_Sum = v_Sum + v_Rng.Cells(i, j)
      'или
      'v_Sum = v_Sum + v_Rng.Cells(i, j).Value
    Next j
  Next i
  Debug.Print v_Sum
End Sub
или так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 Sub s_2()
Sub s_2()
  Dim v_Rng As Range
  Dim v_Cell As Range
  Dim v_Sum As Double
  Set v_Rng = Worksheets("Лист1").Range("A1:B1000")
  For Each v_Cell In v_Rng
    v_Sum = v_Sum + v_Cell
  Next
  Debug.Print v_Sum
End Sub
или так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 Sub s_3()
  Dim v_Arr As Variant
  Dim v_Sum As Double
  v_Arr = Worksheets("Лист1").Range("A1:B1000")
  For i =  1  To UBound(v_Arr,  1 )
    For j =  1  To UBound(v_Arr,  2 )
      v_Sum = v_Sum + v_Arr(i, j)
    Next j
  Next i
  Debug.Print v_Sum
End Sub

2. Насколько я поняла, нужно найти сумму длин строк в диапазоне
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 Sub s_4()
  Dim v_Sum As Double
  Dim v_Arr As Variant
  v_Arr = Worksheets("Лист1").Range("A1:B10")
  For i =  1  To UBound(v_Arr,  1 )
    For j =  1  To UBound(v_Arr,  2 )
      v_Sum = v_Sum + Len(v_Arr(i, j))
    Next j
  Next i
  Debug.Print v_Sum
End Sub
...
Рейтинг: 0 / 0
Нужна помощь
    #34454451
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lena_####

2. Насколько я поняла, нужно найти сумму длин строк в диапазоне
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 Sub s_4()
  Dim v_Sum As Double
  Dim v_Arr As Variant
  v_Arr = Worksheets("Лист1").Range("A1:B10")
  For i =  1  To UBound(v_Arr,  1 )
    For j =  1  To UBound(v_Arr,  2 )
      v_Sum = v_Sum + Len(v_Arr(i, j))
    Next j
  Next i
  Debug.Print v_Sum
End Sub


Спасибо за ответ! Я просто думал может можно как то по простому так же в одну строку записать.
Мол есть массив и сделать с ним то-то...пусть даже с использованием функций рабочего листа, но не в ячейке рабочего листа, а в модуле!
...
Рейтинг: 0 / 0
Нужна помощь
    #34454467
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad

Ну вообщето Вы писали:
можно как то в макросе не используя функции рабочего листа посчитать сумму диапазона ячеек
Вот, например, так:
Код: plaintext
  Debug.Print Evaluate("=SUM(LEN(A1:B10))")
...
Рейтинг: 0 / 0
Нужна помощь
    #34454504
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lena_#### Deggasad

Ну вообщето Вы писали:
можно как то в макросе не используя функции рабочего листа посчитать сумму диапазона ячеек
Вот, например, так:
Код: plaintext
  Debug.Print Evaluate("=SUM(LEN(A1:B10))")


Ни сколько не хотел Вас обидеть! Вы же просто молодец. Можно сказать второй раз отрыли мне глаза на метод Evaluate . Спасибо большое!
На первый взгляд это ответ сразу на оба моих вопроса! Буду пробовать.

Как всегда наверное неправильно вопрос задаю! Но всё же ответ получен! Спасибо ещё раз! это действительно нужная штука.
...
Рейтинг: 0 / 0
Нужна помощь
    #34454518
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad

А Вы меня и не обидели :) Наоборот - обогатили:
Я просто тупо включила макрорекодер и в ячейке с Вашей формулой нажала Ctrl+Shift+Enter. А творчество макрорекодера наугад сунула в аргумент Evaluate’а. Урок извлекла для себя несомненно.
Так что это Вам спасибо.
...
Рейтинг: 0 / 0
Нужна помощь
    #34454526
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lena_#### Deggasad

А Вы меня и не обидели :) Наоборот - обогатили:
Я просто тупо включила макрорекодер и в ячейке с Вашей формулой нажала Ctrl+Shift+Enter. А творчество макрорекодера наугад сунула в аргумент Evaluate’а. Урок извлекла для себя несомненно.
Так что это Вам спасибо.
Одно интересно как это он угадывает что формула - массив. В ячейке нужно прямо указать хочу массив (Ctrl+Shift+Enter), а Evaluate сам как то разбирает. Уже кучу формул ему сунул всё верно. боюсь нет ли подводных камней.
...
Рейтинг: 0 / 0
Нужна помощь
    #34454538
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, ответ лежал на поверхности
Debug.Print [SUM(LEN(AL1:AM2))]
Но тока так и не понял как же он сам понимает что массив
...
Рейтинг: 0 / 0
Нужна помощь
    #34454715
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Час от часу не легче:
Так работает:
Код: plaintext
[SUM(LEN(AL1:AM2))]
Так работает:
Код: plaintext
[SUM(LEN( 5 : 5 ))]
Так не работает:
Код: plaintext
[SUM(LEN(A:A))]

Т.е. если ссылается на весь столбец, то не работает. Если на рабочем листе формулой считать тоже не работает выдаёт #число! . Помогите может я крепко туплю.
...
Рейтинг: 0 / 0
Нужна помощь
    #34461947
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadДа, ответ лежал на поверхности
Debug.Print [SUM(LEN(AL1:AM2))]
Но тока так и не понял как же он сам понимает что массивExcel всегда понимает, когда перед ним формула массива и соответственно ее считает. Ctrl+Shift+Enter нужен лишь для ячеек, чтобы правильно отобразить результат, т.е. ключевое слово - это не считать , а отображать .
Многие функции (напр. СУММПРОИЗВ), а также имена, графики, сводные таблицы, условное форматирование, проверка (validation), F9 в режиме редактирования ячейки, Evaluate(...), Range(...), [...] и др. не требуют Ctrl+Shift+Enter

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Нужна помощь
    #34462312
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL) DeggasadДа, ответ лежал на поверхности
Debug.Print [SUM(LEN(AL1:AM2))]
Но тока так и не понял как же он сам понимает что массивExcel всегда понимает, когда перед ним формула массива и соответственно ее считает. Ctrl+Shift+Enter нужен лишь для ячеек, чтобы правильно отобразить результат, т.е. ключевое слово - это не считать , а отображать .
Многие функции (напр. СУММПРОИЗВ), а также имена, графики, сводные таблицы, условное форматирование, проверка (validation), F9 в режиме редактирования ячейки, Evaluate(...), Range(...), [...] и др. не требуют Ctrl+Shift+Enter

KL
[MVP - Microsoft Excel]
Спасибо! Ваши ответы как всегда исчерпывающие! Если можно ещё одну вещь про массивы пояснить. вот тут
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна помощь
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]