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

Вход

Регистрация

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

 

= Мир MS Excel/Исправление кода vba для большего кол-ва столбцов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Исправление кода vba для большего кол-ва столбцов (Макросы/Sub)
Исправление кода vba для большего кол-ва столбцов
psycho Дата: Воскресенье, 03.08.2014, 16:49 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 60% ±

Excel 2013
Друзья помогите подправить код
значится есть файл Удалено администрацией
его код
[vba]
Код
Sub CalcDist()
Dim iCl1%, iCl2%, iRw1%, iRw2%, sNmCl1$, sNmCl2$
Dim lLr%, i%

Dim oDict: Set oDict = CreateObject("Scripting.Dictionary"): oDict.CompareMode = vbBinaryCompare

With Worksheets(2)
lLr = .Cells(.Rows.Count, "A").End(xlUp).Row
For i = 2 To lLr
oDict.Item(.Cells(i, 1).Value) = i
Next i
End With

For iCl1 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3 Step 3 ' направо
iCl2 = iCl1 + 3
sNmCl1 = Cells(1, iCl1).Value
sNmCl2 = Cells(1, iCl2).Value
iRw1 = 0: iRw2 = 0

For i = 2 To Cells(Rows.Count, iCl1).End(xlUp).Row
If sNmCl2 = Cells(i, iCl1).Value Then
iRw1 = i
End If
Next i
For i = 2 To Cells(Rows.Count, iCl2).End(xlUp).Row
If sNmCl1 = Cells(i, iCl2).Value Then
iRw2 = i
End If
Next i

If iRw1 <> 0 And iRw2 <> 0 Then
Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)) = Application.Max(iRw1, iRw2) - Application.Min(iRw1, iRw2)
Else
Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)).Interior.ColorIndex = 6
End If

Next iCl1

For iCl1 = Cells(1, Columns.Count).End(xlToLeft).Column - 1 To 2 Step -3 ' налево
iCl2 = iCl1 - 3
sNmCl1 = Cells(1, iCl1).Value
sNmCl2 = Cells(1, iCl2).Value
iRw1 = 0: iRw2 = 0
For i = 2 To Cells(Rows.Count, iCl1).End(xlUp).Row
If sNmCl2 = Cells(i, iCl1).Value Then
iRw1 = i
End If
Next i
For i = 2 To Cells(Rows.Count, iCl2).End(xlUp).Row
If sNmCl1 = Cells(i, iCl2).Value Then
iRw2 = i
End If
Next i

If iRw1 <> 0 And iRw2 <> 0 Then
Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)) = Application.Max(iRw1, iRw2) - Application.Min(iRw1, iRw2)
Else
Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)).Interior.ColorIndex = 6
End If
Next iCl1
End Sub
[/vba]

изначально этот код писался для экселя, где было 186 столбцов а не 400.
Задача была вычитать слова по шагам. например от фразы X до фразы Y 8 шагов, а от фразы Y до фразы X 5 8-5=3 Но это не важно. важно что прошлый файл рассчитан на 186 столбцов, в это под 375
мне уже сказали что в этом месте кода можно увеличить допустимое кол-во
For iCl1 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3 Step 3
iCl2 = iCl1 + 3
но я как ни меняю цифру 3 ничего не получается. Подскажите как исправить.
оригинал первого файла, мало ли кому то захочется посмотреть. или это как-то поможет.
Удалено администрацией


Сообщение отредактировал Serge_007 - Воскресенье, 03.08.2014, 16:59
 
Ответить
СообщениеДрузья помогите подправить код
значится есть файл Удалено администрацией
его код
[vba]
Код
Sub CalcDist()
Dim iCl1%, iCl2%, iRw1%, iRw2%, sNmCl1$, sNmCl2$
Dim lLr%, i%

Dim oDict: Set oDict = CreateObject("Scripting.Dictionary"): oDict.CompareMode = vbBinaryCompare

With Worksheets(2)
lLr = .Cells(.Rows.Count, "A").End(xlUp).Row
For i = 2 To lLr
oDict.Item(.Cells(i, 1).Value) = i
Next i
End With

For iCl1 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3 Step 3 ' направо
iCl2 = iCl1 + 3
sNmCl1 = Cells(1, iCl1).Value
sNmCl2 = Cells(1, iCl2).Value
iRw1 = 0: iRw2 = 0

For i = 2 To Cells(Rows.Count, iCl1).End(xlUp).Row
If sNmCl2 = Cells(i, iCl1).Value Then
iRw1 = i
End If
Next i
For i = 2 To Cells(Rows.Count, iCl2).End(xlUp).Row
If sNmCl1 = Cells(i, iCl2).Value Then
iRw2 = i
End If
Next i

If iRw1 <> 0 And iRw2 <> 0 Then
Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)) = Application.Max(iRw1, iRw2) - Application.Min(iRw1, iRw2)
Else
Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)).Interior.ColorIndex = 6
End If

Next iCl1

For iCl1 = Cells(1, Columns.Count).End(xlToLeft).Column - 1 To 2 Step -3 ' налево
iCl2 = iCl1 - 3
sNmCl1 = Cells(1, iCl1).Value
sNmCl2 = Cells(1, iCl2).Value
iRw1 = 0: iRw2 = 0
For i = 2 To Cells(Rows.Count, iCl1).End(xlUp).Row
If sNmCl2 = Cells(i, iCl1).Value Then
iRw1 = i
End If
Next i
For i = 2 To Cells(Rows.Count, iCl2).End(xlUp).Row
If sNmCl1 = Cells(i, iCl2).Value Then
iRw2 = i
End If
Next i

If iRw1 <> 0 And iRw2 <> 0 Then
Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)) = Application.Max(iRw1, iRw2) - Application.Min(iRw1, iRw2)
Else
Worksheets(2).Cells(oDict.Item(sNmCl1), oDict.Item(sNmCl2)).Interior.ColorIndex = 6
End If
Next iCl1
End Sub
[/vba]

изначально этот код писался для экселя, где было 186 столбцов а не 400.
Задача была вычитать слова по шагам. например от фразы X до фразы Y 8 шагов, а от фразы Y до фразы X 5 8-5=3 Но это не важно. важно что прошлый файл рассчитан на 186 столбцов, в это под 375
мне уже сказали что в этом месте кода можно увеличить допустимое кол-во
For iCl1 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3 Step 3
iCl2 = iCl1 + 3
но я как ни меняю цифру 3 ничего не получается. Подскажите как исправить.
оригинал первого файла, мало ли кому то захочется посмотреть. или это как-то поможет.
Удалено администрацией

Автор - psycho
Дата добавления - 03.08.2014 в 16:49
wild_pig Дата: Воскресенье, 03.08.2014, 18:16 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
[vba]
Код
For iCl1 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3 Step 3 ' направо
[/vba]
Тут написано: цикл, от 1 до последней непустой ячейки в первой строке минус 3 с шагом 3.
По идее эта строка и так брала любой массив 100500 колонок и отнимала 3.
 
Ответить
Сообщение[vba]
Код
For iCl1 = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 3 Step 3 ' направо
[/vba]
Тут написано: цикл, от 1 до последней непустой ячейки в первой строке минус 3 с шагом 3.
По идее эта строка и так брала любой массив 100500 колонок и отнимала 3.

Автор - wild_pig
Дата добавления - 03.08.2014 в 18:16
RAN Дата: Воскресенье, 03.08.2014, 19:11 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
По идее эта строка и так брала любой массив 100500 колонок

clap
Съесть то он бы съел, да кто бы ему дал. lol

Кросс


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Воскресенье, 03.08.2014, 19:16
 
Ответить
Сообщение
По идее эта строка и так брала любой массив 100500 колонок

clap
Съесть то он бы съел, да кто бы ему дал. lol

Кросс

Автор - RAN
Дата добавления - 03.08.2014 в 19:11
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Исправление кода vba для большего кол-ва столбцов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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