• ベストアンサー
  • 暇なときにでも

エクセルVBA 3/26夜の補足です

おはようございます お忙しいに申し訳ありません 春から私用で使うための自作ソフトを作成したおります ご迷惑おかけします 指摘のサンプルです わたしなりに作成したものです Sub sheetcopy1() ThisWorkbook.Sheets("sheet1").Select Range("B2:K100").Select Selection.Copy Dim wb As Workbook Set wb = Workbooks.Add ThisWorkbook.Sheets("sheet1").Copy before:= _ wb.Worksheets(1) Set wb = Nothing End Sub これですと、新しいBOOKが起動しシートすべての項目が張り付きます シートの一部を(B2からK100)を移したいと思っています ワンクリックとはフォームのコマンドボタンで移動できればと思っています よろしければお知恵をおかりしたくおもいます よろしくお願いします

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数99
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.3
  • Wendy02
  • ベストアンサー率57% (3570/6232)

こんにちは。 前回の回答者です。本来、続きの質問は、ここのローカル・ルールに触れてしまいますから、前の質問の方は、適当に締めてくださいね。どちらかが消されてしまうかもしれませんから。 >指摘のサンプルです わたしなりに作成したものです やっぱり基本的なことは分かっていらっしゃるのですね。このぐらいに分かってらっしゃる方なら、どんどん、自信を持ってお聞きなればよいと思います。(こういうことを言うのは僭越かもしれませんが。) #2 のonlyromさんが、ご指摘になっている通りですが、最初は、この掲示のMySheetcopy1 のような書き方ですね。ただ、Select の使い方には、難しい部分があります。Select は、一旦、オブジェクトを格納しているのです。 しかし、  ThisWorkbook.Sheets("sheet1").Select という方法は、通る場合と、通らない場合がありますから、最初は、一つずつ上のオブジェクトから、降りていくような感じで書くと分かりやすいです。ブックがはっきりしている場合は、ThisWorkbook は必要ないかもしれません。特に、コマンドボタンなどの場合は、シートに付随するものなので、最初から、Rangeの範囲を指定して、コピーしてしまっても良いのです。 Mysheetcopy1 の場合は、  Range("B2:K100").Select から始めてよいし、 Mysheetcopy2 の場合は、 Range("B2:K100").Copy .Worksheets("Sheet1").Range("B2") というだけで構いません。 '------------------------------- Sub MySheetcopy1()   Dim wb As Workbook   ThisWorkbook.Activate   Sheets("Sheet1").Select   Range("B2:K100").Select   Selection.Copy      Workbooks.Add   Sheets("Sheet1").Select   Range("B2").Select   ActiveSheet.Paste   Application.CutCopyMode = False 'コピーモードを解除   Set wb = Nothing End Sub '------------------------------- '     ↓ '慣れたら、こんなパターンもあります。 Sub MySheetcopy2()   With Workbooks.Add   ThisWorkbook.Sheets("Sheet1").Range("B2:K100").Copy .Worksheets("Sheet1").Range("B2")   'B2 へコピーする場合。   End With End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

たびたびのご回答 誠にありがとうございます 色々と参考書を見ながらマクロを組んでみましたが、私が考えたよりはるかに簡単なマクロでできるですね まだこれからも勉強しながら頑張ってみます お世話になりました

関連するQ&A

  • Excel 2007 マクロ 別ブックのシートをコピーする方法

    Excel 2007 マクロ 別ブックのシートをコピーする方法 別ブックのシートをコピーして アクティブなブックのシートにコピーしたいと思います。 下記マクロを作成しました。 貼り付ける際に、クリップボードに保存するかどうか 聞かれるメッセージが表示されてうまくいきません。 またもっとシンプルな書き方があればアドバイスお願いします。 Sub 取り込み() Dim wb As Workbook Set wb = Workbooks.Open("\") Sheets("Sheet1").Select Cells.Select Selection.Copy ThisWorkbook.Activate ThisWorkbook.Sheets("特定").Select ActiveSheet.Cells(1, 1).Select ActiveSheet.Paste wb.Close End Sub

  • エクセルVBAで作成した別ブックにVBAを記述したい

    VBAで別ファイルの作成は下記で出来ているのですが、出来上がったファイルにVBAを記述する方法がわかりません。 具体的には一番下のSub TEST()を新しいブックの標準モジュールに記述したいのと、sheet1に Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "ChangeTEST" End Sub を入れたいです。 また Private Sub Workbook_Open() MsgBox "OpenTEST" End Sub も入れたいのです。 どうぞご教示ください。 Sub 複製() Dim wb As Workbook, sc As Integer sc = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set wb = Workbooks.Add Application.SheetsInNewWorkbook = sc wb.Sheets("Sheet1").Select ThisWorkbook.Sheets("Sheet1").Cells.Copy wb.Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False ActiveSheet.Buttons.Add(123, 195, 68.25, 15).Select Selection.OnAction = "TEST" Selection.Characters.Text = "TEST" ActiveWorkbook.Close ThisWorkbook.Activate Sheets("Sheet1").Select End Sub Sub TEST() MsgBox "TEST!!" End Sub よろしくお願いします。

  • VBAについて質問です。

    VBAについて質問です。 現在、ExcelにてWorkbookを自動で作成するモジュールを作成しています。 モジュールを記載しているWorkbookを [wbSorce] 自動で作成されるWorkbookを [wbNew] とします。 [wbSorce] でモジュールを実行すると、 [wbNew] を新規に作成し、 データを入力して保存するのですが、保存する際に [wbNew] のイベントハンドラ [Workbook_Open] に 保存された [wbNew] を開いた時の挙動を記載するには どうすればよいでしょうか? サンプルは下記になります。 ****[wbSorce]のモジュール**** Sub wbNew_Sakusei()   Dim wb As Workbook   Dim wb2 As Workbook   Dim i As Integer   Set wb = ThisWorkbook   Set wb2 = Workbooks.Add   For i = 1 To 5     wb2.Sheets(1).Cells(1, i) = wb.Sheets(1).Cells(1, i)   Next   wb2.SaveAs Filename:="wbNew" End Sub ****[wbNew]に記述したいモジュール**** Private Sub Workbook_Open()   ActiveWindow.ScrollRow = 1   MsgBox "Workbook_Openイベントが発生しました。" End Sub

その他の回答 (2)

  • 回答No.2
  • onlyrom
  • ベストアンサー率59% (228/384)

質問者のレベルでは、少々コードが長くなっても ブック、シートなど全て指定した方が勉強になるでしょう。 マクロのあるブックのSheet1のセル範囲B2:K100を 追加したブックのSheet1のセルA1からコピーする場合 '-------------------------------------------- Sub Test() Dim myBook As Workbook Set myBook = Workbooks.Add ThisWorkbook.Sheets("Sheet1").Range("B2:K100").Copy _ myBook.Sheets("Sheet1").Range("A1") End Sub '---------------------------------------------- 以上。  

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お世話になりました あまり難しくなく簡単にマクロができますね 考えていました ありがとうございました

質問者からの補足

お礼の分の訂正です 考えていましたとあるのは削除します 申し訳ありません

  • 回答No.1

やってることはこうゆうことですか? Sub xxx() Sheets("sheet1").Range("B2:K100").Copy Workbooks.Add ActiveSheet.Paste Destination:=Range("B2:K100") End Sub Selectとか使わない方がいいです。 シートにコマンドボタンを付けてマクロ登録じゃだめですか?

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • エクセル マクロ 簡素化

    マクロ初心者です。 下記のデータのコピペする、マクロを使用しています。 下記にはAAAとBBBの2つのエクセルへのコピペのみしか記述していませんが、 その下に50ファイル分のファイル名、コピー元、コピー先だけが違うマクロが並んでいます。 メンテナンスや更新に手作業で行っているので、非常に時間がかかります。 例えば、別のシートにファイル名、コピー元、コピー先の一覧を作成し、 そのシートでファイル名、コピー元、コピー先を修正し、コピペができるようになるなど、 どうにかして簡素化したいのですが、どのように実現すればいいか、教えてくださると助かります。 ---------------------------------------------------------------------- Private Sub CommandButton1_Click()   Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\AAA.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("A1:B1").Copy wb.Sheets("CCC").Range("A1:B1").PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\BBB.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("A2:B2").Copy wb.Sheets("CCC").Range("A2:B2").PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True 'アイテム名、コピー元、コピー先、だけがちがう、同じようなマクロが50ファイル分ある。 End Sub

  • VBAで Set wb = Sheets(1).Copyができないわけ?

    つい先ほどの質問 4150169 は掲示したコードが抜けておりましたので無視して、こちらにご回答ください。 ほんと抜けた話です。すみません。 以下のマクロtest01はエラーになります。 Sub test01() Dim wb As Workbook Set wb = Sheets(1).Copy 'エラー「オブジェクトが必要です」 End Sub もちろん Dim wb As Workbook Sheets(1).Copy Set wb = ActiveWorkbook と修正すればエラーにならないことは存じていますが、ふと疑問がわきました。 Sheets(1).Copyの段階であたらしいWorkbookが誕生していますよね。 ならば、そのWorkbookはオブジェクトではないのでしょうか? Workbooks.Add で誕生したWorkbookは Set wb = Workbooks.Add と変数wbにSetできるのに Set wb = Sheets(1).Copy ができないのが不思議です。 Set wb = ActiveWorkbook としないでもSheets(1).CopyをwbにSetする書き方はないのでしょうか?

  • 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 非表示の別ブックへシートコピー

    Excel2010のVBAで、別のExcelブックを非表示で開いて、 シートをコピーすると、 「実行時エラー'1004':WorksheetクラスのCopyメソッドが失敗しました。」 というエラーが出て、正しくシートをコピーすることができません。 (1)のように自分のブックへはシートをコピーすることはできるのですが、 (2)のように別のExcelブック上でシートをコピーする場合と (3)のように別のExcelブック上にシートをコピーする場合の いずれも同様のエラーになります。 どのように記述すれば(2)と(3)でもコピーすることができるのでしょうか。 ------------------------------------------------------------- Sub test()  Dim newEx As Excel.Workbook  Dim newFile As String  newFile = ThisWorkbook.Path & "\New_Book.xlsx"  Set newEx = Workbooks.Open(newFile, UpdateLinks:=0)  Application.Windows("New_Book.xlsx").Visible = False  '(1)New_BookのSheet3を自分のブックにコピーする (正常)  newEx.Worksheets("Sheet3").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)  '(2)New_BookのSheet3をNew_Bookにコピーする (エラー)  newEx.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  '(3)自分のブックのSheet3をNew_Bookにコピーする (エラー)  ThisWorkbook.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  Application.Windows("New_Book.xlsx").Visible = True  Application.DisplayAlerts = False  newEx.Save  newEx.Close  Application.DisplayAlerts = True  Set newEx = Nothing End Sub -------------------------------------------------------------

  • VBA シートを別ブックの先頭・一番左にコピー

    このシート(例Sheet1)を別ブックの先頭・一番左にコピーしたいのです。 下記のコードは一番右にコピーです。 宜しくお願いします。 Sub SheetCopy5() Dim bk As Workbook  Set bk = Workbooks("コピー先のブック.xlsx")  ActiveSheet.Copy _    After:=bk.Sheets(bk.Sheets.Count) End Sub

  • エクセルマクロ  リンクダイアログのスルー

    下記のVBAを作成し、動かしているのですが、 Office2002以降では、問題なく動くのですが、Office2000では、コピー先のファイルを開く際に、リンクのダイアログが表示されます。 コピー先ファイルのリンクを削除したらよいのですが、どうしても見つかりません。 なので、下記のマクロにリンクダイアログをスルーするようにしたいのですが、どのようにすればよいか教えてください。 Private Sub CommandButton1_Click() Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\AAA.xls") ThisWorkbook.Sheets("BBB").Range("E4:AR4").Copy wb.Sheets("CCC").Range("E4:AR4") Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

  • エクセル マクロ 値の貼り付け

    以下のエクセルのマクロで値のみを貼り付けたいのですが、.valueを指定しても上手くできません。 どのように修正すればいいか教えてください。 Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\ファイルA.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("E4:AR4").Copy wb.Sheets("BBB").Range("E4:AR4") Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True

  • VBA VLOOKUP 別のファイルを参照

    VBA VLOOKUP 別のファイルを参照 いつもこちらでお世話になっている者です。 VBAの勉強をしております。 別のファイルからVLOOKUPで値を参照したいのですが、 範囲を指定してみましたが、 「worksheetFunctionクラスのVlookupプロパティを参照できません」 とのメッセージが出てしまいます。 なお、値は空白になる行もありますので、 if関数で回避してみましたがうまくいきません。 いろいろ試しましたが、何度やってもうまくいかないので こちらに質問させていただきました。 お詳しい方、ご伝授いただければ助かります。 よろしくお願い致します。 環境はExcel2007です。 Sub sample() Dim 範囲 As Range Dim wb As Workbook, wb2 As Workbook Dim r As Integer,intRow As Integer Workbooks.Open Filename:="***.xlsm" Set wb = ThisWorkbook Set wb2 = ActiveWorkbook Set 範囲 = wb2.Sheets("PvtSht2").Range("Database3") r = wb.Sheets("sheet1").Range("A28:N28").End(xlToRight).ColumnintRow = 3 With wb.Sheets("sheet1") Do Until .Cells(intRow, 1).Value = "" .Cells(intRow, (r + 1)) = Application.WorksheetFunction.If((Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False)) = 0, "", Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False)) intRow = intRow + 1 Loop End With End sub

  • 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

  • エクセルファイルを一括で取得して順番にマクロを実行したい

    いろいろ考えたのですがわからないために質問させていただきます ご指導宜しくお願いします。 Aというフォルダにある book1 book2 book3 というエクセルファイルを一括に選択して自らに取り込んだ後 処理をして別フォルダに保存するという流れをしたいのですが わかりません。 処理自体は不要列の削除と簡単なのですがファイルの数が多いため 一括でしたいのです。ご指導宜しくお願いします。 Sub test() Dim OpenFileName As Variant Dim wb As Workbook ChDir CreateObject("WScript.Shell").SpecialFolders("desktop") 'ファイルを開く OpenFileName = Application.GetOpenFilename("ExcelBook,*.xls,AccessDB,*.mdb") 'キャンセル If OpenFileName = False Then '終了 Exit Sub End If 'このブックのSheet1をクリア ThisWorkbook.Sheets("Sheet1").Cells.Clear 'ワークブックを開く Set wb = Workbooks.Open(OpenFileName) '選択されたブックの最初に表示するシートをコピー wb.ActiveSheet.Cells.Copy Destination:=ThisWorkbook.Sheets("Sheet1").Cells(1, 1) '閉じる wb.Close False '画面固定 Application.ScreenUpdating = False '不要列選択 Range("A:A,C:C,E:E,G:G,I:I,K:K,M:M,O:O").Select '選択列を削除 Selection.Delete Shift:=xlToLeft Range("a1").Select Dim ws As Worksheet '元々開いていたシートを退避 Set ws = ActiveSheet '全てのワークシートを新しいブックにコピー Worksheets.Copy '名前を自分で入れる場合 Application.Dialogs(xlDialogSaveAs).Show ActiveWorkbook.Close False '新しいブックを閉じる ws.Activate '元々開いていたシートを表示 現状はこのような感じで一つ一つ処理しています。