2016-05-24 5 views
-1

Я пытаюсь создать код (простой для некоторых), но я неопытный и ценю помощь.if/then formula over many rows

код смотреть на клетку ("J1") и делать в if/then для результата в («K1»), но я хочу, чтобы это дублированный смотреть на огневом J2 to J10 клетки, чтобы дать результат в диапазоне K2 to K10 клеток также. Приведенный ниже код работает для одной строки формулы:

Sub Check() 
     Dim DDDD As Date, result As String 
     DDDD = Range("j1").Value 
     If DDDD >= Date Then 
      result = "Future" 
     Else 
      result = "Now" 
     End If 
     Range("k1").Value = result 
    End Sub 
+0

Excel VBA была вокруг в течение долгого времени. Поэтому [MS Documentation] (https://msdn.microsoft.com/en-us/library/ezk76t25.aspx) на самом деле довольно хорошо. Я рекомендую использовать структуру «For Loop». – OldUgly

+0

Еще лучше: не используйте VBA для этого, но в ячейках формулы. – trincot

+0

Спасибо Teylyn, я думаю, что ваш код охватывает только J1 Cell, а не до J10. Цените свой ответ. Ответ Shai Rado ниже входит в цикл формулы. – quwi

ответ

0

Вы можете использовать For Each цикл и метод Offset, как это:

Sub Check() 
    Dim DDDD As Date, result As String 
    Dim cell as Range 

    For Each cell in Range("J1:J10") 
     DDDD = cell.Value 
     If DDDD >= Date Then 
      result = "Future" 
     Else 
      result = "Now" 
     End If 
     ' Change value at the right side of the cell 
     cell.Offset(0,1).Value = result 
    Next cell 
End Sub 

Но с помощью VBA для этого действительно слишком много. Вы можете просто положить эту формулу в K1:

=IF(J1 >= TODAY(), "Future", "Now") 

... и затем копировать/перетащить эту формулу вниз на другие клетки ниже нее.

+0

Не могли бы вы дать ответ на ответы? – trincot

+0

Спасибо, Энди @trincot очень ценю ваш обновленный ответ. Я тоже ударил тики :) – quwi

0

Вот фрагмент кода, который перебирает колонке J, а результат будет помещен в колонке K.

Sub Check() 

Dim DDDD As Date 
Dim result As String 
Dim row, NumofRows As Integer 

' use NumfofRows as a Dynamic value to decide how many rows of data you want to look at column J 
NumofRows = 10 

For row = 1 To NumofRows 
    If Cells(row, 10) >= Date Then 
     result = "Future" 
    Else 
     result = "Now" 
    End If 
    Cells(row, 11).Value = result 
Next 

End Sub 
+0

Спасибо Shai Rado, оцените вашу помощь вместе с другими, которые отвечают на мой пост. – quwi

0

В будущем взгляните на rules of etiquette, чтобы ваши вопросы были интересными и заманчивыми для ответа. По вашему вопросу, будет более эффективным иметь дело с диапазонами, а не с отдельными ячейками с датами в них. Цикл For Each...Next может проходить через каждую ячейку диапазона. Затем петля If...Then...Else...End If может принимать решение при различных условиях. Метод Offset(0, 1) может использоваться внутри цикла If...Then для размещения результатов в столбце справа. Следующий код делает то, что вы, кажется, задаются вопросом:

Sub Check() 
' Declare your variables 
    Dim MyDates As Range 
    Dim result As String 

' First, grab all the values in the J2:JX column, where 
' X can be any number of dates you choose. Note that 
' you must "Set" Object variables, but you must "Dim" 
' other types of variables. 
    Set MyDates = Range(Range("J2"), Range("J2").End(xlDown)) 

' Loop through every cell in the dates column and give the 
' offset column (column K) a string value if the condition 
' is met. 
    Dim Cell As Range 
    For Each Cell In MyDates 
     If Cell >= Date Then 
      result = "Future" 
      Cell.Offset(0, 1).Value = result 
     Else 
      result = "Now (or past)" 
      Cell.Offset(0, 1).Value = result 
     End If 
    Next Cell 
End Sub 

метод End(xlDown) эмулирует выбора ячейки и нажав Ctrl + стрелка вниз. Также обратите внимание, что этот код вообще не обрабатывает ошибки. Например, если вы случайно введите дату как текст, процедура приведет к неправильному результату. Кроме того, в зависимости от времени ввода данных вы можете получить путаные результаты. Я приложил изображение результатов в Excel здесь:

My results in Excel with Form Control to execute VBA.

+0

Спасибо Andy, @trincot, мне дали отличные отзывы и очень ценю. Извиняюсь за то, что я не отвечаю раньше, я за границей в командировке и только сейчас получаю личные письма. Я новичок и считаю, что эти приложения действительно интересны и имеют реальную ценность в моей работе. – quwi

+0

Это поможет сообществу, если вы выберете ответ на ваш ответ. Слева от вопросов - опция галочки. Если вы выберете его, который станет зеленым, сообщите сообществу, что вы проголосовали за лучший ответ, и он дает очки вкладчику. – Andy

+0

Hi @Andy, Можете ли вы пойти дальше с кодом. Я пытаюсь выяснить, как адаптировать ваш код, если у меня есть даты в Cells J2: J100, но только хочу, чтобы формула применима к Cells J3: J10 ..... Я попытался поместить его в ваш код как J3: J10 без успех. – quwi