- ベストアンサー
【マクロ】指定したファイルを開いてマクロを実行
マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> 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に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。
- hiro7th
- お礼率41% (38/91)
- その他MS Office製品
- 回答数4
- ありがとう数4
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
間違いがいくつかあります。 >If OpenFileName <> "False" Then >Workbooks.Open OpenFileName >End If これではFalseの時も処理が続いていましますので If OpenFileName = "False" Then Exit Sub Workbooks.Open OpenFileName として、Cancelのときは終了するようにしましょう。 また >Workbooks(Dir(OpenFileName)).Activate これは不要です。 Workbooks.Openの時点でActiveになります。 あと、 >ActiveCell.FormulaR1C1 = "テスト" >Range("A1").Select >Selection.Copy >Range("B1").Select これらのRangeオブジェクトがどのシートか明示しましょう。 それらを踏まえて。。。 '---------------------------------------------- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName = "False" Then MsgBox "終了します" Exit Sub End If Workbooks.Open OpenFileName ActiveSheet.Range("A1").Value = "テスト" ActiveSheet.Range("A1").Copy ActiveSheet.Range("B1") End Sub '----------------------------------- それから、今回は値だけのコピーでしょうから ActiveSheet.Range("A1").Copy ActiveSheet.Range("B1") これは ActiveSheet.Range("B1").Value = ActiveSheet.Range("A1").Value とも書けます。 以上です。
その他の回答 (3)
- cistronezk
- ベストアンサー率38% (120/309)
他の方の回答とだいぶダブりますが、ご容赦を。 ●値の書き込みについて >ActiveCell.FormulaR1C1 = "テスト" これでは、ActiveCellがA1でない場合もあるので、違うセルに「テスト」と書き込まれる場合があります。 Range("A1").Value = "テスト" としてください。 Range("A1").Valueは、「ActiveWorkbook.ActiveSheet.Range("A1").Value」の省略形です。 この省略形は便利なのですが、どのブックのどのシートがアクティブになっているかをちゃんと意識しておかないと、自分の意図と別なシートやセルに書き込んでしまうので注意してください。最初は、 Workbooks("任意のブック名").Worksheets("任意のシート").Range("任意のセル範囲").Value = "任意の値" というように、ブック名とシート名を明示した方がいいでしょう。 この方法は、ブックやシートをわざわざアクティブにしなくても目的のセルに書き込むことが出来るという利点があります。 ●コピーについて >Range("A1").Select >Selection.Copy これもActiveSheetが省略されています。 おそらく人の操作を記録したマクロなので2行になっているようですが、 Range("A1").Copy と1行にすることができます。 さらに、貼り付け先も指定できるので Range("A1").Copy Range("B1") として「A1コピー、B1ペース」を実行できます。
お礼
回答ありがとうございました。目的のセルの設定が不明だったので 解消されました。
- xls88
- ベストアンサー率56% (669/1189)
下記でも大丈夫だと思います。 Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Range("A1:B1").Value = "テスト" 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 With Workbooks(Dir(OpenFileName)) .Sheets("シートA").Range("A1:B1").Value = "テスト" End With End Sub
お礼
目的のシートの場所をきちんと与えてあげることで解消されました。 ありがとうございました。
- kigoshi
- ベストアンサー率46% (120/260)
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 ActiveSheet.Range("A1").Value = "テスト" ActiveSheet.Range("A1").Copy ActiveSheet.Range("B1").Select ActiveSheet.Paste End Sub で、いかがでしょう。
お礼
ありがとうございました。参考にさせていただきました。 まだまだ勉強することがたくさんあるなと痛感しました。
関連するQ&A
- 【マクロ】指定したファイルを開いてマクロを実行
マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> 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に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。
- 締切済み
- Visual Basic
- ファイルを開かずにマクロを実行
マクロの実行をいちいちファイルを開かずに行いたい場合には、どうすればよいのでしょうか。 フォルダの中に同じフォーマットのファイルが数十個から数百個あります。 作業内容は、ファイルの中の一部分を修正する、などです。フォルダ内の全てのファイルに同じ作業をします。 これを、下記のマクロでやっているのですが、今は、 ファイルを開く→下記の別ファイルで保存したマクロを実行し、修正を行う、を繰り返してやっています。 例えば、こんな作業をします。 Range("B2").Select ActiveCell.FormulaR1C1 = "変更しました" ActiveCell.Characters(1, 2).PhoneticCharacters = "ヘンコウ" Range("D11").Select Sheets("修正").Select Range("A1").Select ActiveCell.FormulaR1C1 = "変更しました" ActiveCell.Characters(1, 2).PhoneticCharacters = "ヘンコウ" Range("A6:B10").Select Selection.ClearContents End Sub これだと、1ファイルずつ作業をしないといけないので、出来ればフォルダ内にあるエクセルファイルに対し一括で処理できるようにマクロを実行させたいです。 おそらく上記コードに、前後何かをつけたせばいいのだと思いますが、それが分かりません。これが分かれば、色々応用がきくと思うので教えていただけませんか。 どうぞ宜しくお願い致します。 Office2003
- 締切済み
- オフィス系ソフト
- VBA_マクロ内でマクロ実行
独学でVBAをやってる初心者です。 よろしくお願いします。 EXCEL2003を使ってます。 例) <A.xlsファイル> Sub File_A () Workbooks.Open Filename:="B" Call File_B Range("A1").Select Selection.Paste End Sub <B.xlsファイル> Sub File_B () Range("A2:T5").Select Selection.Copy End Sub A.xlsファイルを開きマクロFile_Aを実行させると B.xlsファイルのマクロFile_Bを実行することができません。 どうしたらうまく実行できますか? 教えてください。
- ベストアンサー
- その他(プログラミング・開発)
- 指定したセルに番号をつけていくマクロ
現在、画像をたくさん貼り付け、カタログを作っていて、番号を入れたらマクロで画像が配置されるというところまでできました。今度は、その、番号を指定したセルに書き込む作業をマクロでできないかと考えています。現在の私が作成したマクロが↓です。 Sub 画像1から60() Range("A4").Select ActiveCell.FormulaR1C1 = "1" Range("C4").Select ActiveCell.FormulaR1C1 = "2" Range("E4").Select ・・・ ActiveCell.FormulaR1C1 = "58" Range("q29").Select ActiveCell.FormulaR1C1 = "59" Range("s29").Select ActiveCell.FormulaR1C1 = "60" End Sub というふうにかなり長く、また、この番号が3000番くらいまであり、簡単にできないものかと試行錯誤しています。 初心者なりに、工夫したのは"600"と表記するのを"=60*10"とし、あとで*10を置換しています。それでも3000番はほど遠く何か方法がありましたら教えてください。
- ベストアンサー
- オフィス系ソフト
- ファイルを開くマクロ
フォルダ(A)の中にエクセルファイルが(a,b)2つあります。aのファイルに下記のマクロを組んで、ボタンにマクロを貼り付けます。マクロでbのファイルを開きたいのですが、ファイルが見つかりませんとなってしまいます。フォルダ(A)は場所を移動して使う予定です。うまく動かなくて困っております。ご教授よろしくお願い致します。 Sub CCC() s_PathCheck Workbooks.Open Filename:=myWBPath & "b.xls" Sheets("P").Select Range("a11").Select End Sub Sub s_PathCheck() Dim n As Variant myWBPath = Workbooks(1).Path myWBName = Workbooks(1).Name n = InStr(myWBName, ".xls") myWBNameF = Left(myWBName, n - 1) End Sub
- ベストアンサー
- オフィス系ソフト
- ■ エクセルマクロについてです。初級?
エクセルのマクロでデスクトップにあるエクセルファイルを開くにはどうしたらいいのでしょうか? 現在は、エクセルファイルA.xls B.xlsという2つを開いていて、マクロを実行することができるのですが、これをA.xlsだけ開いている上体で、実行したいのです。 なので、デスクトップに置いてあるB.xlsファイルを開くコマンド?というか、関数が知りたいのですが、どうしたらいいのでしょうか? 現在はこのような感じになっております。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2008/9/10 ユーザー名 : ' ' ActiveCell.FormulaR1C1 = "12345" Range("G17").Select ActiveCell.FormulaR1C1 = "129876" Range("G18").Select Windows("B.xls").Activate Range("N16").Select ActiveCell.FormulaR1C1 = "8/4/2008" Range("N17").Select ActiveWorkbook.Save Range("O16").Select ActiveWorkbook.Save ActiveWindow.Close End Sub
- ベストアンサー
- オフィス系ソフト
- EXCELマクロを無効にして開く方法
掲題の通りなのですが、EXCEL2007で作成されたマクロ有効ファイル(XLSM形式)を マクロ無効の状態で開く方法が分からず困っております。 マクロの内容は Workbook_Open 処理で、特定セルに入力されている EXCELファイルを開き、自身は閉じるというものです。 Private Sub Workbook_Open() Dim FileName As String '1ファイル目 Range("A2").Select FileName = ActiveCell.FormulaR1C1 Workbooks.Open FileName:=FileName ThisWorkbook.Activate '2ファイル目 Range("A3").Select FileName = ActiveCell.FormulaR1C1 Workbooks.Open FileName:=FileName ThisWorkbook.Activate ・・・・・・繰り返し DoEvents ThisWorkbook.Close End Sub 上記の特定セルに設定してあるファイルパスを変更するためには マクロを無効にして開かなければなりません。 マクロのセキュリティを変更して、「すべてのマクロを無効にする」を設定して 該当のファイルを開けば良い事は分かっているのですが、他に分かりやすい方法で マクロ無効状態で開く方法があれば、ご教授頂ければと思います。
- ベストアンサー
- オフィス系ソフト
- エクセルマクロ フォルダ内のファイル検索で
よろしくおねがいします。 下記で、どうも指定フォルダ内のファイル名を検索できていないようで 条件の"ないなら"に反応して中断するハズがファイルを開いてしまいます。 思ったのですが、bufの設定にファイル名は指定できないのでしょうか? Sub Start8() Dim buf As String, IptA As String Const Path As String = "C:\001\" IptA = Workbooks("AAA.xls").Sheets("Sheet1").Cells(1, 1).Value buf = Dir(Path & "" & IptA & ".txt") If buf = "" Then Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptA & "は見つかりません" Exit Sub Else Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptFN & "が見つかりました" End If Workbooks.OpenText Filename:= _ "C:\001\" & IptA & ".txt" End Sub
- ベストアンサー
- その他MS Office製品
- 同じ場所にあるファイル全てに対してマクロをかけたい
<やりたいこと> マクロと同じフォルダに入っている全ファイル(そのときによりファイル数が変わる)に対し、 1、2行を削除し、オートフィルタを消し、A2にある「No.1」を「No1」(ドットを消す)にし、 ファイルを上書き保存するようにしたいです。 <今の状態と質問> 全ファイル(例は4つ)を開いた状態で下記のマクロをかければ、 希望の処理ができます。 が、複数ファイルが有る場合、ファイル全てを開いて実行するのは難ありです。 事前にファイルを開く手間をかけずに、マクロで全て処理する方法は どうしたらいいのでしょうか。 過去検索で、Workbooks.Open Filename:= (ThisWorkbook.Path & "\*.xls")などを 見よう見真似で追加したりしてみたものの動きませんでした。 今の段階(4ファイル開いておけば実行可能)のマクロは下記の通りです。 Sub test() ' ' Keyboard Shortcut: Ctrl+q ' Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close End Sub
- ベストアンサー
- オフィス系ソフト
- コンボボックスからファイルを指定して、マクロを実行するには?
EXEL VBAで、コンボボックスから2週分のファイルを選び、そのファイルの差を算出するマクロを組みたいのですが、どうしてもコンボボックスで選んだファイルを変数に変えてマクロを実行することが出来ません。どうしたらよいのでしょうか? (現在作成中のマクロを下記に貼り付けました) Private Sub UserForm_Initialize() With Application.FileSearch '検索先フォルダを指定する .LookIn = "F:\Sample2008\数字ファイル(test)" '検索するファイル名を指定する .Filename = "*.xls" '検索を実行する If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Workbooks("変更分.xls").Worksheets("変更数字確認シート").Cells(i, 151).Value = .FoundFiles(i) Next i Else MsgBox "ファイルが見つかりません" End If End With With UserForm1 'リストの項目にセルを指定する .ListBox5.RowSource = Workbooks("変更分.xls").Worksheets("変更数字確認シート").Range("EU1:EU30").Address 'リストの項目にセルを指定する .ListBox6.RowSource = Workbooks("変更分.xls").Worksheets("変更数字確認シート").Range("EU1:EU30").Address End With End Sub Sub ListBox5_Click() ListBox5.ListIndex = 先週分 End Sub Sub ListBox6_Click() ListBox6.ListIndex = 今週分 End Sub '別マクロにて「先週分」と「今週分」の変数を使って引き算を実行
- 締切済み
- Visual Basic
お礼
回答ありがとうございました。無事、やりたいことができました。 また、キャンセル時にウィンドを閉じるのは便利でした。参考にさせていただきました。