[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファイルの指定方法を変更したい。』(躯)
閲覧ありがとうございます、いつもお世話になっております。
下記の変更についてご教授いただければ幸いです。
宜しくお願い致します。
・最新のテキストファイルを参照するマクロを追加したい。
・test_A_("A630").xlsとtest_B_("A630").xlsを
1つのマクロ文で作成したい。
(AとBでの違いは、セルの参照先のみ)
・作成されたtest_A_("A630").xlsを
開くとauto_openで引き継いでいるマクロが流れるのでそれを停止させたい。
( マクロの動き イメージ ) 1.C:\ファイル先\Macro.txtを開き、その中の値を参照 2.C:\ファイル先\直下内から1.の値のフォルダを検索 3.該当値フォルダ内のtest.csvから値を参照し、下記2つのファイルを生成させる
test_A_("A630").xls
test_B_("A630").xls
4.マクロが終了次第、CSVファイル、EXCELアプリは自動で終了する
Sub auto_open()
Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject")
Workbooks.Open Filename:= _ "\ファイル先\test.csv"
Range("H467").Select
Selection.Copy
Windows("test_A_.xls").Activate Range("H19").Select
ActiveSheet.Paste
Windows("test.csv").Activate Range("M573").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M574").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M575").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M576").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("N573").Select ActiveCell.FormulaR1C1 = "=MAX(RC[-1]:R[3]C[-1])" Range("O573").Select ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],RC[-2]:R[3]C[-2],0)" Range("P573").Select ActiveCell.FormulaR1C1 = "=INDEX(RC[-8]:R[3]C[-8],RC[-1])" Range("P573").Select
Application.CutCopyMode = False Selection.Copy
Windows("test_A_.xls").Activate Range("H20").Select
ActiveSheet.Paste
Windows("test.csv").Activate Range("M474").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M475").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M476").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M477").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("N474").Select ActiveCell.FormulaR1C1 = "=MAX(RC[-1]:R[3]C[-1])" Range("O474").Select ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],RC[-2]:R[3]C[-2],0)" Range("P474").Select ActiveCell.FormulaR1C1 = "=INDEX(RC[-8]:R[3]C[-8],RC[-1])" Range("P474").Select
Application.CutCopyMode = False Selection.Copy
Windows("test_A_.xls").Activate Range("H21").Select
ActiveSheet.Paste
Windows("test.csv").Activate Range("H515").Select
Application.CutCopyMode = False Selection.Copy
Windows("test_A_.xls").Activate Range("M578").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M579").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M580").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M581").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("N578").Select ActiveCell.FormulaR1C1 = "=MAX(RC[-1]:R[3]C[-1])" Range("O578").Select ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],RC[-2]:R[3]C[-2],0)" Range("P578").Select ActiveCell.FormulaR1C1 = "=INDEX(RC[-8]:R[3]C[-8],RC[-1])" Range("P578").Select
Application.CutCopyMode = False Selection.Copy
Windows("test_A_.xls").Activate Range("H22").Select
ActiveSheet.Paste
Windows("test.csv").Activate Range("M522").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M523").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M524").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M525").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("N522").Select ActiveCell.FormulaR1C1 = "=MAX(RC[-1]:R[3]C[-1])" Range("O522").Select ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],RC[-2]:R[3]C[-2],0)" Range("P522").Select ActiveCell.FormulaR1C1 = "=INDEX(RC[-8]:R[3]C[-8],RC[-1])" Range("P522").Select
Application.CutCopyMode = False Selection.Copy
Windows("test_A_.xls").Activate Range("H23").Select
ActiveSheet.Paste
Application.CutCopyMode = False Application.DisplayAlerts = False
ActiveWorkbook.SaveAs "\ファイル先\" _ & CreateObject("Scripting.FileSystemObject").Getbasename(ThisWorkbook.Name) _ & Workbooks("test_A_").Worksheets("test").Range("A630").Value
Application.Quit
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
それと、
Range("M573").Select
ActiveCell.FormulaR1C1 = "=RC[-4]^2"
といった書き方のオンパレードですけど(これは死語かもしれないな)、
Range("M573").FormulaR1C1 = "=RC[-4]^2"
と書くとよいですよ。もっと見やすく、速度も上がります。
他人に見せるなら、マクロ記録そのままでなく、手を入れるべきじゃないですか?
(γ) 2019/06/16(日) 12:33
たぶん、わたしのペースが遅くて、じれったいと感じているでしょうから、
他の回答者にお願いしようと思います。
(マナ) 2019/06/16(日) 14:28
質問者さんへ。
詳しく読んでいませんが、
きちんと一行につめて書くと助言されていて、
>上手くいきました、
とあるのに、また、マクロ記録そのままの二行に戻ってますねえ。
いっぺん綺麗に書き直して投稿してもらえませんか。全体が分かりにくい。
途中規則がくずれているところもあるし。
そうしたうえで本当のスタートになるのでしょう。
(γ) 2019/06/16(日) 15:00
例えば、
Windows("test.csv").Activate Range("M573").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M574").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M575").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("M576").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("N573").Select ActiveCell.FormulaR1C1 = "=MAX(RC[-1]:R[3]C[-1])" Range("O573").Select ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],RC[-2]:R[3]C[-2],0)" Range("P573").Select ActiveCell.FormulaR1C1 = "=INDEX(RC[-8]:R[3]C[-8],RC[-1])" Range("P573").Select
↑の部分
With Workbooks("test.csv").Worksheets(1) .Range("M573:M576").Formula = "=I573^2" .Range("N573").Formula = "=MAX(M573:M576)" .Range("O573").Formula = "=MATCH(N573,M573:M576,0)" .Range("P573").Formula = "=INDEX(H573:H576,O573)" End With
このように記述すれば、どのブックやシートがアクティブでもちゃんと目標のブック(シート)に数式を設定できます。(R1C1形式をA1参照形式に直したのは私の趣味なので気にしないでください)
(もこな2) 2019/06/17(月) 07:58
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.