- 締切済み
このマクロの説明をお願いします
Dim buf As String Private Sub CommandButton1_Click() End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim tmp As Variant Application.EnableEvents = False tmp = InStr(2, buf, "$", vbTextCompare) tmp = Right(buf, Len(buf) - tmp) If buf = "$B$" & tmp Then Range("C" & tmp).Value = Range("C" & tmp).Value + Range("B" & tmp).Value Range(buf).Select End If Application.EnableEvents = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) buf = ActiveCell.Address End Sub どうやらB列の各セルに入力がされた場合、隣接するC列のセルに加算していくマクロのようです。 なんですが、 InStr関数、Right関数、Len関数あたりでやっていることがよくわかりません。 Private Sub CommandButton1_Click()は必要なのでしょうか? あと、 もっとシンプルなマクロができるようでしたらご教授ねがいます。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
これはどんなレベルの人が書いたコードですか。勉強し始めて間もない、勉強途中の人だろうな。 >Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) buf = ActiveCell.Address End Sub はBufをパブリック変数的に=どのモジュールからも使えるようにしているが、回りくどく(というより不要で)、Changeイベントの引数Targetで捉えられる。 >Private Sub CommandButton1_Click() End Sub も実行する中身が無いので無意味。実際は何か書いてあるのか? >Application.EnableEvents = False は処理の行うセルのChangeがまたChanngeを読んで 愚ぐるぐる回りにならないよう位置的にイベントを抑止する >tmp = InStr(2, buf, "$", vbTextCompare) tmp = Right(buf, Len(buf) - tmp) 変化したセルの、そのせる値(Buf、前期理由で、Targetで良いと思う)の第2文字目から$をさがす。 Bufの長さからTempを引くと$の次から文字列の終わりまでの長さが出る。その長さを使ってRight関数で文字列を切り出している。$の次以後最後尾までの文字列。 あとは既に出ている回答を勉強する。
- watabe007
- ベストアンサー率62% (476/760)
>もっとシンプルなマクロができるようでしたらご教授ねがいます。 行数を少なくするだけなら Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column <> 2 Then Exit Sub Target.Offset(, 1).Value = Target.Offset(, 1).Value + Target.Value End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) If 入力されたセルの列 <> 2 Then Exit Sub 入力された右隣のセルの値 = 入力された右隣のセルの値 + 入力された値 End Sub
- watabe007
- ベストアンサー率62% (476/760)
>もっとシンプルなマクロができるようでしたらご教授ねがいます。 これだけです、参考に Private Sub Worksheet_Change(ByVal Target As Excel.Range) With Target.Offset(, 1) If .Column <> 3 Then Exit Sub .Value = .Value + .Offset(, -1).Value End With End Sub
- nag0720
- ベストアンサー率58% (1093/1860)
なんかいろいろ無駄なことやってますね。 tmp = InStr(2, buf, "$", vbTextCompare) tmp = Right(buf, Len(buf) - tmp) このコードは、bufに入っているアドレスから行を抜き出してるだけです。 例えば、buf="$B$5" なら tmp=5 となります。 Private Sub CommandButton1_Click()は必要ありません。 B列に入力された値をC列に加算するだけなら下記のコードだけでできます。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then Range("C" & Target.Row).Value = Range("C" & Target.Row).Value + Range("B" & Target.Row).Value End If End Sub