Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Переход в exsel
 
 автор: Гоблин   (10.12.2009 в 23:49)   личное сообщение
 
 

Все привет.
Вот задача. 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. Там с разрывами будет, но принцип главное плиз?

  Ответить  
 
 автор: ShadowOfSun   (11.12.2009 в 00:59)   личное сообщение
49 Кб.
 
 

Гоблин, доброго времени суток.
попробуй отображение столбцов изменить на цифровое
на картинке нарисовано где

удачи

  Ответить  
 
 автор: snipe   (11.12.2009 в 03:59)   личное сообщение
 
 

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- номер правого столбца

Обратите внимание на то что инфа в объединенных ячейках хранится в верхней левой ячейке

  Ответить  
 
 автор: Гоблин   (11.12.2009 в 20:51)   личное сообщение
 
 

Спасибо все. С настройками 2003 не разбирался, тем более в exsel. Снип, за пояснение и пример спасибо отдельное.
В целом уже сделал все и работает. Однако код на километр получился. Буду переделывать.

  Ответить  
 
 автор: snipe   (12.12.2009 в 05:10)   личное сообщение
 
 

можно вот так

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

  Ответить  
 
 автор: snipe   (12.12.2009 в 07:00)   личное сообщение
 
 

а если использовать 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

  Ответить  
 
 автор: Гоблин   (12.12.2009 в 16:07)   личное сообщение
 
 

Завалил. И что же лучше как выбрать?
Однако у меня разрывы только в строках.

  Ответить  
 
 автор: snipe   (12.12.2009 в 18:32)   личное сообщение
 
 

Что лучше - не знаю
если честно - если бы вы не задали свой вопрос я бы не знал того что написал
Так что спасибо и вам
Удачи

  Ответить  
 
 автор: Гоблин   (12.12.2009 в 22:26)   личное сообщение
 
 

Ничего более суперовского не придумал, но из моего километрового получилось во что.
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
Хоть хвастать нечем, но работает и все меняет. (график напряженности зависящий от календаря). Мой первый макрос в экселе. Снип,

  Ответить  
 
 автор: snipe   (13.12.2009 в 09:57)   личное сообщение
 
 

ну вот видите - ваш километровый забег превратился в стометровую прогулку
вот только не понятен этот момент

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

  Ответить  
 
 автор: Гоблин   (13.12.2009 в 11:38)   личное сообщение
 
 

Ну попробую. Возможно есть недоработки. Тут вот какое дело. Есть ведомость занятости. Каждому своя часовка. М - 8 часов в день. Ж - 7,2 часа. Где кто будет записан - ХЗ. Поэтому ввел доп столбец где назначается часовка. Там еще совместители - 4 или 3,2
Работа - в некую ячейку вводят месяц в другую год. Сразу пересчитываюстя числа. Вычисляется какое число есть пн. вт. ср. и т.д. Пн-1 Вт - 2... Сб - 6 вс - 7 Затем нажать ctrl+О и запускается данный макрос. Он расставляет значения Cells(i,59) всем на весь месяц, исключая сб и вс. Условное форматирование закрашивает пустые ячейки.
Дополнительный пересчет ввел с 32 до 34 что бы исключить лишние дни месяца был январь, стал февраль. Вот тут-то и исключить 31,30, 29. А потом март - снова ввод.
Но ваш пример рассмотрю. Возможно что-то перемудрил. Спасибо.

  Ответить  
 
 автор: Гоблин   (13.12.2009 в 15:04)   личное сообщение
 
 

Ну не знаю. Сделал как советовали, пропускать стал 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

  Ответить  
 
 автор: snipe   (13.12.2009 в 15:19)   личное сообщение
 
 

Понимаете, Гоблин, мне кажется что что-то не правильно
ну не должно быть что сначала ячейке присваиваем значение а потом это значение удаляем
это между прочим время

Хотя если с другой стороны посмотреть - работает и пускай работает

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList