環境:WindowsXPSP3 Office2010です。
ヤリタイ事その1
(1)BookAのSeet4以降にSheet(1行目のセルには項目が入っています、列数はみな同じです。行数は違います)を追加していきたい。
(2)使っていないSheet1,2,3はスキップする。一行目には、何年何組、男女の区別、生徒氏名、生徒証番号、1学期の中間試験の国語の成績、1学期の期末試験の国語の成績、担当教員名、2学期の中間試験の算数の成績、担当教員名、・・・・・・
(3)追加したSheetnの最後のSheetnにもう一つSheetn+1を追加したい。
(4)Seet4からSheetnまでの各SheetのセルをSheetn+1に「下向けに」貼り付けていきたい。
(5)何年何組が40あったら、まづ、40行、次に何年何組が20あったら、次の20行、・・・・
前回ご指導頂いた方法で試しました。ちょっと変更しましたが、その時は、ほぼ旨くいきました。
Worksheets.Add Before:=Worksheets(1)
Dim sheetsuu As Integer 'sheetsuuはシートの数です。
Dim kk As Integer
Dim m As Integer
sheetsuu = ActiveWorkbook.Worksheets.count
For kk = 4 To sheetsuu - 1 Step 1
Worksheets(kk - 3).AutoFilter.Range.Offset(1).Copy Range("A65536").End(xlUp).Offset(1)
Next kk
しかし、Sheetn+1にSheet4の1行目をPasteしようしましが、旨くいきません。
要するに項目がcopy,Pasteとしようとしましたが、旨くいきません。
手打ちでは、出来ます。Sheet4の一行目Ctrl+C シートの最後まで行き、Ctrl+Vで出来ます。
しかし、マクロを使うと出来ません。どなたか、ご指導して頂けませんでしょうか?
何卒宜しくお願い申し上げます。
ヤリタイ事その2
(1)上記【ヤリタイ事その1】が、出来たら、Sheetn+1を別のBook1.xlsxに
copy,Pasteとしようとしましたが、旨くいきません。
これも色々検索しました。
試した数、デバック文を入れた物沢山ありますが、旨くいきそうな例を下記にしまします。
下記も旨くいかない例です。
Dim nWbk As Workbook
Set nWbk = Workbooks.Add
ThisWorkbook.Worksheets("Sheet &kk").Copy Before:=Worksheets("Sheet1")
どなたか、ご指導して頂けませんでしょうか?
何卒宜しくお願い申し上げます。
不具合が発生する箇所
>For kk = 4 To sheetsuu - 1 Step 1
4から始まるのに、終わりが4未満になるケースが発生するのは不正
>Worksheets(kk - 3).AutoFilter.Range.Offset(1).Copy Range("A65536").End(xlUp).Offset(1)
コピーしたあとの貼り付け(PasteSpecial等)が無い
質問者様のやりたい事と少しづれているかもしれませんが、作ってみました。
Sub SheetAdd()
Dim sheetsuu As Integer 'sheetsuuはシートの数です。
Dim kk As Integer
Dim m As Integer
Dim strtNum As Integer 'シートN+1の貼りつけ開始行
Dim endNum As Integer 'シートN+1の貼りつけ終了行
'シート数を取得
sheetsuu = ActiveWorkbook.Worksheets.Count
'シート数が4以上ある事下記処理を行う
'シート数:(スキップ用のシート数+取得元Nシート数)
If sheetsuu + 1 > 4 Then
'シート数Nの数分、値を取得
For kk = 4 To sheetsuu - 1 Step 1
ActiveWorkbook.Worksheets(kk).Activate
MaxRow = ActiveWorkbook.Worksheets(kk).Cells(Rows.Count, 1).End(xlUp).Row
'1行目の項目行以降に値が設定されているか判定
If MaxRow > 1 Then
Worksheets(kk).Range("2:" & MaxRow).Copy
'貼りつけ開始行・終了行を設定
strtNum = endNum + 1
endNum = endNum + MaxRow - 1
'シートN+1に値を設定
'1行目に値を設定する場合
If strtNum = 1 Then
Worksheets(sheetsuu).Range("1:" & endNum).PasteSpecial
'2行目以降に値を設定する場合
Else
Worksheets(sheetsuu).Range(strtNum & ":" & endNum).PasteSpecial
End If
End If
Next kk
End If
End Sub
補足:
本マクロは、シートN及びシートN+1がある場合に動きます。
理由は、毎回実行するとシートが増え続けてしまうからです。
最終のシート名が決まっていれば、if文を追加して、Addすれば問題ないかと思います。
>Worksheets(kk - 3).AutoFilter.Range.Offset(1).Copy Range("A65536").End(xlUp).Offset(1)
エクセルで複数シートの同時コピーは可能ですか?
そのあたりが、少しわからなかったので、1シートごとに値を貼りつける処理で作ってみました。
ヤリタイ事その2
>ThisWorkbook.Worksheets("Sheet &kk").Copy Before:=Worksheets("Sheet1")
変数は""で囲んではいけません。
シート名が、Sheet & kkとなります。
書くなら、("Sheet" & kk)
Worksheetsの引数はSheet1より、1のほうがよいのでは?
場合によりけりですが、Sheet1が無い場合、エラーとなります。
もちろん、1番目にSheet2が来てる場合は別ですが・・・
お礼
皆さんどうも有難う御座いました。問題の説明不足で、混乱を招いてしまったみたいですけど、皆さんのご回答を参考にさせて頂き無事解決しました。本当に有難う御座いました。これからも何卒宜しくお願い申し上げます。