マクロでキー入力

このQ&Aのポイント
  • マクロを使用してデータを偶数行の特定の列に入力する方法や、エラーの解決方法について質問しています。
  • エクセルのマクロを使って特定のセルにデータを入力する際に、エラーが発生する問題について相談しています。
  • エクセルのマクロを使用して特定の条件でデータを入力している際に、エラーが発生してしまう問題について質問しています。
回答を見る
  • ベストアンサー

マクロでキー入力

いつもお世話になっています データを偶数行(4~14)のK列からQ列に入力する為に下記のコードで処理できたのですが、このシートで別なマクロを実行すると、1行目のデータを扱う所でエラーになってしまいます。 イベントプロシ-ジャを使わずにModule1の中で入力処理をする方法とか、何か良い方法はないでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 17 Then ActiveCell.Offset(1, -6).Select Else: ActiveCell.Offset(-1, 1).Select End If End Sub よろしくお願いします。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>このシートで別なマクロを実行すると どのようなマクロを動かしているのか解りませんが、そちらのマクロの最初と最後でイベントを制御すれば問題は起きないでしょう。 sub macro1 Application.EnableEvents = False '処理 Application.EnableEvents = True end sub

hakujira
質問者

お礼

回答ありがとうございます。 おかげさまでうまくいきました。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

何が起きているのかは、ご質問文からでは不明ですが… こうしてみたら、直ったりしませんか? Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 17 Then   Target.Offset(2, -6).Select  Else   Target.Offset(0, 1).Select  End If End Sub

hakujira
質問者

お礼

回答ありがとうございます データ入力は"ENTER"でやりたい為に、このようにしてます

関連するQ&A

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

    マクロで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 どなたかご存じの方教えて下さい

  • セルに入力順を自動で入れるマクロ

    列Aに氏名、列Bに金額、列Cにグループが入っています。 B1に金額を入力するとD1に1、B5に金額を入力するとD5に2 と入力順が列Dに自動で入力されるマクロを作りたいと考えています。 Sheet1に Private Sub Worksheet_Change(ByVal Target As range) If Intersect(Target, columns("B:B")) Is Nothing Then Exit Sub Call 入力順 End Sub module1に Sub 入力順() ActiveCell.Offset(-1, 1).Select 'enterを押すとセルが下に移動するため。 range("E1").Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub と入力しました。(E1には=COUNT(B:B)が入力されており入力件数が集計され、金額入力時にはその数字がD列に入力順として自動で反映するように作ってみました。) 始めはうまくいったのですが、C列をグループでフィルタしているとうまく反映しないことがわかりました。 やり方はどのような形でもいいのですが、フィルタをかけた場合でもうまく入力順が列Dに反映する方法はないでしょうか? EXCEL2007を使用しています。 よろしくお願いします。

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、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

  • マクロの解説をお願いします。

    マクロを勉強したのが10年近く前ですっかり頭から抜けてしまっているので、教えていただければと思います。 前に質問して、回答をいただいたマクロの意味をどなたか教えてください。 http://okwave.jp/qa/q7430751.html Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B3:B100")) Is Nothing Then Select Case Target.Resize(1, 1).Value Case "イ" Target.Offset(, 1).Value = "A" Target.Offset(, 2).NumberFormatLocal = "0000" Target.Offset(, 2).Value = "0000" Target.Offset(, 3).Value = "-" Case "ロ" Target.Offset(, 1).Resize(, 3).ClearContents End Select End If Private Sub Worksheet とは?? というところからの超初心者です。 なんとかこれから10年のブランクを埋めて勉強していきたいと思っています。 よろしくお願いします。 また、そこの質問にも書きましたが、Resizeはここではどうして必要なのかがわかる方がいらしたら教えてください。 よろしくお願いします。

  • エクセルのカーソル移動 横スクロールを最後の入力列まで

    エクセルのカーソル移動について エクセルシートのコードはどこから貼り付け出来るのですか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Taget.Column=11 Then ActiveCell.Offset(1,-10).Select End If End Sub

  • エクセルVBAの書き方で教えてください。

    エクセルで、 「A列にデータを入力した日付をB列に自動で入れる」 (A列のデータを消したときは、B列のデータも消える)ということをするのに、 他の質問を参考にして、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then   '対象の列が1列目(A列)なら If Target.Value <> "" Then   '入力された値がブランクでなければ Target.Offset(0, 1).Value = Date   '0行ずれた(同じ行)の1列右隣に日付を入れる Else       'そうでなければ(Deleteキーで消されたら) Target.Offset(0, 1).Value = ""   '同行右隣をブランクすなわち""として消す End If      '入力された値の処理終り End If      '1列目(A列)の処理終り、従ってB列以降はチェックしない End Sub と、入力して、うまく動きました。 ところが、「A列に入力」→「B列に自動で日付」だけでなく、 「D列に入力」→「E列に自動で日付」 「H列に入力」→「I列に自動で日付」と、1つのエクセルシートの中で いくつかの同じ条件のことを繰り返そうと思うとうまくいきません。 この場合、どのようにVBAを記入したら良いのか、教えてください。 よろしくお願いします。

  • マクロでの条件判断について

    A行に何かデータを入力した場合、同じ列のとなりの行のセルに入力時間を残したいと思い、 例 A1:あ B1:2006/5/9/16:00 A2:い B2:2006/5/10/18:00 以下のマクロを教えて頂いたのですが、 Private Sub Worksheet_Change(ByVal Target As Range) '///A列のセル以外ならマクロ終了/// If Target.Column <> 1 Then Exit Sub '///1行目のセルならマクロ終了/// If Target.Row = 1 Then Exit Sub '///内容がブランクならB列のセルをブランクにする。/// If Target.Value = "" Then Target.Offset(0, 1).Value = "" Else Target.Offset(0, 1).Value = Format(Date + Time, "yyyy/mm/dd hh:mm:ss") End If End Sub A列以外にもC列に入力した値の入力時間をD列にE列に入力した値の入力時間をF列にと、全部で6箇所値を入力したとなりのセルに入力時間が出るようにしたかったのですが、 '///A列のセル以外ならマクロ終了/// If Target.Column <> 1 Then Exit Sub の部分を '///A,C列のセル以外ならマクロ終了/// If Target.Column <> 1 Or Target.Column <> 3 Then Exit Sub のように変更してまずはA列とC列に値を入れて挑戦したのですが、時間が表示されなくこまっておりました。 解決方法をご存知のかたがいらっしゃいましたら、ぜひよろしくお願いいたします。

  • Do loopのマクロ

    以下のマクロの問題点を教えていただきたいのです。 A列を上から順番に調べて、値が10のときだけBに分岐して処理を行い(処理の内容は省略してあります)、またAに戻って、空白のセルが見つかったら処理をやめる、というマクロです。 ところが、これを実行すると空白のセルが見つかってもマクロが止まりません。何が問題でしょうか。 Sub A() Cells(1, 1).Select A: Do Until ActiveCell.Value = "" If ActiveCell.Value = 10 Then GoTo B End If ActiveCell.Offset(1, 0).Select Loop B: ActiveCell.Offset(1, 0).Select GoTo A End Sub

  • 列が対象のChangeイベントの入力セル選択

    Private Sub Worksheet_Change(ByVal Target As Range) Dim myrang As Range 'K列に入力した時 If Target.Column = 11 And Target.Count = 1 Then With Workbooks("システム.xlsm").Worksheets("台帳").Columns(7) Set myrang = .Find(what:=Target.Value, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False, matchbyte:=False, searchformat:=False) End With If myrang Is Nothing Then Dim intret As Integer       '☆ intret = MsgBox("入力エラーです!", vbCritical + vbOKOnly, "エラー発生") Else      処理2のコード End If Target.Offset(2, 0).Select End If     End sub 以上のコードがあります。 ’☆のメッセージボックスを出し、OKを押したとき、入力したセルを選択して終了させたいのですが、 今のままでは、最後の Target.Offset(2, 0).Select を選択してしまいます。 どのようにすればいいのでしょうか?

  • VBAの記録を追加したい

    エクセル2002使用です。 VBAで次のコードを使っています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range Set Target = Intersect(Range("C:C"), Target) If Target Is Nothing Then Exit Sub For Each Rng In Target If Rng.Value <> "" Then Rng.Offset(, -2).Value = Now Else ' (*) Rng.Offset(, -2).Value = "" ' (*) End If Next Rng End Sub (C列のセルに何か入力されると、A列の同じ行にその時刻が入る。) 同じシートで、F列に何か入力されるとE列の同じ行にその時刻が入るように書き直したいのですが、どうすればいいのでしょうか? すいませんが、よろしくお願いします。

専門家に質問してみよう