- 締切済み
エクセルで任意の順番にて入力をしたいのですが・・・
エクセルで任意の順番にて入力(テンキー使用でenterで移動)をしたいです。 自分で調べてやったのですがうまくできないので教えてください。 ctrlキー+セル選択で名前BOXに登録は、セルを40個ほどしか登録できない?でしょうか・・・? 全部で300個ほど有るのですが、ちまちまやっても40個くらいのところで先頭に戻ります。 何か他の設定がおかしいのでしょうか? マクロも簡単そうなやつ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Range("D10").Select End If End Sub をやってみました。 今一解らず、 If Target.Address = "$A$1" Then Range("D10").Select End If のセルの位置を変えてやりましたが、こちらも数に制限があるのか 全部を登録して順番どうりに入力することができません。 数個分の枠で妙な位置に移動します・・・ 中の式を複数作ってやりました・・・ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Range("D10").Select ・ ・ ・ If Target.Address = "XXXX" Then Range("XXX").Select End If End Sub ($A$1とD10の値を変えたものを多数使用して・・・) 何か良い方法があれば教えてください。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- misatoanna
- ベストアンサー率58% (528/896)
#1です。 私もマクロを考えてみました。 ・実際にデータを入力するシートの名前を Input と仮定します。 ・新しいシートを挿入し、名前を Idx にします。 1.新しいシート(Idx)を開いて名前を二つ定義します。 名前:Area 参照範囲:=OFFSET(Idx!$A$1,0,,COUNTA(Idx!$A:$A)) 名前:IP 参照範囲:=OFFSET(Idx!$B$1,0,,COUNTA(Idx!$B:$B)) 2.シートInputのシートモジュールに以下をコピペします。 Public i Private Sub Worksheet_SelectionChange(ByVal Target As Range) i = i + 1 Sheets("Idx").Cells(i, 1).Value = Target.Address End Sub 3.シートInputを開き、入力対象セルを順に単純クリックしていきます。 →シートIdx のA列に、順にセルアドレスが書き込まれます。 ※離れたセルでも[Ctrl]キーは併用しないでください。 ※隣接した連続セルを選択するときは[Shift]キーを併用してもかまい ません。 4.すべての入力用セルのクリックが終わったらシートIdx のA列の内容 を確認し、必要ならそのシート内で訂正します。 5.上記4でコピペしたシートInputのシートモジュールを削除し、新たに 次をコピペして VB Editor を閉じます。 Public Strt Private Sub Worksheet_SelectionChange(ByVal Target As Range) Strt = Strt + 1 Application.EnableEvents = False Range(Sheets("Idx").Range("IP")(Strt)).Select Application.EnableEvents = True End Sub ' Sub StartEntry() Dim rng1, rng2, CL, i Sheets("Idx").Activate For Each rng1 In Sheets("Idx").Range("Area") CL = rng1.Value For Each rng2 In Range(CL) i = i + 1 Sheets("Idx").Cells(i, 2) = rng2.Address Next Next Sheets("Input").Activate Strt = 0 Range(Sheets("Idx").Range("IP")(1).Value).Select End Sub 6.[ツール]-[マクロ]-[マクロ] から StartEntry を実行します。 実行すると、シートIdx のA列に自動記述されたセルアドレスを読み 込んで加工し、B列に書き込みます。 ・$B$4:$E$4 というアドレスがあったら、$B$4,$C$4,$D$4,$E$4 と 分解して書き込みます。 その後入力先頭セルがアクティブになりますので、入力を開始。
- ka_na_de
- ベストアンサー率56% (162/286)
#2です。 セル名の手入力は苦痛な作業ですよね。 そこで、別のコードにしてみました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim Target_Cell Dim i As Integer Target_Cell=Array("$A$1", "$B$2", "$C$3", "$D$4", "$E$5") For i = LBound(Target_Cell) To UBound(Target_Cell) If Target.Address = Target_Cell(i) Then Range(Target_Cell(i + 1)).Select Exit For End If Next i End Sub 300のセルのデータの編集方法を紹介します。 1)記録マクロで300個のセルをCtrlキーを押しながら選択 2)でてきたコードの中でF11,F16,F14,F13,G14,G16といった部分を「コピー」 3)エクセルの適当なセルをクリックし、上部の数式バーをクリックして、 「=」を入力後に「貼り付け」 4)=F11,F16,F14,F13,G14,G16 となっていると思いますので、数式を全てドラッグで選択 5)「F4」キーを押して、絶対参照に変換 6)「=」以外の「$F$11,$F$16,$F$14,$F$13,$G$14,$G$16」を「コピー」 7)上記コードの Array(" ")の中に「貼り付け」 8)「編集」→「置換」で「,」を「","」に変換 以上です。 300もあると大変でしょうが、がんばってください。 Array()内が膨大な長さになりますが、半角スペースとアンダーバーを 入れれば改行して見やすくできます。
お礼
再度回答いただき有難うございます。 確かに300有ると大変です。^^; 置換とか使うと大分楽になります。 助かりました。有難うございました。
- ka_na_de
- ベストアンサー率56% (162/286)
こんにちは。 テスト用に作成しました。 ワークシートモジュールに登録して実行してみてください。 尚、エラー処理などは何も行っていません。 Private Sub Worksheet_Change(ByVal Target As Range) Dim Target_Cell(300) As String Dim i As Integer Target_Cell(0) = "$A$1" Target_Cell(1) = "$B$2" Target_Cell(2) = "$C$3" Target_Cell(3) = "$D$4" '以降のセル番地は入力が大変なのでテスト用にダミーを作成しました。 '実際は手入力してください。 For i = 4 To 300 - 4 Step 4 Target_Cell(i) = "$A$" & i + 1 Target_Cell(i + 1) = "$B$" & i + 2 Target_Cell(i + 2) = "$C$" & i + 3 Target_Cell(i + 3) = "$D$" & i + 4 Next i '------------------------------------------------------------- For i = 0 To 300 - 2 If Target.Address = Target_Cell(i) Then Range(Target_Cell(i + 1)).Select Exit For End If Next i End Sub
お礼
ありがとうございます。 明日にでも試してみます。
- misatoanna
- ベストアンサー率58% (528/896)
> Ctrlキー+セル選択で名前BOXに登録は、セルを40個ほどしか登録 > できない? Excel2000では、名前を定義する際の"参照範囲"への入力可能な文字数 は255までという制限があります。おそらく新しいバージョンでもそう なのでしょう。 Sheet1'$A$20, のように、1セル平均6文字程度使います(Sheet1!の 部分は文字数に入りませんが "," は入ります)ので、255÷6=42.5、 つまり、先頭の40セル程度だけが登録されます。そのため、連続する セルはできるだけ [Shift]を併用し、結果が$A$4:$A$8 の形になるよう に選択します。 ご質問では入力セルが全部で300個ほどということで、上記のような選 択方法でも文字数がオーバーしてしまうのでしたら、名前を使わずに、 別シートに入力セルのアドレス一覧を「ちまちま」作成し、それをもと にマクロ(シートモジュール)で処理をするほかないのかもしれません。
お礼
ありがとうございます。 文字数に制限があっったので40個ほどしかできなかったんですね。 納得しました。^^; マクロは結構難しいと感じていますので、できるか分かりませんが 何とかやってみます。 有難うございました。
お礼
詳しく、早くできるマクロを作っていただき有難うございました。 早速試してみます。