[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ループ処理やり方』(らら)
教えていただけないでしょうか
下記の様に組んでいる物を
シート5枚目から7枚目まで同じ処理をしたいです
たまに 7枚目が無い時も有ります
宜しくお願いいたします
Sub 例()
Dim Idx As Long
For Idx = 5 To Sheets.Count
If Idx = 5 Then Sheets(Idx).Select Cells(1, 1).Resize(700).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Dim sheetName As String
sheetName = ActiveSheet.Name
Columns("A:A").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("A1").Formula = sheetName
Range("A1:A" & Range("B" & Rows.Count).End(xlUp).Row).Value = Range("A1").Value Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("B1").Formula = "=IF(C1=""枠"",COUNTIF(C$1:C1,C1),"""")"
Range("A1", Cells(Rows.Count, 1).End(xlUp)).Offset(, 1).Resize(, 1).Formula = Range("B1").Formula Columns("B:B").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Dim r As Range For Each r In Range("B1", Range("B65536").End(xlUp)) If r.Value = "" Then r.Value = r.Offset(-1, 0).Value Next Else Sheets(Idx).Select (False) End If Next
Call わく
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
これでいいんじゃないですか? >For Idx = 5 To Sheets.Count ↓ For Idx = 5 To Application.Min(Sheets.Count, 7)
(半平太) 2017/06/09(金) 17:09
有難う御座いました
(らら) 2017/06/09(金) 17:15
> If Idx = 5 Then これシート5以外は選択するだけなんですか? If Idx <= 7 Then こういうこと? でもそうすると、Forで指定している意味がないような?
少し整えてみました。 動かしてないので、不都合あるかもしません。 もう一度仕様見直したほうがいいかもしれません。
Sub 例() Dim Idx As Long Dim r As Range For Idx = 5 To Application.Min(Sheets.Count, 7) With Sheets(Idx) .Select .Cells(1, 1).Resize(700).SpecialCells(xlCellTypeBlanks).EntireRow.Delete .Columns("A:B").Insert .Range("A1:A" & Cells(Rows.Count, "C").End(xlUp).Row).Value = .Name With .Range("B1:B" & Cells(Rows.Count, "A").End(xlUp).Row) .Formula = "=IF(C1=""枠"",COUNTIF(C$1:C1,C1),"""")" .Value = .Value .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C[0]" .Value = .Value End With End With Next Call わく End Sub (稲葉) 2017/06/09(金) 17:30
稲葉様
有難う御座いました
教えてもらったコードだと
5枚目の作業の中で
枠と入ってる行削除があるのですけど
削除されませんでした
6枚目 7枚目は正常に作業しました
CPU負担から 此処は
If Idx = 5 Then のように 一つ一つゆっくり処理させたほうが 正確に動くように感じました
本当に有難う御座います
(らら) 2017/06/09(金) 17:56
>5枚目の作業の中で >枠と入ってる行削除があるのですけど >削除されませんでした >6枚目 7枚目は正常に作業しました 行の削除は、Call わく のことですか? であれば、Nextの内側に入れてください。
>If Idx = 5 Then >のように 一つ一つゆっくり処理させたほうが >正確に動くように感じました ゆっくりも何も、それだと5枚目だけしか処理されません。 (稲葉) 2017/06/09(金) 18:11
コメント有難う御座います
>ゆっくりも何も、それだと5枚目だけしか処理されません。
ごもっともですよね ですから
最大3枚なので3種類用意して動かしています
WITH くくると PCの負担上で作業変わってしまいました
next 内側にいれたら WITH内処理 何もしてくれなくなりました
ただ単に シートが一枚につながった感じになりました
PCに対しての負担が大きいのかもしれませんね
べた張りのきたない マクロ のほうが 安定動作って言うのが皮肉に感じます
別な部分ですが ScreenUpdating 入れると エラーが出てしまったり
PCスペック依存が 強いのでしょうか
本当に有難う御座いました
(らら) 2017/06/09(金) 19:12
勝手に書き換えただけですので、以後無視してください。 降ります。 (稲葉) 2017/06/09(金) 19:37
>WITH くくると.... >PCに対しての負担が大きいのかもしれませんね 何か根拠があるの? 適当に想像してるとしか思えないけど... (seiya) 2017/06/09(金) 19:54
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.