• ベストアンサー

エクセルで自動入力をマクロで・・・(No.1798323の応用編)

応用が効かなくて申し訳ありません。 1798323で素敵なご回答をいただいたのですが、 状況が進展して変わってくるとVBAの書き換えがわからなくなりました。もう一度教えてください。 ※変更点は、入力元がAI列、『入力先をQ~V列に限定』したい点です。   Q    R    S    T   U V・・ AI 1 田中 鈴木 佐藤          山田 2 鈴木 山田              海岡 3 田中 佐藤              佐藤 というような表があり、T1に「山田」、S2「海岡」と、その行に関してAI列に新規の名前が入力されたときに自動入力することをVBAでどのように書けばよいのか、ご教授お願いいたします。 尚、3行目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。

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

  • ベストアンサー
  • shiotan99
  • ベストアンサー率68% (140/203)
回答No.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 '---------------------- に変更してください。

yastaro
質問者

お礼

ありがとうございます。超初心者にこんなに懇切丁寧にご指導いただきましたことを感激しています。実際、VBAの可能性とsiotan99さんの力量に驚いています。感謝のことばしかありません。本当にありがとうございました。

その他の回答 (12)

  • onntao
  • ベストアンサー率32% (108/332)
回答No.2

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でした

yastaro
質問者

お礼

onntaoさん、ありがとうございました。大変参考になりました。入力元の1行目~4行目に何か文字がはいっておれば、5行目からの入力が可能であることは確認できました。kamejiroさんからもご回答いただいて尚、補足質問をお願いしています。ご回答、心より感謝いたします。当初ポイント対象だったのですが、その後、多数の方のご回答をいただいた関係で、今回はごめんなさい。m(_ _)m

yastaro
質問者

補足

ありがとうございます^^。できました。 しかしながら、1行目に見出し、2行目からデータ入力というケースなら可能なようですが、 今回設定しているシートは、1行目~4行目に見出しや空白にあけておきたいのです。5行目から入力したい場合、このマクロを実行したときにうまくいかないみたいです。引き続きご指導いただけますでしょうか?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 こんなものでよいと思います。 イベント・ドリブン型のマクロですから、使い方は、単に、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 '--------------------------------------------------- .

yastaro
質問者

補足

Wendy02さん、こんにちは。いつもありがとうございます。 以前にもご指導いただきました。 シートタプを右クリックしてコード表示で貼りつけてみました。 1行目で試してみると、うまくいきましたが、2行目以下がなかうまくできませんでした。私の理解不足の為だとは思います。尚、引き続きご指導お願いいたします。よろしくお願いいたします。

関連するQ&A