- 締切済み
選択文字列ではなく引数を太字にするユーザー定義関数
質問を見ていただき、ありがとうございます。 Excel2010でユーザー定義関数を作っています。 目指している機能は、ワークシート上のセルで =Bold("あいう") とすると あいう が太字で出るというものです。 選択したセルの内容を太字にしたいのであれば、 Function Bold() Selection.Font.Bold = True End Function とすれば良いのですが、引数を指定して Function Bold(S) S.Font.Bold = True End Function としても(当然ながら)うまく行きません。 なんとかして目的の機能を持つユーザー定義関数を作りたいのですが、 良い方法はありませんでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- keithin
- ベストアンサー率66% (5278/7941)
ご相談で書かれていることだけから推測すると,「台紙となる文章」に対して「関数で何か処理できないか」という発想でエクセルに結びついたご質問のように見えますが,まず,エクセルを利用して「文章を作成する」という発想が間違いの第一歩といえます。 エクセルの機能を利用して出来ることの一つとして,置換の機能を使って所定の例えば「1914」という文字列を一括してボールドにするような事は出来ます。これをマクロを使って処理させる事ももちろん可能です。が,それだけならワードの機能を使って十分出来ますし,わざわざエクセルに持ち込む必要も全く有りません。
- imogasi
- ベストアンサー率27% (4737/17069)
まずき既回答のように、エクセル関数は、セルの値しか結果として返せません。表示形式つきのものを返せません。これが第1の問題点です。 ーー 次に、 エクセルVBAは、オブジェクト指向の言語です。 それのメソッドやプロパティは、「データと、プロパティなどが一体にセットにして考える」言語です。ふつうエクセルVBAで、目にする文字を大文字にするというBoldは、「シートのセルの中身」に関するプロパティで、Rangeオブジェクトに対してしか効力を発揮しません。オブジェクトに、MSが決めて設けたものしか使えません。ですからセルなどととは無関係の文字列に対し、書体を太字にするには、別の「クラス」(重要なコンピュター術語の意味です)を作らないとならないと思います。 ワードの文書にしても、太字設定は、DocumentのRangeオブジェクト、Charactersなどにたいするオブジェクトに対するものと思います。 多分VBAの使用者のレベルを超えた課題と思います。 ーー 今までこういう質問は見たことがない。どういうニーズで、どういう場面で、こういうことを考えるのか、説明が必要と思います。 文字を置く台紙のようなものはあるのですか、無いのですか。
- keithin
- ベストアンサー率66% (5278/7941)
エクセルのユーザー定義関数は,計算結果を返すだけの機能しかありません。セルの書式を操作したり,他のセルやワークシート等を操作したりといった事は全く出来ません。 参考: https://support.microsoft.com/ja-jp/kb/170787 今回のご相談はごく簡単化した内容なので,具体的に何をしたいのかもうちょっと丁寧にご質問を書いてみることで,イベントプロシジャをはじめとしてどんな機能を組み合わせれば実現できるのか,よいアドバイスも寄せられると思います。
お礼
keithin様 早速のご回答、ありがとうございました。 アドバイスに従い、以下補足いたします。 やりたいことは、文献リストの作成です。 たとえば、雑誌等で夏目漱石の「こころ」を引用して文章を書く場合、 文中で引用することに加え、最後に文献リストを示す必要があります。 このとき、リストのフォーマットは様々で、 夏目漱石 (1914). こころ 岩波書店 とするよう求められることもあれば こころ 1914 夏目漱石 としたうえで1914を太字にする場合もあります。 文字やスペースの組み合わせ自体は関数を使うまでもなく &などで処理できるのですが、その際に文字を太字にしたり イタリックにしたりはできません。 単純な方法としては、1914の前後に/bなどを付与しておき、 できた文字列をwordなどににコピー&ペーストしたうえで 正規表現を使ってボールド体にすれば良いのですが、 できればExcelだけで処理したいと思った次第です。
お礼
imogasi様 ご回答いただき、ありがとうございます。 「ニーズ」につきましてはコピー&ペーストになってしまいますので 大変失礼ながら割愛させていただきますが、 「文字を置く台紙のようなもの」 はWordファイルを想定しておりました。