とっておきの「夜食」教えて下さい

入力フォームを作っておりますが、常にEnterで指定した順番に移動させる方法はありますか?

いろいろ探しましたがなぜか上手く作動しません・・。

どなたか教えて頂けないでしょうか。

A 回答 (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の必要な場所に配置して作成すれば出来上がりに見えます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

 もう少し勉強して出直します。

 

お礼日時:2011/11/21 18:24

>いろいろ探しましたがなぜか上手く作動しません・・。



大概失敗しているのは,「空打ち(空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.シートの保護を開始し,その際に「ロックされたセルの選択」のチェックを外しておく
といった仕込みで,概ね実現できます。
    • good
    • 1
この回答へのお礼

ありがとうございます。

 素人の私でも初めて作動しました。 感動です。

 #別の方法 は既に行ったのですが、途中で上下から左右に移動させなければならない部分があり、違う方法を探してました。 

 名前ボックスもセルの数が多くて対応しないし、VBAで入力フォームも作ってみましたが、入力点数が多くて逆に手間がかかるので他の方法を探してました。


 完成を目指しているのは契約書を作成するために、Sheet1を入力フォームとしSheet2・3に反映するものですが、印刷する契約書(2種類)が規制の印刷物となっているので、Sheet2・3にイメージで張り付けて、印刷物の位置にセルを微調整しながら表示させて出力させてます。

 既製の印刷物は替えようがないし、ひとつのフォームに入力して2つに反映させるソフトはないし、苦肉の策で今のようなことを始めました。

 最後にもう一つ教えて頂けると非常にたすかります。

 他に何か良い方法はありますか? または先で教えて頂いた方法で、セル数を増やす場合の対処を教えて頂けないでしょうか?

 素人相手に大変お手数とは思いますが何卒宜しくお願い致します。

お礼日時:2011/11/21 16:20

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
「エクセルVBAを使いセルを指定した順番に」の回答画像4
    • good
    • 0
この回答へのお礼

ありがとうございます。

 試してみましたが私の力量ではうまく作動しません。

 もう少し勉強してからにします。

お礼日時:2011/11/21 15:56

エクセル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の内容が合うように調節する。
    • good
    • 0
この回答へのお礼

ありがとうございます。

皆様が考えているより素人でして・・・すみません。

Sheet1に表を作り、それを入力フォーム用として活用しようと考えております。

Sheet1のセルに順番を決めて(A1,C3,B2,H5・・・・)、Enter若しくはTabで移動できないないかと考えてます。

 指定したいセル数が200強ありTabindex等では上手く作動しません。

 簡単な方法はありませんか?

 おそらくご回答の内容を少しいじれば解決するのでしょうけど私には上手くでませんでした。

 何卒宜しくお願い致します。

お礼日時:2011/11/20 15:22

こんばんは!


外していたらごめんなさい。

>入力フォームを作っておりますが・・・
に関して、ユーザーフォームを使っている訳ですかね?
もしそうであれば、
フォームの「テキストボックス」のプロパティ→「Tabindex」の数値で順番が指定できます。

ただ、質問文の「題名」に
>エクセルVBAを使いセルを指定した順番・・・
とありますので、たぶん上記の方法ではなく、セルの移動方法の質問だと解釈して・・・
画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面がでますので
↓のコードをコピー&ペーストしてセルに入力 → Enter としてみてください。

Private Sub Worksheet_Change(ByVal Target As Range)
Target.Offset(, 2).Select
End Sub

どのセルに移動したいのか判らないので、
入力 → Enter → で2つ右側セルに移動する としてみました。

※ 実際はこのように決まったセル移動ではないと思いますし、すべてのセルで適応しないと思いますので
具体的にどのように移動したいのか判ればもっと具体的なコードの回答があると思いますよ。

この程度でごめんなさいね。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。

 コンパイルエラーと出てしまいます???

 本当の素人なので少し勉強してから出直します。

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

お礼日時:2011/11/20 15:49

>常にEnterで指定した順番に移動させる方法はありますか?


意味を都立が得ていなければ
SetFocusで検索してみてください。

たぶん
Textbox1に
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox3.SetFocus
End Sub

とすれば、TextBox1から抜け出すとTextbox2ではなく
Textbox3 へ移動します。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A