2017-04-25 3 views
-1

私が仕事をしているときにキーシートを持っています。私は以下のことを試みるためにボタンマクロを作成しました。VBA Excel:条件を満たすと、あるセルから別のセルにデータをコピーします。

情報の1つの列をループでき、セルにその列のデータが含まれている場合は、同じ行の別の列からデータを取り出し、シート上の別の場所に配置して、それを最後のデータピースの下に追加します。

私のコードは以下の通りです:それは罰金コンパイルし、コードが実行され、条件付きの罰金を満たしているが、それは新しいセルへのセル情報を移動しません

Sub getLostKeys() 

    Dim k As Integer 
    Dim kMove As Integer 
    Dim cellKeyNum As String 
    Dim newCellKeyNum As String 
    Dim Kcolumn As String 
    Dim Ccolumn As String 
    Dim refCell As String 
    Dim outputCell As String 

    Kcolumn = "K" 
    Ccolumn = "C" 

    For k = 2 To 301 
     If Cells(k, 8) <> "" Then 
      cellKeyNum = CStr(k) 
      kMove = k + 6 
      newCellKeyNum = CStr(kMove) 
      refCell = Ccolumn & cellKeyNum 
      outputCell = Kcolumn & newCellKeyNum 
      Range(outputCell).Value = Range(refCell) 
     End If 
    Next k 

End Sub 

ご協力いただきありがとうございます。

+0

変数が多すぎます。何らかの理由? – Masoud

+1

あなたのデータはどのように見えますか?私は*あなたがこれのためにマクロを必要としているとは思っていません、あなたは何をしようとしていますか?セルが空白でない場合は、値を別の列に入れるだけですか? – BruceWayne

答えて

0

を動作するはずです。

はこれを試してみてください:

Sub getLostKeys() 

Dim k  As Integer, kMove as Integer 
Dim Kcolumn As Long, Ccolumn As Long 
Dim refCell As Range, outputCell As Range 

Kcolumn = 11     ' "K" 
Ccolumn = 3     ' "C" 

For k = 2 To 301 
    If Cells(k, 8) <> "" Then 
     kMove = k + 6 
     Set refCell = Cells(k, Ccolumn) 
     Set outputCell = Cells(kMove, Kcolumn) 
     outputCell.Value = refCell.Value 
    End If 
Next k 

End Sub 

注:私は仮定または2を作ったので、このエラーがある場合、またはかなりの仕事、それはデータのサンプルを見るために役立つかもしれません。

編集:また、最後の行として変更されない限り、より強力なマクロを使用すると、よりロバストなマクロとなります。つまり、200行または4999行の場合は動的です。

0
If Cells(k, 8) <> "" Then 
      kMove = k + 6 
      Range("K" & kMove).Value = Range("C" & k).Value 
End If 

は、代わりにCell()値を設定するStringsを使用しての、あなたがRangesを使用する必要があります(これらすべての無用の変数を削除します)

+0

私はそれを解決することができ、あなたは絶対に正しいです。無駄な変数がたくさんありました。 VBAの構文/規則のいくつかにまだ慣れています。助けを歓迎する –

関連する問題