• 締切済み

別シートへの移動

任意の番号別に名前を付けた複数のシートとそれらを集計するシートが有ります。複数のシート名は以下のように取得しています。 mySheetCnt = ThisWorkbook.Sheets.Count For i = 2 To mySheetCnt  mySheetNam = Sheets(i).Name  Sheets(mySheetNam).Select  Worksheets(mySheetNam).Range("d6").Select  ・ Next i それぞれのシートで集計した結果をシート名”個人時間集計”のセルA5に書込み、その後"Next i"のシートに移って同じように集計させ、また結果をシート名”個人時間集計”に書込む。この処理を繰り返したいと思います。 質問は 1 "シート名”個人時間集計”のセルA5"の指定方法 2 その後"Next i"のシートに移って・・ 以上がどうしてもうまくいきません。どなたか教えて下さい。

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.5

#4です #4ではエラーが出ますね すいません、野球が気になって・・・ #3さんのが正解です ごめんなさい

tomy3160
質問者

お礼

いろいろお世話になりました。 やっとシート移動が出来ました。 Worksheets("個人時間集計").Select Range("A5").Select を Sheets("個人時間集計").Select Worksheets("個人時間集計").select Range("A1").Select と書き直したらなぜか出来るようになりました。 本当にありがとうございます。

tomy3160
質問者

補足

お礼が遅くなりました。 私も始めは教えて頂いたコードでやって見たのです。しかしうまくいかなかったのです。今回シート名を取得する方法を使ったのは初めてで何か特別なシート移動方法やセル取得が有るのかなと思って質問致しました。これから問題の部分だけを抜き出してやってみます。ありがとうございました。暫くしたらまた質問します。懲りずに教えて下さい。 PS:野球優勝良かった

全文を見る
すると、全ての回答が全文表示されます。
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.4

処理の流れが、今一つ掴めないのですが >そこで基準となる("A5")をActivecellとして指定したいのです。 Worksheets("個人時間集計").Range("A5").Activate で、指定できます

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

#1です。 >1 "シート名”個人時間集計”のセルA5"の指定方法 なら Worksheets("個人時間集計").Select Range("A5").Select ですけど。 ただやりたい事に対してコード全体がわからないので、どこに入れるというのもわからないです。 それにSelectをするという事自体ほぼ皆無なので。

tomy3160
質問者

お礼

いろいろお世話になりました。 やっとシート移動が出来ました。 Worksheets("個人時間集計").Select Range("A5").Select を Sheets("個人時間集計").Select Worksheets("個人時間集計").select Range("A1").Select と書き直したらなぜか出来るようになりました。 本当にありがとうございます。

tomy3160
質問者

補足

お礼が遅くなりました。 私も始めは教えて頂いたコードでやって見たのです。しかしうまくいかなかったのです。今回シート名を取得する方法を使ったのは初めてで何か特別なシート移動方法やセル取得が有るのかなと思って質問致しました。これから問題の部分だけを抜き出してやってみます。ありがとうございました。暫くしたらまた質問します。懲りずに教えて下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

書き込みの条件が無いようですが 条件は#1さんと同じです Sub test() Dim mySheetCnt As Integer Dim mySheetNam As String Dim i As Integer mySheetCnt = ThisWorkbook.Worksheets.Count For i = 2 To mySheetCnt mySheetNam = Worksheets(i).Name Worksheets("個人時間集計").Range("a" & i + 3).Value = Worksheets(mySheetNam).Range("d6").Value Next i End Sub VBAの理解が深まればと思い、質問のコードを修正・追加してみました 参考までに

tomy3160
質問者

お礼

迅速なご回答ありがとうございました。 どうやらシート名取得はhige_082さんの以前の回答を参照していたようです。さて質問内容に不足がありました。詳しくはn-junへのお礼で記載しています。引き続きご指導お願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>"シート名”個人時間集計”のセルA5"の指定方法 A5の次は下に書き込んでいくと仮定すると、 Sub try() Dim ws As Worksheet Dim r As Range Set r = Worksheets("個人時間集計").Range("A5") For Each ws In Worksheets If ws.Name <> "個人時間集計" Then ws.Range("D6").Copy r Set r = r.Offset(1) End If Next Set r = Nothing End Sub こんなとか?

tomy3160
質問者

お礼

迅速なご回答ありがとうございました。 私の質問不足が有りました。集計する各シートには縦に作業名、横には4列1ブロックで日にち(例3月24日)を指定しています。これが日にち別に数ブロックあります。その中に色別で作業者の作業時間を記載しています。また幾つかのシートに同一作業日が存在します。 集計結果を記載する"個人時間集計”シートは縦は日付、横に作業者名の項目になっています。 "個人時間集計”シートで縦側の日付を検索、作業者名をを指定するのにActiveCell.Offsetを使っています(これは出来ました)。そこで基準となる("A5")をActivecellとして指定したいのです。どうぞよろしくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 別なシートを開いている状態で、セル移動を移動したい

    エクセルのマクロについて sheet1を開いている状態で、sheet2でセルの移動がしたいのですが。 現在下記コードを入れいています。 ----------------------------------------- Private Sub CommandButton1_Click() Application.ScreenUpdating = False Sheets("Sheet2").Select Cells(ActiveCell.Row + 1, "a").Select Sheets("Sheet1").Select Application.ScreenUpdating = True End Sub ----------------------------------------- Sheet2を開いている状態だと、思った通りセルを移動してくれますが、 Sheet1を開いている状態ですと、Sheet1上で動いているのですが。 このような事はマクロでは無理でしょうか? どなたか、教えて頂けますか?

  • マクロでエクセルシートのコピー

    マクロでシート1を最後尾に名前をつけてコピーしたいと思ってます。 つけたい名前は、シート2のあるセルにかいてあります。 私は下記のように書いたのですが、エラーになってしまいます。 Worksheets("Sheet2").Select newsheet = Cells(1, 1) Sheets("Sheet1").Select Sheets("Sheet1").Copy After:=Sheets(newsheet) どのようにすればシートをシート名をつけてコピーできますか? 教えてください。 エクセル97です。

  • エクセルVBAでのエラーの対処方法

    よろしくお願いします。 A1:1 B1:あ A2:2 B2:い A3:3 B3:う と書いてあるまとめシートと、1、2、3というシートがあるとします。 シート1のA1セルに「あ」、シート2のA1セルに「い」、シート3のA1セルに「う」と書き込まれるように、まとめA列の文字列からシート名を呼び出して書き込むようにVBAを組んでいます。 Dim sht_n As Variant Dim sht_c As Integer i = 7 sht_n = Worksheets("まとめ").Index sht_c = ThisWorkbook.Sheets.Count For sht_n = sht_n + 1 To sht_c Step 1 If Cells(i, 1).Value = "" Then i = i + 1 Else wb = Cells(i, 1).Value Worksheets("まとめ").Cells(i,2).Select Selection.Copy ThisWorkbook.Worksheets(wb).Activate Range("A1").Select Selection.PasteSpecial Paste:=xlValues こんな感じ。 下手なのは分かってます。あと、現在使っているものから書き出しているので間違えてる部分もあるかもしれません。 この状態だと、シート1がない場合にはエラーが出てしまって、そこで終わってしまいます。 まとめシートが空欄の場合はエラーを回避しているのですが、シートがない場合の回避方法が分かりません。 On Error Resume Nextは使わずに、シートがない場合にエラーを回避する方法はありますでしょうか。 分かるかた、よろしくお願いします。

  • マクロでシート名「1」から繰返し処理したい

    VBAの繰り返し処理でWorksheets名が「1」から「100」の時はどう書くのでしょうか。 (「集計表」など他のシートも混じっているので左から1番目~100番目ではない) For i = 1 To 100 Worksheets(i).Select とすると名称「1」のシートでなく最左1番目からと見なされます。 Worksheets("i").Select と書くと「i」名のシートと見なされ変数と認識されません。 「積算1」の様に他の字を混ぜると不思議と認識されます。 Worksheets("積算" & i ).Select  の時はOKでした。

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • Excel VBA セルの値をシート名にしたいのです。

    こんばんは 新しくシートを挿入させて、「シート2」の値のみをコピーさせたいと考えています。 その新しく挿入させたシート名を「シート1」のせるA3とA4の文字列をあわせたものにしたいのですが、どうしたらよいのでしょうか。 途中まで考えたところでいきずまってしまいました。 どうか英知をお貸しください。 宜しくお願い致します。 A3には日付、A4には名前が入力されています。 Dim sheetName As String Worksheets("月度集計").Activate Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Name = Worksheets("Sheet1").Cells(3, 3).Value On Error Resume Next Worksheets(1).Name = sheetName On Error GoTo 0 Range("f2").Select

  • excel  vba  シートの取り扱い

    Sub   aaa() Worksheets.Add ActiveSheet.Name = "Namefile" ((質問)ここへ適当なコードを追加することによって 以下のThisWorkbook.Sheets(1)というのを、上で追加した Namefileシートを処理することとしたい。 つまり  Namefileシート=ThisWorkbook.Sheets(1) どうすればいいか。よろしくお願いします。) ThisWorkbook.Sheets(1).UsedRange ThisWorkbook.Sheets(1).UsedRange.Delete ThisWorkbook.Sheets(1).Range("B2") = "ファイル名" ThisWorkbook.Sheets(1).Range("C2") = "最終更新日" End Sub

  • 複数シートをループさせてマクロを簡素化したい

    win7 Excel2007 でマクロ作成中の初心者です。 シート数の変動する複数シートの特定範囲を一枚のシートに右列方向に、値を貼り付けたいです。 自動記録でコード作成しましたが、もっと簡素化して軽くしたいです。 シートに対するループ等の作成ができません。どうかご指導お願いします。 Sub 勤怠最終データ作成() Worksheets(1).Select '1番左のシートを選択 ActiveSheet.Unprotect Range("B29:BM60").Select '複写範囲はすべて同じ Selection.Copy Sheets("総括").Select '値の貼り付けシートはすべて同じ Range("A2").Select '値の貼り付け先 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(2).Select '2枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 '値の貼り付け先 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(3).Select '3枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 Selection.PasteSpecial Paste:=xlPasteValues ’-------------------------------------- Worksheets(4).Select '4枚目のシートを複写 ActiveSheet.Unprotect Range("B29:BM60").Select Selection.Copy Sheets("総括").Select 最終セルの選択 Selection.PasteSpecial Paste:=xlPasteValues 以下省略 End Sub

  • 複数のシートの値を一つのシートに整列

    よろしくお願いします。 複数のシートに行も列もバラバラになっているデータを一つのシートの行に整列させたいと思っています。 具体的には下記のようなシートがあります。一つは組織の名前のシート、一つは組織の基礎情報といった感じでシートごとに回答されています。 これを他のシートに一つの組織を一つの行で整列させ分析をしていきたいと思っています。 ファイルが数千あるため、マクロで書こうと思っているのですが、下記のように書いたのですがうまくいきません。 アドバイスをいただけないでしょうか? ファイルは(アンケートデータ1,アンケートデータ2といった感じで統一、作業フォルダ内にすべて保存) マクロを動かすセルは”統合”というファイル名、シート1に持ってきます。 Sub Macro1() Dim i As Integer For i = 1 To 1000 'アンケートデータファイルを開く Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\作業\アンケートデータ" & i" .xls 'アンケートデータファイル 学校名シートのB11 を新しいブックのシート1のA1にコピー Worksheets(学校名).Activate Range("B11").Select Worksheets(統合).Activate ActiveSheet.Paste ThisWorkbook.Worksheets(1).Range("A" & i).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True Worksheets(基本データ).Activate Range("D3").Select Worksheets(統合).Activate ActiveSheet.Paste ThisWorkbook.Worksheets(1).Range("B" & i).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True Worksheets(基本データ).Activate Range("D6").Select Worksheets(統合).Activate ActiveSheet.Paste ThisWorkbook.Worksheets(1).Range("C" & i).PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True 'アンケートデータファイルを閉じる ActiveWorkbook.Saved = True ActiveWorkbook.Close Next i End Sub 最終的には統合ファイル内で      A(学校名)         B(学校区分)    C(広さ)   D経営状況   E   F 1列  アイウエオ学校       3             500    黒字 2列    といった感じで学校数文行で並ぶようにしたいのです。 上記の式の間違いの指摘、書き方についてアドバイスをください。

  • セルに背景色がある行を別シートにコピー

    ある一覧表があり、その中のC列のセルにある条件を満たしていれば背景色をつけています。 この色付セルがある行全体を別のシートに順次コピーして一覧表を作成させるマクロを以下のように作ってみました。 h = 6 For i = 7 To 最終行 If Worksheets("一覧表").Cells(i, "C").Interior.ColorIndex = 背景色番号 Then Sheets(1).Select Rows(i).Copy Sheets(2).Select h = h + 1 Rows(h).Select ActiveSheet.Paste End If Next データが少ないときはこれで問題がなかったのですが、件数が増えてきますと処理時間がかなり掛かります。4000件のデータで30分経っても終わりませんでした。 もっと処理時間が短くなるスマートな方法はありませんでしょうか?

専門家に質問してみよう