アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロ降順のコードですが、その下「連続データの生成」のように まとめたいと思いますが、どうしてもできなくて、教え頂けませんか。

ActiveSheet.Range("A3:N28").Sort Key1:=Range("K3"), Order1:=xlDescending   'A

ActiveSheet.Range("A29:N68").Sort Key1:=Range("K3"), Order1:=xlDescending 'B

ActiveSheet.Range("A69:N108").Sort Key1:=Range("K3"), Order1:=xlDescending 'C

ActiveSheet.Range("A109:N148").Sort Key1:=Range("K3"), Order1:=xlDescending 'D

ActiveSheet.Range("A149:N188").Sort Key1:=Range("K3"), Order1:=xlDescending 'E

ActiveSheet.Range("A189:N228").Sort Key1:=Range("K3"), Order1:=xlDescending 'F

ActiveSheet.Range("A229:N268").Sort Key1:=Range("K3"), Order1:=xlDescending 'G

With ActiveSheet
'連続データの生成
With .Range("A3")
.Value = 1
.AutoFill Destination:=.Resize(26), Type:=xlFillSeries
End With

For i = 29 To 229 Step 40
With .Cells(i, "A")
.Value = 1
.AutoFill Destination:=.Resize(40), Type:=xlFillSeries
End With

A 回答 (2件)

こんな感じ?



Sub test()
  Dim iSize As Long
  Dim iStart As Long
  iSize = 26
  iStart = 3
  Do While iStart <= 229
    With ActiveSheet.Cells(iStart, "A")
      .Resize(iSize, 14).Sort Key1:=Range("K:K"), Order1:=xlDescending
      .Value = 1
      .AutoFill Destination:=.Resize(iSize), Type:=xlFillSeries
    End With
    iStart = iStart + iSize
    iSize = 40
  Loop
End Sub
    • good
    • 0
この回答へのお礼

できました。私の知識では、とても理解できない。コードです、もっと勉強しないといけないと感じています。誠に、ありがとうございました、助かりました。

お礼日時:2018/03/16 11:17

こんにちは



他に規則があるのかないのかわかりませんが、ご提示の内容の行の間隔だけから判断すると、29行目以降の処理は40行分を単位とした処理を繰り返しているので、ご質問のような
 For i = 29 To 229 Step 40
のループにそのまままとめることができるのではないでしょうか。

最初のグループはそのまま処理するか、無理やりまとめるなら、ちょっとトリッキーですが
 For i = -11 To 229 Step 40
のようにしておいて、r<0の時だけスタートを3にするようにして、ループの中に入れてしまうか。
(後で、可読性が悪くなると思います。)

あるいは、対象とする行数を 26、40、40・・・となるように制御しておいて、3行目をスタート行として、次の処理対象は行数を加算しながら決めるようにする方法にしておくことでも可能だと思います。
(こちらの方がまだ、わかりやすいかと)

見た目の行数だけから勝手に規則性を想像していますが、何らかの規則の元となるルールがあるのなら、それを利用するのが一番良い方法だと思います。
    • good
    • 0
この回答へのお礼

色々と考えて戴きありがとうございました。お世話になりました。

お礼日時:2018/03/16 11:18

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