• 締切済み

エクセルVBAからCの関数を呼ぶ

エクセルVBAから、VisualC++で書かれた関数を呼びたいのですが具体的な方法を教えてください。VBAでは書きにくい処理をCで書いて、それをエクセルから利用したいと考えてます。よろしくお願いします。

  • zuntac
  • お礼率81% (307/377)

みんなの回答

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.2

Public Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long や Declare Function GetEnvironmentStrings Lib "kernel32" Alias "GetEnvironmentStringsA" () As String というWin32APIがあるので、 >文字列を引数で渡して、戻り値を文字列で返す は可能だと思います。 私はDLLは他の言語で作成しているので、Cの場合はどうすればよいかハッキリ言ってわかりません。 C側の関数の引数や戻り値はポインターだとうまくいかないのでは? 手持ちの資料が見当たらないのでこれ以上は分かりません(^^;

zuntac
質問者

お礼

補足の回答、ありがとうございます。 これ以上はweb, MSDN等で調べてみます。

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

まずは、VC++で書かれた関数のソースからDLLを作成してください。 そしたら、VBAの方でこのように宣言すれば使えるはずです。 Public Declare Sub Sleep Lib "kernel32.dll" Alias "Sleep" (ByVal dwMilliseconds As Long) ※これはWin32APIです。 VC++でDLLの作成方法はご自分で調べてください。

zuntac
質問者

お礼

回答ありがとうございます。Declare で検索してwebからDLLの作成方法を見つけました。引数、戻り値がintの場合には、エクセルからDLLを呼べるようになりました。 ただし、今やりたいのは文字列を引数で渡して、戻り値を文字列で返すということなのですが、この良い例が見つかりません。これについて教えて頂けると助かります。よろしくお願いします。

関連するQ&A

  • EXCEL VBAの日付関数について

    EXCEL VBAの日付関数のことでお聞きしたいことがあります。 エクセルの関数でワークデイ関数がありますが、例えば C1セル: =WORKDAY(A1,10,B1:B10) これをVBAのコードで書くと、どういうコードになるのでしょうか。 VBAの関数については詳細に書かれたテキストを持っておらず、WorksheetFunctionを使ってチャレンジしてみましたが どうも上手くいきませんでした。 初歩的な質問かも知れませんが、どうぞよろしくお願いいたします。

  • Excel VBA 圧縮、伸長の関数は?

    Excel VBAでプログラミングしています。 扱うデータ量がおおきくなったためデータの保存はExcelシートから 外部ファイルに変更しました。しかし、ファイルサイズが大きくまた、VBAでの 処理が重く感じます。そこで、データを圧縮、伸長する関数があれば便利と思っています。ファイルに出力後に圧縮する方法はあるようですが、VBA処理、ファイルの読み書き時にデータが軽いといいので、VBAで扱える関数があればと思っています。関数、または他の方法をご存じの方、お教え願います。

  • Cからエクセルを開く処理についてです。

     いつもお世話になっております。  Cからエクセルを起動してVBAで作成した処理を 走らせたいのです。  そこで質問なのですが、Cでエクセルを開くときの関数は 普通にfopen()を使用すれば良いのでしょうか?  他に特別な処理をしなければならないこと等あれば、 教えてください。よろしくお願いします。

  • エクセル関数 → VBAへの変換をどうやって行えばいいでしょうか? 特に、.Formula=にエクセル関数をいれたい場合

    エクセル関数 → VBAへの変換 現在、エクセル関数で記述していた以下の命令をすべてVBAに置き換える必要があります。 理由は、VBAで初期化ボタンをつくってそのボタンを押したとき、対象セルにデフォルトでエクセル関数の 式を入れたいからです。 なので、エクセル関数を以下のようにVBAにいれていました .Cells(7, 51).Formula = "C6&E6" しかし、これを以下のようにすると、エラーになってしまいました。 .Cells(7, 51).Formula = "C6&" "&E6" '氏名の間に半角スペースを入れたいため 同様に、以下のものがすべてエラーになります。 .Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日"" .Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)" どうすればよろしいでしょうか?

  • Excel VBAでできること

    仕事でExcelの関数は比較的よく使っていますが、 VBAを使うと、関数の利用に比べて何が便利なのでしょう? また、みなさん通常どうやってVBAを学ばれていますか? 教えてください。宜しくお願い致します。

  • VBA上での関数について

    VBA上で関数を使いたいのですが、その記載方法がわかりません。 具体的にはIF関数をVBAで使いたいのですが、その他にも関数をVBAで使う際の定義みたいなものがありましたらお教えください。 幾分初心者のため質問自体がいまひとつ的を得ないかもしれませんが、ひとつよろしくお願いします。

  • Excel VBA ""を含む関数を使うには

    Excel VBA ""を含む関数を使うには お世話になっております。 Excel VBAでMatch関数を使って下記のようにしたいのですが、 受け付けてもらえません。  n = Application.WorksheetFunction.MATCH("小計",range("B3:B10"),0) "小計"を""小計""と二重でくくれば良いような気がしたのですが、だめです。 どうすればよいでしょうか?

  • エクセル関数のセル参照方法

    エクセル関数のセル参照で、あるセルに入力した数値を、参照するセルの行番号として使いたいのですがどうしたらよいのでしょうか? VBAではそのような方法があったと思うのですが、関数で処理する方法はあるのでしょうか? たとえば、 =SUM(C5:C*) のような関数で「*」を他のセルに入力して参照させることは可能でしょうか? よろしくお願いいたします。

  • エクセル VBAで関数

    こんばんわ。いつもお世話になっております。 エクセルでデータを加工しているのですが、関数で加工するととても遅くなってしまうので なんとかVBAで作業できないかと模索中です。 Sheet1の、A列=取引先 B列=支店名 となっており、それが3,000行ほどあります。 Sheet2も、A列=取引先 B列=支店名 となっており、 Sheet1のC列に、Sheet1のA列のB列という支店が、Sheet2にあるか確認したいのです。 現在は、Sheet1のC列に、SUMPRODUCT関数でカウントさせているのですが、大変重いです。 ほかのSheetで、VBAを使って関数のような働きをさせている部分があります(前任者作成) そのように、なんとかVBAを使用したいのですが、なかなかうまく出来ません・・・。 どうか、お力を貸してください!! うまく説明できなくて、わかりづらかったらごめんなさい。 よろしくお願いいたします。

  • エクセルの関数、VBA? に関する質問です

    エクセルの関数、VBA? に関する質問です 添付画像のように、 複数のセルの内容(C列)を一つのセルに改行して 入力する場合(M列)はどのような関数にすればよいのでしょうか。 そもそも関数では実現できないのでしょうか 現状はいったんテキストエディタにコピペした後に 再度それを一つのセルにペーストしています。 何か良い方法があれば、教えて頂けると助かります。 よろしくお願いします。

専門家に質問してみよう