エクセルマクロでファイルを指定せずに特定する方法

このQ&Aのポイント
  • エクセルマクロを使用して特定のファイルを指定せずに「2組」と特定する方法について質問があります。全体名簿からコピーしたデータを1組から3組までに分ける必要があるため、特定のファイル名を使用せずに実行したいです。
  • 特定のファイル名を使用せずにエクセルマクロを使って「2組」と特定する方法が知りたいです。全体名簿からデータをコピーして各クラスに分けたいのですが、特定のファイル名を使うと他のクラスが使えなくなってしまいます。
  • 「2組」と特定する際に、特定のファイル名を使用せずにエクセルマクロを利用する方法を教えてください。全体名簿からデータをコピーして1組から3組までに分類する必要がありますが、2組を特定すると他のクラスが使用できなくなってしまいます。何かいい方法はありますか?
回答を見る
  • ベストアンサー

エクセルマクロで「今作業をしているファイルを指定す

る方法について」 上書きのマクロについて質問をしましてxls88さんからお答えいただき無事うまくいきました。そこで次の場合どうすればよういかご教授お願いします。 Sub 全体名簿へ2組() ' ' 全体名簿へ2組 Macro ' ' Windows("全体名簿.xlsm").Activate Sheets("★生徒名簿").Select If MsgBox("B列で前のクラスの生徒の次のセルを選択していますか?", vbYesNo) = vbYes Then Range("B" & ActiveCell.Row, "n" & Range("B65536").End(xlUp).Row).ClearContents Else: Worksheets("★生徒名簿").Activate Windows("2組.xlsm").Activate Sheets("★生徒名簿").Select 開始 = Range("r3").Value 終了 = Range("s3").Value Range("B" & 開始 + 1 & ":n" & 終了 + 1).Select Selection.Copy Windows("全体名簿.xlsm").Activate Sheets("★生徒名簿").Select ActiveSheet.Paste End If End Sub 上記の文で「Windows("2組.xlsm").Activate」でここを今作業しているファイル名を使わずに「2組」と特定しない方法です。なぜかというと全体名簿のフィルをコピーして1組から3組までのクラスに分けるからです。2組と特定してしまうと1,3組は使えなくなってしまうからです。何かいい方法があったらお願いします。

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

  • ベストアンサー
回答No.3

ANo.1です。 だから、1組、2組、3組で別々にマクロを作成して、 マクロボタンに登録して、順番にマクロ呼び出せばいいのでは? CALL 1組 CALL 2組 CALL 3組 でできると思います。 無理してファイル名を変数にしないでもできると思いますけど・・・。

tu73kxmu
質問者

補足

ご回答ありがとうございます。全体名簿から1から3組を呼び出す方法のアイデア参考になりました。そこで,そのCallを使ったマクロの具体例を教えていただければありがたいのですがよろしくお願いします。

その他の回答 (2)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

Sub 全体名簿へ2組() ' ' 全体名簿へ2組 Macro ' ' Dim WBA,WBB As String WBA = ActiveWorkBooks.Name '自分のブック名 WBB = "全体名簿.xlsm" '全体のブック名 Windows(WBB).Activate Sheets("★生徒名簿").Select If MsgBox("B列で前のクラスの生徒の次のセルを選択していますか?", vbYesNo) = vbYes Then Range("B" & ActiveCell.Row, "n" & Range("B65536").End(xlUp).Row).ClearContents Else: Worksheets("★生徒名簿").Activate Windows(WBA).Activate Sheets("★生徒名簿").Select 開始 = Range("r3").Value 終了 = Range("s3").Value Range("B" & 開始 + 1 & ":n" & 終了 + 1).Select Selection.Copy Windows(WBB).Activate Sheets("★生徒名簿").Select ActiveSheet.Paste End If End Sub

tu73kxmu
質問者

補足

ご回答ありがとうございます。質問ですがWBA = ActiveWorkBooks.Name '自分のブック名 WBB = "全体名簿.xlsm" '全体のブック名で'自分のブック名と'全体のブック名には何を入れればよろしいのでしょうか。ちなみに試してみましたが,オブジェクトが必要ですとエラーがでてしまいWBA = ActiveWorkBooks.Name '自分のブック名のところが黄色くなってしまいます。なにか対処方法ありますか。

回答No.1

別に1組と3組のマクロを作成すればよいのでは?

tu73kxmu
質問者

補足

ご回答ありがとうございます。1から3組までできたデータを全体で合体させ,次の年クラス替えした名簿,データを分け次の年のデータを入力してもらいまた,合体するためです。ずっと1から3組まで同じ名簿だったら簡単なんですが・・・・・。

関連するQ&A

  • エクセルマクロで上書きして貼り付けの方法は

    エクセルのマクロでコピーして貼り付けする場合、貼り付けするセルに何か入力されているとその次の行に飛んで貼り付けしてしまいます。 何か入力されていても上書きで貼り付けする方法を教えてください。次のマクロを参考にお願いします。 Sub 全体名簿へ2組() ' ' 全体名簿へ2組 Macro ' ' 開始 = Range("r3").Value 終了 = Range("s3").Value Range("B" & 開始 + 1 & ":n" & 終了 + 1).Select Selection.Copy Windows("全体名簿.xlsm").Activate Sheets("★名簿").Select Range("B65536").End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub このActiveSheet.Pasteを変えるとできるのかその方法がわかりません。 また,貼り付けする前に選んだセル以降の行をクリアーにしてから、貼り付けすればできますがその範囲の指定の仕方はどうすればいいのでしょうか。マクロの文も教えていただきたいです。

  • マクロを使ったコピペがうまく動作しない。

    あるデータを転記用のブック(月毎にシートが分かれています。シートの内容は同一)に貼り付ける処理を行うため、下記のようなマクロを組んだのですが、何故か貼りつきません。処理終了時には、転記元ブック(シート)で最終処理の範囲(5番目のB287)を選択しています。一体何がいけないのでしょうか? データはA1からPまでで毎月可変しています。 また、転記用ブックが12枚あるため、月を指定してから貼り付けたいのですが、どのようにすればよいでしょうか?(下記は直接シ-トを指定しました) Sub test() Dim 最終行 As Integer '-------------------------------------------- 開始 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("1").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B1").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 1 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("2").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B83").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 2 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("3").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B157").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 3 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("4").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B227").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 4 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("5").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B287").PasteSpecial Paste:=xlPasteValues --------------------------------------------- 5 End Sub 

  • マクロの作業で、アクティブにしたくない

    マクロを実施しているのですが、シートを切り替えアクティブにしながら作業をしているのです。表のAから内容を抽出し、表のBから抽出し表のCに印字、この繰り返しを1千回以上行います。その為、画面処理で非常に時間がかかり困っています。 例えば下記のようにしています。 Windows(S_F).Activate Sheets("Sheet1").Select     ActiveCell.Offset(0, 1).Value = ("計") ActiveCell.Offset(1, 0).Select Windows(S_S_F).Activate Sheets("Sheet2").Select ActiveCell.Offset(0, 1).Value = ("担当者合計") Windows(S_AK_F).Activate Sheets("Sheet1").Select ActiveCell.Offset(1, 0).Select Sheets("Sheet2").Select Rows("1:4").Select Windows(S_M_F).Activate Sheets("Sheet1").Select Range("A2").Select Windows(S_S_F).Activate Sheets("Sheet1").Select Range("A4").Select 実際のマクロの一部です。 アクティブにするから画面処理(切り替え)をしてしまうと思いますが、それをしないで、作業を行いたいのですがどのようにか出来ますでしょうか?

  • エクセル マクロ こんな事出来ますか?

    エクセル2010を使っています。 ボタンクリックでAと言うファイルをオープンさせているのですが、使うシーンで元々開いていたり、閉じていたりします。 それで、目的のファイルが開いていた場合は次の動作に移りたいと思います。 現在のマクロは以下の様なものです、これでもちろん動作しています。 Sub ボタン15_Click() Workbooks.Open "目的のファイルの場所" Windows("A.xlsm").Activate Sheets("Sheet4").Select Range("aa3").Select End Sub Aのファイルが開いていない場合、Aを開く。 Aのファイルが開いている場合 Windows("A.xlsm").Activate を実行したいと言う事です。 詳しい方、よろしくお願い致します。

  • エクセルVBAについて

    こんにちわ! 今、エクセルでAシートの入力した項目をBのシートへデーターが入力できるようなシステムを以下のようにくみました。 そこでBシートにデーターが入力されるのですが20行まで入力すると入力できないようにしたいのですが、なかなか上手くいきません。 A1からF20まで書式のロックを外しそれ以外のセルは保護をかけたのですがその状態でVBAを使って20行以上入力できませんという感じのエラー表示をしたいのですが、どうすればいいでしょうか? VBAは初心者ですが宜しくお願いします。 Private Sub CommandButton1_Click() Dim row As Integer row = WorksheetFunction.CountA(Sheets("date").Columns(1)) + 1 Sheets("date").Cells(row, 1).Value = Range("B2").Value row = WorksheetFunction.CountA(Sheets("date").Columns(2)) + 1 Sheets("date").Cells(row, 2).Value = Range("B3").Value row = WorksheetFunction.CountA(Sheets("date").Columns(3)) + 1 Sheets("date").Cells(row, 3).Value = Range("B4").Value row = WorksheetFunction.CountA(Sheets("date").Columns(4)) + 1 Sheets("date").Cells(row, 4).Value = Range("B5").Value row = WorksheetFunction.CountA(Sheets("date").Columns(5)) + 1 Sheets("date").Cells(row, 5).Value = Range("B6").Value row = WorksheetFunction.CountA(Sheets("date").Columns(6)) + 1 Sheets("date").Cells(row, 6).Value = Range("B7").Value Sheets("統制入力").Select Range("B17").Select ActiveWindow.SmallScroll Down:=-9 Range("B3:B7").Select Selection.ClearContents Range("B1").Select End Sub

  • エクセルマクロで不特定なファイル名を使用するには

    初めて質問します。 不適切があれば申し訳ございません。 教えていただきたいです。 ファイル名が日々変わる場合、以下のマクロを使用した際に ファイル名が変ったとしてもマクロが実行できるようにするにはどうすれば良いでしょうか? ファイル名が変るのが"日別進捗_20140814.xlsx"の日付の所です。 初歩的で誠に申し訳ございません。 教えていただければ幸いです。 ----------------------------------------------------------- Sub Macro1() ' ' Macro1 Macro ' ' Sheets("Sheet2").Select Windows("日別進捗_20140814.xlsx").Activate Cells.Select Selection.Copy Windows("Book1.xlsm").Activate Cells.Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Range("A1").Select Sheets("Sheet1").Select Range("D15").Select End Sub

  • エクセル マクロ ループ ファイル展開

    マクロ ループ処理について質問です。 test エクセルファイルのD1セルから下にファイル名を入れていき、その名前(フルパスで入れています)のファイルを開きつつ、シートを 26-4 に選択していくループ処理をしたいのですが、2週目から Sheets("26-4").Select  でエラーになります。 原因は、test ファイルがアクティブになっているからだと思うのですが、その対策の仕方が、検索してもうまく見つからなかったので、質問しました。 ご回答よろしくお願いします。 エクセル2010 使用しております。 Range("D1").Select i = 1 Do Until ActiveCell.Value = "" Workbooks.Open Filename:=Range("D" & i) '操作事項マクロ Sheets("26-4").Select Windows("test.xlsm").Activate ActiveCell.Offset(1, 0).Select '下にずれる i = i + 1 Loop End Sub

  • エクセルでマクロを組み始めたばかりのため、皆様にご

    エクセルでマクロを組み始めたばかりのため、皆様にご教授頂ければと思います。 今開いているシートに転送ボタンを作成します。このシートのセルC4からC27までデータ(言葉や数値など)を、ボタンを押して、デスクトップ内の「マクロ」というブック、「記録用紙」名のシートにB列に横へ(B4,C4…)、毎日データ転送しようと思います(4行目,5行目…)。 その際、転送先はシート保護をしておきたいのです。 Option Explicit Private Sub CommandButton1_Click() Call Macro1 End Sub Sub Macro1() Range(”C4:C27”).Select Selection.Copy Workbook.Open ”C:¥Users¥user¥Desktop¥マクロ.xlsm” Workbooks(”マクロ.xlsm”).Activate Sheets(”記録用紙”).Select Range(”B65536”).End(xlup).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=True Windows(”マクロ.xlsm”).Activate End Sub この様なマクロを組んでみました。転送ボタンを押しても、「保護の為、読み取り専用」というエラーメッセージが出て途中で止まってしまいます。 どの様に修正すれば良いのでしょうか?お手数をおかけして申し訳ございませんが、よろしくお願いします。

  • 090624出費、090625出費のような、名前に変数があるファイル

    デスクトップ上に毎日UPされる生データを、他のbookにコピペしたく下記のように書いたのですがうまくいきません。 (1)名前が『出費』のときは動いたマクロの、ファイル名だけ変えました。 (2)名前を『日付+出費』に変更すると動きません。 (3)名前を『日付+出費』に変えても、ファイルを開くところまでは動作することを確認してます どこを直したら動きますか?教えてください。 書いたマクロ 名前が出費の場合(→動いた) Sub データ更新() If Dir("C:\Users\np\Desktop\"出費.csv") <> "" Then Workbooks.Open Filename:="C:\Users\np\Desktop\"出費.csv" Else MsgBox "Not found" End If Range("A5").Select Selection.Copy Windows("家計簿.xlsm").Activate Range("D2").Select ActiveSheet.Paste Windows("出費.csv").Activate Range("B15:B35").Select Selection.Copy Windows("家計簿.xlsm").Activate Range("D3").Select ActiveSheet.Paste Sheets("Graph1").Select End Sub 名前を『日付+出費』という変数を含むものにした→動かない Sub データ更新() If Dir("C:\Users\np\Desktop\" & Format(Now, "yymmdd") & "出費.csv") <> "" Then Workbooks.Open Filename:="C:\Users\np\Desktop\" & Format(Now, "yymmdd") & "出費.csv" Else MsgBox "Not found" End If Range("A5").Select Selection.Copy Windows("家計簿.xlsm").Activate Range("D2").Select ActiveSheet.Paste Windows(" & Format(Now, "yymmdd") & "出費.csv").Activate Range("B15:B35").Select Selection.Copy Windows("家計簿.xlsm").Activate Range("D3").Select ActiveSheet.Paste Sheets("Graph1").Select End Sub

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

専門家に質問してみよう