• 締切済み

このマクロの説明をお願いします

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()は必要なのでしょうか? あと、 もっとシンプルなマクロができるようでしたらご教授ねがいます。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

これはどんなレベルの人が書いたコードですか。勉強し始めて間もない、勉強途中の人だろうな。 >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)
回答No.3

>もっとシンプルなマクロができるようでしたらご教授ねがいます。 行数を少なくするだけなら 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)
回答No.2

>もっとシンプルなマクロができるようでしたらご教授ねがいます。 これだけです、参考に 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)
回答No.1

なんかいろいろ無駄なことやってますね。 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

関連するQ&A