• 締切済み

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

エクセルで任意の順番にて入力(テンキー使用で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

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

  • EXCELマクロでのシート間のデータ同期方法

    質問させていただきます。 EXCELにて、"シート1"のA1~C3と"シート2"のD4~F6を 同期化したく考えております。 ・いわゆる一方のシートが「読み取り専用」になってしまうリンク貼り付けではなく、シート1、シート2相互が書き換え可能の同期化です。 ・A1とD4、B3とE6、のように互いに照合箇所のセル同士を同期反映させたいと考えております。 なお、他の質問を参照したところ、 シート1のA1とシート2のD4の単一セルを同期かする方法は確認できました。(以下参照) ***************************************************************** シート1のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Worksheets("シート2").Range("D4") = Target End If End Sub シート2のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$4" Then Worksheets("シート1").Range("A1") = Target End If End Sub *************************************************************** これを参考にVBAの シート1のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$2" Then Worksheets("シート2").Range("D5") = Target End If End Sub シート2のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$5" Then Worksheets("シート2").Range("A2") = Target End If End Sub というように追記していったのですが、エラーとなってしまいます。 お詳しい方がおられましたらお願いいたします。

  • マクロの疑問

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "A2" Then Range("A2").Select End If End Sub とすると、どのセルを選んでもA2に飛ぶのに、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A3" Then Range("A2").Select End If End Sub とすると、A3を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

  • データ更新時の処理について(エクセルVBA)

    セルA2に数字の66が入っているとして、セルA2を67に更新した瞬間に67-66という処理をさせたいのですが、下記の???の部分が分かりません。どなたか、教えてください。お願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$2" Then  ??? End If End Sub

  • EXCEL 異なるVBA

    教えて下さい、EXECL以下の異なるVBA (A>,B>)が2つあります、同じシートでそれぞれ動くようにさせたいです1つに合わせる事は出来ないでしょうか? 当方初心者の為わかりません教えて下さい。 A> Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Address(0, 0, xlA1, 0) <> "A1" Then Exit Sub With Range("F9:I9,K17:K36").Borders(xlDiagonalUp) If Left$(Target.Value, 1) = "S" Then .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Else .LineStyle = xlNone End If End With End Sub B> Private Sub Worksheet_Change(ByVal Target As Range) With Sheet2 Select Case Target.Address Case Is = "$D$1" .Range("A1").Insert Shift:=xlDown .Range("A1").Value = Target.Value Case Is = "$D$2" .Range("B1").Insert Shift:=xlDown .Range("B1").Value = Target.Value End Select End With End Sub

  • エクセル マクロを利用して繰り返して入力する方法

    マクロでA1B1C1D1E1F1セルに入力しF1入力後A2B2C2D2E2F2と 下方向へ繰り返し800行くらいまで入力し、それとB列はスキップしたいのですが下記の方法で別々のシートでは うまくいくのですが同じシ-ト内ではエラ-になってしまいます 次の行への移動 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 7 Then Cells(Target.Row + 1, 1).Select End If End Sub B列のスキップ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("G1") <> "" Then If Target.Column = 2 Then Target.Offset(0, 1).Select End If End If End Sub どなたかご存じの方教えて下さい

  • EXCELでセルの変更をしたらマクロを実行

    このようなコードを作成しました。 Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Address = "$D$3") Then ★ End If End Sub ★に MsgBox "変更したよ" といれるとちゃんと表示されます。 ですが、 If D9 = "テスト" Then MsgBox "テスト" End if としても何も起こりません。 Call KEISAN のように呼び出すようにしても何も起こりません。 どこがダメなのでしょうか? よろしくお願いします。

  • 再度入力値に戻したい

     特定のセル(A1)の入力操作を取り消しA1の元データを別セル(B1)にコピペした後、再度セル(A1)の値を入力値に戻すにはどうしたら良いでしょうか?お教え下さい。 Windows7・SP1 Office2010 Private Sub Worksheet_Change(ByVal Target As Range) If Target.address <> "$A$1" Then Exit Sub Application.EnableEvents = False Application.Undo Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste Range("A1").Select Application.CutCopyMode = False Application.EnableEvents = True End Sub

  • 「Excelのセルへの入力内容の転記と元の内容への復帰」

    「Excelのセルへの入力内容の転記と元の内容への復帰」 何故それが必要かは別にして、次のようなことがしたい。 ・あるセル(例えばA1)にはある関数(式)が設定されている。 ・いま、セルA1にある値が入力されたとき、 ・その値を別のセル(例えばB1)へ転記(保存)し、 ・セルA1には元の関数に戻す。 これを、VBAで実現するにはどうすれば良いのでしょうか?。お教えください。 changeやselectionchangeイベントなどを使用すると出来そうですが、単純なコーディングではchangeの無限ネスト(無限再帰)となってしまいます。 例えば、次のようなコーディング:セルC1をA1セル選択時の関数保存場所として補助的に使用している。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "A1" Then Range("B1") = Range("A1") Range("A1").Formula = Range("C1").Formula End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A1" Then Range("C1").Formula = Range("A1").Formula End If End Sub これでは何か発想の転換が必要に思えます。

  • Worksheet_changeイベントが動作しない

    Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$D$224" If Target.Value = "" Then Range("D224").Value = "-" End If End Select End Sub DeleteキーでD224をクリアした場合、D224に"-"が入力されません。 D224はD225と結合してあります。 select~caseを使ってdeleteキーで"-"が入力されるような動作を教えてください・・よろしくおねがいします。。。

専門家に質問してみよう