Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9981 / 13646 ツリー ←次へ | 前へ→

【24439】自作関数について VBA初心者 05/4/22(金) 11:06 質問[未読]
【24440】Re:自作関数について ウッシ 05/4/22(金) 11:15 回答[未読]
【24444】Re:自作関数について VBA初心者 05/4/22(金) 13:35 お礼[未読]
【24447】Re:自作関数について ウッシ 05/4/22(金) 13:47 回答[未読]
【24454】Re:自作関数について VBA初心者 05/4/22(金) 14:10 質問[未読]
【24457】Re:自作関数について ウッシ 05/4/22(金) 14:28 回答[未読]
【24460】Re:自作関数について VBA初心者 05/4/22(金) 14:40 質問[未読]
【24463】Re:自作関数について ウッシ 05/4/22(金) 14:48 回答[未読]
【24465】Re:自作関数について VBA初心者 05/4/22(金) 14:53 お礼[未読]

【24439】自作関数について
質問  VBA初心者  - 05/4/22(金) 11:06 -

引用なし
パスワード
   Workbookに自作関数「Change」を作成しております。
その中でフォント色を変える作業をしているのですが、
複数部分で同じ処理があるため、
もう一つ関数「settei」を作成し、
Callで呼び出そうとしたのですが、どうも関数setteiに書かれてある
構文がおかしいのか…動きません。
下に、関数setteiを記述しますので、ご指導よろしくお願いします。

Sub settei()

Dim i As Integer

    Worksheets("勤務表").Range(Cells(i, 1)).Font.ColorIndex = 3
    Worksheets("勤務表").Range(Cells(i + 1, 1)).Font.ColorIndex = 3
    Worksheets("勤務表").Range("C" & i) = ""
    Worksheets("勤務表").Range("E" & i) = ""
    Worksheets("勤務表").Range("G" & i) = ""
    Worksheets("勤務表").Range("I" & i) = ""
    Worksheets("勤務表").Range("K" & i) = ""


End Sub


関数ChangeでFor文にてiをまわしている作業をしている途中で関数setteiを
呼び出しているので、こちらでもiを使ったのですが…

関数Changeで呼び出すときは
Call ThisWorkbook.settei
としております。

【24440】Re:自作関数について
回答  ウッシ  - 05/4/22(金) 11:15 -

引用なし
パスワード
   こんにちは

Sub settei(i As Integer)
  With Worksheets("勤務表")
    .Range(Cells(i, 1)).Font.ColorIndex = 3
    .Range(Cells(i + 1, 1)).Font.ColorIndex = 3
    .Range("C" & i) = ""
    .Range("E" & i) = ""
    .Range("G" & i) = ""
    .Range("I" & i) = ""
    .Range("K" & i) = ""
  End With
End Sub
関数Changeで呼び出すときは
Call settei(i)

こんな感じですけど、自作関数「Change」の名前は変更した方がいいです。
「Change」はメソッドで使われる名前ですから。

【24444】Re:自作関数について
お礼  VBA初心者  - 05/4/22(金) 13:35 -

引用なし
パスワード
   ▼ウッシ さん:
ありがとうございます。関数名も変更いたしました。

しかしながら、何故だか実行しても変更されません…
もしや、他の部分にも間違いが…

頑張って探してみます!

【24447】Re:自作関数について
回答  ウッシ  - 05/4/22(金) 13:47 -

引用なし
パスワード
   ▼VBA初心者 さん:
>▼ウッシ さん:
>ありがとうございます。関数名も変更いたしました。
>
>しかしながら、何故だか実行しても変更されません…
>もしや、他の部分にも間違いが…
>
>頑張って探してみます!

済みません、動作確認してなかったです。
>変更されません…
というよりエラーになったのでは?

Sub settei(i As Integer)
  With Worksheets("勤務表")
    .Cells(i, 1).Font.ColorIndex = 3
    .Cells(i + 1, 1).Font.ColorIndex = 3
    .Range("C" & i).ClearContents
    .Range("E" & i).ClearContents
    .Range("G" & i).ClearContents
    .Range("I" & i).ClearContents
    .Range("K" & i).ClearContents
  End With
End Sub

「i」は「1」以上でないと別のエラーになりますので呼び出し側かどこかでチェック
して下さい。

【24454】Re:自作関数について
質問  VBA初心者  - 05/4/22(金) 14:10 -

引用なし
パスワード
   ▼ウッシ さん:
重ね重ねありがとうございます。
変更してみたのですが、やはりなりませんでした。。
関数setteiを呼び出す時の命令として以下のようなIF文を使っております。

If Range("S1") = 1 Then

For i = 6 To 36 Step 1
 If Worksheets("勤務表").Range("A" & i) = 1 Then
  Call settei(i)
 ElseIf Worksheets("勤務表").Range("B" & i) = "月" Then
  sum = sum + 1
  If sum >= 2 Then
    Call settei(i)
  End If
 End If
Next i

End If

どうやら、ここで間違っているのでは…と思っているのですが、
何がどう違うのやら、まったく解りません。

【24457】Re:自作関数について
回答  ウッシ  - 05/4/22(金) 14:28 -

引用なし
パスワード
   こんにちは

>  If Range("S1") = 1 Then
のセルS1は「勤務表」シートのセルでしたら

>  If Worksheets("勤務表").Range("S1") = 1 Then
に変えてもダメですか?

後、動作を確認する場合は「F8キー」でステップ実行してみるといいですよ。

【24460】Re:自作関数について
質問  VBA初心者  - 05/4/22(金) 14:40 -

引用なし
パスワード
   ▼ウッシ さん:
ありがとうございます。

>後、動作を確認する場合は「F8キー」でステップ実行してみるといいですよ。

ステップ実行をしてみたところ…

If Worksheets("勤務表").Range("S1") = 1 Then

のIf文でfalsになってしまっているようでした。。
(S1には「1」が入っているのに…)

似たようなIf文

If Worksheets("勤務表").Range("S1") >= 1 Or Worksheets("勤務表").Range("S1") <= 12 Then

では命令を実行してくれているのに、何故前述のIf文は実行されないのでしょう…

【24463】Re:自作関数について
回答  ウッシ  - 05/4/22(金) 14:48 -

引用なし
パスワード
   こんにちは

もっと丁寧に書いた方がいいのでしょうね。

>If Worksheets("勤務表").Range("S1").Value = 1 Then
とか
>If Val(Worksheets("勤務表").Range("S1").Value) = 1 Then

「Val」は数字がセルの値の先頭からに無いと「0」を返しますので判定上は問題無い
かと思いますけど「Int」とか「IsNumeric」とか「IsNumber」とか調べて使ってみて
下さい。

【24465】Re:自作関数について
お礼  VBA初心者  - 05/4/22(金) 14:53 -

引用なし
パスワード
   ▼ウッシ さん:
ありがとうございます!
もう一度見直してみます。

ありがとうございましたっ!

9981 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free