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 ничего не получается. Подскажите как исправить. оригинал первого файла, мало ли кому то захочется посмотреть. или это как-то поможет. Удалено администрацией
Друзья помогите подправить код значится есть файл Удалено администрацией его код [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 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
Сообщение отредактировал Serge_007 - Воскресенье, 03.08.2014, 16:59
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