2011-12-21 108 views
1

我的Excel工作表有多個使用範圍。我想複製每個範圍值並連接它們。我所做的是在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:從I1 H1和連接一個「/」和值:J1(也合併)以及K1至L1。但是,Excel會引發「下標超出範圍」錯誤。我怎麼能做到這一點?

screenshot

+0

你什麼意思通過將它們連接起來做?看起來你正在試圖創建一個新的範圍,將範圍1除以範圍2? – brettdj 2011-12-21 12:57:45

+1

「下標超出範圍」表示沒有工作表「mysheet」。 tempString不是一個對象,所以你不需要Set。你不能以這種方式選擇一個範圍。你想要細胞I27,J27和K27串聯?如果是這樣,請分別拿起它們。如果它們合併,請將它們稱爲I27。 – 2011-12-21 13:22:16

回答

2

從你原來的文章中不太清楚你需要什麼輸出。這裏是一個選項,可以幫助你開始:

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 

鑑於這一點,你可以使用的rowIndex範圍(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 
+0

該解決方案工作,但對於合併單元格我得到的結果36 M /// 40 M // 36 M //所以它在單元格中循環移動。因此,「/」的no等於單元格的數量:( – kinkajou 2011-12-22 09:49:56

+0

)您是否可以更新原始文章以顯示您希望實現的數據和輸出示例?我不清楚數據的結構。 – 2011-12-22 11:06:42

+0

我已更改帖子 – kinkajou 2011-12-22 11:25:43

1

看來,要連接的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