• ベストアンサー

特定の値がある行の数値をマイナスするマクロ

エクセルA1:k5000にデータがあります。 もし、E列にE03の表示があった場合、同じ行のI列とJ列の数字をマイナスに表示したいです。 E03の表示があるのはデータ数5000のうち10程度です。 データ処理の関係上、マクロが必要です。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

sub sample1()  if application.counta("E2:E5000") = 0 then exit sub  application.screenupdating = false  application.calculation = xlcalculationmanual  range("E:E").autofilter field:=1, criteria1:="E03"  range("L1") = -1  range("L1").copy  range("I2:J5000").specialcells(xlcelltypevisible).pastespecial paste:=xlpasteall, operation:=xlmultiply  activesheet.autofiltermode=false  range("L1").clearcontents  application.calculation = xlcalculationautomatic  application.screenupdating = true end sub など。「E03」の文字の全角半角文字の違いを再確認してください。Eとe(大文字と小文字)の事ではないので注意してください。

colo2011
質問者

お礼

いつもありがとうございます。 できました! 今後ともよろしくおねがいします。

その他の回答 (3)

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

>E03の表示があるのはデータ数5000のうち10程度です。 もし、そうなら、この程度でよいと思います。全角半角などの違いは、Findのオプションで加えればいいです。 Sub FindChar()  Dim sFind As String  Dim FirstAdd As String  Dim c As Range  sFind = "E03"  Application.ScreenUpdating = False  With ActiveSheet.Columns(5)   Set c = .Find(What:=sFind, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, MatchByte:=False)   If Not c Is Nothing Then    FirstAdd = c.Address    Do     c.Offset(, 4).Value = -c.Offset(, 4).Value     c.Offset(, 5).Value = -c.Offset(, 5).Value     Set c = .FindNext(c)     If c.Address = FirstAdd Then Exit Sub    Loop Until c Is Nothing   End If  End With  Application.ScreenUpdating = True End Sub

colo2011
質問者

お礼

前回に続きありがとうございました。 今後ともどうぞよろしくお願いします。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

一例です。 前回分と併せてみました。 Sub 行を削除マイナス変更() For i = Cells(Rows.Count, "E").End(xlUp).Row To 1 Step -1 If Cells(i, "E") <> "S01" And _ Cells(i, "E") <> "S02" And _ Cells(i, "E") <> "E03" Then Rows(i).Delete ElseIf Cells(i, "E") = "E03" Then Cells(i, "I") = -Cells(i, "I") Cells(i, "J") = -Cells(i, "J") End If Next End Sub

colo2011
質問者

お礼

前回に続きありがとうございました。 今後ともどうぞよろしくお願いします。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 前の質問と同様の方法の一例です。 Sub test2() Dim i As Long For i = 5000 To 1 Step -1 If Cells(i, 5) = "E03" Then Cells(i, 9) = Cells(i, 9) * (-1) Cells(i, 10) = Cells(i, 10) * (-1) End If Next i End Sub こんな感じではどうでしょか?m(__)m

colo2011
質問者

お礼

引き続きありがとうございます。 今後ともよろしくお願いします。

関連するQ&A