|
|
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
Вот часть кода, в нем я пробегаю по столбцам, в поисках столбца с наименованием "остаток на конец недели/шт.", если этот столбец не первый, то перебираем строки этого столбца. Как таким же макаром, пробегаясь по столбцам, искать все цифровые значения и запоминать, в каких они ячейках, чтоб потом эти значения можно было выводить в отдельный столбец? For i = StartCol To Sh.UsedRange.Columns.Count If Cells(5, i).Value = "остаток на конец недели/шт." Then iOstatok = iOstatok + 1 If iOstatok > 1 Then For j = StartRow To Sh.UsedRange.Rows.Count ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 09:10 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
Как таким же макаром, пробегаясь по столбцам, искать все цифровые значения и запоминать, в каких они ячейках, чтоб потом эти значения можно было выводить в отдельный столбец? Где искать ? В нужной колонке ? Записывайте позицию (ряд, колонку) в массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 09:20 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
да, в колонке. если в столбце "остаток на конец недели/шт." встретилось отрицательное значение, то номер недели, который мы находим в столбцах Cells(3, i) записывается в отдельный столбец в ту строку, где найдено это отрицательное значение, причем он должен определить только первое встретившееся отрицательное значение и в соответствии с этим определить, на какой неделе (Cells(3, i)) оно встретилось. Вот полный код, но цикл получается бесконечный... Не пойму, как делать. Помогите начинающему Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim iKolOstatok As Integer Dim i As Integer 'счетчик столбцов Dim j As Integer 'счетчик строк Dim iOstatok As Integer Const StartCol = 8 Const StartRow = 3 iOstatok = 0 For i = StartCol To Sh.UsedRange.Columns.Count 'пробегаем по столбцам If Cells(5, i).Value = "остаток на конец недели/шт." Then iOstatok = iOstatok + 1 If iOstatok > 1 Then If IsNumeric(Cells(3, i)) Then iNedelya = i For j = StartRow To Sh.UsedRange.Rows.Count 'пробегаем по строкам If Cells(j, iOstatok) <= 0 And Cells(j, 4).Value = "pce" Then Cells(j, 12) = Cells(3, iNedelya) End If Next j End If End If End If Next i End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 09:47 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
Что то я еще больше запутался... По порядку: 1) нашли столбец "остаток на конец недели/шт." 2) если этот столбец не первый... по отношении к чему ? к началу столбцов ? тоесть нас интересуют столбцы 2-... ? 3) ищем отрицательные значение в этом столбце Дальше ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 10:10 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
в общем все выводит. только как теперь сделать так, чтоб если условие выполнилось первый раз, то есть нашли первое отрицательное значение в строке и все, цикл перебора переходил на следующую строку и столбец. а то у меня получается цикл бесконечный. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim iKolOstatok As Integer Dim i As Integer 'счетчик столбцов Dim j As Integer 'счетчик строк Dim iOstatok As Integer Const StartCol = 8 Const StartRow = 3 iOstatok = 0 For i = StartCol To Sh.UsedRange.Columns.Count 'пробегаем по столбцам If Cells(5, i).Value = "остаток на конец недели/шт." Then iOstatok = iOstatok + 1 If iOstatok > 1 Then For j = StartRow To Sh.UsedRange.Rows.Count 'пробегаем по строкам If Cells(j, iOstatok) <= 0 And Cells(j, 4).Value = "pce" Then Cells(j, 12) = Cells(3, i - 2) - Cells(3, 8) End If Next j End If End If Next i End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 10:24 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
Как у Вас может быть бесконечный цикл, если у Вас указано конкретное значение когда окончится цикл: For i = StartCol To Sh.UsedRange.Columns.Count - значения не бесконечные For j = StartRow To Sh.UsedRange.Rows.Count - значения не бесконечные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 10:42 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
получается он бесконечно перебирает недели. Файл в аттаче ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 10:49 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
Вообщем, девушка... Мне тяжело проникнуть в тайну Ваших мыслей, поэтому вот что я сделал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. End SubПри условии, что форма постоянная Вам не нужно переберать все подряд... Во-вторых, такая запись cells(row, column) - cells(row, column) мне кажется неправильной, так как cells это объект, а объекты нельзя отнимать... Могу ошибаться... В-третьих, как поступать с ячейками, в которых НЕ УКАЗАНО ничего? 0 и пусто это разные вещи... И последнее, если отрицательное значение или ноль в отдельном блоке рядов (7-11,13-17) уже найдено, он переходит на другой блок в этой же колонке... И последнее, "итоговые ячейки" (12,18... в соответствующих колонках) должны быть пустые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 12:25 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
End SubПри условии, что ... Тут End Sub не нужно, случайно добавилось... Начинайте читать с При условии, что ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 12:27 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
в том-то и дело, что форма может изменяться, поэтому и сделано так, как сделано. на данный момент он мне все отрицительные и нулевые значения находит, а мне нужны только те, которые встретились первый раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 12:46 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
Oksana Slonevskayaв том-то и дело, что форма может изменяться, поэтому и сделано так, как сделано. Сложно Вам тогда прийдется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 12:48 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
то есть вы хотите сказать, что в VBA невозможно найти первый отрицательный элемент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 13:04 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
Я хочу сказать, что Вы игнорируете мои посты и уперлись в решение части задачи, не обращая внимание на общую картину... Плюс, Вы так не разу и не попытались доступно объяснить задачу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 14:34 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
задание я подробно объяснила, даже файл приложила. не пойму, что неясного? Вот файл рабочий, только на данный момент пользуюсь для просмотра заполненных строк использую Sh.UsedRange.Rows.Count, но появилась задача просматривать также и строки таблицы ниже, между основой таблицей и дополнительной существуют незаполненные строки, поэтому данный метод не подходит. если убираю этот метод, пишу просто при помощи цикла for от какой строки начинать просмотр и до какой, все равно не работает, соответственно, добавляю в условный оператор еще одно условие If Cells(j, 4).Value = "pce" And Cells(j, 4) = "1 SKU" Then .... все равно не работает. Подскажите, плиз, в чем может быть причина? Прилагаю файл с кодом работающим. Здесь напишу то, что изменяю Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim i As Integer 'счетчик столбцов Dim j As Integer 'счетчик строк Dim M As Integer 'количество заполненных столбцов на листе 'Dim N As Integer 'количество заполненных строк на листе Dim bFindNegativ As Boolean 'признак найденного отрицательного значения Const StartCol = 8 Const StartRow = 3 If Target.Columns(1).Column = 12 Then Exit Sub 'если меняется столбец с запасом в неделях, то не выполнять процедуру, так как сама процедура меняет значение этого столбца M = Sh.UsedRange.Columns.Count 'запомним количество заполненных столбцов на листе, чтобы каждый раз не вычислять ' N = Sh.UsedRange.Rows.Count 'запомним количество заполненных строк на листе, чтобы каждый раз не вычислять For j = StartRow To 60 'пробегаем по строкам If Cells(j, 4).Value = "pce" And Cells(j, 4) = "1 SKU" Then 'рассматриваем только строки, в которых Units = pce bFindNegativ = False 'признак, что мы уже встретили первое отрицательное значение остатка, до просмотра мы его ещё не встретили i = StartCol 'начинаем просматривать столбцы, начиная со столбца с номером StartCol Do While Not bFindNegativ And i <= M 'просматриваем столбцы, пока не встретим отрицательное значение или не дойдем до последнего столбца If Cells(5, i).Value = "остаток на конец недели/шт." And Cells(j, i) <= 0 Then 'если нам встретился столбец с остатками, в котором отрицательное значение Cells(j, 12) = Cells(3, i - 2) - Cells(3, 13) 'заполняем зпапс в неделях соответствующим значением bFindNegativ = True 'устанавливаем признак, что отрицательное значение встретилось и нам больше не нужно просматривать столбцы End If i = i + 1 ' переходим на следующий столбец Loop If Not bFindNegativ Then 'если просмотрели все столбцы, а отрицательного значения так и не встретили, то очищаем значение в столбце с запасом в неделях Cells(j, 12) = "8" End If End If Next j End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2009, 09:25 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
Oksana Slonevskayaзадание я подробно объяснила, даже файл приложила. не пойму, что неясного? Извините, но я не понимаю, возможно я недостаточно сообразительный... Здесь много знающих, думаю Вам обязательно кто-то поможет [надо только что бы он был посообразительней чем я]... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2009, 10:07 |
|
||
|
Если столбец содержит цифру, то запомнить ее. КАК???
|
|||
|---|---|---|---|
|
#18+
Что конкретно не понятно? В приложенном файле есть даже подробные комментарии по коду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2009, 10:30 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36238964&tid=2178985]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
191ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 525ms |

| 0 / 0 |
