Доброго времени суток, Посетитель!
|
|
|
|
|
|
|
|
|
вид форума:
|
|
|
|
| Все привет.
Вот задача. exel 100 лет не трогал. Надо заполнить и удалить инфу в разных диапазонах клеток, в зависимости от некоторого условия. Ну вот выдумал код
Range("D3").Select
For i = 26 To 127
If Range("D3") = "6" Then
Range("D" & i).Select
Selection.ClearContents
Else
Range("D" & i).Select
ActiveCell.FormulaR1C1 = "8"
End If
Next i
For i = 129 To 132
If Range("D3") = "6" Then
Range("D" & i).Select
Selection.ClearContents
Else
Range("D" & i).Select
ActiveCell.FormulaR1C1 = "8"
End If
Next i
Все работает как надо. Однако это только по одному столбцу. Далее пишу
Range("С3").Select и все то же самое. Но это блин... Там столбцов не меряно. Пытаюсь подменить букву и вставить в цикл. Добавлял
For j=D to H... почему-то не пахает.
Range("&j&" & i).Select - ругается, Range("(j)" & i).Select - еще больше ругается. Но ведь как-то можно перебрать столбцы в цикле от D до AH. Там с разрывами будет, но принцип главное плиз? | |
|
| |
|
49 Кб. |
|
| Гоблин, доброго времени суток.
попробуй отображение столбцов изменить на цифровое
на картинке нарисовано где
удачи
| |
|
| |
|
|
|
| For j = 4 To 34 'с 4 по 34 столбец - от D по AH
If j = 10 Or j = 15 Then 'разрывы в 10 и 15 столбцах - J и O соответственно
Else
If Cells(3, j) = 6 Then
For i = 26 To 132
If i <> 128 Then Cells(i, j) = ""
Next i
Else
For i = 26 To 132
If i <> 128 Then Cells(i, j) = 8
Next i
End If
End If
Next j
если необходимо обратиться к диапазону то - range(cells(i1,j1),cells(i2,j2)) где i1- номер верхней строки, j1- номер левого столбца, i2- номер нижней строки, j2- номер правого столбца
Обратите внимание на то что инфа в объединенных ячейках хранится в верхней левой ячейке | |
|
| |
|
|
|
| Спасибо все. С настройками 2003 не разбирался, тем более в exsel. Снип, за пояснение и пример спасибо отдельное.
В целом уже сделал все и работает. Однако код на километр получился. Буду переделывать. | |
|
| |
|
|
|
| можно вот так
For j = 4 To 34 'с 4 по 34 столбец - от D по AH
If j = 10 Or j = 15 Then 'разрывы в 10 и 15 столбцах - J и O соответственно
Else
If Cells(3, j) = 6 Then
range(cells(26,j),cells(127,j))=""
range(cells(129,j),cells(132,j))=""
Else
range(cells(26,j),cells(127,j))=8
range(cells(129,j),cells(132,j))=8
End If
End If
Next j | |
|
| |
|
|
|
| а если использовать range().address
то будет так
For j = 4 To 34 'с 4 по 34 столбец - от D по AH
If j = 10 Or j = 15 Then 'разрывы в 10 и 15 столбцах - J и O соответственно
Else
If Cells(3, j) = 6 Then
range(range(cells(26,j),cells(127,j)).address & "," & range(cells(129,j),cells(132,j)).address)=""
Else
range(range(cells(26,j),cells(127,j)).address & "," & range(cells(129,j),cells(132,j)).address)=8
End If
End If
Next j | |
|
| |
|
|
|
| Завалил. И что же лучше как выбрать?
Однако у меня разрывы только в строках. | |
|
| |
|
|
|
| Что лучше - не знаю
если честно - если бы вы не задали свой вопрос я бы не знал того что написал
Так что спасибо и вам
Удачи | |
|
| |
|
|
|
| Ничего более суперовского не придумал, но из моего километрового получилось во что.
For i = 10 To 45
For j = 4 To 34
If i = 12 Or i = 20 Or i = 35 Or i = 39 Then
Else
If Cells(3, j) = 6 Or Cells(3, j) = 7 Then
Cells(i, j) = ""
Else
Cells(i, j) = Cells(i, 59)
If j = 32 Or j = 33 Or j = 34 Then
If Cells(8, j) < Cells(8, 31) Then
Cells(i, j) = ""
Else
Cells(i, j) = Cells(i, 59)
End If
End If
End If
End If
Next j
Next i
Хоть хвастать нечем, но работает и все меняет. (график напряженности зависящий от календаря). Мой первый макрос в экселе. Снип, | |
|
| |
|
|
|
| ну вот видите - ваш километровый забег превратился в стометровую прогулку
вот только не понятен этот момент
Cells(i, j) = Cells(i, 59)
If j = 32 Or j = 33 Or j = 34 Then
If Cells(8, j) < Cells(8, 31) Then
Cells(i, j) = ""
Else
Cells(i, j) = Cells(i, 59)
End If
End If
сначала некой ячейке А присваивается значение ячейки В
потом условие - а ячейка А отвечает некому условию(условиям) если да то обнуляем
а если нет то снова некой ячейке А присваивается значение ячейки В
кажется что второе присваивание как то лишнее
может этот блок написать вот так
Cells(i, j) = Cells(i, 59)
If j = 32 Or j = 33 Or j = 34 Then
If Cells(8, j) < Cells(8, 31) Then Cells(i, j) = ""
End If
или так
If j = 32 Or j = 33 Or j = 34 Then
If Cells(8, j) < Cells(8, 31) Then
Cells(i, j) = ""
else
Cells(i, j) = Cells(i, 59)
end if
else
Cells(i, j) = Cells(i, 59)
End If | |
|
| |
|
|
|
| Ну попробую. Возможно есть недоработки. Тут вот какое дело. Есть ведомость занятости. Каждому своя часовка. М - 8 часов в день. Ж - 7,2 часа. Где кто будет записан - ХЗ. Поэтому ввел доп столбец где назначается часовка. Там еще совместители - 4 или 3,2
Работа - в некую ячейку вводят месяц в другую год. Сразу пересчитываюстя числа. Вычисляется какое число есть пн. вт. ср. и т.д. Пн-1 Вт - 2... Сб - 6 вс - 7 Затем нажать ctrl+О и запускается данный макрос. Он расставляет значения Cells(i,59) всем на весь месяц, исключая сб и вс. Условное форматирование закрашивает пустые ячейки.
Дополнительный пересчет ввел с 32 до 34 что бы исключить лишние дни месяца был январь, стал февраль. Вот тут-то и исключить 31,30, 29. А потом март - снова ввод.
Но ваш пример рассмотрю. Возможно что-то перемудрил. Спасибо. | |
|
| |
|
|
|
| Ну не знаю. Сделал как советовали, пропускать стал 6 и 7 Но убрал 2 строки лишние действительно. Так работает и кажется быстрее.
For i = 10 To 45 'перебор строк
For j = 4 To 34 'с 4 по 34 столбец - от D по AH
If i = 12 Or i = 20 Or i = 35 Or i = 39 Then 'пропускаем строки 12,20,35,39
Else
If Cells(3, j) = 6 Or Cells(3, j) = 7 Then 'если в 3 строке 6 или 7 то
Cells(i, j) = "" 'вставляем пустую клетку
Else
Cells(i, j) = Cells(i, 59) 'В противном случае присваиваем значение 59 столбца
If j = 32 Or j = 33 Or j = 34 Then 'в 32, 33,34 столбцах
If Cells(8, j) < Cells(8, 31) Then Cells(i, j) = "" 'если в 8 строке j столбец < 31 столбца, то пишем пустую строку
End If
End If
End If
Next j
Next i | |
|
| |
|
|
|
| Понимаете, Гоблин, мне кажется что что-то не правильно
ну не должно быть что сначала ячейке присваиваем значение а потом это значение удаляем
это между прочим время
Хотя если с другой стороны посмотреть - работает и пускай работает | |
|
| |
HiProg.com - Технологии программирования
|