2017-01-20 5 views
-3

スプレッドシートをループするマクロを作成しようとしていて、各行で3つの値(異なる列から)を連結して単一の値結果は同じ行の別の列に表示されます。次に、列の異なる値からの数値に基づいて、その数値から増分します。これを繰り返すごとに(最初のものを含む)、最初の列の値がその行からコピーされ、各増分が新しく作成された出力の同じ情報を反映するようにする必要があります。VBAを連結して別の値に基づいて結果の値を増やす

ここで、入力データの例は次のとおり、

enter image description here

B2、C2、D2は全て番号5555551000、その結果、連結されるべきであり、それは細胞I2に置かれるべきです。 A2はI2の位置識別子としてH2にコピーする必要があります。 F2の値(この場合は10回)に基づいてI2をインクリメントし、その結果をI3から開始してA2の値を対応するH列の各出力セルの左側に反復する必要があります。

ここで同じシート上の出力の例です:出力数の第1の範囲を拡大するために完了すると

enter image description here

、ループが次の行に続けて処理を繰り返します。

私は開始点を設定し、次にforループとforループを実行し、Do Whileループを実行してDID整数に基づいてループを解除しました。私は多くの成功を収めているわけではありません。おそらく、私がActiveCellを使って繰り返しの間に移動しようとしている方法と関係しているでしょう。

何か提案がありがとうございます。私はまだ画像を埋め込むことは許されていないので、例への外部リンク。

+2

あなたの問題を私たちはあなたを助けることができるようにあなたのコードを投稿してください。 – YowE3K

答えて

0

他の人が指摘しているように、コードを投稿するときに何をしようとしているのか理解しやすくトラブルシューティングしていますが、私はそれを突き刺して次のことを思い出しました。 2つの異なるシート(ソースシート、次いで出力シート)上で行われる。あなたが本当に同じシートにそれを必要とするならば、あなたは古いデータの上にデータを出力することができたと思います。このことができます

Public Sub sampleSub() 
Dim sourceWS As Worksheet 
Dim sourceData() As Variable 
Dim outputRange As Range 
Dim outputArr() As Variable 
Dim readCounter As Long 
Dim writeCounter As Long 
Dim iterationCounter As Long 

Set sourceWS = ThisWorkbook.Sheets(1) 
sourceData = sourceWS.Range("A2:F4").Value2 'Read in source data 

'Redim outout array with enough rows to be able to store each iteration (column F => 10 + 120 + 1000...) 
ReDim outputArr(1 To Application.WorksheetFunction.Sum(sourceWS.Range("F2:F4")), 1 To 9) 

For readCounter = 1 To UBound(sourceData, 1) 'Loop through each row of source data 
    For iterationCounter = 0 To sourceData(readCounter, 6) - 1 'Iterates to # in source data column F 
     writeCounter = writeCounter + 1 
     outputArr(writeCounter, 1) = sourceData(readCounter, 1) 'Write source data column A to output column A 
     outputArr(writeCounter, 2) = sourceData(readCounter, 2) 'Write source data column B to output column B 
     outputArr(writeCounter, 3) = sourceData(readCounter, 3) 'Write source data column C to output column C 
     outputArr(writeCounter, 4) = sourceData(readCounter, 4) 'Write source data column D to output column D 
     outputArr(writeCounter, 5) = sourceData(readCounter, 5) 'Write source data column E to output column E 
     outputArr(writeCounter, 6) = sourceData(readCounter, 6) 'Write source data column F to output column F 
     outputArr(writeCounter, 7) = sourceData(readCounter, 7) 'Write source data column G to output column G 
     outputArr(writeCounter, 8) = sourceData(readCounter, 1) 'Write source data column A to output column H 
     'Concatonate source data columns B, C & D and then adds iteration counter 
     outputArr(writeCounter, 9) = CLng(sourceData(readCounter, 2) & sourceData(readCounter, 3) & sourceData(readCounter, 4)) + iterationCounter 
    Next 
Next 

'User selects target range and then data is outputted 
Set outputRange = Application.InputBox("Select target for output:", Type:=8) 
outputRange.Resize(UBound(outputArr, 1), UBound(outputArr, 2)) = outputArr 

End Sub 

希望、 TheSilkCode

+0

TheSilkCode、これはよさそうだ、私はこのようにすることを考えなかった。私はあなたがここにいることに基づいて鉱山を書き直して報告します。迅速な対応に感謝します! – enegence

関連する問題