- 締切済み
No.769915 の続きです。
申し訳ありません、間違えて質問を締め切ってしまいました。 mshr1962さんに直して頂いた処理では、思ったとおりではありませんでした。説明不足で申し訳ありません。 やりたいことは、1回測定する毎にSheets("Result").Range("G20:I24")に入ってくるデータを、 SheetGRの表に貼り付ける作業をしたいのです。 1回目の測定結果はD7に貼付け、2回目の測定結果はD17へ…という具合で、10回目のD97まで貼付け終わったら、11回目からはM7~M97へコピー、21回目からはV7~V97へコピーをしたい。ということです。 今はマクロの実行ボタンをD列コピー用、M列コピー用、V列コピー用と分けていますが、できれば1つのボタンでできないかと思います。 分かり難くて申し訳ありません。意味不明であれば補足いたしますので、宜しくお願いします。 With sheetGR For ii = 7 To 97 Step 10(行の指定) For iii = 4 To 31 Step 9(列の指定) If .Cells(ii, iii) = "" Then .Range(.Cells(ii, iii), .Cells(ii + 4, iii + 2)).Value _ = Sheets("Result").Range("G20:I24").Value End If Exit For If Cells(97, iii) <> "" Then Next iii End If Next ii End With
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Hayashi_Trek
- ベストアンサー率44% (366/818)
まずい点を列挙すると ・まずループの順番が間違ってます。(やりたいことと合っていない) ・Exit For が意味不明(無意味)です。(結局ループしない) ・Next iii をIf文の中に書いているので、Next iiiが実行されない場合が発生する。 最下行までコピーしたら次の列に移動してコピーを繰り返す処理をさせるなら 下記のようにすれば良いでしょう。 With sheetGR For iii = 4 To 31 Step 9(列の指定) For ii = 7 To 97 Step 10(行の指定) If .Cells(ii, iii) = "" Then .Range(.Cells(ii, iii), .Cells(ii + 4, iii + 2)).Value _ = Sheets("Result").Range("G20:I24").Value End If Next ii Next iii End With ※インデントのために全角スペースを使ってます。 ※G20:I24にデータが入るのを待つ部分が無いけどいいのか?
補足
お礼が遅れて申し訳ありません。ありがとうございました。実行してみましたが、 ※G20:I24にデータが入るのを待つ部分が無いけどいいのか? にあります通り、これだと、1回の測定データが全ての表を埋めてしまいます(^^;) 以前、下記のようなマクロをTTakさんに組んで頂いたのですが、これだと、シートResultにデータが入る毎にマクロを実行すると、ちゃんとその回数の表の部分に入ってくれます。 For i = 4 To 248 Step 4 If .Cells(14, i).Value = "" Then .Range(.Cells(14, i), .Cells(22, i + 2)).Value _ = Sheets("Result").Range("M9:O17").Value Exit For End If Next i End With これを参考にして、列の指定だけでなく行の指定もできないものかと、思ったのですが。。。