2013-05-16 2 views
2

Я делаю эвристический анализ, и у меня есть проблема: я хочу найти в столбцах D номера, которые соответствуют столбцу J, и заменить их на «0». Вы можете видеть, что я пытаюсь сделать на этом изображении: enter image description hereVba как сравнить 2 столбец

Задача: Столбец D имеет кратные значения для каждой ячейки, а столбец J имеет одно значение для ячейки. какая-то часть кода:

Dim i,j As Integer 
Dim temp As String 
Dim x As Integer 
Dim d As String 

i = Application.CountA(Range("E:E")) + 10 
'number of cell with values 
j = Application.CountA(Range("J:J")) + 10 
For j = 11 To j 
    temp = Range("J" & j).Value 
     For i = 11 To i 
     d = Range("D" & i).Value 

     *For x = LBound(vec) To UBound(vec) 

      If vec(x) = temp Then 
      vec(x) = 0 
      Range("D" & i).Value = vec(x) 
      End If 

      Next    


     Next 
Next 

* -> Вот это проблема, я наклоняю понял, как пройти через кома «» в столбце D, а также хранить данные. Я хочу сравнить temp со значением на «d», но «d» может иметь несколько номеров в одной и той же ячейке, например «3, 2, 1», и если есть такое совпадение, как temp = 3, тогда d = "0,2,1".

Английский - это не мой родной язык, поэтому я надеюсь, что вы поймете, чего я хочу.

Спасибо!

+1

http://stackoverflow.com/questions/16549546/vba-find-replace-a-number-by-a-macro-excel – Santosh

ответ

0

вы можете сделать это с помощью следующей формулы - нет необходимости в VBA

  1. сделать новую колонку где-то вблизи колонок D.
  2. В вашей новой колонке, используйте эту находку и Заменитель формулы:

    =IF(NOT(ISERROR(FIND(J:J,D:D))),SUBSTITUTE(D:D,J:J,"0"),D:D) 
    

Эта формула ищет значение в колонке J внутри ячеек в столбце D. Если матч Найдено, 0 заменено найденным числом. В противном случае возвращается столбец D.

  • Если вы хотите, вы можете скрыть столбец D, чтобы избежать путаницы.

в VBA у вас есть функция строки под названием Split (vString, разделитель) который будет разделить строку на лексемы, используя указанный разделитель. См

примеры:

+0

Эй спасибо за Ваш ответ! Я уже пробовал функцию split, но проблема с использованием этой функции заключается в том, как вы можете передать значения снова в столбец D с помощью «,»? Потому что, когда вы разделяете числа при передаче данных (массива) в столбец, это будет похоже на это «023», и я хочу «0,2,3». – Delpi10

+0

, чтобы вы могли прокручивать массив, объединяя каждое число с запятой, строя свою строку. ** в качестве альтернативы вы можете использовать формулу ** –

1

Я думаю, что ваш почти там вам просто нужно разделить каждую ячейку, а затем искать то воссоздать и замените строку в ячейке. Обратите внимание, что я не тестировал это.

Dim i,j As Integer 
Dim temp As String 
Dim x As Integer 
Dim d As String 

i = Application.CountA(Range("E:E")) + 10 
'number of cell with values 
j = Application.CountA(Range("J:J")) + 10 
For j = 11 To j 
    temp = Range("J" & j).Value 
     For i = 11 To i 
     d = Range("D" & i).Value 
     Vec = split(d, ",") 'split the cell 
     d = "" 'clear the string 

     For x = LBound(vec) To UBound(vec) 

      If vec(x) = temp Then 
      vec(x) = 0 
      End If 
      d = d & vec(x) & "," 'recreate the string 

     Next    

     Range("D" & i).Value = left(d, len(d) - 1) 'save the string without the last , 

    Next 
Next 
+0

Эй, она делает именно то, что я хочу, но она помещает 8 "," в каждую ячейку. – Delpi10

+0

Не понимаю, почему. Я должен буду проверить и вернуться к тебе. – glh

+0

Это, наконец, сработало! Спасибо всем вам. – Delpi10

Смежные вопросы