状況
例えば,test1.xlsというエクセルブックを開いて,vba機能によりマクロを作成します。これを,保存先をtest1.xlsにしてツールバーのアイコンに登録します。
作業が終わって,test1.xlsをok.xlsという名称に変えて保存・終了し,新しいbook1.xlsを立ち上げるとします。
すると,test1.xlsに登録したはずのツールバーアイコンのマクロ登録先が,ok.xlsに変わっています。

質問
例えばok.xlsにブック名を変更して保存・終了しても,ツールバーのアイコンのマクロの保存先をtest1.xlsにするには,どこをどの様に設定したら良いのでしょうか?

素人なものですから,具体的に方法を記述していただけると,非常に助かります。

よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

普通は、名前を変えて保存したら、ちゃんと追随してリンクが変わった方が便利なのですから、ご希望の事はできないのでは?



同じアイコンが、開くブックによって変わると言うことがしたいのであれば、各ブックが開くときに、アイコンのリンク先を変更するようにしておけばいいのではないですか?
    • good
    • 0
この回答へのお礼

やっぱり,思っていることはできないのでしょうかね~。
色々試してみようと思います。

ありがとうございました。

お礼日時:2001/02/09 09:42

こんにちは



 ”ブック名を変えなければならない”ファイルとマクロが書いてあるファイルを別にすれば良いんじゃないでしょうか?

参考URL:http://www2.odn.ne.jp/excel/
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

なるほど,これも一つの方法ですね。気が付きませんでした。
「木を見て森を見ず」かな(笑)

もう少し色々やってみます。
ありがとうございました。

お礼日時:2001/02/09 09:45

まず、ファイル名を変えても登録マクロのブック名をマクロ変えないようにする方法ですが、



・Excelでファイル名を変えて保存しない。

つまり、保存したブックをExplorerで名前を変えれば、Excelには、ファイルの名前が変わったことがわからないので、大丈夫です。

すでに、登録されているマクロを変える方法ですが、

・メニューの[表示]-[ツールバー]-[ユーザー設定]でダイアログを出す。
・変更したいツールバーのアイコンをクリック
・そのアイコンの上で右クリック
・ボップアップメニューの[マクロの登録]をクリックしてダイアログを出し、登録してあるマクロの名前を変えてください。

この回答への補足

早速のご回答をありがとうございます。

おっしゃる通り,名前を変えないというのも一つの方法ですね。
ただ,現況では,ブック名を変えなければならない状態なのです。

ブックをテンプレートにして保管してみたりもしましたが,やはり上手く行きませんでした。

何か他の方法はないものでしょうか?

補足日時:2001/02/08 13:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qエクセルでpersonal.xlsが開いたり,開かなかったり...

win XP pro/excel2002です。
personal.xlsにいくつものマクロを保存して使用しておりました。
しかしここ1週間ほど,他の通常のファイルをダブルクリックして開くと,personal.xlsが開かないらしく,
保存したマクロを利用できません。
単にソフトウェアの起動をすれば,personal.xlsも開くのですが...
以前は,ファイルをダブルクリックで開いたときもマクロが利用できたはずで,そのようにしたいのですが,どうしたらよいのでしょう?
また,この件について調べていたら,personal.xlsにマクロをたくさん保存することは推奨されないようで,
アドイン化してみようと思うのですが,ファイルが表示されていないので,別名保存→アドインで保存ができません。
こちらもどうしたらよろしいのでしょうか?

Aベストアンサー

こんばんは。Wendy02です。

>質問を投げた後は順調にpersonal.xlsが同時に開くようになりました。う,エクセルが不調だっただけでしょうか??

だいたい、様子は分りました。また、ダメになる可能性があります。多くの理由は、Personal.xls の入れる場所の違いです。実は、Personal.xls は、XlStart/StartUp というフォルダですが、それは二つあります。その二つのどちらか、または両方に入れてしまって、ヘンになることがあります。以前、私が作った、Personal.xls チェックマクロを使ってもよいのですが、簡易型を作りましたので、アドインを作ろうとしているなら、ぜひとも、二つの場所は、ご自身で調べてください。

Sub StartUpChecker()
Dim myStartUpPath As String
Dim GlobalStartUpPath As String
 myStartUpPath = Application.StartupPath
  If Dir(Application.Path & "\XLStart", vbDirectory) <> "" Then
   GlobalStartUpPath = Application.Path & "\XLStart"
 End If
  MsgBox myStartUpPath & vbCrLf & _
     GlobalStartUpPath
End Sub

ちなみに、myStartUpPath(ローカル) に入れるのが正解だと言われています。アドインは、GlobalStartUpと同じ並びのLibrary に入れるのが良いとされています。私自身長く知らなかったのですが、Addin というフォルダは、COMアドインを入れるためのもので、通常のアドインを入れるべきではないという話です。

こんばんは。Wendy02です。

>質問を投げた後は順調にpersonal.xlsが同時に開くようになりました。う,エクセルが不調だっただけでしょうか??

だいたい、様子は分りました。また、ダメになる可能性があります。多くの理由は、Personal.xls の入れる場所の違いです。実は、Personal.xls は、XlStart/StartUp というフォルダですが、それは二つあります。その二つのどちらか、または両方に入れてしまって、ヘンになることがあります。以前、私が作った、Personal.xls チェックマクロを使ってもよいのですが...続きを読む

QExcel 列がA,B,C...ではなく1,2,3になっている。これを直すには

通常
A B C D E
1
2
3
4
5
のようになっているのですが、
1 2 3 4 5
1
2
3
4
5
となっています。処理等問題はないのですが、
セル指定が指定のセルからの位置指定になってしまい
RC[1]:RC[1]のようになったりしています。

通常のように戻すにはどうしたらいいのでしょうか

Aベストアンサー

[ツール]-[オプション]-[全般]で、
[R1C1参照形式を使用する]をOFF。

Qエクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1という

エクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1,3,1というような順番で数字が並んでいます。

その数字の中で、1→3と3→1になるものがいくつあるか求めたいのですが、出す関数・マクロがわかりません。
教えていただけないでしょうか?

よろしくお願いします。

Aベストアンサー

こんばんは!

>A列の中に
とは行方向に数値が入っている!というコトでしょうか?

そうであれば
表示したいセルに
=COUNTIFS(A1:A1000,1,A2:A1001,3)+COUNTIFS(A1:A1000,3,A2:A1001,1)
としてみてください。

「1」の次の行が「3」の場合と
「3」の次の行が「1」の場合をプラスしています。m(_ _)m

Qエクセルでデータ.xlsから1行毎に元シート.xlsへコピーし1行毎に多数ファイルを作成したい。

現在、以下のような繰り返し作業をカット&ペーストで何度も行わないといけません。
手が疲れて困っています。
エクセルマクロで簡単にできる方法を教えてください。

以下の例のようにデータ.xlsは、一番上の行に元シート.xlsに差込む位置、
次の行から1行ごとのデータがあります。

データ.xls
A B C D E F
1 A2 A3 B3 C2 D2 D3 <- 元シート.xlsにコピーする位置
2 test 123 456 789 012 345
3 test2 456 789 012 345 678
4 test 456 123 789 012 345
...

元シート.xlsは固定文字や罫線等があります。

元シート.xls
A B C D
1 ------------------------------
2
3
4 abcdefg 9876543
5 ------------------------------

元シート.xlsに、データ.xlsの1行ごとのデータを、指定したセルに入れ、
A列の名前で多数のファイルを作成したいのです。
ただし、A列で同じファイル名がある時は、ファイル名の後に_2等を付けて保存したいのです。

以下のような多数のファイルを自動的に作成する方法を教えて下さい。
宜しくお願い致します。

test.xls
------------------------------
test 789 012
123 456 345
abcdefg 9876543
------------------------------

test2.xls
------------------------------
test2 012 345
456 789 678
abcdefg 9876543
------------------------------

test_2.xls
------------------------------
test2 789 012
456 123 345
abcdefg 9876543
------------------------------
...

現在、以下のような繰り返し作業をカット&ペーストで何度も行わないといけません。
手が疲れて困っています。
エクセルマクロで簡単にできる方法を教えてください。

以下の例のようにデータ.xlsは、一番上の行に元シート.xlsに差込む位置、
次の行から1行ごとのデータがあります。

データ.xls
A B C D E F
1 A2 A3 B3 C2 D2 D3 <- 元シート.xlsにコピーする位置
2 test 123 456 789 012 345
3 test2 456 789 012 345 678
4 test 456 123 789 012 345
...

元シート...続きを読む

Aベストアンサー

丸投げに当るので、原型のみです。
上の例のtest_2.xlsのA1セルはtestが正しいと解釈して作成しています。
その他不明な部分は適当に仮定しています。(原型なので問題ないでしょう。)

・データの整合性等のチェックは一切省いていますので、実際の使用では各種のチェックを入れておかないと即エラーになります。(データが想定と違う場合)
・変数の宣言は省略して名前のみにしてありますが、実際はタイプを指定しておいたほうが良いでしょう。
・元シート.xlsおよび作成されるファイルは同じフォルダにあるものとしています。
・データ.xlsからのコピーはコピーメソッドで行っていますので、書式などもそのままコピーされます。
 (もし式が入力されている場合は、参照がおかしくなることがあり得ます)
・元データのデータ有無に関わらず、データシートのデータを上書きするようにしています。

データ.xlsがアクティブな状態で実行されるものと仮定しています。
(シート名、ブック名などは仮設定です)
適宜、修正してご使用ください。

Sub test()
Dim dst_name, mbk_name, mst_name, bk_name, b_name
Dim dst, mbk, mst
Dim ad, p, i, j

p = ThisWorkbook.Path & "\"  '// 対象となるフォルダのパス+"\"
dst_name = "データシート"    '// 対象データのあるデータ.xlsのシート名
mbk_name = "元シート.xls"    '// 元シート.xlsのファイル名
mst_name = "元シート"      '// 元シート.xlsの対象とすべきシート名

Set dst = Sheets(dst_name)
For i = 2 To dst.Cells(dst.Rows.Count, 1).End(xlUp).Row

'// 作成するファイル名をチェック
 b_name = dst.Cells(i, 1)
 If b_name <> "" Then
  j = 1
  bk_name = p & b_name & ".xls"
  While Dir(bk_name) <> ""
   j = j + 1
   bk_name = p & b_name & "_" & Format(j, "#") & ".xls"
  Wend

'// データをコピー、保存
  Workbooks.Open p & mbk_name
  Set mbk = ActiveWorkbook
  Set mst = mbk.Sheets(mst_name)
  For j = 1 To dst.Cells(i, dst.Columns.Count).End(xlToLeft).Column
   dst.Cells(i, j).Copy (mst.Range(dst.Cells(1, j).Text))
  Next j
  mbk.SaveAs (bk_name)
  mbk.Close
 End If
Next i
End Sub

丸投げに当るので、原型のみです。
上の例のtest_2.xlsのA1セルはtestが正しいと解釈して作成しています。
その他不明な部分は適当に仮定しています。(原型なので問題ないでしょう。)

・データの整合性等のチェックは一切省いていますので、実際の使用では各種のチェックを入れておかないと即エラーになります。(データが想定と違う場合)
・変数の宣言は省略して名前のみにしてありますが、実際はタイプを指定しておいたほうが良いでしょう。
・元シート.xlsおよび作成されるファイルは同じフォルダに...続きを読む

Qエクセルで<名前をつけて保存>するマクロに、保存時マクロを含めて保存させることは可能ですか

エクセル、マクロとも初心者です。
(VBAはわかりません)

エクセルのテンプレートファイルを開いて、必要箇所だけ入力すると、その日の日付をファイル名として、<名前を付けて保存する>ようなマクロを作りました。

このままだと、マクロも一緒に保存されてしまいますよね。

マクロを含まずに、<名前を付けて保存>させるマクロって可能ですか?
できるとしたら、どうやればいいでしょうか。

Aベストアンサー

こんにちは。

今は(Excel 2002以上)は、直接、VBEditor 側にアクセスするコードはセキュリティの関係で嫌われることもあります。Excel 2007 の場合は、拡張子で分別できますから、マクロは切り落とされます。今回は、テンプレートということで、あえて、このようなコードになるのであって、本来は、アドインなどで処理したほうが良いかもしれません。アドインの場合は、ThisWorkbook をActiveWorkbook にすればよいはずです。

シートモジュールにマクロがある場合は、
      sh.Copy After:=wb.Sheets(wb.Worksheets.Count)
と、その下の行のコメントブロックとを切り替えてください。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Dim shCnt As Integer
  Dim wb As Workbook
  Dim i As Integer
  Dim sh As Worksheet
  Dim nSh As Worksheet
  Dim fName As String
  
  If Not ThisWorkbook.Name Like "*.x?t" Then
    Cancel = True
    fName = ThisWorkbook.Name
    fName = Left$(fName, Len(fName) - 1)
    shCnt = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 1
    Set wb = Workbooks.Add
    wb.Worksheets(1).Name = "temp"
    Application.ScreenUpdating = False
    For Each sh In ThisWorkbook.Sheets
      sh.Copy After:=wb.Sheets(wb.Worksheets.Count)
      ''シートモジュールマクロがある場合(上のコード切り替えすること)
      'Set nSh = wb.Sheets.Add(After:=wb.Sheets(wb.Worksheets.Count))
      'nSh.Name = sh.Name
      'sh.Cells.Copy nSh.Cells(1, 1)
    Next sh
    wb.Sheets(1).Activate
    Application.ScreenUpdating = True
    Application.DisplayAlerts = False
    wb.Worksheets(1).Delete
    Application.DisplayAlerts = True
    Application.SheetsInNewWorkbook = shCnt
    ChDir Application.DefaultFilePath
    i = 1
    '同名ファイルを探す
    Do Until Dir(fName & i & ".xls") = ""
     i = i + 1
    Loop
    fName = fName & i & ".xls"
    
    Application.Dialogs(xlDialogSaveAs).Show fName, 1
    ThisWorkbook.Close False
    Set wb = Nothing
  End If

End Sub


#3さんのご指摘のマクロですが、マイクロソフトの定義(プログラマーズガイド)からすると、今回のイベント型は、マクロと呼ばないそうです。マクロは、引数を持たないパブリックなSub プロシージャのことだけを指しますので、除外されます。しかし、多くの方は、あまり、これについては、明言は避けているようです。理由は、マクロそのものの意味が、ミクロの反対で、全体のひとつのタスクを指すから、厳密な意味を持たせると、言葉としての原義と離れてしまうように思います。

こんにちは。

今は(Excel 2002以上)は、直接、VBEditor 側にアクセスするコードはセキュリティの関係で嫌われることもあります。Excel 2007 の場合は、拡張子で分別できますから、マクロは切り落とされます。今回は、テンプレートということで、あえて、このようなコードになるのであって、本来は、アドインなどで処理したほうが良いかもしれません。アドインの場合は、ThisWorkbook をActiveWorkbook にすればよいはずです。

シートモジュールにマクロがある場合は、
      sh.Copy After:=wb.Shee...続きを読む


人気Q&Aランキング

おすすめ情報