• ベストアンサー

エクセルVBAを使いセルを指定した順番に異動させ

入力フォームを作っておりますが、常にEnterで指定した順番に移動させる方法はありますか? いろいろ探しましたがなぜか上手く作動しません・・。 どなたか教えて頂けないでしょうか。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.6

ぶっちゃけ今のご相談では,「デタラメにあっち行ったりこっち行ったりします」以上の詳しい情報もなく,既出回答者への補足としても「沢山あって大変です」しかありませんので,具体的な良い方法を考えるにはあまりにネタ不足です。 >セル数を増やす場合の対処を教えて頂けないでしょうか? ここまでのお話では,単純にアナタの順番に従って列記してくださいとしか言えません。 かろうじて >途中で上下から左右に移動させなければならない部分があり、違う方法を探してました。  という事であるなら, 1.シートの保護で移動できるセルを限定する 2.シート名タブ右クリックのマクロで private sub worksheet_selectionchange(byval Target as excel.range)  if application.intersect(target, range("10:20")) is nothing then   application.moveafterreturndirection = xldown  else   application.moveafterreturndirection = xltoright  end if end sub としておく なんて作り方をしておくと,可動範囲の中で「10行目から20行目のセルに入るとEnterで右移動,それ以外はEnterで下移動」といった仕込みは出来ます。 また, >Sheet1を入力フォームとしSheet2・3に反映するものですが、 というお話であれば,シート1の「入力順」をあっちこっち行って帰ってにする必要は全く無いと思われます。 要はシート2,3を指定の帳票として出力できればよいのですから,シート1は上から順番に素直に入力できるよう考えて作成し,必要なデータをシート2,3の必要な場所に配置して作成すれば出来上がりに見えます。

aki601
質問者

お礼

ありがとうございます。  おっしゃる通りなんですが、どうしてもセルを決まった順番でそれ以外に移動しないようにしたかったんです。  もう少し勉強して出直します。  

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

その他の回答 (5)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

>いろいろ探しましたがなぜか上手く作動しません・・。 大概失敗しているのは,「空打ち(空Enter,Tab移動)」と「データ入力による次のセルへの移動」がキチンと手当てできていないからです。 作成例 1枚目のシートでB2,D7,C11,E3の順で移動する(ローテーションする) 手順: 標準モジュールに下記をコピー貼り付ける public Prepos as range sub Auto_Open()  worksheets(1).select  set prepos = worksheets(1).range("B2")  application.enableevents = false  prepos.select  application.enableevents = true end sub シート1のシートモジュールに下記をコピー貼り付ける private sub Worksheet_SelectionChange(byval Target as range)  dim a, b  a = array("B2", "D7", "C11", "E3")  b = application.match(prepos.address(false, false), a, 0)  set prepos = range(a(b mod (1 + ubound(a))))  application.enableevents = false  prepos.activate  application.enableevents = true end sub ブックを保存して閉じ,開き直す。 #別の方法 ぶっちゃけ「指定の順」で移動させようとするのも,(特に入力セルが沢山あるなら)大概ナンセンスな試みです。 ご利用のエクセルのバージョンも不明ですが,もっと簡易な(かつ安全な)手段としては 1.入力してよいセルについて,セルの書式設定の保護でロックのチェックを外しておく 2.シートの保護を開始し,その際に「ロックされたセルの選択」のチェックを外しておく といった仕込みで,概ね実現できます。

aki601
質問者

お礼

ありがとうございます。  素人の私でも初めて作動しました。 感動です。  #別の方法 は既に行ったのですが、途中で上下から左右に移動させなければならない部分があり、違う方法を探してました。   名前ボックスもセルの数が多くて対応しないし、VBAで入力フォームも作ってみましたが、入力点数が多くて逆に手間がかかるので他の方法を探してました。  完成を目指しているのは契約書を作成するために、Sheet1を入力フォームとしSheet2・3に反映するものですが、印刷する契約書(2種類)が規制の印刷物となっているので、Sheet2・3にイメージで張り付けて、印刷物の位置にセルを微調整しながら表示させて出力させてます。  既製の印刷物は替えようがないし、ひとつのフォームに入力して2つに反映させるソフトはないし、苦肉の策で今のようなことを始めました。  最後にもう一つ教えて頂けると非常にたすかります。  他に何か良い方法はありますか? または先で教えて頂いた方法で、セル数を増やす場合の対処を教えて頂けないでしょうか?  素人相手に大変お手数とは思いますが何卒宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2です! >指定したいセル数が200強あり・・・ とありましたので、またまたお邪魔しました。 操作したいSheetはSheet1とします。 Enterキーで次のセルへの規則性がないようなので、 Sheet2に↓の画像のように選択セルの順番を表示しておきます。 Sheet1のSheet見出し上で右クリック → コードの表示 → VBE画面にしたのコードをコピー&ペーストして A1セルに入力 → Enter ・・・としてみてください。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim i, j, k As Long Dim str As String Dim ws As Worksheet Set ws = Worksheets(2) On Error Resume Next str = WorksheetFunction.Substitute(Target.Address, "$", "") If WorksheetFunction.CountIf(ws.Columns(1), str) Then i = WorksheetFunction.Match(str, ws.Columns(1), False) j = ws.Cells(i + 1, 2) k = ws.Cells(i + 1, 3) End If Cells(j, k).Select End Sub 'この行まで ※ 無理やりって感じの方法ですが、他に良い方法があればごめんなさいね。m(__)m

aki601
質問者

お礼

ありがとうございます。  試してみましたが私の力量ではうまく作動しません。  もう少し勉強してからにします。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

エクセルVBAの質問だから、最終的には、シートのデータを作りたいのだろうが >常にEnterで指定した順番に移動させる方法 の意味が質問がアバウトで、両義に取れないか? (1)セル移動か (2)テキストボックスなどの選択の移動か(フォーカス)。(入力のコントロールの移動) はっきり表現できてない。 ーーー (2)は「TabIndex」=タブオーダーの順序、とうい話題のことだろう。しかしTABキーでの移動を前提にする。 UserForm1などのデザイン状態で右クリック、タブオーダーがある。 しかしテキストボックスは、始の設計から、入力順に上下位置を並べて作るのでは無いですか。 参考 http://www.rottel.net/sdj/3398 Googleで「VBA テキストボックス タブオーダー」または「・・タブインデックス」などで照会。 ーー Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then ' TABキーのKeyCode。KeyCodeの確認は、MsgBox KeyCode でよろし。 Me.TextBox4.SetFocus End If End Sub Private Sub TextBox4_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then ' TABキーのKeyCode。KeyCodeの確認は、MsgBox KeyCode でよろし。 Me.TextBox3.SetFocus End If End Sub のようなのを作っておくとそれらしく出来る。1->3->4の例。 ーー (1)は Private Sub CommandButton1_Click() Set x = Range("B65536").End(xlUp) i = 0 x.Offset(1, i) = TextBox1.Text i =1 x.Offset(1, i) = TextBox2.Text i =2 x.Offset(1, i) = TextBox3.Text TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" End Sub この i=0,1,2をシートの列の内容とTextBoxの内容が合うように調節する。

aki601
質問者

お礼

ありがとうございます。 皆様が考えているより素人でして・・・すみません。 Sheet1に表を作り、それを入力フォーム用として活用しようと考えております。 Sheet1のセルに順番を決めて(A1,C3,B2,H5・・・・)、Enter若しくはTabで移動できないないかと考えてます。  指定したいセル数が200強ありTabindex等では上手く作動しません。  簡単な方法はありませんか?  おそらくご回答の内容を少しいじれば解決するのでしょうけど私には上手くでませんでした。  何卒宜しくお願い致します。

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

こんばんは! 外していたらごめんなさい。 >入力フォームを作っておりますが・・・ に関して、ユーザーフォームを使っている訳ですかね? もしそうであれば、 フォームの「テキストボックス」のプロパティ→「Tabindex」の数値で順番が指定できます。 ただ、質問文の「題名」に >エクセルVBAを使いセルを指定した順番・・・ とありますので、たぶん上記の方法ではなく、セルの移動方法の質問だと解釈して・・・ 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面がでますので ↓のコードをコピー&ペーストしてセルに入力 → Enter としてみてください。 Private Sub Worksheet_Change(ByVal Target As Range) Target.Offset(, 2).Select End Sub どのセルに移動したいのか判らないので、 入力 → Enter → で2つ右側セルに移動する としてみました。 ※ 実際はこのように決まったセル移動ではないと思いますし、すべてのセルで適応しないと思いますので 具体的にどのように移動したいのか判ればもっと具体的なコードの回答があると思いますよ。 この程度でごめんなさいね。m(_ _)m

aki601
質問者

お礼

ありがとうございます。  コンパイルエラーと出てしまいます???  本当の素人なので少し勉強してから出直します。  ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>常にEnterで指定した順番に移動させる方法はありますか? 意味を都立が得ていなければ SetFocusで検索してみてください。 たぶん Textbox1に Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox3.SetFocus End Sub とすれば、TextBox1から抜け出すとTextbox2ではなく Textbox3 へ移動します。

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

関連するQ&A

  • エクセルで指定したセルにジャンプしたい・・・

    エクセル2000を使用しています。 あるフォームを作成しました。 入力するセルは常に決まっています。 順番に入力するようになっているのですが、その際に Enterキーを押すと次に入力するセルに勝手に ジャンプするようにするにはどうすればよいのでしょう?

  • Excel VBA VBフォームのタブ移動について

    エクセルVBAなのですが、フォーム内のテキストボックスを入力後EnterやTabキーで移動するかと思うんですけど、この順番を設定する方法ってありますでしょうか? 教えていただければ幸いです。

  • エクセルでエンターを押すと隣のセルではなく指定したセルに!

    エクセルでエンターを押すとセルが右隣に移動します。 次に入力したいのは4個右のセルなので、エンターキー を4回押しています。 一回エンター押すと指定したセルに飛ばすにはどうし たらいいのか教えて下さい。

  • エクセルの入力でセル移動

    MSのエクセルで、セルに指定された文字数を入力したらEnterや矢印キーを押さなくても次のセルに移動させる方法はないでしょうか? 例えばA1セルに入力出来る文字数は3と指定しておきます。A1セルに3文字入力したら、次のセルA2に移動するようにする方法です。入力規則で文字列指定まではできますが、次にセルに移動するにはEnterなどが必要です。これを省略する方法です。 バージョンは2003ですが、2007,2010でできるのでしたらそのバージョンでも構いません。

  • VBAでセル移動

    VBA超初心者です。 よろしくお願いいたします。 エクセル2010を使用してるのですが B13:E150の範囲で Bに入力後エンターしたらoffset(0,2)に移動して Dに入力後エンターしたらoffset(0,1)に移動して Eに入力後エンターしたらoffset(0,-2)に移動して Cに入力後エンターしたらoffset(1,-1)に移動する。 入力なしのエンターは普通どうりに↓に移動する。 こんな動きにしたいのですが、基本分が全くわかりません。 よろしくおねがいいたします。

  • Excelで、セル入力後に次に移動するセルのアドレスを任意に指定することはできませんか?

    Excelで、A1のセルでEnterを押したらC3のセルに移動するような指定の仕方はできないでしょうか? (感じとしてはHTMLフォームのtabindex属性のような感じです) 縦移動or横移動しか選択できませんか?

  • Excel VBA ComboBox

    質問させて頂きます。 現在ユーザーフォーム内にComboBoxを配置しリストに、チヌ/チヌマン(魚名)を入れています。 問題は手入力でも指定出来る用にしたいのですが、「チヌ」と入力しEnterをしますと「チヌマン」と出てしまいます。 この2つの魚名は全く異なりますので入力した文字列で済む方法は無いでしょうか? よろしくお願いします。

  • セルの自動移動

    エクセルで、入力後次のセルに移動するにはEnter等を押す必要があります。 シートに入力フォームを予め作っています。 1つのセルには1文字しか入力しないのですが、1文字を入力したら(Enter等を押さずに)自動的に次のセル(指定したセル)に移動することはできませんか? 例: セルB1に「1」を入力(1キーを押す)と次に入力したいB2へカーソルが移動

  • エクセルのセルをENTERで指定箇所に移動させる

    ということをしたいと思っています。といっても、そんなにややこしい移動でなく、 A1B1,A2B2,A3B3というように、 右に一度進んだら斜め下に行く、という作業を繰り返したいだけです。 つまり、B列の入力をした後は必ずA列に戻って次の行から入力できる状態にしたいのです。 なお、移動にはENTERを使いたいと思っています。 CTRLで入力するセルに順番と名前をつけてやる方法を自分で見つけてやってみたのですが、 これだと、一度でもこの範囲内からはずれてしまうと、また一からの入力になってしまいますし、 理想はこのA列B列のどこから入力を開始しても、B列入力の後は次の行のA列に移動する、ということなのですが、、、。 入力しないセルをロックして保護する、という方法もやってみたのですが、私が何か間違っているのでしょうか、C列をロックしてもうまくいきませんでした。 なぜこのようなことをしたいかというと、誰でも使いやすいフォーマットを作っておきたいため、 このようにセル移動するシートを作成したいのです。 どなたかもしいい案があればどうぞお願いいたします。

  • EXCELで特定のセルのみ移動するには?

    EXCELでセルの保護の解除を行います。 そしてシート全体の保護をします。 そうすると保護の解除をしたところしか上書きできなくなります。 ここまでは分かるのですが、ロックの解除を行ったセルのみENTERキーで順番に移動させるような設定は出来ますか? なおかつ移動の順番などを指定したり出来ますか? もしも出来るようであれば、そのやり方を教えてください。

専門家に質問してみよう