プロが教える店舗&オフィスのセキュリティ対策術

Sub 更新()のマクロはとりあえず、完成して使用しています。(若干不都合なところがあります。)これは、毎週の累積が増えていきますが、・・・・・5・4・3・2・1と増えて行くのを1・2・3・4・5・・・・というように、若い番号から順序よくなるようにしたいと思っています。(約20週程度)
 Sub Test4 順番() 以下のような、マクロコードを教えて頂いたのですが、前述のような順番になりません。どこをどのように修正したらよいでしょうか。
 なお、
1.AL列のところから、7項目が1セットです。(約20週程度)
2.例えばX5=SUM(INDEX(INDIRECT("RC38:RC177",0)*(MOD(COLUMN(INDIRECT("A1:EJ1"))-1,7)=COLUMN(A2)-1),0))、黄色の部分は例えばX25=SUM(X5:X24)総合計累計の行の合計の関数です。(関数を使用しているところ)
3.Sub Test4 順番() のマクロコードでは、1行目の(7項目が1セット)の最初の場所に番号が必要になりますので、これを入れるマクロコードが必要になるかもしれません。
4.できればですが、AE~AK列が累積を送るとすると、どうしても空いてしまっています。これをどうにかできればと思っています。

Sub 更新()
Range("AE1:AK45").Value = Range("Q1:W45").Value '「先週までの累計」に「累計」数値を入れる
Range("AE1:AK45").Insert Shift:=xlToRight
Range("AL1", "AR45").BorderAround Weight:=xlMedium '外枠:中太線
Range("AL1", "AR52").Borders.Weight = xlHairline '格子:極細線
For c = 38 To 177 Step 7
Set Rng = Range(Cells(4, c), Cells(45, c))
Cells(46, c).Value = Application.WorksheetFunction.Sum(Rng)
Next c
For c = 39 To 177 Step 7
Set Rng = Range(Cells(4, c), Cells(45, c))
Cells(47, c).Value = Application.WorksheetFunction.Sum(Rng)
Next c
For c = 40 To 177 Step 7
Set Rng = Range(Cells(4, c), Cells(45, c))
Cells(48, c).Value = Application.WorksheetFunction.Sum(Rng)
Next c
For c = 41 To 177 Step 7
Set Rng = Range(Cells(4, c), Cells(45, c))
Cells(49, c).Value = Application.WorksheetFunction.Sum(Rng)
Next c
For c = 42 To 177 Step 7
Set Rng = Range(Cells(4, c), Cells(45, c))
Cells(50, c).Value = Application.WorksheetFunction.Sum(Rng)
Next c
For c = 43 To 177 Step 7
Set Rng = Range(Cells(4, c), Cells(45, c))
Cells(51, c).Value = Application.WorksheetFunction.Sum(Rng)
Next c
For c = 44 To 177 Step 7
Set Rng = Range(Cells(4, c), Cells(45, c))
Cells(52, c).Value = Application.WorksheetFunction.Sum(Rng)
Next c
Range("C4:I45").ClearContents 'C4:I45をクリアする
Range("C3").Value = Range("C3").Value + 7 '週の最初の日付を7日進める
End Sub

Sub Test4 順番()
Dim r As Range
With Range("A1").CurrentRegion
Set r = .Rows(1).SpecialCells(xlCellTypeConstants, xlNumbers)
r.Offset(, -1).FormulaR1C1 = "=RC[1]"
r.Offset(, 1).FormulaR1C1 = "=RC[-1]"
.Sort Key1:=.Rows(1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlLeftToRight
.Rows(1).SpecialCells(xlCellTypeFormulas).Value = Empty
End With
End Sub

「マクロコードを教えて頂けませんか。」の質問画像

質問者からの補足コメント

  • 画像はサンプルであり、実際の表のサイズが最大で177列の52行です。

      補足日時:2016/05/15 21:20
  • つらい・・・

    Sub 更新()
    Range("AE1:AK45").Insert Shift:=xlToRight   ' 空白をしてから
    Range("AE1:AK52").Value = Range("Q1:W52").Value '「先週までの累計」に「累計」数値を入れる  ・・・・・・  省略  ・・・・・・・ 

    4.については、上記のようにして完成しました。

      補足日時:2016/05/16 21:25
  • へこむわー

    並び替えについては

    Sub Test4 順番()
    Dim r As Range
    With Range("AE1").CurrentRegion
    ........省略.........
    .Sort Key1:=.Rows(1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlLeftToRight
    >上記の部分がエラーになります。
    .Rows(1).SpecialCells(xlCellTypeFormulas).Value = Empty
    >以下のようにするということでしょうか。
    .Rows(1).Cells.SpecialCells(xlCellTypeLastCell)
    .Rows(1).Cells(”2”.Columns.Count).End(xlToLeft).Column

    End With
    End Sub

      補足日時:2016/05/16 21:33
  • へこむわー

    fujillinさん、ありがとうございます。
    ここに補足するべきでしたか?
    質問者のところに、回答に対する質問の再度の質問補足をしてしまいました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/05/16 21:59

A 回答 (1件)

こんにちは。



図が小さくて判別できないのと、コードではご説明にない範囲の値を参照したりしているので、これまたさっぱりなのですが・・・

>5・4・3・2・1と増えて行くのを1・2・3・4・5・・・・というように、
>若い番号から順序よくなるようにしたいと思っています
マクロを実行すると7列単位で左側に追加されるのを右側に追加するようになさりたいという事かと想像します。

やっている内容を良く把握できていないで、回答するのもなんなのですが・・・
ご提示のコードの最初のところで、
> Range("AE1:AK45").Value = Range("Q1:W45").Value
> Range("AE1:AK45").Insert Shift:=xlToRight
としている2行が、それぞれ
 「Q1:W45」の範囲の値を「AE1:AK45」にコピー
 「AE1:AK45」を右に移動して7列分挿入
ということを行っています。
この結果、ご質問のようなことになっていると思いますので、
使用している最終列の次の7列に「Q1:W45」の範囲の値をコピーするようにしてあげれば、そのまま右側に追加されてゆくことになると思われます。
使用している最終セルは
 Cells.SpecialCells(xlCellTypeLastCell)
でも取得可能かと思いますが、操作で一度使ったセルはカウントされてしまう可能性がありますので、値が必ず入っている行があるならば
 Cells(対象行、Columns.Count).End(xlToLeft).Column
という方法で取得する方がよろしいでしょう。求めた列+1の列から記入を始めれば良いはずです。

但し、その後で行っている38列~44列を対象とした操作は、新しく追加した値に対して行っているものと思いますので、対象列が上で求めた列からにかわってくるものと思われますので、調整が必要になると想像します。
(なんとなく繰り返しが多いので、もっと単純化できそうに見えますが・・・)

>AE~AK列が累積を送るとすると、どうしても空いてしまっています。
>これをどうにかできればと思っています
仮に、今のままの方法で処理を行うにしても、現状は
 (空列に)「値をコピー」→「7列挿入して右にシフト」
としていますので、常に7列の空きができているものと思われます。
 「7列挿入して右にシフト」→「挿入したところへ値をコピー」
のように必要な時に列を挿入するように順序を変えるだけでも、実現が可能と思います。

最初に述べました右側に追加して行く方式の場合は、「列の挿入」自体を行わなくても良いので、初めから(中間に)空き列を設けておく必要はないものと思います。


※ コード自体は理解できますが、処理の意味(意図)を理解できずに回答していますので、勘違いがあるかもしれません。その際はご容赦願います。
この回答への補足あり
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2016/05/19 15:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!