2016-12-14 20 views
-1

私はExcelのVBAでかなり新しく、この問題については本当に助けになります。範囲をコピーして同じシート上の1行下に移動します

ブックには、範囲A5:AZ1000のデータが含まれています(新しいクライアント情報は新しい行に入力されますが、ケースの性質によっては空白になる場合もあります)。ユーザーが新しいクライアント情報を入力すると(新しい行が始まる)、既存のデータ(範囲A5:AZ1000)が1行下に移動し、空白の行が範囲A5:AZ:5に表示されます。これを実現するために、ユーザーにマクロ「新規クライアント」をクリックさせたいと思います。

これは共有ブックであるため、新しい行を追加するマクロを作成することはできません。ここで

は、私が働いているコードです:

Sub shiftdown() 
' shiftdown Macro 
Dim lastRow As Long 
Dim lastColumn As Long 
Dim rngToCopy As Range 
Dim rng As Range 
Set rng = ActiveSheet.Range("A1").Value 
lastColumn = ActiveSheet.Cells(4, Columns.Count).End(xlToLeft).Column 
lastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 
If rng > 0 Then 
    ActiveSheet.Range("A5" & lastRow).Select 
    Selection.Copy 
    PasteSelection.Offset(1, 0).PasteSpecial xlPasteValues 
    'Error Object Required 
End If 
End Sub 
+0

'PasteSelection.'を' Selection'に変更します。 Selectを使用しないようにする必要があります。http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros –

+0

また、これをIF: 'ActiveSheet.Range(" A5 "&lastRow).Offset(1、0).Value = ActiveSheet.Range(" A5 "&lastRow).Value'そしてクリップボードは避けてください。 –

+1

コードを削除したのはなぜですか? – YowE3K

答えて

0

は、通常、私は答えられないだろうことはできませんが、私は書き始めました以下の質問は実際にはでした私はそれを提供するかもしれないので、コードを示しました。それはあなたが何をしているかを達成するかもしれません。

Sub shiftdown() 
' shiftdown Macro 
    Dim rng As Range 
    With ActiveSheet 
     If .Range("A1").Value > 0 Then 

      Set rng = .Range(.Cells(5, 1), _ 
          .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, _ 
            .Cells(4, .Columns.Count).End(xlToLeft).Column)) 
      rng.Offset(1, 0).Value = rng.Value 
      .Rows(5).EntireRow.ClearContents 
     End If 
    End With 
End Sub 
+0

ご返信ありがとうございます。あなたが提供したコードは、列Aのデータを1行下に移動していますが、マクロがクリックされたときに下に移動する範囲A5:AZ1000(最後の行と列のデータ)が必要です。行A5:A5のデータ。これであなたの質問がクリアされますか? – Ben

+0

@ben - Hmmm - 私のテストでは、4行目のカラムL(コピーするカラム数をテストするためのカラム)までデータを持ち、A5:L21をA6:L22に移動しました。あなたのAZ4には何かが含まれていますか? – YowE3K

+0

今はうまくいっているようです!私の間違いは、私が何らかの形で失われた検証でした。再度、感謝します。 – Ben

0

Set rng = ActiveSheet.Range("A1").Value ???

RNGは範囲であれば、次にによってそれを置き換える:

Set rng = ActiveSheet.Range("A1") 

又はRNGが可変である場合、

Dim rng As variant 
rng = ActiveSheet.Range("A1").Value 

別のエラーによって

Dim rng As Range 

を置き換える:

あなたはrを宣言しました範囲としてNG、その後、あなたはそれがあるかどうかをテスト> 0

If rng > 0 Then ... 

質問が努力を表示する任意のコードが含まれていない場合

関連する問題