2017-11-08 17 views
0

解決策をインターネットで試しても失敗しても大したことはありますが、私の問題。今、皆さんが私を助けてくれることを願っています。ループを使用して1つのワークシートの別のワークシートから別のワークシートに結合されていないセルを別のセルにコピーする

あるワークシート(ws)から別のワークシート(omk)のマージされたセルを含む別の範囲にセルの範囲(マージされていない)をコピーしようとしています。私は20の範囲かそれ以上のためにこれをしなければならないので、私はループを使用しています。私がこれまでに書いたコードは下に貼り付けられます:

Dim omk, ws As Worksheet 
Dim a, b, i, y, z As Integer 
Dim x As Range 

Set omk = Sheets("Omkostningsmodel") 
Set ws = ActiveSheet 

omk.Activate 

a = 173 
i = 187 
For Each cell In Range("C187", "C206") 
    z = 3 
    b = 3 
    For Each x In Range(Cells(i, z), Cells(i, 22)) 
     x.Value = ws.Cells(a, b) 
     z = z + 1 
     b = b + 1 
     If z = 4 Or z = 13 Or z = 16 Then 
      z = z + 1 
     End If 
    Next x 
    a = a + 1 
    i = i + 1 
Next cell 

私の問題は、その列のCとDである(3と4)はワークシート「OMK」にマージされているので、私は2番目のループを作るしようとしていますこのとき、ワークシート "ws"の列dを "ロック"にしたまま列dをスキップします。しかし、コードを実行すると、ワークシートの「ds」列がロックされていないように見えますか?

わかりませんが、私は十分明確なので、あなたが私の問題に従えない場合は教えてください。

おかげで:)

答えて

0

あなたがマージされた列を持っているとき、次の列に値を埋めるためにオフセット方式を利用することができます。次のようなもの:

Dim omk as Worksheet, ws As Worksheet 
Dim a as Integer, b As Integer, i As Integer 
Dim y As Integer, z As Integer, Coloffset As Integer 
Dim x As Range, cell As Range 

Set omk = Sheets("Omkostningsmodel") 
Set ws = ActiveSheet 

omk.Activate 

a = 173 
i = 187 

For Each cell In Range("C187", "C206") 
    z = 3 
    b = 3 
    Coloffset = 0 
    For Each x In Range(Cells(i, z), Cells(i, 22)) 
     If x.Column = 4 Or x.Column = 13 Or x.Column = 16 Then 
      Coloffset = Coloffset + 1 
     End If 

     x.Offset(0, Coloffset).Value = ws.Cells(a, b) 

     b = b + 1 
    Next x 
    a = a + 1 
    i = i + 1 
Next cell 
+0

ありがとうございます。あなたの回答を読む前に、私はほとんどそれを理解することができましたが、あなたの答えは私が残りを解決するのを助けました:D – BitteB

+0

喜んで私は助けることができました。 – DecimalTurn

関連する問題