• 締切済み

Excel のアドイン

Excel2003です。 xlaファイル内に次のような関数があった場合、  Function addinfunc(a As long, b As long) As long  Dim c As long  c = a + b  addinfunc = c  End Function シート上からは =addinfunc(B1,C1) という風に利用できますが、 xlsファイル内のプロシージャーから Debug.Print addinfunc(Sheets("Sheet1").Range("C1")), Sheets("Sheet1").Range("B1")) という風には使えません。 プロシージャー内で使うということはもともとできないのか、 何か設定があるのかどういうものでしょうか?

みんなの回答

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.1

こんにちは  VBEのメニューのツール-参照設定で自前関数が存在するアドインを指定してみて下さい。

exp_mmmsp
質問者

補足

ありがとうございます。 動きました。<m(__)m>

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBAで毎回新しく入力したキーワードに指定のキーワードを置換できますか?

    仮ファイルに、シートA・B・Cがあります。 シートAのセルB3は、キーワードが入っています。 シートBにはA・B・F・G・H列の3行目から、データが入っています。 シートCには、まだ何も入っていません。 今、シートB内にあるの“○○”というキーワードだけを、シートAのセルB3で指定しているキーワードに置換させたいと思っています。 そのキーワードは毎回変わるので、シートBの中ではなく、別シートにしています。 この置換は、ただ“○○”というキーワードの入っているシートBにそのまま結果を出力するのではなく、別シートのシートCに置換されたデータに出力したいのです。 それで、以下のようなコードを書きましたが、作動しません。 A・B・F・G・H列のデータは配列に入れましたが、それが失敗なのでしょうか…? どこがおかしいか教えて頂けないでしょうか? よろしくお願いします。 Public ovtA As Long Public ovtB As Long Public gglF As Long Public gglG As Long Public gglH As Long Public i As Integer Public j As Integer Public k As Integer Public l As Integer Public m As Integer Public TD1 As Worksheet Public TD2 As Worksheet Sub Test() Workbooks("仮.xls").Activate Set TD1 = Worksheets("シートB") Set TD2 = Worksheets("シートC") ovtA = TD1.Range("A65536").End(xlUp).Row ovtB = TD1.Range("B65536").End(xlUp).Row gglF = TD1.Range("F65536").End(xlUp).Row gglG = TD1.Range("G65536").End(xlUp).Row gglH = TD1.Range("H65536").End(xlUp).Row For i = 3 To ovtA - 1 For j = 3 To ovtB - 1 For k = 3 To gglF - 1 For l = 3 To gglG - 1 For m = 3 To gglH - 1 If TD2.Range("A3") = "" Then TD1.Activate Selection.Replace what:="○○", Replacement:=Worksheets("シートA").Range("B3") TD1.Range(A).Copy Sheets("完成原稿").Cells(1, 1) TD1.Range(B).Copy Sheets("完成原稿").Cells(1, 2) TD1.Range(F).Copy Sheets("完成原稿").Cells(1, 6) TD1.Range(G).Copy Sheets("完成原稿").Cells(1, 7) TD1.Range(H).Copy Sheets("完成原稿").Cells(1, 8) Exit For End If Next Next Next Next Next End Sub

  • エクセルVBAマクロの質問です。

    マクロ初心者です。行き詰まってます。 sheet1には300件程度のデータがあります。 このデータの3列目の値を、VLOOKUPでsheet3のA1:B30範囲から参照します。そこで取得した回数分、sheet1の各行のデータをsheet2にコピーしたいんです。 そこで、コード文を作ってみましたが、マクロがうまく動きません。 すみませんが、お知恵を貸していただけないでしょうか? Dim Z as Long Dim L As Long Dim P As Long Dim Kensaku As String Dim M4 As Range Dim PRow As Long Dim i As Long Set M4 =Sheets(“sheet3”).Range(“A1:B30“) L = Sheets(“sheet1”).Range(“A1”).End(xlup).Row For Z = 1 to L-1 Kensaku = Sheets(“sheet1”).Cells(Z+1,3).Value P=Worksheetfunction.Vlookup(Kensaku,M4,2,False)    For i = 1 to P      Prow=Sheets(“sheet2”).Range("A1").End(xlDown).Row      Sheets(“sheet1”).Rows(Z+1).Copy Sheets(“sheet2”).Rows(Prow)    Nexti Next Z

  • エクセル2003マクロの機能追加

    Sub test() Dim 行1 As Long, 最終行 As Long, 行2 As Long Sheets("Sheet2").Cells.ClearContents Sheets("Sheet1").Activate 最終行 = Range("C65536").End(xlUp).Row 行2 = 1 For 行1 = 1 To 最終行 Sheets("Sheet2").Cells(行2, 1).Resize(1, 3) = Range(Cells(行1, 1), Cells(行1, 3)).Value If Range("A" & 行1).Font.Bold Then Sheets("Sheet2").Range("A" & 行2) = Range("A" & 行1) & "-1" Sheets("Sheet2").Cells(行2 + 1, 1).Resize(1, 3) = Range(Cells(行1, 1), Cells(行1, 3)).Value Sheets("Sheet2").Range("A" & 行2 + 1) = Range("A" & 行1) & "-2" 行2 = 行2 + 1 End If If Range("A" & 行1) = "" Then 行2 = 行2 - 1 Sheets("Sheet2").Range("C" & 行2) = Sheets("Sheet2").Range("C" & 行2) + Range("C" & 行1) End If 行2 = 行2 + 1 Next 行1 End Sub 元データ AAAA5 9601  950 BBBB1 9660  150 ASAS9 9654  -50 AXCW5 9603  1375 以下の用にマクロで変換する機能を追加したいのです AAAA5 9601  950 BBBB1-1 9660  150 BBBB1-2 9660  150 ASAS9 9654  50 AXCW5 9603  1375 宜しくおねがいします。

  • EXCELのVBAですが。

    EXCELのVBAですが。 Sub macro1() Dim mycnt As Integer Dim sheet_name1 As String Sheets("kekka").Select Range("A1").Select Sheets("shiji").Select mycnt = Range("B1").Value sheet_name1 = Range("c" & mycnt) Sheets("kekka").Select Sheets("kekka").name = sheet_name1 Sheets("kansuke").Select Sheets("kansuke").Copy Before:=Workbooks("2007年報告.xls").Sheets(3) End Sub (やりたいこと) B1に入っている数値でC1からC10に入っているあるシートの名前(たとえばkansukeとする)を取り、その名前で kekkaというシート名をkansukeという名前に変える。 名前を変えたkansukeというシートを別の2007年報告というbookにコピーを転送する。 (質問)上のコードで実はkansukeと書いてあるところは,B1の値次第で当然いろいろに 変化するため、そのシート名にとらわれない書き方をしたいのですがどう記述すればいいのか わかりません。以上お願いします。

  • エクセルVBAでの質問です。

    まとめ.xlsに、「まとめ」「グラフ」「A」「B」「C」「D」「E」というシートがあって、それと一緒に、A.xls、B.xls、C.xls、D.xls、E.xlsというファイルを開いた際に、A.xlsの、G2:I54をまとめ.xlsのAのシートのA1に、B.xlsの、G2:I54をまとめ.xlsのBのシートのA1に・・・といった感じでコピーを行いたいと思い、以下のようにマクロを組みました。 Dim I(4) As String I(0) = "A" I(1) = "B" I(2) = "C" I(3) = "D" I(4) = "E" Sheets("まとめ").Select For J = 0 To 4 Step 1 Sheets("" + I(J) + "").Select Windows("" + I(J) + ".xls").Activate Range("G2:I54").Select Selection.Copy ThisWorkbook.Activate Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Workbooks("" + I(J) + ".xls").Close SaveChanges:=False Next J ThisWorkbook.Activate Sheets("まとめ").Select Range("A1").Select この状態では、必ずA~Eのシートと、A~E.xlsが存在しないと処理できないのですが、情報量が変わった場合でも同じような処理を行いたいのです。 たとえば、A~CのシートとA~C.xlsしかない場合、 アルファベットではなく、1~3といった場合、 5枚だけではなく、10枚など増えた場合。 まとめ.xlsの「まとめ」と、「グラフ」のシートには、それぞれA~Eに貼られたデータから引用したり、グラフ化したりしているため、シートの入れ替えは行うことができず、純粋に、「値のコピー」としてもってきたいと思っています。 原則として、A~Eのシートに貼り付けるA~E.xlsに存在するシート名は、A.xlsはA、B.xlsはB・・・といった感じになっています。 それが数字になっても、文字になってもその規則に変更はありません。 分かりにくい説明ですみません。 分かる方、よろしくお願いします。

  • Function 構文のなかに変数をいれたい(VBA)

    お願いします。 エクセルVBAにて 下記のようなFunction構文内に変数を設定する方法を 教えてください。 この中で k以外にも a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27") この変数を扱いたいのですが。 もしかして他にもfunction構文が必要でしょうか。 Function data(k As Double) Dim sum As Double Dim ct As Integer Dim keisu As Integer Dim a As Double Dim b As Double a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27")  以下 略

  • エクセル2003マクロの再編集

    Sub test() Dim 行1 As Long, 最終行 As Long, 行2 As Long Sheets("Sheet2").Cells.ClearContents Sheets("Sheet1").Activate 最終行 = Range("C65536").End(xlUp).Row 行2 = 1 For 行1 = 1 To 最終行 Sheets("Sheet2").Cells(行2, 1).Resize(1, 3) = Range(Cells(行1, 1), Cells(行1, 3)).Value Sheets("Sheet2").Cells(行2, 3).Value = Abs(Sheets("Sheet2").Cells(行2, 3).Value) If Range("A" & 行1).Value = "BBBB1" Then Sheets("Sheet2").Range("A" & 行2) = Range("A" & 行1) & "-1" Sheets("Sheet2").Cells(行2 + 1, 1).Resize(1, 3) = Range(Cells(行1, 1), Cells(行1, 3)).Value Sheets("Sheet2").Range("A" & 行2 + 1) = Range("A" & 行1) & "-2" 行2 = 行2 + 1 End If If Range("A" & 行1) = "" Then 行2 = 行2 - 1 Sheets("Sheet2").Range("C" & 行2) = Sheets("Sheet2").Range("C" & 行2) + Range("C" & 行1) End If 行2 = 行2 + 1 Next 行1 End Sub を編集したいのですが全然図りません ご指導お願いします 元データ AAAA5 9601  950 BBBB1 9660  150 ASAS9 9654  -50 AXCW5 9603  1375 以下の用にマクロで変換する用に出来たのですが 【1】 BBBB1だけではなくAAAA5も対処になったときの 追加方法です 元データは一切変更が出来ません ※フォントの変更も不可です 【2】 元データと変換後データがSheet1からSheet2になっていますが Sheet1の元は範囲はA1~C400で変換後をSheet1E1~G400にしたいのです AAAA5 9601  950  BBBB1-1 9660  150  BBBB1-2 9660  150 ASAS9 9654  50 AXCW5 9603  1375

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • Excel VBAで…。

    データーシート(1)のデータをレイアウトシート(2)に転記するのに 例えば sheets(1).range("A1").value=sheets(2).range("C5").value sheets(1).range("B1").value=sheets(2).range("C6").value sheets(1).range("C1").value=sheets(2).range("C7").value と言うように配置しているのですが もし、シート(1)セルB1の値が空白ならば シート(1)セルC1の値はシート(2)のセルC6に配置・・・ と言うように データがない場合は、転記後の配置は詰めて配置したいのです。 どうすればよろしいでしょうか?

  • エクセルシートをアドインファイルにした場合、シートのありかの指定方法は?

    エクセルシートのデータを別の色んなシートから「関数呼出」で利用したい為 アドインファイルにしたいのですがうまくいきません。ご指導下さい。 下記のコード(一部表示)を実行した場合 2: で引っ掛かりエラーとなります。 「err= 91 オブジェクト変数またはwith ブロック変数が設定されていません。」 1: Dim tempRange As Range 2: tempRange = Workbooks("psteel.xla").Worksheets(1).Range("B4:Y4") 3: iti = Application.WorksheetFunction.Match(seinou, tempRange, 0) シートの範囲指定が悪いと思うのですがどう指定すれば良いのでしょうか? よろしくお願い致します。 =============================================== 下記の 普通の.xlsファイルでは実行できます。 Public Function pss(ryaku, seinou) On Error GoTo errhandle iti = Application.WorksheetFunction.Match(seinou, Range("B4:Y4"), 0) pss = Application.WorksheetFunction.VLookup(ryaku, Range("B6:Y209"), iti, False) Exit Function errhandle: If Err = 1004 Then pss = "name?" Else MsgBox "err= " & Err & " " & Err.Description End If End Function

このQ&Aのポイント
  • EPSON製品の取扱説明書をなくした場合でも、スマートフォンとの無線接続方法を教えます。
  • EPSON製品の取扱説明書をなくしてしまった場合でも、スマートフォンとの無線接続の手順をご紹介します。
  • EPSON製品の取扱説明書をなくしたけれども、スマートフォンとの無線接続方法を教えます。
回答を見る

専門家に質問してみよう