プロが教えるわが家の防犯対策術!

エクセルで、オブジェクトの「吹出し」を複数作成しました。tabキーを押すと、次のtabに飛んでくれますが、これを任意の順番に変更することは可能でしょうか。普通に作成すると、新しく作成したものから古いものにさかのぼる順で選択されています。この性質を利用して、選択したい順の逆順で作っていけば良いのですが、すでに相当数を作成しているため、一から作りなおさず選択順だけを変えたいと思っています。よろしくお願いします。

A 回答 (8件)

#4(misatoanna)です。



> このマクロでは、最後のオブジェクト選択状態でマクロを実行すると
> エラーになります。

ごめんなさい。こちらではエラーを再現できません。

> Select Case Odr
>  Case Is = Ttl  'A
>   Nxt = 1
>  Case Else    'B
>   Nxt = Odr + 1
> End Select

この部分ですが、
A)選択したオブジェクトの順番が最前面(順位番号がオブジェクト数と
  一致)なら、次に選択するのは最背面のオブジェクト。
B)それ以外ならひとつ前面のオブジェクト。
という処理です。

こちらでは、モジュールどおりに、最後のオブジェクトを選択した状態で
実行すると最初のオブジェクトに戻り、何回でも循環できるのですが。

エラーが起きたときに VisualBasicEditor を開いてみてください。
どこでエラーが起きて、どのようなメッセージが出ますか?
    • good
    • 0
この回答へのお礼

#4(misatoanna)さん、ご連絡ありがとうございます。
私のやり方が悪かったのか、今度は何週でも循環でき、当初やりたいとイメージしていた通りの結果になりました。辛抱強くお付き合い頂き感謝します。

お礼日時:2009/05/24 18:47

>選択したい最後のオブジェクトが1度で選択され、


>何度実行してもそれ以外のオブジェクトがアクティブになりません。
そのまま、Tabキーを操作してみてください。
TabIndex(実際にはありません)が、1の図形から順にTab移動しないでしょうか?
Tab移動の順番は、シートに貼り付けられた順になります。
従って、Cutして、PasteすることでTab移動順が最後に変更なります。
吹き出し以外に図形がある場合、それらの図形の後に、吹き出しのTab順がくることになります。

>それをテキストボックスの最初の2数字(01~)の順にtabを飛ばして>1つずつ書いてあるコメントを確認していく
で、本当にやりたいことはこれですね。
下記に差し替えてください。

    If stxt = i Then
      MsgBox shp.TextFrame.Characters.Text
'      shpleft = shp.Left
'      shptop = shp.Top
'      shp.Cut
'      ActiveSheet.Paste
'      Selection.ShapeRange.Left = shpleft
'      Selection.ShapeRange.Top = shptop
      Exit For
    End If
    • good
    • 0
この回答へのお礼

xls88さん、マクロ実行できました。メッセージボックスにコメントを表示できるようにして頂いたんですね。この機能はとても重宝します。辛抱強くお付き合い頂きありがとうございました。

お礼日時:2009/05/24 18:56

>テキストボックスの最初の2文字が、


>01から始まる2桁の半角数字で、
>この数字が選択したい順番に昇順になっています。
上記内容を手掛かりに対象オブジェクトを操作します。
従って、今度のマクロはオブジェクトを選択しておく必要がありません。

Sub test3()
  Dim shp As Shape
  Dim shpleft As Double
  Dim shptop As Double
  Dim stxt As String
  Dim i As Long

  Application.ScreenUpdating = False
  For i = 1 To ActiveSheet.Shapes.Count
    For Each shp In ActiveSheet.Shapes
      On Error Resume Next
      stxt = val(Left(shp.TextFrame.Characters.Text, 2))
      On Error GoTo 0
      If stxt = i Then
        shpleft = shp.Left
        shptop = shp.Top
        shp.Cut
        ActiveSheet.Paste
        Selection.ShapeRange.Left = shpleft
        Selection.ShapeRange.Top = shptop
        Exit For
      End If
    Next shp
  Next i
  Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

xls88さん、度々ありがとうございます。
今回のマクロを実行すると、選択したい最後のオブジェクトが1度で選択され、何度実行してもそれ以外のオブジェクトがアクティブになりません。やりたいことは、1画面に収まりきらない数の吹出しがシートの中に散らばっていて、それをテキストボックスの最初の2数字(01~)の順にtabを飛ばして1つずつ書いてあるコメントを確認していく、ということです。よろしくお願いします。

お礼日時:2009/05/24 13:31

これも雑ですが、同じシート内で処理するようにしてみました。


Tag移動順に、オブジェクトを選択しておいて、マクロを実行してください。
マクロは大丈夫ですか?
Tag移動順の規則とか何か手掛かりになるものはありますか?
例えば、オブジェクトの左上角がかかっているセル番地に規則性があるとか、もし、あれば教えてください。

Sub test2()
  Dim shp As Object
  Dim shpleft As Double
  Dim shptop As Double
  For Each shp In Selection
    shpleft = shp.Left
    shptop = shp.Top
    shp.Cut
    ActiveSheet.Paste
    Selection.ShapeRange.Left = shpleft
    Selection.ShapeRange.Top = shptop
  Next
End Sub

この回答への補足

短時間に2度もご回答頂きありがとうございます。vbaはあまり詳しくありませんが、ご指定のvbaを実行してみました。
やり方が的を射ていないのか、オブジェクトを選択したい順にshiftを押しながら選択した後、vbaを実行したところ、選択した5つのオブジェクトの最後のものがアクティブになりました。もう一度実行すると、「オブジェクトは、このプロパティまたはメソッドをサポートしていません」というエラーメッセージが表示されました。
なお、オブジェクトの位置に規則性はなく、強いて言えば、吹出し(オブジェクトは全て吹出し)の中テキストボックスの最初の2文字が、01から始まる2桁の半角数字で、この数字が選択したい順番に昇順になっています。

補足日時:2009/05/23 23:57
    • good
    • 0

#2さまのご回答のように、選択順は「上から下。

同じ上位置なら左から右」で、
この順番は一般機能では変えられないのではないでしょうか。

次のようなマクロを記述してみました。

1.オブジェクトの順番を入れ換えるマクロ。
 [Shift]を併用して選択したい順にオブジェクトを選択して実行します。
 オブジェクトの数が多い場合は、数回に分けて操作してもOKです。
 Sub SetOrder()
  Dim shp
  For Each shp In Selection
   shp.ShapeRange.ZOrder msoBringToFront
  Next
 End Sub

2.オブジェクトを順に選択するマクロ
 選択されているオブジェクトの、ひとつ前面にあるオブジェクトを選択します。
 Sub SelectNext()
  Dim Ttl, Odr, Nxt
  Ttl = ActiveSheet.Shapes.Count
  Odr = Selection.ShapeRange.ZOrderPosition
  Select Case Odr
   Case Is = Ttl
    Nxt = 1
   Case Else
    Nxt = Odr + 1
  End Select
  ActiveSheet.Shapes(Nxt).Select
 End Sub

3.[Tab]キーにマクロ(SelectNext)を割当てるマクロ
 実行後、[Tab]キーを押すたびに上記マクロ(SelectNext)が実行されます。
 Sub SetKey()
  Application.OnKey "{Tab}", "SelectNext"
 End Sub

4.[Tab]キーの機能をデフォルトに戻すマクロ。
 Sub ResetKey()
  Application.OnKey "{Tab}"
 End Sub

新規ツールバーにユーザー設定ボタンを幾つか置いて、必要なマクロを登録して
おくとラクですね。
    • good
    • 0
この回答へのお礼

ご返信ありがとうございました。
マクロ1,2を実行し、選択したい順にオブジェクトを選択することができました。もしお時間があればもう一つ教えていただきたいのですが、このマクロでは、最後のオブジェクト選択状態でマクロを実行するとエラーになります。これを、最初のオブジェクトに戻って何回転でも循環できるようにすることはできるでしょうか。よろしくお願いします。

お礼日時:2009/05/24 12:50

試しに大雑把ですが、マクロを組んでみました。


Sheet1のオブジェクトをSheet2に選択順にコピーします。
Tab移動順で、オブジェクトを選択しておいて、マクロを実行してください。
Sheet2に貼り付けられたオブジェクトは
Sheet1のオブジェクトを選択した順番でTab移動します。

Sub test1()
  Dim shp As Object
  Dim saddress As String
  
  Application.ScreenUpdating = False
  For Each shp In Selection
    Worksheets("Sheet1").Select
    saddress = shp.TopLeftCell.Address
    shp.Copy
    Worksheets("Sheet2").Select
    Range(saddress).Select
    ActiveSheet.Paste
  Next
  Application.ScreenUpdating = True
End Sub
    • good
    • 0

当方2003です。


エクセルは得意ではないのですが
どうやら、
上から下へ、同じ上位置なら左から右へ
という順序で移動するようです。
作成した順や、名前は関係ないようですし
タブオーダーのようなプロパティも見つかりません。

任意の移動は無理じゃないでしょうか。
    • good
    • 0
この回答へのお礼

ご返信ありがとうございました。

お礼日時:2009/05/24 00:11

こちらのバージョン2002ではtabで任意の移動設定はできないみたいでした。

他のバージョンではどうなのでしょう
コピーしたり移動したりすると移動の規則性がわかりません
シェイプNOは変更できず、シェイプNO順に移動もしません
単に逆方向移動であれば、「shift」+「tab」で移動するのですが・・・・
    • good
    • 0
この回答へのお礼

ご返信ありがとうございました。

お礼日時:2009/05/24 00:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!