- ベストアンサー
エクセル セルの文字列の有無からほかのセルに数値を
勤務リスト.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
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (3)
- kkkkkm
- ベストアンサー率66% (1719/2589)
回答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)
選択シートの存在を忘れてました 選択したシートすべてで操作したいのでしたら以下で試してみてください。 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
お礼