- ベストアンサー
EXCEL VBAでこんなことがしたい。
EXCELのワークシートに図形描画でボタンを書きます。 そのボタン上に文字を書きます。 このボタンにマクロの登録を行ないます。 その後、このボタンをクリックするたびに ボタン上に描かれた文字列が書き換わるような マクロを書きたいのですが、可能でしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >マクロを書きたいのですが、可能でしょうか? 可能ですか?と聞かれれば、「可能です」と答えるしかありません。 失礼かもしれませんが、ずっと、ここで難しい質問が多いような気がします。図形描画でボタンを作るのは、やはりランクとしては難しいほうに入ります。それは、本などに載っていないからですが、VBEでは、図形描画は、インテリセンスが利かないということでもあるのです。 本来は、コントロールツールのボタンでもよいのではないでしょうか?それなら、VBAの標準の問題の中にあります。なるべく、自分で教本などを見ながらも解決できる範囲の中で、対処するほうがよいと思います。 ためしに作ってみました。 図形の場合は、以下のようになります。 図形を右クリックして、「マクロの登録」で以下の名前を探して選びます。 場所は、どこでもよいけれども、なるべく標準モジュールがよいかと思います。 なお、シート名、図形描画名は任意です。 Sub AutoShapeAlteredWords() Static i As Integer Dim MyWords As Variant Const MYWORD As String = "晴れ,曇り,雨,雷雨,晴れのち曇り,嵐" 'コンマ(,)で区切ります。 i = i + 1 MyWords = Split(MYWORD, ",") Worksheets("Sheet1").Shapes("四角形 1").DrawingObject.Text = MyWords(i - 1) If i > UBound(MyWords) Then i = 0 End Sub
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
#2です。 すきません。いくらやっても「大吉」が出ない欠陥おみくじだったようです。 やはり、「配列」で間違いました。 修正します。 Sub Omikuji() Dim i As Integer Dim MyWords As Variant Randomize Const MYWORD As String = "大吉,中吉,小吉,吉,半吉,末吉,末小吉,凶,小凶,半凶,末凶,大凶" MyWords = Split(MYWORD, ",") i = Int(Rnd() * (UBound(MyWords) + 1)) Worksheets("Sheet1").Shapes("四角形 1").DrawingObject.Text = MyWords(i) End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
murano47さん、Wendey02さん、おはようございます。 面白そうなので、Wendey02さんのコードをお借りして御神籤にしてみました。 (ただし、御神籤なので、乱数を発生させて占いを出してますので連続して同じのが出る場合もありますよ。) Sub Omikuji() Dim i As Integer Dim MyWords As Variant Randomize Const MYWORD As String = "大吉,中吉,小吉,吉,半吉,末吉,末小吉,凶,小凶,半凶,末凶,大凶" MyWords = Split(MYWORD, ",") i = Int(Rnd() * UBound(MyWords) + 1) Worksheets("Sheet1").Shapes("四角形 1").DrawingObject.Text = MyWords(i) End Sub
お礼
早速のご回答ありがとうございます。 やってみたのですが、「指定した名前のアイテムが見つかりませんでした。」という エラーメッセージが出てうまく行きませんでした。 ワークシート上には図形は押しボタン1つしか定義していないので、 名前は「四角形1」で間違いないと思うのですが、 正しく認識してくれなかったようです。
補足
うまく行きました。 「四角形」と「1」の間に半角スペースが必要だったのですね。 m(_ _)m