0

私の目的は、1週間分のデータを取り、要約/合計を別のワークシートに貼り付け、コピーしたばかりの週を非表示/削除する(または別のシートに移動する、気にしない)マクロを作成することです。年末には、基本的にはシート 1 からシート 2 に毎週コピーする必要があります。

現時点では、月曜日から金曜日までをキャプチャするセルに名前を付けています。マクロの実行後にセルを移動したいと考えています。

私がこれまでに持っているもの...

Worksheets("Paste Stuff Here").Range("A1").Value = Worksheets("YearlyDaily").Range(" oneweek incl total column ").Value

Worksheets("YearlyDaily").Range(" Mon-Fri ").Select Selection.Delete Shift:=xlToLeft

4

3 に答える 3

1

良い習慣であることは知っていますが、Mon-Fri に名前付き範囲を使用している理由はありますか? セル参照を使用すると、削除後も常に同じ領域を指します。私が何かを見逃していない限り。列を見ずに見るのは難しい。

于 2011-11-16T02:20:20.283 に答える
1

名前付き範囲は、定義するのと同じ方法で変更できます。

Option Explicit 

Sub NamedRange() 

    Dim Rng1            As Range 

     'Change the range of cells (A1:B15) to be the range of cells you want to define
    Set Rng1 = Sheets("Sheet1").Range("A1:B15") 
    ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng1 

End Sub 

ソース

それでも、他の回答が指摘したように、おそらくこれを処理する他の (より良い) 方法があります。私たちがあなたを助けることができるように、私たちにもっと教えていただくか、より多くの情報で新しい質問をしてください.

于 2011-11-16T07:46:51.607 に答える
0

ここでは、「マクロの実行後に移動したい」という意味を想定しています。名前付き範囲を移動させたいということです。

週ごとに時間を追跡するためのスプレッドシートがあり、「最初の」シートがアクティブなシートです。週が終わったら、アクティブなシート全体を新しいシートにコピーします。前の週から持ち越したい合計があるので、そのデータを保存します。これを行うには、現在の週の合計、古い (前の週の) 合計、新しい合計の 3 つの列があります。新しい合計から古い合計に値を貼り付けます。次に、入力に使用するセルをクリアします。

私のすべての本能は、名前付きセルを使用することでしたが、この場合、それは正しいことではないと結論付けました。セル範囲(A1、K2:K0など)を使用しました。問題は、名前が各シートにローカルではないため、名前を古いシートから新しいシートに移動する必要があることです。それはそうではありません努力する価値があります。また、この場合、各シートに固有の同様の名前 (Mon-FriWeek1、Mon-FriWeek2 など) を作成するという代替手段では、Week1!A1:A10 などより実用的なものは得られません。 --あなたが「想定」されているような名前を使用したという自己満足を除いて. とにかくそれは私の意見です!

そして、これが役立つかもしれません。私のスプレッドシートでは、ある週から次の週に行を追加/削除できます。それを可能にし、名前付き範囲を回避するために、各行に数式がある列に移動し、Shift + End を押してから下矢印を押すことを模倣します。選択は、何かが入力された最後のセルで停止します。そのためのコードは次のとおりです (最初の行はヘッダー/ラベルです)。

    'Copy New Total Hours as PasteValues to Old Total
    Dim lastRow As Long
    Range("K1").Select
    Range(Selection, Selection.End(xlDown)).Select
    lastRow = Selection.Rows(Selection.Rows.Count).Row + 1
    Range("K2:K" & CStr(lastRow)).Select
    Selection.Copy
    Range("J2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

そこに少なくとも 1 つの行を保持する必要があります。そうしないと、それ (および私の場合は他の非常に多くのもの) が機能しません。しかし、それは私のニーズにぴったりです。

これが役立つことを願っています。

于 2011-11-16T03:48:34.563 に答える