powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Обращение в ячейке
10 сообщений из 10, страница 1 из 1
Обращение в ячейке
    #37674636
lu0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lu0
Гость
подскажите полиз: какой вариант обращения к ячейкам быстрее
1.
Код: vbnet
1.
2.
3.
4.
5.
nRow=25
For I=1 to 100
  cColName=cCol(I, "D") ' ф-ция, возвращяющая I-тую от колонки D в формате A1
  Sheet.Range(cColName & nRow). ...
Next


или
2.
Код: vbnet
1.
2.
3.
4.
5.
nRow=25
For I=1 to 100
  nColIndex=nCol(I,"D") ' ф-ция, возвращающая Индекс (Integer) 
  Sheet.Cells(nColIndex, nRow). ...
Next



щас пока использую 1-й вариант, исключительно из-за удобства разбора кода
...
Рейтинг: 0 / 0
Обращение в ячейке
    #37674644
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в чем проблема замерить?
...
Рейтинг: 0 / 0
Обращение в ячейке
    #37674656
lu0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lu0
Гость
Лень. Может кто делал уже
...
Рейтинг: 0 / 0
Обращение в ячейке
    #37674662
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по-моему пост на форуме с оформлением и каментами было сделать дольше, чем протестировать

мы же не знаем содержимого ваших функций
...
Рейтинг: 0 / 0
Обращение в ячейке
    #37674676
lu0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lu0
Гость
Ексель щас работает :) так что пост быстрее :)

Функции пока абстрактные. Первая переводит индекс в букву, например 4 в D, вторая делает наоборот.
щас чащще пишу Sheet.Range("A" & nRow). ... читать так удобнее... вот и подумываю может вызов Sheet.Cells(nRow,nCol("D")). .. будет быстрее
Может тестировал кто уже
...
Рейтинг: 0 / 0
Обращение в ячейке
    #37674692
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот ты ленивый, а
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Debug.Print Now
For j = 1 To 500000
i = Cells(1, 1)
Next
Debug.Print Now
For j = 1 To 500000
i = Range("A1")
Next
Debug.Print Now


ну в общем, я так и подозревал
...
Рейтинг: 0 / 0
Обращение в ячейке
    #37674764
lu0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lu0
Гость
спасибо.

подведу итог:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Function nColc(aColName As String, Optional aShift As Integer = 0) As Integer
Dim nBase As Integer
  If aColName = "" Then
    nBase = 1
  Else
    If Len(aColName) = 2 Then
      nBase = (Asc(Mid(aColName, 2, 1)) - 64) * 26
    Else
      nBase = 0
    End If
    nBase = nBase + Asc(Mid(aColName, 1, 1)) - 64
  End If
  
  nColc = nBase + aShift
End Function

Sub vv()
  Debug.Print Now
  For j = 1 To 500000
  i = Cells(1, nColc("A"))
  Next
  Debug.Print Now
  For j = 1 To 500000
  i = Range("A" & 1)
  Next
  Debug.Print Now
End Sub



результат:
Код: plaintext
1.
2.
22.02.2012 16:41:42 
22.02.2012 16:41:44 
22.02.2012 16:41:49 

вывод:
переходим на новые рельсы
...
Рейтинг: 0 / 0
Обращение в ячейке
    #37674882
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: lu0
> подведу итог:
> результат:
>
> 22.02.2012 16:41:42
> 22.02.2012 16:41:44
> 22.02.2012 16:41:49
> вывод:

Не правильный у тебя вывод. Сравни моё время:
код 1(почти исходный)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub vv()
'Dim j As Long, i As Long
'Dim j, i
Dim dt As Date
  dt = Now
  Debug.Print Format(#12:00:00 AM#, "hh:mm:ss.sss")
  For j = 1 To 500000
  i = Cells(1, 1) '.Value
  Next
  Debug.Print Format(Now - dt, "hh:mm:ss.sss")
  dt = Now
  For j = 1 To 500000
  i = Range("A" & 1) '.Value
  Next
  Debug.Print Format(Now - dt, "hh:mm:ss.sss")
End Sub

Время:
00:00:00.000
00:00:03.033
00:00:07.077
код 2 переработанный
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Option Explicit
Sub vv()
Dim j As Long, i As Long
Dim dt As Date
  dt = Now
  Debug.Print Format(#12:00:00 AM#, "hh:mm:ss.sss")
  For j = 1 To 500000
  i = Cells(1, 1) '.Value
  Next
  Debug.Print Format(Now - dt, "hh:mm:ss.sss")
  dt = Now
  For j = 1 To 500000
  i = Range("A" & 1) '.Value
  Next
  Debug.Print Format(Now - dt, "hh:mm:ss.sss")
End Sub

Время:
00:00:00.000
00:00:02.022
00:00:07.077
код 3 доработанный
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Option Explicit
Sub vv()
Dim j As Long, i As Long
Dim dt As Date
  dt = Now
  Debug.Print Format(#12:00:00 AM#, "hh:mm:ss.sss")
  For j = 1 To 500000
  i = Cells(1, 1).Value
  Next
  Debug.Print Format(Now - dt, "hh:mm:ss.sss")
  dt = Now
  For j = 1 To 500000
  i = Range("A" & 1).Value
  Next
  Debug.Print Format(Now - dt, "hh:mm:ss.sss")
End Sub

Время:
00:00:00.000
00:00:03.033
00:00:07.077

Теперь вывод: Всегда явно объявляйте переменные! Т.е. используйте
Option Explicit

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обращение в ячейке
    #37676105
lu0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lu0
Гость
Игорь, Вы меня простите, но:
1. Вы читали первый пост??? Если "да", то в чем мои выводы не верны?
2. В чем выигрыш первого Вашего примера над третьим? Т.е. что позволяет Вам утверждать что применение опции "Option Explicit" ускоряет код по-сравнению с явным объявлением переменных.
...
Рейтинг: 0 / 0
Обращение в ячейке
    #37677439
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: lu0
> Игорь, Вы меня простите, но:
> 1. Вы читали первый пост??? Если "да", то в чем мои выводы не верны?

По вопросу - верны. Переходить на новые рельсы нужно :)
А выводы верны, но при, на мой взгляд, не совсем правильной постановке эксперемента. И я хотел показать именно это. Что
в прочем мне не удалось :(

> 2. В чем выигрыш первого Вашего примера над третьим? Т.е. что позволяет Вам утверждать что применение опции
> "Option Explicit" ускоряет код по-сравнению с явным объявлением переменных.

Мне это позволяет утверждать разница между первым примером и вторым, потому, что именно в них разница в объявлении
переменных.
А третий я просто привел для полноты картины и что происходит в нем я объяснить не могу :(

И я не утверждал что опция Option Excplicit дает какую-то разницу в скорости выполнения по сравнению с явным объявлением
переменных. В твоем примере переменные не объявлены, и мой первый - аналог твоего примера, а мой второй пример аналог
твоего, но с явным объявлением переменных. И именно выигрыш по времени выполнения примера с явным объявлением переменных
и дает мне возможность утверждать что использование Option Excplict - как залог явного объявления переменных, сделает
наши программы более быстродейтсвенными :)

Во как завернул

p.s. кстати
код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Sub vv()
Dim j As Long, i As Long
Dim dt As Date
  Debug.Print Format(#12:00:00 AM#, "hh:mm:ss.sss")
  dt = Now
  For j = 1 To 500000
  i = Cells(1, 1) '.Value
  Next
  Debug.Print Format(Now - dt, "hh:mm:ss.sss")
  dt = Now
  For j = 1 To 500000
  i = Range("A1") ' & 1) '.Value
  Next
  Debug.Print Format(Now - dt, "hh:mm:ss.sss")
  dt = Now
  For j = 1 To 500000
  i = Cells(1, 1) '.Value
  Next
  Debug.Print Format(Now - dt, "hh:mm:ss.sss")
  dt = Now
  For j = 1 To 500000
  i = Range("A1") ' & 1) '.Value
  Next
  Debug.Print Format(Now - dt, "hh:mm:ss.sss")
End Sub

дает такое время:
00:00:00.000
00:00:02.022
00:00:06.066
00:00:03.033
00:00:06.066
почему - х его з :(

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Обращение в ячейке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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