• ベストアンサー

(エクセル)オブジェクトをtabキーで選択する順番は、自由に変更できますか?

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

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

  • ベストアンサー
回答No.8

#4(misatoanna)です。 > このマクロでは、最後のオブジェクト選択状態でマクロを実行すると > エラーになります。 ごめんなさい。こちらではエラーを再現できません。 > Select Case Odr >  Case Is = Ttl  'A >   Nxt = 1 >  Case Else    'B >   Nxt = Odr + 1 > End Select この部分ですが、 A)選択したオブジェクトの順番が最前面(順位番号がオブジェクト数と   一致)なら、次に選択するのは最背面のオブジェクト。 B)それ以外ならひとつ前面のオブジェクト。 という処理です。 こちらでは、モジュールどおりに、最後のオブジェクトを選択した状態で 実行すると最初のオブジェクトに戻り、何回でも循環できるのですが。 エラーが起きたときに VisualBasicEditor を開いてみてください。 どこでエラーが起きて、どのようなメッセージが出ますか?

balibali55
質問者

お礼

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

その他の回答 (7)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.7

>選択したい最後のオブジェクトが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

balibali55
質問者

お礼

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

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

>テキストボックスの最初の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

balibali55
質問者

お礼

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

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.5

これも雑ですが、同じシート内で処理するようにしてみました。 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

balibali55
質問者

補足

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

回答No.4

#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 新規ツールバーにユーザー設定ボタンを幾つか置いて、必要なマクロを登録して おくとラクですね。

balibali55
質問者

お礼

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

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

試しに大雑把ですが、マクロを組んでみました。 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

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

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

balibali55
質問者

お礼

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

  • hatiboo
  • ベストアンサー率42% (257/602)
回答No.1

こちらのバージョン2002ではtabで任意の移動設定はできないみたいでした。他のバージョンではどうなのでしょう コピーしたり移動したりすると移動の規則性がわかりません シェイプNOは変更できず、シェイプNO順に移動もしません 単に逆方向移動であれば、「shift」+「tab」で移動するのですが・・・・

balibali55
質問者

お礼

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

関連するQ&A