• 締切済み

エクセルで任意の順番にて入力をしたいのですが・・・

エクセルで任意の順番にて入力(テンキー使用で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の値を変えたものを多数使用して・・・) 何か良い方法があれば教えてください。 よろしくお願いします。

みんなの回答

回答No.4

#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 と   分解して書き込みます。 その後入力先頭セルがアクティブになりますので、入力を開始。

kagosima2006
質問者

お礼

詳しく、早くできるマクロを作っていただき有難うございました。 早速試してみます。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

#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()内が膨大な長さになりますが、半角スペースとアンダーバーを 入れれば改行して見やすくできます。

kagosima2006
質問者

お礼

再度回答いただき有難うございます。 確かに300有ると大変です。^^; 置換とか使うと大分楽になります。 助かりました。有難うございました。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

こんにちは。 テスト用に作成しました。 ワークシートモジュールに登録して実行してみてください。 尚、エラー処理などは何も行っていません。 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

kagosima2006
質問者

お礼

ありがとうございます。 明日にでも試してみます。

回答No.1

> Ctrlキー+セル選択で名前BOXに登録は、セルを40個ほどしか登録 > できない? Excel2000では、名前を定義する際の"参照範囲"への入力可能な文字数 は255までという制限があります。おそらく新しいバージョンでもそう なのでしょう。 Sheet1'$A$20, のように、1セル平均6文字程度使います(Sheet1!の 部分は文字数に入りませんが "," は入ります)ので、255÷6=42.5、 つまり、先頭の40セル程度だけが登録されます。そのため、連続する セルはできるだけ [Shift]を併用し、結果が$A$4:$A$8 の形になるよう に選択します。 ご質問では入力セルが全部で300個ほどということで、上記のような選 択方法でも文字数がオーバーしてしまうのでしたら、名前を使わずに、 別シートに入力セルのアドレス一覧を「ちまちま」作成し、それをもと にマクロ(シートモジュール)で処理をするほかないのかもしれません。

kagosima2006
質問者

お礼

ありがとうございます。 文字数に制限があっったので40個ほどしかできなかったんですね。 納得しました。^^; マクロは結構難しいと感じていますので、できるか分かりませんが 何とかやってみます。 有難うございました。

関連するQ&A

専門家に質問してみよう