環境: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")
どなたか、ご指導して頂けませんでしょうか?
何卒宜しくお願い申し上げます。
No.2ベストアンサー
- 回答日時:
なんだかイマイチわからないけど(・_・;
その2は、ANo.1の指摘どおりですね。名前は不定なのでsheets(1)で。
その1は・・・
◆ こういうことかな?
'--> ループの3行を差し替え
Worksheets(2).Rows(1).Copy Rows(1) 'タイトル行コピー
For kk = 2 To sheetsuu - 3 Step 1
Worksheets(kk).AutoFilter.Range.Offset(1).Copy Range("A65536").End(xlUp).Offset(1)
Next kk
'<--
※Rowsは行。わかりにくければコッチで↓
Worksheets(2).Range("A1:Z1").Copy Range("A1:Z1")
◆以下、説明
回答に頼ると、理解がおいつかず混乱しがち。
ちゃんと処理を理解してね!!
◇ コピー対象がおかしい?
> For kk = 4 To sheetsuu - 1 Step 1
> Worksheets(kk - 3)...
-3 してるので結局、sheets(1 to sheetsuu - 4)になってます。シートindexは左から1,2,3・・・。直前で左端(1)に追加しているので、コピー対象は 2 ~ sheetsuu-3 では?
たぶんsheets(1)にはAutoFilterがないので、オブジェクトがない!ってエラーになるかと。
◇ タイトル行をコピーする処理
が無いのは分かってる・・・?念のため説明
.AutoFilter:オートフィルターの
.Range :セル範囲を
.Offset(1):下方に1ずらした範囲
をコピーしてます。
タイトル行を含まないようズラしているので、コレはOK。あとは、ループ前(か後)にタイトル行のみをコピーするだけ。
◇ デバッグ
コピーなんてセルを正しく指定するだけなので、セル選択でもすれば1発で確認できます。
for kk = 1 to sheets.count
sheets(kk).Select
sheets(kk).AutoFilter.Range.Select
Stop '一時停止(F5/F8で継続)
Selection.Offset(1).Select
Stop '一時停止(F5/F8で継続)
next
こういうの大事。1つずつ確認。理解も深まります。
また、ブレイクポイント、ステップ実行、ローカルウィンドウなど、便利なデバッグ機能も多いです。ぜひ使えるようになってください。
皆さんどうも有難う御座いました。問題の説明不足で、混乱を招いてしまったみたいですけど、皆さんのご回答を参考にさせて頂き無事解決しました。本当に有難う御座いました。これからも何卒宜しくお願い申し上げます。
No.1
- 回答日時:
不具合が発生する箇所
>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が来てる場合は別ですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) vba 転記するときの最終行について 2 2022/09/03 09:31
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) Sheet1をフィルターで「りんご」を抽出し、Sheet2へ地域を貼り付ける下記マクロを変更して S 2 2022/12/11 03:01
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
Excelマクロのエラーを解決した...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
ExcelのVBAのマクロで他のシー...
-
【Excel VBA】Worksheets().Act...
-
実行時エラー1004「Select メソ...
-
同じ作業を複数のシートに実行...
-
実行時エラー'1004': WorkSheet...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
エクセルのシート名変更で重複...
-
XL:BeforeDoubleClickが動かない
-
VBAでオブジェクト変数にsetし...
-
VBA 最終行まで数式をコピーする
-
エクセルVBA Ifでシート名が合...
-
VBA 検索して一致したセル...
-
ブック名、シート名を他のモジ...
-
Excel マクロについての相談
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
XL:BeforeDoubleClickが動かない
-
ExcelVBA シート名を複数セルか...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
【Excel VBA】Worksheets().Act...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
Excel マクロについての相談
-
VBA 検索して一致したセル...
おすすめ情報