私のシートの各行は通貨取引を表しています。各行の最初の 3 つのセルには、通貨、日付、価格が表示されます。その後の各 3 つのセルは、各アカウントが何をしているかを示します。取引は任意の数の口座を持つことができるため、行の長さは異なります。取引 (行) ごとに、通貨、日付、価格、売買、数量、アカウントを示す独自の行を各アカウントに持たせたいと考えています。
**Example**
1 2 3 4 5 6 7 8 9 10 11 12 13
-------------------------------------------------------------------------------
EURUSD 1/1/13 1.30 Buy 100 acc1 Buy 1000 Acc2 Buy 100 acc3 Buy .....
EURUSD 2/1/13 1.31 Buy 1000 acc1 Buy 1000 Acc2 Buy 100 acc3 Buy .....
.
.
.
**WOULD BECOME**
EURUSD 1/1/13 1.30 Buy 100 acc1
EURUSD 1/1/13 1.30 Buy 1000 Acc2
EURUSD 1/1/13 1.30 Buy 100 Acc3
. . .
. . .
. . .
EURUSD 2/1/13 1.31 Buy 1000 acc1
EURUSD 2/1/13 1.31 Buy 1000 acc2
EURUSD 2/1/13 1.31 Buy 100 acc3
私はこれを達成したいいくつかのコード (以下) を書きましたが、そこには無限ループがあると思います。行ごとに、4 列目から開始します。購入または売却の場合
いくつかの変更を試みましたが、同じ問題です。私はそれが私の顔を見つめていると確信していますが、私のエラーを見ることはできません。誰でも修正を提案できますか?ちなみに、それは最も美しいコードではないので、より良い解決策があれば、私はすべて聞いています。ありがとう
Sub changeformat()
Dim p As Integer
Dim r As Integer
Dim c As Integer
p = 150
For r = 1 To 140
c = 4
Range("A" & r).Select
Do While ActiveCell.Value = """"
Do Until c = 303
Cells(r, c).Select
If InStr(ActiveCell.Value, "Buy") > 0 Or InStr(ActiveCell.Value,"Buy") > 0 Then
'The first 3 cells will of each new row will be the same as the first 3 cells
'of current active 'original' row
ActiveSheet.Cells(p, 1).Value = ActiveSheet.Cells(r, 1).Value
ActiveSheet.Cells(p, 2).Value = ActiveSheet.Cells(r, 2).Value
ActiveSheet.Cells(p, 3).Value = ActiveSheet.Cells(r, 3).Value
'The active cell and the 2 cells that follow will be pasted to
'columns D to F in row p
ActiveSheet.Cells(p, 4).Value = ActiveSheet.Cells(r, c).Value
ActiveSheet.Cells(p, 5).Value = ActiveSheet.Cells(r, c + 1).Value
ActiveSheet.Cells(p, 6).Value = ActiveSheet.Cells(r, c + 2).Value
p = p + 1
c = c + 3
End If
Loop
Loop
Next r
End Sub
編集
以下の変更を行ったところ、無限ループが止まったようです。現在、想定されていることはほとんど実行されていますが、データが省略されています。たとえば、シートの最初の行には 9 つのセル (2 つのアカウント) しかありません。2 番目には 33 (10 アカウント) があります。これらの 2 行は、12 のアカウントに対して 12 の新しい行に変換されます。残念ながら、各行の最初のアカウントをコピーしているだけです。最初の11行でこれを行い、次に行12と13で機能します。何が起こっているのかについて何か提案はありますか? ありがとう
p = 150
For r = 1 To 140
If Range("A" & r).Value <> "" Then
'Do While Range("A" & r) <> """"
For c = 4 To 303
Cells(r, c).Select
If ActiveCell.Value <> "" Then
If InStr(ActiveCell.Value, "Buy") > 0 Or InStr(ActiveCell.Value, "Buy") > 0 Then
'The first 3 cells will of each new row will be the same as the first 3 cells
'of current active 'original' row
ActiveSheet.Cells(p, 1).Value = ActiveSheet.Cells(r, 1).Value
ActiveSheet.Cells(p, 2).Value = ActiveSheet.Cells(r, 2).Value
ActiveSheet.Cells(p, 3).Value = ActiveSheet.Cells(r, 3).Value
'The active cell and the 2 cells that follow will be pasted to
'columns D to F in row p
ActiveSheet.Cells(p, 4).Value = ActiveSheet.Cells(r, c).Value
ActiveSheet.Cells(p, 5).Value = ActiveSheet.Cells(r, c + 1).Value
ActiveSheet.Cells(p, 6).Value = ActiveSheet.Cells(r, c + 2).Value
p = p + 1
End If
End If
Next c
'Loop
End If
Next r