- 締切済み
マクロを他の行にも反映させる方法を教えてください
Excelで住所(区、町名)とその住所に対応する学区を反映するマクロを作成しています。 指定した列に区を入力することで、別途指定した列へ対応した町名、学区などを反映させるところまでは成功したのですが、このマクロを実行すると作成時の行にしか反映させることができませんでした。 これを、別の行に区を入力したときに作成時と同じように反映させるようにしたいと考えています。 初歩的な質問かもしれませんが、お力添えいただけますと幸いです。 何卒よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルデータは、各行同じ列には同じ性格のデータを並べるのが普通です。例 C列には各生徒の住所など。 ですからデータ開始行から最終行まで同じパターンの処理のくり返しになることがほとんどです。 と言うよりエクセルではそのようなデータ構成の表にしないとなりません、便利では在りません。 (アクセスなどを勉強すればその特徴がはっきりわかる) ですから処理の元になるデータはその行のデータの、決った列を使うことが多い。 今の場合は住所でしょう。これがC列に上から下までびっしり(これも肝心)並んでいるとして i行C列のデータはVBAでは Cells(i,”C”)で取れる。 其れで、各行のくり返しガ必要でしょうが、それは For i=2 To d 処理(右辺にCells(i,”C”)を使う) Next i です。 最終行dの取得はGoogleででも照会すること。「VBA 最終行の取得」 Cells(i,”C” )の値(住所)に対応する学区を別表から索引するのは、色々な方法があり、それを私はロジックと読んでいます。 これは経験で学ぶ(本やWEBや学校、ベテランなど他人のものをまねする)ほか仕方がない。 関数と形が似たVLOOKUPというVBA関数などが、なじみやすいかも。 ーー VBAを仕事的な使い方をする前段階のようで、もっと勉強しまくらないと、聞いて丸写しコピーばかりになって、回答するほうもかなわない。 >別の行に区を入力したときに作成時と同じように反映させるようにしたいと考えています。 これも初心者が書いているので、場合を特定できない。 普通エクセルは住所を全生徒分シートに入力して、生徒全員分の処理を始めるもんだ(バッチ処理)。これの方が易しいのだ。 >区を入力したときに を文字通り解するとイベント処理(即時処理)のようにも取れるが、詳細を説明できる力が質問者には無いようで、上記の私の記述も的外れの可能性がある。 質問するのも、(適切な回答を得るには)ある程度のVBAの力をつけてからでないと無理です。 もちろん回答を理解するのも、読めば判るといった生易しいものではない。
- pollux0375
- ベストアンサー率26% (15/56)
たとえば、対象となるシートにVisualBasicEditorで次のようなWorksheet_Change関数を定義すると、そのシートのどこかが変更になるたびに呼び出されます。 下の例でTarget.Addressには"$A$2"などのように、変更のあったセルのアドレスが入れられた状態でシステムから呼び出されます。 この関数の中でどの行、列に入力があったのか、何が入力されたのかなどを判断して、それに対応した処理を行うことで、目的を達成することができると思います。 (中でCallで呼び出している関数は自作の関数です) ただし、詳細をここで説明するのはできませんので、トライしてみてください。 もし勘違いだったらごめんなさい。 マクロの例(ワークシートに定義された関数) Private Sub Worksheet_Change(ByVal Target As Range) If Range("L4") = "*" Then Dpnt = Target.Address Call LineSelect(Dpnt) Call 簿冊一覧表へ記録 End If End Sub
- xls88
- ベストアンサー率56% (669/1189)
現状のコードを見せて頂くとアドバイスし易いのですが 取りあえず <例1> If ActiveCell.Value = "○○区" Then ActiveCell.Offset(0, 1).Value = "ABC" ElseIf ActiveCell.Value = "△△区" Then ActiveCell.Offset(0, 1).Value = "DEF" End If <例2> With ActiveCell If .Column = 1 Then If .Value = "○○区" Then Cells(.Row, 2).Value = "ABC" ElseIf .Value = "△△区" Then Cells(.Row, 2).Value = "DEF" End If End If End With <例3> Dim c As Range For Each c In Range("A1:A10") If c.Value = "○○区" Then Range("B" & c.Row).Value = "ABC" ElseIf c.Value = "△△区" Then Range("B" & c.Row).Value = "DEF" End If Next ≪参考≫ VBAを使うには/繰り返し(ループ)処理 http://www.bekkoame.ne.jp/~poetlabo/COMP/Excel/VBALEC/loop.htm