• ベストアンサー

エクセル セルの文字列の有無からほかのセルに数値を

勤務リスト.xlsx におきまして セルE1に、午前休、 という文字列があれば セルF1に数値の0 セルG1に数値の2000 を入力 同様に セルEiに、午前休、 という文字列があれば セルFiに数値の0 セルGiに数値の2000 31日を計算にいれて iを1から30としました エクセルファイルの開発から マクロに行き 以下のコードをいれましたが ------------------------------- Sub 午前休み() Dim 選択シート As Sheets Dim i As Integer Set 選択シート = ActiveWindow.SelectedSheets If InStr(Cells(5, i), "午前休") > 0 Then Cells(6, i).Value = 0 Cells(7, i).Value = 2000 i = 1 Do Until i = 30 i = i + 1 Loop End If End Sub 上記 作動しません すみません 御教示くださいませ win10 office365

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

Do Until i = 30 i = i + 1 Loop これは何もせずにi=30までループしているだけですし Cells(5, i) Cells(行, 列) なので思っているのと逆だと思います。 回数決まってるのでしたらFor~Nextで(Do~Loopは実行するまで回数が未確定の場合に使うほうがいいと思います) 以下で試してみてください。 Sub 午前休み() Dim 選択シート As Sheets Dim i As Long Set 選択シート = ActiveWindow.SelectedSheets For i = 1 To 31 If InStr(Cells(i, "E"), "午前休") > 0 Then Cells(i, "F").Value = 0 Cells(i, "G").Value = 2000 End If Next End Sub

sushidokei
質問者

お礼

理解が深まりました 回数決まってるのでしたらFor~Nextで(Do~Loopは実行するまで回数が未確定の場合に使うほうがいいと思います) 有り難うございました。

Powered by GRATICA

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

回答No.1、回答No.3の補足です。 コードをどのモジュールに記載したのか不明なので一応説明しておきます。 Sheet1などのシートモジュールに記載していた場合 回答No.1のコードは記載しているシートモジュールのシートだけが対象となります。 Sheet1のモジュールに記載していてSheet2を選択して実行してもSheet2は対象にならずSheet1が対象として実行されます。 標準モジュールに記載していた場合 Sheet2を選択して実行するとSheet2が対象になります。 複数選択していた場合は現在見えているシートが対象になります。 回答No.3のコードは シートモジュールでも標準モジュールでもどちらのモジュールに記載していても選択したシートすべてが対象となります。 1個しか選択していないとそのシートだけが対象です。 Sheet1、Sheet2、Sheet3を選択していた場合は、Sheet1、Sheet2、Sheet3全てが対象になります。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

選択シートの存在を忘れてました 選択したシートすべてで操作したいのでしたら以下で試してみてください。 Sub 午前休み() Dim 選択シート As Sheets, ws As Worksheet Dim i As Long Set 選択シート = ActiveWindow.SelectedSheets For Each ws In 選択シート With ws For i = 1 To 31 If InStr(.Cells(i, "E"), "午前休") > 0 Then .Cells(i, "F").Value = 0 .Cells(i, "G").Value = 2000 End If Next End With Next End Sub

  • luka3
  • ベストアンサー率72% (424/583)
回答No.2

惜しいです。ループの処理の場所がちょっと違います。 この場合はFor文を使った方がわかりやすいです。 Sub 午前休み() Dim i As Integer For i = 1 To 31 If InStr(Cells(5, i), "午前休") > 0 Then Cells(6, i).Value = 0 Cells(7, i).Value = 2000 End If Next End Sub

sushidokei
質問者

お礼

勉強 進みました ”この場合はFor文を使った方がわかりやすいです。”有り難うございました。

Powered by GRATICA