• ベストアンサー

エクセル

図形の中をクリックする度にとA~Gと変化するコードを以下にて作成しましたがA~Gではなく図形の中に7つの文字(確認要、手続き中など)を表記したいのですがマクロコードがうまくできません。ご教示願います。 Sub 四角形1_Click() a = Array("", "A", "B", "C", "D", "E", "F", "G") ActiveSheet.Shapes("Rectangle 1").Select c = Selection.Characters.Text If Left(c, 1) = a(UBound(a)) Then Selection.Characters.Text = "" Else For i = 0 To UBound(a) - 1 If Left(c, 1) = a(i) Then Selection.Characters.Text = a(i + 1) Exit For End If Next i End If Cells(1, 1).Select End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

ご呈示のコードとは離れますが、Arrayの何番目を表示しているか、AlternativeTextに保存しておくという案はいかがでしょうか。ご参考まで。 Sub 四角形1_Click() Dim shp As Shape Dim counter As Long Dim a As Variant a = Array("", "ABC", "BCD", "CDE", "DEF", "EFG", "FGH", "GHI") Set shp = ActiveSheet.Shapes(Application.Caller) If shp.AlternativeText = "" Then counter = 0 Else counter = Val(shp.AlternativeText) If counter = UBound(a) Then counter = 0 Else counter = counter + 1 End If End If shp.AlternativeText = CStr(counter) shp.TextFrame.Characters.Text = a(counter) End Sub

hahalu0589
質問者

お礼

ご回答ありがとうございました。Alternative Textに保存するのは時間効率からもすばらしい案ですね。お手数おかけしました。

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>図形の中に7つの文字(確認要、手続き中など)を・・ ここが良くわからない。「文字」と言うより、「7種類の語句」とか「7種類の作業名」とか表現すべきではないのか?各々の文字数は関係有るのか? 7文字といえば「確認要、手続き中」は8文字だし。 私の下記のコードのようなことなら、ことさら質問するほどのことではないと思うから迷う。 推測で、 Sub 四角形1_Click() a = Array("確認要", "日付変化", "手続中", "待ち", "閉じる", "応答", "終了") ActiveSheet.Shapes("Rectangle 1").Select c = Selection.Characters.Text c = Left(c, 1) For i = 0 To UBound(a) - 1 If c = Left(a(UBound(a)), Len(c)) Then Selection.Characters.Text = a(0) Else If c = Left(a(i), Len(c)) Then Selection.Characters.Text = a(i + 1) Exit For End If End If Next i Cells(1, "A").Select End Sub ーーー Sub test01() ActiveSheet.Shapes("Rectangle 1").Select Selection.Characters.Text = "確認要" End Sub を実行後、四角を順次クリックして、サイクリックに変わることを確認したが。

hahalu0589
質問者

お礼

説明不足で失礼致しました。ご推察のとおり7つの作業種類を意図しておりお手数おかけしました。ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

こんにちは、こんな方法も Sub 四角形1_Click3() Dim shp As Shape Dim a As Variant, myR As Variant a = Array("", "確認要", "手続き中1", "手続き中2", "手続き中3", "手続き中4") Set shp = ActiveSheet.Shapes(Application.Caller) myR = Application.Match(shp.TextFrame.Characters.Text, a, 0) If IsError(myR) Then myR = 0 shp.TextFrame.Characters.Text = a(myR Mod (UBound(a) + 1)) End Sub

hahalu0589
質問者

お礼

ご回答ありがとうございました。うまく入りました。この数日の悩みがすっきりしました。

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

関連するQ&A

  • Excelマクロ ○印図形を消したい

    ○印図形を消したい Private Sub CommandButton2_Click() ' ○印をつける Dim a As Range If TypeName(Selection) = "Range" Then Set a = Selection ActiveSheet.Shapes.AddShape(msoShapeOval, a.Left, _ a.Top, a.Width, a.Height).Select Selection.ShapeRange.Fill.Visible = msoFalse a.Select End If End Sub Private Sub CommandButton3_Click() 上記のマクロでつけた○印を下記のようなマクロで(指定の範囲のセルにつけた○印を全て)消したいのですが、上記のマクロは問題なく動作するのですが、下記のマクロがうまく動きません、どこをどのように変更したらよいのでしょうか?、どなたかご教示ください。 ' 指定したセル範囲にある図形を削除する() ' ○印の削除 指定セル範囲 = "U32:X41" With ActiveSheet Set セル範囲 = .Range(指定セル範囲) For Each 図形 In .Shapes If 図形.Type = msomsoPicture Then Set 共有セル範囲 = Intersect(Range(図形.TopLeftCell, _ 図形.BottomRightCell), セル範囲) If Not (共有セル範囲 Is Nothing) Then 図形.Delete End If End If Next End With End Sub

  • セルの値をテキストボックスへ記入及び名前変更

    範囲選択したセルに丸オートシェイプを挿入すると共に、それぞれのセルの値をテキストで追加及び、図形名を同じ値にしたいと思っています(下記の***の部分)。この時セルは結合されている場合があります。 描写は下記のようにしたのですが、セルの読み込みで詰まってしまいました。セルの値を読み込むにはどの様なしたらいいのでしょうか? 宜しくお願い致します。 Sub 選択されたセルに丸テキスト挿入() Dim X As Double Dim Y As Double Dim L As Double Dim c As Range If Not TypeName(Selection) = "Range" Then Exit Sub For Each c In Selection With c.MergeArea If c.Address = .Item(1).Address Then L = IIf(.Width > .Height, .Height, .Width) X = .Left + (.Width - L) / 2 Y = .Top + (.Height - L) / 2 ActiveSheet.Shapes.AddShape(msoShapeOval, X, Y, L, L).Select Selection.Name = *** Selection.Characters.Text = "***" Selection.ShapeRange.Fill.Visible = msoFalse      Selection.HorizontalAlignment = xlCenter With Selection.Characters(Start:=1, Length:=3).Font .Size = 8 End With End If End With Next End Sub

  • エクセルのマクロについて質問です。

    下の表を展開したいです。    A   B   C  D  E  F  G 1 C102,C103,C104 aaa bbb ccc ddd~ 2 R102,R103,R105 YYY RRR EEE GGG~ 3 R106,R107,R108   空白(上と同じ) 4 空白 5 L102,L103,L105 QQQ MMM NNN BBB~ という表を、 1 C102 aaa bbb ccc ddd 2 C103 aaa bbb ccc ddd 3 C104 aaa bbb ccc ddd 4 R102 YYY RRR EEE GGG というように最後まで展開していきたいです。 下のマクロだとB列以降が全て一番上と同じ文字列がコピーされてしまいます。 よろしくお願いします。 Sub test2() Dim ax As String 'A列のセルに入っているテキストを代入するための変数 Dim ax2 As String 'axを統合したテキストを代入するための変数 Dim num As Integer, i As Integer '回数を代入するための変数 Dim arr As Variant '配列を格納 Dim tex As String 'B列以降の文字列を代入するための変数 'A列にいくつデータが入っているかを確かめ、その数をnumに代入 Range("A1").Select Selection.CurrentRegion.Select num = Selection.Rows.Count Range("A1").Select 'A1のテキストの最後にカンマが入っているかを判定。なければカンマをつける。 'A列のデータが入っている最後のセルまで上記の処理を行う。 '各テキストは変数axに代入、ax2で統合する For i = 1 To num ax = ActiveCell.Text If Right(ax, 1) = "," Then ax = ax Else ax = ax & "," End If If i = 1 Then ax2 = ax Else ax2 = ax2 & ax End If ActiveCell.Offset(1).Select Next i ax2 = Left(ax2, Len(ax2) - 1)  arr = Split(ax2, ",") Range("A1").Select For i = 0 To UBound(arr) num = i + 1 Cells(num, 1).Value = arr(i) Next i Range("A1").Select Selection.CurrentRegion.Select num = Selection.Rows.Count 'B~D列を展開 For i = 1 To 3 ActiveCell.Offset(, 1).Select tex = ActiveCell.Formula Selection.Resize(num, 1).Select Selection.Formula = tex Selection.Resize(1, 1).Select Next i End Sub

  • エクセルVBAの記述方法の質問です。

    エクセルです。12個のセルの文字列をオートシェープの吹き出しに順に表示させるマクロをつくりました。 Sub tenki2() Dim i As Integer Dim a As String For i = 1 To 12 a = Cells(i, 2).Value ActiveSheet.Shapes("AutoShape 4").Select Selection.Characters.Text = a Application.Wait Now + TimeValue("00:00:05") Next i End Sub これで思った通り表示されるのですが、できればオートシェープをセレクトしないようにしたいのです。 (シートを保護するため) それで ActiveSheet.Shapes("AutoShape 4").Select Selection.Characters.Text = a のところを ActiveSheet.Shapes("AutoShape 4").Characters.Text = a と変えたのですが、「オブジェクトはこのプロパティまたはメソッドをサポートしていません」という実行時エラーがでてしまいました。書き方のどこがまずかったのでしょうか?ご教示いただければ幸いです。

  • 楕円の塗りつぶし

    色々と試してはみたのですが、なかなかうまくいきません。 Private Sub Worksheet_Calculate() For i = 1 To 100 n = (i - 1) * 3 + 8 If Cells(n, "R").Value < -10 Then c = 10 Else Select Case Cells(n, "S").Value Case Is = 0 c = 10 Case Is > -89 c = 17 Case Is < -100 c = 10 Case Else c = 12 End Select End If With Sheets("ABC").Shapes("テキスト " & i) .Line.ForeColor.SchemeColor = c .TextFrame.Characters.Font.ColorIndex = c - 7 .TextFrame.Characters.Font.Size = 6 End With If Cells(n, "W").Value = 37 Then a = 39 Else a = 3 End If With Sheets("ABC").Shapes("楕円 1") .Fill.ForeColor.SchemeColor = a - 7 .TextFrame.Characters.Font.ColorIndex = a End With Next i End Sub といった感じで作成しています。 今回 If Cells(n, "W").Value = 37 Then a = 39 Else a = 3 End If With Sheets("ABC").Shapes("楕円 1") .Fill.ForeColor.SchemeColor = a - 7 .TextFrame.Characters.Font.ColorIndex = a End With 上記の部分を追加しました。 トラブルだらけです。 読みに行ったセルの値が37なら楕円を39の色にて塗りつぶす、 それ以外なら3です。 ただ、まだ塗りつぶしの色と文字の色の関係は調べていません。 長くわかりづらいと思いますが、宜しくお願いいたします。

  • エクセルのマクロで

    お世話になります 下記のマクロで実行した所 100まで書式設定で保護、ロックしたいのですが b3:l3はロックするものの 4行目以降はロックしません どうしたらいいでしょうか もう1つ、このシートはいつもc3からはじめたいのですが If ActiveCell.Value >= "" Then の部分はどうしたらいいでしょうか よろしくおねがいいたします 初心者でバカな質問ですみません Sub マクロ1() Dim i As Integer For i = 1 To 100 If ActiveCell.Value >= "" Then Range("B3:l3").Select Selection.Locked = True Selection.FormulaHidden = False End If ActiveCell.Offset(1, 0).Select Next End Sub

  • Excelの同時置換の置換場所指定

    以前、どなたかの質問の回答で… Sub MultiReplacement()  Dim MyWords As Variant  Dim MyRepWords As Variant  Dim Ans As Integer  Dim Rng As Range  MyWords = Array("A", "C") 'ここに検索語を入れてください。  MyRepWords = Array(1, 2) 'ここに置換語を入れてください。  '検索語と置換語を調べる  If UBound(MyWords) <> UBound(MyRepWords) Then   MsgBox "検索語数( " & UBound(MyWords) & _   " )と置換語数( " & UBound(MyRepWords) & " )数が違います。", 64   Exit Sub  End If    Set Rng = Selection 'マウスで範囲を選択してください。  If Rng.Count = 1 Then   Ans = MsgBox("セル1つしか選択されていませんが、よろしいですか?", vbYesNo)   If Ans = vbNo Then    Exit Sub   End If  End If  '実行  For i = LBound(MyWords) To UBound(MyWords)   Cells.Replace What:=MyWords(i), Replacement:=MyRepWords(i), _   LookAt:=xlPart, _   MatchCase:=True  Next i End Sub ------------------------ というものを出してくれた方が折られました。それでなのですが… 置換語の場所を指定する場合はこれをどの用にしたらよいのでしょうか?? たとえば、セルA1から並んでいる、りんご/みかん/めろん…を、ほかの列CにApple/Orange/Mellon…するには??教えてくださいませ。

  • Excel VBAについて

    Excelで、指定したセル範囲の外枠に罫線を引き四角形を作り、B1の数字を変えていくと四角形を横に描いていくというマクロを作成したのですが、B1の数値を変えてマクロを実行すると以前に描いた四角形が残ってしまいます。これを数値を変えてマクロを実行すると、以前の四角形を消して新たに四角形を描くにはどうすればよいのでしょうか。何かいい方法があれば教えてください。宜しくお願いします。以下にコードを示しておきます。 Public Sub Main_Code() a = ThisWorkbook.Worksheets("Sheet1").Range("B1") If a = 2 Then Range("I26:K35").Select Selection.BorderAround Weight:=xlMedium Range("B1").Select ElseIf a > 2 Then Dim i As Integer For i = 3 To a Range("I26:K35").Select Selection.BorderAround Weight:=xlMedium Range("I26:K35").Select Selection.Copy Cells(26, 3 * i + 3).Select ActiveSheet.Paste Application.CutCopyMode = False Range("B1").Select  Next i  End If End Sub

  • エクセルのマクロについて

    エクセル2010を使用しています。 図面中の図形描画で描かれた四角のオブジェクトを 結合したセル(G7:H8)の中央に移動させるマクロを組みました。 マクロを組み実行したところ、動作はOKなのですが、 保存の際エラーが発生し修復しますか?となってしまいます。 続行すると、 修復されたレコード: /xl/drawings/drawing1.xml パーツ内のスケッチ (図形描画) と表示されます。 作成したマクロは以下の通りです。 おかしいところをご指摘ください。 よろしくお願いします。 Sub 打合図() ' ' 打合図 Macro ' ActiveSheet.Shapes.Range(Array("AutoShape 12")).Select Selection.Cut Range("G7:H8").Select ActiveSheet.Paste With Selection .Top = (Range("G9").Top - Range("G7").Top - .Height) / 2 + Range("G7").Top .Left = (Range("I7").Left - Range("G7").Left - .Width) / 2 + Range("G7").Left End With Range("N8").Select End Sub

  • エクセルで繰り返し処理をしたいのですが

    下記のマクロを6行目で展開しています。 これと同じ処理を7行目~36行目めまでさせたいのですが どうやればいいのか教えていただけないでしょうか? sub test() Select Case a Case 2, 3, 4, 5, 6 Range("F6").Select Selection.FormulaR1C1 = _ "=IF(RC[-1]-RC[-2]-0.75-RC[8]-RC[9]<=0,0,RC[-1]-RC[-2]-0.75-RC[8]-RC[9])" Range("H6").Select Selection.FormulaR1C1 = "=IF(-7.75>=RC[9],0,RC[9])" Range("J6").Select Selection.FormulaR1C1 = _ "=IF(IF(RC[-5]<=22,0,(RC[-5]-22-RC[6]))<=0,0,IF(RC[-5]<=22,0,(RC[-5]-22-RC[6])))" Range("B6:W6").Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With Case 0, 1 Range("F6").Select Selection.ClearContents Range("H6").Select Selection.ClearContents Selection.FormulaR1C1 = "=IF(RC[-5]<=22,0,(RC[-5]-22-RC[6]))" Range("J6").Select Selection.ClearContents Range("B6:W6").Select With Selection.Interior .ColorIndex = 45 .Pattern = xlSolid End With End select End sub