Копирование нескольких диапазонов и объединение их в Excel - PullRequest
1 голос
/ 21 декабря 2011

Мой лист Excel имеет несколько используемых диапазонов. Я хочу скопировать каждое значение диапазона и объединить их. То, что я сделал, это

Set tempRange = Union(SrcWkb.Worksheets("mysheet").Range("F1:H1"), SrcWkb.Worksheets("mysheet").Range("I1:J1"), SrcWkb.Worksheets("NWP").Range("K1:L1"))

For Each eachRange In tempRange
  tempString = tempString & eachRange & "/"
  MsgBox tempString
Next eachRange

Я хочу скопировать значение в объединенные ячейки F1: H1 и объединить "/" и значение из I1: J1 (также объединенного) и от K1 до L1. Тем не менее, Excel выдает ошибку «индекс вне диапазона». Как мне этого добиться?

screenshot

Ответы [ 2 ]

2 голосов
/ 22 декабря 2011

Из вашего исходного поста не совсем понятно, какой вывод вам нужен. Вот один из вариантов, который может помочь вам начать:

Sub ConcatRanges()
    Dim rangeOne As Range, rangeTwo As Range, rangeAll As Range, cl As Range, str As String

    Set rangeOne = Worksheets("mysheet").Range("I27:K27")
    Set rangeTwo = Worksheets("mysheet").Range("L27:N27")
    Set rangeAll = Union(rangeOne, rangeTwo)

    For Each cl In rangeAll
        str = str & cl & " / "
    Next cl

    Debug.Print str //Output: 1 / 2 / 3 / 4 / 5 / 6 /
End Sub

Обновлено сообщение

Работа с объединенными диапазонами может быть сложной. Например, объединенный диапазон F1:H1 имеет значение 36M. Чтобы получить доступ к значению, вы должны обратиться к первой ячейке в объединенном диапазоне. Пример:

Sub MergedRangeDemo()
    Dim rng As Range, cl As Range
    Set rng = ActiveSheet.Range("F1:H1")

    For Each cl In rng
        Debug.Print cl.Value, cl.Address
    Next cl

    //Output: 36M    $F$1  <-- Only first cell contains the value
    //               $G$1
    //               $H$1
End Sub

Учитывая это, вы можете объединить значения, используя индекс строки (1) диапазона:

Sub ConcatRangesUpdated()
    Dim rangeOne As Range, rangeTwo As Range, rangeThree As Range, str As String

    Set rangeOne = ActiveSheet.Range("F1:H1")
    Set rangeTwo = ActiveSheet.Range("I1:J1")
    Set rangeThree = ActiveSheet.Range("K1:L1")

    str = rangeOne(1) & " / " & rangeTwo(1) & " / " & rangeThree(1)

    Debug.Print str 'Output: 36M / 40M / 36M
End Sub
1 голос
/ 21 декабря 2011

Похоже, что вы хотите объединить I27 и L27 с косой чертой между ними и поместить результаты в другой лист. Этот пример делает именно это: объединяет I27 и L27, J27 и M27, K27 и N27 и помещает результаты в ячейки A27: C27 на листе назначения. Обратите внимание, что в формуле используется обозначение R1C1 с относительными позициями столбцов; при необходимости отрегулируйте.

Sub ConcatCells()
Dim sSource As String
sSource = "'" & SrcWkb.Worksheets("mysheet").Name & "'!"
DstWks1.Range("A27:C27").FormulaR1C1 = "=" & sSource & "RC[8] & " _
    & Chr$(34) & "/" & Chr$(34) & " & " & sSource & "RC[11]"
End Sub
...