Excel2016でユーザー定義関数を作成し、アドイン登録して利用しています。
これを他のPCでも使用したく、そちらのPCにも同じアドインファイルを保存してその関数を使用できるようにしました。(どちらのPCでも正常に計算結果が表示されます。)
ここで一方のPCでユーザー定義関数を使用した数式を組み、それをもう一方のPCにメールで送った場合、数式の中のユーザー定義関数の前に、送信元のPCのアドインファイルのパスが表示され、そちらのアドインファイルを参照しようとしてしまいます。
パスの部分を消せば、自PCのアドインを参照してくれるかと思いきや、一度アドインのチェックマークを外してOKし、再度チェックマークを入れて初めて計算結果が表示されます。
また、複数セルにユーザー定義関数を使用している場合は、置換などで全ての数式のパスを消す必要があり面倒です。
できれば自動で自PCのアドインを参照させたいのですが、そのような事はできますでしょうか。
そもそも何か手順が間違っていますでしょうか。
どうぞ宜しくお願いします!
No.2ベストアンサー
- 回答日時:
こんばんは
>パスの部分を消せば、自PCのアドインを参照してくれるかと思いきや、一度アドインのチェックマークを外してOKし、再度チェックマークを入れて初めて計算結果が表示されます。
ブックリンクなのでパスを消してもダメ
①リボン・データ・ブックのリンクからソースブックを変更すれば出来ると思います
ブックのリンクを管理する
https://support.microsoft.com/ja-jp/office/%E3%8 …
また、Officeのインストール場所が同じPCならば・・・
LIBRARYフォルダにアドインを設置して登録し(\AddInsの古いものは削除して再セット)
アドインのユーザー定義関数を使い
配布してもリンクアドレスは同じになるので使えると思います
(未検証)
これには条件がありますが
バージョンや32bit 64bit LIBRARYフォルダの場所が同じ
aPC
C:\Program Files\Microsoft Office\root\Office16\LIBRARY\アドイン名.xlam
bPC
C:\Program Files (x86)\Microsoft Office\Root\Office16\LIBRARY\アドイン名.xlam
aPC,bPCの場合は違うのでうまくいかない
>自動で自PCのアドインを参照させたいのですが
そのようなオプションがあれば良いのですが 詳しくはありません
対象のブックがマクロ有効ブックならVBAでリンクを書き換えることも出来ますが・・・
アドイン内にリンクアドレス書き換えのコードを入れリボンなどにマクロ呼び出しボタン(更新)を設置し押させるのも出来るかな・・
これなら C:\Users\ユーザー名\AppData\Roaming\Microsoft\AddIns
内に設置してもユーザー名を書き換えればOKなので通常ブックから実行できる
第三のブックから対象のブックのブックリンクを書き換える処理を書いてみましたが ①で対応できると思いますのであまり意味が無いように思えます
以下は趣味の範疇です
第三ブックの標準モジュール
Option Explicit
#If Win64 Then
Private Declare PtrSafe Function GetInputState Lib "USER32" () As LongPtr 'DoEvents
#Else
Private Declare Function GetInputState Lib "USER32" () As Long
#End If
Sub add_inLinkSources_Change()
'ユーザー定義関数アドインリンクアドレス
'C:\Users階層のログオンユーザー名フォルダ名を変更
'通常インストール環境を想定
Dim adinName As String
Dim i As Long, j As Long
Dim targetBook As Workbook
Dim vLinks As Variant
Dim strLinkName As String
Dim NewLinkPath As String
adinName = "アドインファイル名" '実アドインファイル名に変更
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "Excelファイル", "*.xls*"
.InitialFileName = ThisWorkbook.Path
.AllowMultiSelect = False
If .Show = True Then
Set targetBook = Workbooks.Open(Filename:=.SelectedItems(1), UpdateLinks:=0)
Else
Exit Sub
End If
End With
With targetBook
vLinks = .LinkSources(xlExcelLinks) 'EXCEL(アドイン)リンク
'LinkSourceが無い場合抜ける
If Not IsArray(vLinks) Then Exit Sub
On Error Resume Next
For i = 1 To UBound(vLinks)
strLinkName = vLinks(i)
'リンクアドレスにアドインファイル名が有ったらリンクアドレスを変更
If InStr(strLinkName, adinName) > 0 Then
Dim tmp
tmp = Split(strLinkName, "\")
'2番目のフォルダ名をログオンユーザー名に置き換え
NewLinkPath = Replace(strLinkName, tmp(2), Environ("USERNAME"))
.ChangeLink Name:=strLinkName, NewName:=NewLinkPath
End If
Next i
Err.Clear
If GetInputState() Then DoEvents
.Close SaveChanges:=True
End With
Set targetBook = Nothing
End Sub
コードを第三ブックでなく アドインブックに入れた場合の例
右クリックボタンで実行
アドインブックThisWorkbookモジュール
Option Explicit
Const conAddinName As String = "Addin更新"
'アドインファイルが開かれた際に実行
Private Sub Workbook_Open()
Call Check_Addin
With Excel.Application
'セルの右クリックメニューへの登録
With .CommandBars("Cell").Controls.Add(Temporary:=True)
.FaceId = 59 'ボタンアイコン
.BeginGroup = True
.Caption = conAddinName '表示
.OnAction = "add_inLinkSources_Change" '実行するマクロ
End With
End With
End Sub
Private Sub Check_Addin() '既にコマンドがあればそれを削除
Dim objCC As CommandBarControl
With Excel.Application.CommandBars
With .Item("Cell")
For Each objCC In .Controls
If objCC.Caption = conAddinName Then .Controls.Item(conAddinName).Delete
Next
End With
End With
End Sub
Private Sub Workbook_AddinUninstall() 'アドインの組み込み解除時に実行
Call Check_Addin
End Sub
標準モジュール(第三のブックからの添削)
Sub add_inLinkSources_Change()
Dim adinName As String
Dim i As Long, j As Long
Dim targetBook As Workbook
Dim vLinks As Variant
Dim strLinkName As String
Dim NewLinkPath As String
adinName = ThisWorkbook.Name
Set targetBook = ActiveWorkbook
With targetBook
vLinks = .LinkSources(xlExcelLinks)
'LinkSourceが無い場合抜ける
If Not IsArray(vLinks) Then Exit Sub
On Error Resume Next
For i = 1 To UBound(vLinks)
strLinkName = vLinks(i)
If InStr(strLinkName, "Program Files") = 0 Then
If InStr(strLinkName, adinName) > 0 Then
Dim tmp
tmp = Split(strLinkName, "\")
NewLinkPath = Replace(strLinkName, tmp(2), Environ("USERNAME"))
.ChangeLink Name:=strLinkName, NewName:=NewLinkPath
End If
End If
Next i
Err.Clear
End With
Set targetBook = Nothing
End Sub
ご回答ありがとうございます!
>アドインの保存先をユーザーフォルダではなくライブラリにするとパスが付かないという情報があったので移動させてみましたが、関数入力時はうまくいってもExcelを開き直すとまたパスが付いているという同じ現象です。
これはやはりバグなんでしょうか?
他のアドインを削除してやり直すのも何度も試みたのですがダメでした。
リンクを書き換える処理、ありがとうございます。
素晴らしいですね。私にはここまで作れないです。
参考にさせていただきます!
No.1
- 回答日時:
私は詳しくなく、回答ではありませんが…
>送信元のPCのアドインファイルのパスが表示され、
自身のアドインファイルのパスと異なりますか?
もし異なるなら合わせてみる価値は有りますね。
>できれば自動で…
>そもそも何か手順が間違っていますでしょうか。
想定されていない使い方のようなので、模索しないといけないですね。
コメントありがとうございます!
現在まだまだ模索中です。
アドインファイルのパスは間違っておらず、試しにパス部分を消すと#NAME?エラーになります。
アドイン設定も正しくアドインを参照してそうなのですが、「参照」からもう一度繋ぎ直してみると、パスが消えて正常に動きます。
しかしExcelを一度閉じて開き直すとまたパスが表示されてリンクエラーを起こしてしまいます。
アドインの保存先をユーザーフォルダではなくライブラリにするとパスが付かないという情報があったので移動させてみましたが、関数入力時はうまくいってもExcelを開き直すとまたパスが付いているという同じ現象です。
バグってるのかよくわかりませんが、もう少し模索してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルのクイックアクセスツールバーに「値だけ貼り付け」や「数式貼り付け」などを登録したら、自動的に
Excel(エクセル)
-
Excelで、10000,20000,30000と表示されているのですが、時々10000,20000
Excel(エクセル)
-
一つのセルに(例えばA1)入力された3桁・4桁の数字を並べ替えて同一行のセルに表示させる。
Excel(エクセル)
-
-
4
西暦和暦
Excel(エクセル)
-
5
エクセルでCtrl+Tでテーブルの作成ができますが、これがピボットテーブルですか?
Excel(エクセル)
-
6
Excelの表示についての質問
Excel(エクセル)
-
7
Excelで数値を時間数に変換する関数について
Excel(エクセル)
-
8
エクセルで上位バイトのセルと下位バイトのセルを1つのセルにして16進数を作る方法
Excel(エクセル)
-
9
Excel 大小比較演算子による「文字」の比較結果
Excel(エクセル)
-
10
職場の人から聞かれており、こんなことができるか教えて下さい。 vbaとかはできません。。 下記リスト
Excel(エクセル)
-
11
エクセルのクイックアクセスツールバーには何を登録したら良いですか?罫線を引く「格子・枠なし・外枠」と
Excel(エクセル)
-
12
Excelで全角を半角にしたいのですが、
Excel(エクセル)
-
13
エクセルで日付を数字+アルファベットと比較したい
Excel(エクセル)
-
14
【世界はデータで出来ている】世界はデータで出来ているそうです。 あなたが最近公開デ
Access(アクセス)
-
15
【マクロ】顧客番号にて一致させ、情報を表へ上書きする為には
Excel(エクセル)
-
16
【Microsoft Office Home and Business Premium】なのに・・・
その他(Microsoft Office)
-
17
【ExcelVBA】インデックスが有効範囲にありません。の理由が分かりません
Visual Basic(VBA)
-
18
CELL関数のヘルプ文の意味?
Excel(エクセル)
-
19
Microsoft Officeの中古は信用できる店で販売していますか?
Excel(エクセル)
-
20
エクセルの関数について教えてください
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
皆さん定義を教えてください 「...
-
無限から無限を引いたら何にな...
-
「互いに素」の定義…「1と2は互...
-
「logx^2=2logx」が間違って...
-
eの0乗は1ってどういう原理です...
-
べき乗
-
k代数 部分集合Sで、生成された...
-
複雑な家庭とは
-
k代数 k代数に関する定理の証明...
-
数字の1とは何なのか?
-
1未満と1以下の違い
-
変数の宣言の名称を教えてくだ...
-
\\mathrmと\\rmの違いについて...
-
合成関数の定義域と値域の所が...
-
ACCESS IIF関数 複数条件の設...
-
数学の両辺2乗と√について教え...
-
2進数の符号ビットの入った数...
-
p⇒q=(¬p)∨qについて
-
大学受験の数学で使う記号など...
-
空間座標の角度の求め方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
皆さん定義を教えてください 「...
-
無限から無限を引いたら何にな...
-
複雑な家庭とは
-
「互いに素」の定義…「1と2は互...
-
べき乗
-
日本語 ことば ひとまわり ふた...
-
1未満と1以下の違い
-
最大元と極大元の定義の違いが...
-
p⇒q=(¬p)∨qについて
-
「logx^2=2logx」が間違って...
-
eの0乗は1ってどういう原理です...
-
ACCESS VBAでインポート定義の場所
-
ヘシアンが0の場合どうやって極...
-
ACCESS IIF関数 複数条件の設...
-
画像の説明で一番最後の閉包作...
-
5桁の整数nにおいて,万の位,...
-
“半日”って何時間のことなんで...
-
0^1(0の1乗)はいくつでしょ...
-
√6=√(-2)(-3)=√(-...
-
lim n→0 =n=0となりますが lim ...
おすすめ情報
色々と試行錯誤しましたが、この使い方ではいずれエラーが起きる可能性があるのと、それぞれのPCのライブラリにアドインを保存する際、社内の管理部門へその都度管理者権限付与の申請が必要なことなど、不便なことが多いため一旦諦めることにしました。
代替案として、各Excelファイルにユーザー定義関数のマクロを保存することで、ファイルの共有(メール送信含む)時にもエラーなく使用できるようにしました。めっちゃ原点に戻った感ありますが(汗)
また、まっさらなExcelファイルにユーザー定義関数を仕込んでおいて、それを原紙として使用してみようと思います。