- ベストアンサー
エクセルで自動入力をマクロで・・・(No.1798323の応用編)
応用が効かなくて申し訳ありません。 1798323で素敵なご回答をいただいたのですが、 状況が進展して変わってくるとVBAの書き換えがわからなくなりました。もう一度教えてください。 ※変更点は、入力元がAI列、『入力先をQ~V列に限定』したい点です。 Q R S T U V・・ AI 1 田中 鈴木 佐藤 山田 2 鈴木 山田 海岡 3 田中 佐藤 佐藤 というような表があり、T1に「山田」、S2「海岡」と、その行に関してAI列に新規の名前が入力されたときに自動入力することをVBAでどのように書けばよいのか、ご教授お願いいたします。 尚、3行目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
No.11です。 > 重複チェック時のメッセージボックスが不要である場合、‥ 単にメッセージを出さないようにする、っていうことですよね? てっとり早いのは、 MsgBox myName & "さんは入力済ですよ!", vbInformation ↓ Exit Sub に変えてください。 重複している場合は何もしないで処理を抜ける( Exit Sub ) ということです。 '---------------------- If WorksheetFunction.CountIf(Range(Cells(.Row, startCol), Cells(.Row, endCol)), myName) > 0 Then Exit Sub '---------------------- ★ ただし↑だけでは、 名前を上書きしようと思って 「3中田」 のように入力したけれど、中田さんはすでに入力済みの場合、入力元には 「3中田」 と数字が残ったままになります。 この数字を消して 「中田」 とだけにしたいなら、 '---------------------- If WorksheetFunction.CountIf(Range(Cells(.Row, startCol), Cells(.Row, endCol)), myName) > 0 Then If myChgFlag Then Application.EnableEvents = False .Value = myName Application.EnableEvents = True End If '---------------------- としてください。この場合、Exit Sub は不要です。 ◆ ついでと言ってはナンですが‥ '---名前上書きのエラーチェック の下に myChgFlag = False myErrFlag = False の 2行がありますよね。 この 2行は不要といえば不要なんですが、入れるとしたらココではなく、 コードの 14行目 If Not IsNumeric(Left(.Value, 1)) Then の前でした。 '---------------------- myChgFlag = False myErrFlag = False If Not IsNumeric(Left(.Value, 1)) Then myName = .Value '---------------------- に変更してください。
その他の回答 (12)
- onntao
- ベストアンサー率32% (108/332)
kamejiroさんの応用ということなら それぞれの入力位置を検討といううことになるかと Sub テスト2() i = 1 Do Until Cells(i, 35) = "" j = 17 flg = "" Do Until flg = "END" If j = 22 Then flg = "END" End If If Cells(i, j) = Cells(i, 35) Then flg = "END" End If If Cells(i, j) = "" Then Cells(i, j) = Cells(i, 35) flg = "END" End If j = j + 1 Loop i = i + 1 Loop End Sub それにしてもkamejiroさん、最初からこのような変更もありうるとを想定してのコードなのかすばらしいな~ ('-'*) VBA勉強中の onntaoでした
お礼
onntaoさん、ありがとうございました。大変参考になりました。入力元の1行目~4行目に何か文字がはいっておれば、5行目からの入力が可能であることは確認できました。kamejiroさんからもご回答いただいて尚、補足質問をお願いしています。ご回答、心より感謝いたします。当初ポイント対象だったのですが、その後、多数の方のご回答をいただいた関係で、今回はごめんなさい。m(_ _)m
補足
ありがとうございます^^。できました。 しかしながら、1行目に見出し、2行目からデータ入力というケースなら可能なようですが、 今回設定しているシートは、1行目~4行目に見出しや空白にあけておきたいのです。5行目から入力したい場合、このマクロを実行したときにうまくいかないみたいです。引き続きご指導いただけますでしょうか?
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 こんなものでよいと思います。 イベント・ドリブン型のマクロですから、使い方は、単に、AI列に入力するだけです。 'シートタブから、コードの表示で以下を貼り付けます。 '--------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) With Target '35列 =AI列 If .Column <> 35 Then Exit Sub If .Count > 1 Then Exit Sub '複数のセルの場合のEnter除外 '17 =Q列より前か 22= V列より後は除外 If (.End(xlToLeft).Column < 17 Or .End(xlToLeft).Column >= 22) Then Exit Sub If .End(xlToLeft).Value <> .Value Then Application.EnableEvents = False .End(xlToLeft).Offset(, 1).Value = .Value Application.EnableEvents = True End If End With End Sub '--------------------------------------------------- .
補足
Wendy02さん、こんにちは。いつもありがとうございます。 以前にもご指導いただきました。 シートタプを右クリックしてコード表示で貼りつけてみました。 1行目で試してみると、うまくいきましたが、2行目以下がなかうまくできませんでした。私の理解不足の為だとは思います。尚、引き続きご指導お願いいたします。よろしくお願いいたします。
- 1
- 2
お礼
ありがとうございます。超初心者にこんなに懇切丁寧にご指導いただきましたことを感激しています。実際、VBAの可能性とsiotan99さんの力量に驚いています。感謝のことばしかありません。本当にありがとうございました。