
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelの空のセル 5 2024/03/16 18:52
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- Excel(エクセル) エクセルでセルに標準で入力されている和暦を西暦に変換する方法はありますか? 4 2024/06/13 14:33
- Excel(エクセル) Excel ユーザー定義で変換したセルについて 3 2023/02/04 01:25
- その他(OS) Windows10で小規模LANの構築はできるのでしょうか? 9 2024/04/30 08:26
- 財務・会計・経理 除却した工具機械を、耐用年数過ぎてから(除却したあとは、使ってなかった)、再度 減価償却できるか? 6 2022/12/31 01:31
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- Excel(エクセル) エクセル 表示について 1 2024/03/11 14:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
皆さん定義を教えてください 「...
-
直和分解とは? 同値関係、同値類
-
無限から無限を引いたら何にな...
-
3i と -3i の違いがわからなく...
-
微分の定義など公式を使わずにy...
-
日本語 ことば ひとまわり ふた...
-
高校数学の不等式の問題です
-
接平面
-
再び有理数と無理数について
-
こんな関数って,ありますか?
-
複雑な家庭とは
-
1未満と1以下の違い
-
[数学]定義と性質
-
順序対(x,y)の定義の記号...
-
カルタン部分代数の定義に関す...
-
0の0乗は1、にしたい
-
Aを環としてそのイデアルIと根...
-
R^2 上の連続関数 φ(x, y) は ∫...
-
数列anが上に有界の定義につい...
-
電磁誘導に法則 V=ーdφ/dt...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
皆さん定義を教えてください 「...
-
べき乗
-
無限から無限を引いたら何にな...
-
電磁誘導に法則 V=ーdφ/dt...
-
1未満と1以下の違い
-
「互いに素」の定義…「1と2は互...
-
日本語 ことば ひとまわり ふた...
-
eの0乗は1ってどういう原理です...
-
複雑な家庭とは
-
ヘシアンが0の場合どうやって極...
-
最大の自然数mが存在すると仮定...
-
最大元と極大元の定義の違いが...
-
ACCESS VBAでインポート定義の場所
-
p⇒q=(¬p)∨qについて
-
√6=√(-2)(-3)=√(-...
-
\\mathrmと\\rmの違いについて...
-
なぜ、直角三角形ではないのにs...
-
0に限りなく近い数は存在するの?
-
エクセルで「”」インチの表示形...
-
「logx^2=2logx」が間違って...
おすすめ情報
色々と試行錯誤しましたが、この使い方ではいずれエラーが起きる可能性があるのと、それぞれのPCのライブラリにアドインを保存する際、社内の管理部門へその都度管理者権限付与の申請が必要なことなど、不便なことが多いため一旦諦めることにしました。
代替案として、各Excelファイルにユーザー定義関数のマクロを保存することで、ファイルの共有(メール送信含む)時にもエラーなく使用できるようにしました。めっちゃ原点に戻った感ありますが(汗)
また、まっさらなExcelファイルにユーザー定義関数を仕込んでおいて、それを原紙として使用してみようと思います。