1

私はVBAにまったく慣れていません。データを日付に合わせる必要があるスプレッドシートがあります。シートが更新されると、日付は動的に変化します。

基本的に、以下のマクロは、データを1列左に移動し(列Jを列KからQのデータに置き換えます)、Qから既存のデータをクリアします。データは、値、数式、および書式設定の組み合わせです。以下のマクロは機能しますが、セルE3の値が何であれ、それ自体を何度も繰り返す必要があります(このセルはデータを再調整するためにタイムラグを考慮します)。

したがって、基本的に誰かがE3の値が1より大きい場合、このマクロをE3の値に基づいて繰り返すのを手伝ってもらえますか?また、セルはすでにクリアされているため、一度繰り返された後にセルをクリアするバグが発生するため、最初の部分をそのまま実行する可能性があります次に、E3で回数を追加してIF ("E3") > 1から移動します。Range("K6:P500")私はこれをやろうとしましたが、リピートを取得する方法がわかりません。また、まとめたIFは実際には機能しませんでした。

提案の助けをありがとうございました!

' Week_update Macro
'
' Keyboard Shortcut: Ctrl+Shift+W
'
    Range("K6:Q500").Select
    Selection.Copy
    Range("J6").Select
    ActiveSheet.PasteSpecial Format:=2, Link:=1, DisplayAsIcon:=False, _
        IconFileName:=False
    Range("Q6").Select
    Range("Q6:Q500").Select
    Selection.SpecialCells(xlCellTypeConstants, 1).Select
Selection.ClearContents
End Sub
4

1 に答える 1

0

E3行に含まれる数の列全体を右に移動することを意味すると仮定すると、これはあなたが望むことを行います。

Cellsではなく表記法を使用すると、移動範囲を操作しやすくなりますA1:B1

Sub Week_update()
Dim i As Long
    i = Range("E6")
    If i > 0 Then
        ' Copy range
        Range(Cells(6, 10 + i), Cells(500, 18)).Copy
        ' Select range the same size but i columns to the right
        Range(Cells(6, 10), Cells(500, 18 - i)).Select
        ' Paste special
        ActiveSheet.PasteSpecial Format:=2, Link:=1, _
            DisplayAsIcon:=False, IconFileName:=False
        ' Clear i columns on the right
        Range(Cells(6, 18 - i), Cells(500, 18)).ClearContents
    End If
End Sub

これは、実際に が必要な場合ですPasteSpecial。そうでない場合は、次を使用できます。

Sub Week_update()
Dim i As Long
    i = Range("E6")
    If i > 0 Then
        ' Copy range i columns to the left
        Range(Cells(6, 11), Cells(500, 17)).Copy( _
            Range(Cells(6, 11 - i), Cells(500, 17 - i)))
        ' Clear i columns on the right
        Range(Cells(6, 17 - i), Cells(500, 17)).ClearContents
    End If
End Sub
于 2012-11-28T00:26:11.067 に答える