Excel2007 マクロを使って他ブックに対して並び替えを行いたい

このQ&Aのポイント
  • Excel2007を使用して他のブックに対して並び替えを行うためのマクロを作成したいです。
  • 具体的には、指定したシートの特定の列を基準に全体を並び替えるマクロを作成し、他のブックからデータを参照して実行したいです。
  • どのようなマクロを作成すれば良いか検討がつかず、ヒントが欲しいと思っています。
回答を見る
  • ベストアンサー

Excel2007 他ブックに対してマクロを実行

Excel2007を使用しています。 あるシートに対して並び替えを行うマクロを作り、ちゃんと動作している事を確認しました。 ちなみに、以下のようなマクロです。 --------------------------------------------------------------------------------- Sub Macro2() Dim a As Range '(1)部のユーザー設定リスト追加 Application.AddCustomList ListArray:=Array("A部", "B部", "C部", "D部") '(2)部はどこ列か Set a = Range("1:1").Find(what:="部", LookIn:=xlValues, lookat:=xlPart) If a Is Nothing Then MsgBox "部が見つかりません" Exit Sub Else MsgBox a.Column & "列に部を発見しました" End If '(3)取得した部列基準で全体の並べ替えを行う a.CurrentRegion.Sort key1:=a, order1:=xlAscending, Header:=xlYes, ordercustom:=(Application.CustomListCount + 1) Application.DeleteCustomList (Application.CustomListCount) End Sub --------------------------------------------------------------------------------- 動作↓ (1)ユーザーリストの設定 (2)シートの見出し行で、「部」を含むセルを検索 (3)そのセルを含む列を基準に、(1)で設定した順にソート このマクロを使用して、 (1)並び替えを行いたいエクセルデータ(A)を用意 (2)新しく作成したブック(B)にファイルを参照するマクロ(ファイルを自分で選ぶようにダイアログを表示させたい)と、そのファイルに対して 並び替えを行うマクロ(既に作成済み)を作成 (3)ブック(B)からデータ(A)を参照 (4)並び替えを行うマクロを実行させ、その結果を別ファイルで保存 という事をさせたいのですが、どのようなマクロを作成すればよいか検討が付きません。 分りにくい説明で申し訳ございませんが、どなたかヒントをいただけたらと思います。 宜しくお願いしますm(_ _)m

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

あれ,いつの間にか解決したんですか。 結局ユーザー設定リストの番号を事前に調査しておくのはヤメにしたワケですね。 今回のご質問。 >(1) これはマクロと関係なく,事前の準備としてあなたが用意することです。 >(2) ブックを参照して開く sub macro3()  dim myFile as variant  dim w as workbook  dim a as range  Application.AddCustomList ListArray:=Array("A部", "B部", "C部", "D部")  myfile = application.getopenfilename()  if f = false then exit sub  set w = workbooks.open(filename:=myfile) >(3)ブック(B)からデータ(A)を参照 何をしたいのかも,今回ご質問の一連のマクロとどんな関連があるのかも,全くイミフメイです 多分,何かデータを参照する数式をブックBに用意しておくのが良いと思われます。 必要に応じてこの部分は具体的な事例を挙げて,また別途ご相談を投稿してみてください。 >(4) 前回完成したマクロをそのまま上述Macro3に続けます なお,開いたファイルの「どのシート」が操作対象のシートなのか,説明されていません。ご自分で適切にマクロを手直しして実行してください。  Set a = w.worksheets(1).Range("1:1").Find(what:="部", LookIn:=xlValues, lookat:=xlPart)  If a Is Nothing Then   MsgBox "部が見つかりません"   Exit Sub  Else   MsgBox a.Column & "列に部を発見しました"  End If '(3)取得した部列基準で全体の並べ替えを行う  a.CurrentRegion.Sort key1:=a, order1:=xlAscending, Header:=xlYes, ordercustom:= (Application.CustomListCount + 1)  myFile = application.getsaveasfilename()  if myfile = false then exit sub  w.saveas filename:=myfile  w.close savechanges:=false  Application.DeleteCustomList (Application.CustomListCount) End Sub

関連するQ&A

  • 他ブックを実行するマクロ

    あるexcelファイル(ブック名「自動操作.xlsm」)からべつのexcelファイル(ブック名「a.xlsm」)というファイルを実行するマクロを組んでいます。 Application.Runを用いて「自動操作.xlsm」のコードを以下のように記述しました。 ※「\」は半角の円マークだと考えてくれればいいです。ここで半角の円マークをかいても\と表示されます。また、自動操作とaは同じディレクトリにあります。 Sub Test1() Application.Run "'C:Users\ディレクトリ名\a.xlsm'!test" End Sub また、「a.xlsm」は以下のように記述しました。 Sub test() Dim i As Integer For i = 1 To 5 '移動元ファイルパスの設定 Cells(i, 1) = i Next End Sub ただ1~5行にその行数を記入するマクロです。 a.xlsmを開いた状態でこれを実行すると、「アプリケーション定義またはオブジェクト定義のエラーです」とでます。 a.xlsmを閉じた状態で実行すると、「このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります」とでます。 いったいなにを間違えているのでしょうか。

  • エクセルのマクロ記録を他のシートでも実行したい

    エクセル2010を使用しています。 シート1でマクロ記録を使用しデータの並び替えをし、 同じブック内にシート1をコピーしてシート2としました。 このシート2でもシート1で行ったデータの並び替えをしたいのですが シート2ではマクロは実行されませんでした。 わからないながらもVBAを見たところ下記のように 記述されおりましたが、どのような修正をすればよいかご教授いただけると助かります。 ちなみに、シート1でマクロを記録し、そのシートを同ブック内に複数コピーして それぞれのシートでマクロを実行させるということを考えています。 Sub Macro1() ' ' Macro1 Macro ' ' Range("A11:Q17").Select ActiveWorkbook.Worksheets("1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("B11:B17"), _ SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="日,月,火,水,木,金,土" _ , DataOption:=xlSortNormal ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("A11:A17"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("1").Sort .SetRange Range("A11:Q17") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • マクロを他のブック上で実行できなくなった

    あるマクロを作成して、シート上の図形に登録します。 (たとえば、Msgboxなど簡単なマクロです。図形を押すとメッセージボックスが表示されますよね) そのシートを新規ブックにコピーして、図形を押してもマクロが実行できません。 図形に登録されたマクロを調べると、新規ブックのマクロとして設定されてしまってます。 これはどこかの設定を変更すると治るのでしょうか? (最近まで出来てたのに突然出来なくってしまったのです) 環境はExcel2007。OSはWindows7です。 よろしくお願いします。

  • 他のブックのマクロを呼び出すと他のブックの画面がアクティブになってしまう。

    エクセルのツールバーにボタンを2つ作って他のブック1,2のマクロをそれぞれ割り当てました。 エクセルの表を開いておいてツールバーから マクロ1(編集・出力)を呼び出すとブック1がアクティブになってしまい真っ白のシートが見えてしまいます。 もう一方のブック2のマクロ2はフォームを表示するマクロですがそちらはバックに隠れています。 以前同様にシート上のCH(13)を消すマクロを使っていた時もバックに隠れていました。 Application.ScreenUpdating = Falseを入れましたが一瞬ですがやはりアクティブになります。 見た目も悪いので表示したくないし、ブック1と2で動作が違う理由がわかりません、 マクロ1はこれです。 ブック1のcreateというマクロを使うのが目的です。 Sub Output() Application.ScreenUpdating = False Call create MsgBox "完了しました。" ThisWorkbook.Close End Sub マクロ2 Sub Form_Open() Frm_Form1.Show vbModeless End Sub つまらない質問ですが気になるのでよろしくお願いします。

  • 他のブックのマクロが見つらない。とのエラ-について

    Excel VBAで、他のブックを開きそこのマクロを動かす事をしたいのですが、マクロが見つからないとのエラーが出ます。 'ファイル作成 Dim a As Variant Dim b As Variant a = Worksheets("sheet3").Range("e2").Value b = Worksheets("sheet3").Range("c2").Text ActiveWorkbook.SaveCopyAs Filename:=b & a & "-提出用作業表.xls" ActiveWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\BackUp\" & b & a & "-提出用作業表.xls" Workbooks.Open Filename:=ThisWorkbook.Path & "\" & b & a & "-提出用作業表.xls" Application.Run b & a & "-提出用作業表.xls" & "!" & "提出用作業表シート削除" MsgBox "提出用作業表を作成したので、サーバーの所定の場所に保存提出して下さい" End Sub 変数が多く見にくくて申し訳ありません。上記のとおり記述したところ、対象ファイルが開くのですが「実行時エラー.1004 マクロが見つかりません」とエラーが出ます。 しかし、エラーメッセージのなかに「'2006年12月社員1-提出用作業表.xls!提出用作業表シート削除'」と対象マクロが記述されてます。多分つまらないことを見落としているのではないかと思うのですが、理由がわかりません。ご教授お願いします。 対象マクロは、標準モジュール4に、Public Subで記載してます。This Wookbook内に記述してもだめでした。マクロの内容は、Sheetを1つ残して他を削除するというものです。 Application.Run Application.Run ThisWorkbook.Path & "\" & b & a & "-提出用作業表.xls" & "!" & "提出用作業表シート削除"でもだめでした。

  • ExcelVBAで他ブックのマクロを動かす

    Aというブックのマクロを動かし、別ブックのコマンドボタンに埋め込まれているマクロの動作を行いたいのですがうまく行きません。 下記がコードになります。 Option Explicit Public strName As String Public strPath As String Public xlApp As Object Public xlBook As Object Public xlSheet As Object Public Function テスト処理() 'ファイル名 strName = Worksheets("名前").Range("B2") 'ファイルを置いている場所 strPath = Worksheets("名前").Range("B3") Set xlApp = CreateObject("Excel.Application") '別Excelを開く Set xlBook = xlApp.Workbooks.Open(strPath, True) 'シートの選択 Set xlSheet = xlBook.Worksheets("操作画面") xlApp.Visible = True xlApp.UserControl = True xlSheet.Activate setブック処理 End Function Public Sub setブック処理() '別ブックのマクロを動かす Application.Run (strName & "!CmdClick"), ThisWorkbook   End Sub 上記のマクロを動かすと、Application.Runの部分で下記エラーが表示されます。 実行時エラー1004 '別ブック.xls'が見付かりません。ファイル名及びファイルの保存場所が正しいかどうか確認してください。 setで飛ぶ前に別のブックは開けているので、ファイル名や保存場所は正しいと思うのですがエラーが出てしまいます。 宣言の仕方が間違っているのでしょうか? ちなみに、別ブックのコマンドボタンのマクロは下記の名称なので、マクロ名の間違いという事も無いと思います。 Private Sub CmdClick() ~処理~ End Sub

  • 他のブックでマクロを実行するには?

    以下のマクロを実行すると同一ブック内の他のシートに入力 されますが、これを他のブックのシートに入力されるように するには、具体的にどのようにすればいいのでしょうか? ご教授ください。 ---------------------------------------------------------------- Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row + 1 .Range("B" & LastRow).Value = Worksheets("sheet1").Range("B1").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("B3").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("B5").Value .Range("E" & LastRow).Value = Worksheets("sheet1").Range("B7").Value .Range("F" & LastRow).Value = Worksheets("sheet1").Range("B9").Value .Range("G" & LastRow).Value = Worksheets("sheet1").Range("B11").Value End With End Sub

  • マクロを実行すると2つのBookで実行されてしまう

    AというBookとBというBookを同時に開いています。 どちらにもそれぞれ違った複数のマクロを登録しています。 マクロの中にはAの内容をBにコピーするというマクロもありますので、この2つは同時に開いておく必要があります。 困っているのはAのマクロを実行するとBでも同じように実行されてしまうのです。 マクロによってはその現象が起きないマクロもあります。 逆にBのマクロを実行してもAでは何も起きません。 Aのマクロを作成登録してる時にBも開いていたからでしょうか? この現象がいつから起きたのか分かりません。 例えばAの表の内容を一括で消すマクロを実行すると、 Bの方でも消えてしまうのです。 Aのマクロの内容を見てもBでも動作させるような内容はありません。 何度おこなっても同じです。 どうすれば元に戻せますか? 数時間かけて作成したマクロが無駄になってしまい困っています。 宜しくお願いします。

  • テキストボックスの日付の変更時のみマクロ実行する

    Windows7とExcel2007でマクロ作成中の、初心者です。 (1)ブックAにマクロ書き込み、Bブックに処理データがあります。 (2)Bブックは毎月一回だけ、書式の変更マクロを実行します。 (3)そのため、苦肉の策として Range("E3")が0のときは、実行するが、1のときはマクロ実行しないように しています。 (4)以上の方法では、更新するときは、いちいちRange("E3")の値を手動で0に する必要があります。面倒です。 (5)そこでAブックのユーザーフォームに日付の入ったテキストボックスを取り付け ここの日付けが変更されたときだけ、マクロを実行するようにしたいのですが。 難しくて出来ません。教えていただきたいです。お願いします。 Sub 書式の変更操作() Application.ScreenUpdating = False Dim n As Long Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim mydate As Date mydate = Worksheets("集計").Range("D2").Value If Range("E3").Value = 0 Then myMsg = "この" & Format(Range("D2").Value, "m月") & "分 表の書式等を更新します。" myTitle = "書式変更の確認" myBtn = MsgBox(myMsg, vbOKOnly + vbExclamation, myTitle) 書式更新のマクロ実行 Range("E3").Formula = "1" ’ここで次回起動時マクロ実行しない MsgBox "書式を更新しました。" Else MsgBox "既に変更済みです。", vbOKOnly + vbExclamation Exit Sub End If Application.ScreenUpdating = True End Sub

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

専門家に質問してみよう