2013-07-25 4 views
1

Любые предложения по решению этой проблемы?Разделение не смежных ячеек с использованием VBA

(обновление)

numerator, denominator диапазоны, содержащие целые значения.

Я хочу сделать клеточное деление на ячейки этих диапазонов, например:

numerator(1)/denominator(1) numerator(2)/denominator(2) ... 

и вставить результаты в quotient. Все диапазоны имеют одинаковый размер и имеют размерность вектора строки.

Моя попытка решения:

Sub DivRanges() 
    Dim targetRng As Range, sourceRng1 As Range, sourceRng2 As Range  
    For i = 1 To targetRng.Cells.Count 
     quotient.Cells(i).Value = numerator.Cells(i).Value/denominator.Cells(i).Value 
    Next i 
End Sub 

Проблема заключается в том, что DivRanges не через петлю каждого значения диапазонов, поскольку они являются строки-векторы. Вместо этого он идет горизонтально на один шаг вниз по мере роста. Эта проблема возникает, когда ячейки диапазонов не смежны.

Здесь отображается проблема, основанная на коде от mehow. Результатом являются ячейки, выбранные на листе.

Example

+0

ряда-векторы? как они выглядят в камере? Можете ли вы предоставить скриншот или образец? есть ли несколько значений в одной ячейке? пожалуйста, объясните –

+0

+1 для обновления вопроса –

ответ

1

если ваша электронная таблица выглядит

bef

этот код

Sub DivRanges() 
    Dim quotient As Range, numerator As Range, denominator As Range 

    Set numerator = Range("A1:D1") 
    Set denominator = Range("A2:D2") 
    Set quotient = Range("A3:D3") 

    Dim i As Long 
    For i = 1 To quotient.Count 
     quotient.Cells(i).Value = numerator.Cells(i).Value/denominator.Cells(i).Value 
    Next i 
End Sub 

дает

aft


Обновление

не смежны Клетки раствор

предполагается, что ваш лист

before

используя ниже Код

Sub DivRanges() 
    Dim quotient As Range, numerator As Range, denominator As Range 

    Set numerator = Range("A1, C1, D1, E1") 
    Set denominator = Range("A2, C2, D2, E2") 
    Set quotient = Range("A3, C3, D3, E3") 

    Dim c As Range 
    Dim i As Long 
    i = 0 
    For Each c In quotient 
     Range(c.Address) = Range(getNum(numerator.Address, i))/Range(getNum(denominator.Address, i)) 
     i = i + 1 
    Next 

End Sub 

Function getNum(str As String, i As Long) As String 
    getNum = Split(str, ",")(i) 
End Function 

результат

result

+0

Вы верны. Но в моем случае ячейки не смежны, и это вызывает проблему. Я добавлю это в описание. – karamell

+0

@karamell О, я вижу человека! У меня есть обновления моего ответа, пожалуйста, дайте мне знать, если это то, что вы искали –

+1

Работает как шарм. Благодаря! – karamell

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