[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Select Caseを使った方法』(yama)
以下のマクロですがSelect Caseを利用した方法を
ご教授ください。よろしくお願いします。
Sub 書式切替()
With ActiveSheet.Shapes(Application.Caller) If .Name = "コピー1" Then Range("A107:G126").copy Range("A62") .Name = "コピー2" Call 官庁 ElseIf .Name = "コピー2" Then Range("A128:G147").copy Range("A62") .Name = "コピー3" Call 民間1 ElseIf .Name = "コピー3" Then Range("A149:G168").copy Range("A62") .Name = "コピー1" Call 民間2 End If End With End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
普通に変換すると Sample1、中には Sample2 のように記述する人もいますが、あまり好きじゃありません。
Sub Sample1()
With ActiveSheet.Shapes(Application.Caller) Select Case .Name Case "コピー1" Range("A107:G126").Copy Range("A62") .Name = "コピー2" Call 官庁 Case "コピー2" Range("A128:G147").Copy Range("A62") .Name = "コピー3" Call 民間1 Case "コピー3" Range("A149:G168").Copy Range("A62") .Name = "コピー1" Call 民間2 End Select End With End Sub
Sub Sample2() With ActiveSheet.Shapes(Application.Caller) Select Case .Name Case "コピー1": Range("A107:G126").Copy Range("A62"): .Name = "コピー2": Call 官庁 Case "コピー2": Range("A128:G147").Copy Range("A62"): .Name = "コピー3": Call 民間1 Case "コピー3": Range("A149:G168").Copy Range("A62"): .Name = "コピー1": Call 民間2 End Select End With End Sub
(β) 2017/03/03(金) 15:03
Select Case への置き換えは置き換えとして。
なんだか、違和感のある処理ですねぇ・・・
そもそもシート上には、このマクロが登録された図形がいくつあるのですか?
なんとなく、最初は コピー1、コピー2、コピー3 の 3つがあるように思えるんですが。 もし、そうなら、コピー1 がおされたら、そのオブジェクト名が コピー2 になる? そうすると、その段階ではコピー2 というオブジェクトがシート上に2つ存在することになり そのどちらを押しても、こんどは コピー3 になる。
そもそも、オブジェクト名は、操作者からは見えにくい。 今クリックしようとしている図形が、どんなオブジェクト名になっているのか、操作者はわかるんですか?
キャプション変更ならわかりますけど。
(β) 2017/03/03(金) 15:24
Sub test()
Dim n As String Dim a As String Dim p As String
With ActiveSheet.Shapes(Application.Caller) Select Case .Name Case "コピー1" n = "コピー2" a = "A107:G126" p = "官庁" Case "コピー2" n = "コピー3" a = "A128:G147" p = "民間1" Case Else n = "コピー1" a = "A149:G168" p = "民間2" End Select
Range(a).Copy Range("A62") .Name = n Application.Run p End With End Sub
Select Case だけの話でもないですが。。。
コピペとその後のコールするプロシージャと何か関係があるのかないのかで、
もうちょっとスマートにできないのかなぁ。。。と。
(なるのかならないのかよくわかりませんが^^;)
(まっつわん) 2017/03/03(金) 15:41
確かに、操作者からわかりにくいです。帳票の変化で判断するしかないのですが
キャプション変更は、どのようにすれば可能でしょうか?
現在図形に、マクロを登録しています。
(yama) 2017/03/03(金) 15:55
その前に、シートに貼り付けてある図形は 3つ なんですか 1つなんですか?
もし1つで、押すたびに次の処理を変えていくという仕様であれば、 Range("A107:G126").Copy Range("A62") の処理の後は、泣いても笑っても Range("A128:G147").Copy Range("A62") になります。 それ以外のことはできません。
いいのですか?
もし3つなら。 なぜ、各ボタンを変更させていくのですか? コピー1 は、ずっと コピー1、コピー2 は、ずっとコピー2 でいいのではないですか?
(β) 2017/03/03(金) 17:07
(yama) 2017/03/03(金) 17:38
>>Call XXの部分が替わります。
それは見たらわかります。
私が言っているのは コピー1のボタンを押せば、いつも、Call 官庁 コピー2 のボタンをおせば いつも Call 民間1 でしょ? ということです。 淡々と各ボタンがおされたらそれぞれに紐付いた処理を実行すればいいわけで、 なぜ、おされたボタンのオブジェクト名、ないしはキャプションを変更していかなければいけないのですか??
ということです。
(β) 2017/03/03(金) 17:46
この場合は、ボタンが一つだったのです。
今回も同じかはわかりませんが。
(マナ) 2017/03/03(金) 17:55
>この場合は、ボタンが一つだったのです。
なるほど。
今回は 『3つです。』と明言されているわけですので、そもそもの前トピの要件と、今回の要件が全く違っているということを 理解していないか、あるいは、前トピの オブジェクト名をなぜ変えていくか、変えるとなぜできるようになるのかというあたりを 本当は理解していなかった ということですかね。
いずれにしても、今回の要件なら、各条件分岐の中で .Name を変更する部分を消しましょうね。
(β) 2017/03/03(金) 18:10
よろしくお願いします。
(yama) 2017/03/03(金) 18:17
(マナ) 2017/03/03(金) 18:30
Sub Sample1() With ActiveSheet.Shapes(Application.Caller) Select Case .Name Case "コピー1" Range("A107:G126").Copy Range("A62") .Name = "コピー2" Call 官庁 (yama) 2017/03/03(金) 18:41
>ボタンは1つです 勘違いしてました。
であれば、マナさんから回答が出ていますが、Shape の DrawingObject の Text への値セットでも可能です。 Characters経由より、効率もいいと思います。
コード例は以下です。
でも、1つですといいなおしていただいたのに、さらに
>いくつかsheet上に図形が配置してあり
なぜ、この文章が登場するのか??? ですが、無視します。
Sub test()
With ActiveSheet.Shapes(Application.Caller).DrawingObject Select Case .Text Case "コピー1" Range("A107:G126").Copy Range("A62") .Text = "コピー2" Call 官庁 Case "コピー2" Range("A128:G147").Copy Range("A62") .Text = "コピー3" Call 民間1 Case "コピー3" Range("A149:G168").Copy Range("A62") .Text = "コピー1" Call 民間2 End Select End With End Sub
(β) 2017/03/03(金) 19:20
で、これが、ボタンの表示文字列です。
ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
(マナ) 2017/03/03(金) 19:28
http://kabu-macro.com/vba_apply/vba_with.html
(マナ) 2017/03/03(金) 19:47
With ActiveSheet.Shapes(Application.Caller) Select Case .Name Case "コピー1" Range("A107:G126").copy Range("A62") .Name = "コピー2" ActiveSheet.Shapes("set").TextFrame.Characters.Text = "官庁" Call 官庁 Case "コピー2"
βさん
>>いくつかsheet上に図形が配置してあり
これは別のマクロ用です。
提示頂いたtestで、いう.Textはどれのことを言っておられるのでしょうか?
理解が足りず申し訳ありません。またこのマクロで文字(キャプション)が変えられるのですか?
以下の部分でエラー
実行時エラー-2147352571(80020005)
指定したアイテムの名前が見つかりません
よろしくお願いします。
(yama) 2017/03/03(金) 19:51
ボタンの.Nameが
"コピー1" ならば、こんな処理…
"コピー2" ならば、あんな処理…
としていますが
ボタンの.TextFrame.Characters.Textが
"官庁"ならば、こんな処理…
"民間1" ならば、あんな処理…
みたいな感じにするのです。
で、ボタンをクリックするごとに、官庁→民間1→民間2→官庁…にしたいのですよね?
(マナ) 2017/03/03(金) 20:14
ActiveSheet.Shapes("set").TextFrame.Characters.Text = "官庁" こちらで出来ています。 ただ、βさんが提示してくれたtestをいろいろ試しているのですが 結果が出ていません こちらを確認したくて質問しました。 (yama) 2017/03/03(金) 20:26
Sub test2()
With ActiveSheet.Shapes(Application.Caller).DrawingObject Select Case .Text Case "官庁" Range("A107:G126").Copy Range("A62") .Text = "民間1" Call 官庁 Case "民間1" Range("A128:G147").Copy Range("A62") .Text = "民間2" Call 民間1 Case Else Range("A149:G168").Copy Range("A62") .Text = "官庁" Call 民間2 End Select End With
End Sub
(マナ) 2017/03/03(金) 20:44
>>以下の部分でエラー >>実行時エラー-2147352571(80020005) >>指定したアイテムの名前が見つかりません
以下の部分って、どの部分ですか??
それと、このマクロは図形に登録し、図形をクリックして実行するんですけど、それはいいですよね? (まさか、直接、このマクロを実行している?)
あと、コードではキャプションとして コピー1 とか コピー2 とかがあるというサンプルですが これが、官庁 とか 民間1 といったものなら、当然、そこはあわせてもらってますね?
まぁ、船頭が多いと yamaさんも混乱するかもですね。 あとはマナさんにお任せして、ROMに回ります。
(β) 2017/03/03(金) 22:44
βさん
ちぐはぐな質問で、混乱させてしまいすみません。
納得です。
ありがとうございました。
(yama) 2017/03/04(土) 00:52
Sub test()
Dim shp As Shape Set shp = ActiveSheet.Shapes(Application.Caller) Application.Run shp.TextFrame.Characters.Text Call シートの初期化(shp) End Sub
Sub シートの初期化(ByVal shp As Shape)
Dim vList As Variant Dim vAddress As Variant Dim i As Long
vList = Split("官庁,民間1,民間2", ",") vAddress = Split("A107:G126,A128:G147,A149:G168", ",") i = WorksheetFunction.Match(shp.TextFrame.Characters.Text, vList, 0) _ Mod (UBound(vList) + 1)
shp.TextFrame.Characters.Text = vList(i) shp.Parent.Range(vAddress(i)).Copy Range("A62") End Sub
Sub 官庁()
MsgBox "官庁です" End Sub
Sub 民間1()
MsgBox "民間1です" End Sub
Sub 民間2()
MsgBox "民間2です" End Sub
得られた文字列で実行する案はボツかぁ。。。。。
分かり難いですかね。。。
(まっつわん) 2017/03/04(土) 09:14
Set shp = ActiveSheet.Shapes(Application.Caller) 準備としては図形を用意すればよろしいのですか?
(yama) 2017/03/04(土) 14:17
あれ?図形にマクロを登録して、表示のテキストを押すたびに変えたいんだと思いましたが。。。
(まっつわん) 2017/03/04(土) 15:06
(γ) 2017/03/05(日) 13:08
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.