Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна помощь / 11 сообщений из 11, страница 1 из 1
11.04.2007, 19:41:42
    #34454218
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь
Был бы очень благодарен, если кно нибуть помог разобраться:
1) можно как то в макросе не используя функции рабочего листа посчитать сумму диапазона ячеек

2)Есть функция на рабочем листе
={СУММ(ДЛСТР(A1:B10))}
Хочу так же делать в макросе, возможно ли это?
...
Рейтинг: 0 / 0
11.04.2007, 20:36:23
    #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
11.04.2007, 22:52:02
    #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
11.04.2007, 23:09:33
    #34454467
lena_####
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь
Deggasad

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

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


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

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

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

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

Т.е. если ссылается на весь столбец, то не работает. Если на рабочем листе формулой считать тоже не работает выдаёт #число! . Помогите может я крепко туплю.
...
Рейтинг: 0 / 0
15.04.2007, 20:31:19
    #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
16.04.2007, 08:32:12
    #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
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна помощь / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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