ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュのIF関数

  • mixiチェック
  • このエントリーをはてなブックマークに追加
入力したい内容は、

もし、cells(5,i)が"●" cells(6,i)は0 
もし、cells(5,i)が"B"で cells(3,i)が月、火、木、金 だったら 8
cells(3,i)が水、木だったら 4
もし、cells(5,i)が""で cells(3,i)が月、火、木、金 だったら 9
cells(3,i)が水、木だったら 5


マクロは以下のように入力しました。条件が2つになっているのでそこがうまく入力できていないとは思うのですがどのように入力したらいいか分かりません。

Sub 月間勤務時間()
Dim i As Long
For i = 2 To 32
Select Case Cells(5, i).Value
Case Is = "●"
Cells(6, i).Value = 0
Case Is = "B" And Cells(3, i).Text = "月" Or "火" Or "木" Or "金"
Cells(6, i).Value = 8
Case Is = "B" And Cells(3, i).Text = "水" Or "木"
Cells(6, i).Value = 4
Case Is = "" And Cells(3, i).Text = "月" Or "火" Or "木" Or "金"
Cells(6, i).Value = 9
Case Is = "" And Cells(3, i).Text = "水" Or "木"
Cells(6, i).Value = 5
End Select
Next i
End Sub


Case Is = "B" And Cells(3, i).Text = "月" Or "火" Or "木" Or "金" の所でエラーメッセージがでます。

実行時エラー’13’: 型が一致しません。

If関数で入力も考えて見ましたが、
=IF(B5="●"),"0", IF(AND(OR(B2="月",B2="火",B2="木", B2="金"),OR(B5="")),"9", IF(AND(OR(B2="月",B2="火",B2="木", B2="金"),OR(B5="B’")),"8", IF(AND(OR(B2="水",B2="土"),OR(B5="")),"4", IF(AND(OR(B2="水",B2="土"),OR(B5="B’")),"5",)))))

“●”の部分でエラーメッセージが出てしまいます。

コメント(11)

携帯からなので手短に

条件を

Case ゙月゙:

という風に記述してください

Case Is=○× っていう書き方がエラーの原因です
数式を書き直している最中に分からなくなりました

[VBA側の条件(i=2のとき)]
B5セルが"●" → 0
B5セルが空白 且 B3セルが"月"、"火"、"木"、"金"のどれかである → 9
B5セルが空白 且 B3セルが"水"、"木"のどちらかである → 5
B5セルが"B" 且 B3セルが"月"、"火"、"木"、"金"のどれかである → 8
B5セルが"B" 且 B3セルが"水"、"木"のどちらかである → 4

[数式側の条件]
B5セルが"●" → 0
B5セルが空白 且 B2セルが"月"、"火"、"木"、"金"のどれかである → 9
B5セルが空白 且 B2セルが"水"、"土"のどちらかである → 4
B5セルが"B" 且 B2セルが"月"、"火"、"木"、"金"のどれかである → 8
B5セルが"B" 且 B2セルが"水"、"土"のどちらかである → 5

どちらが正しいのですか??


数式は「=IF(B5="●"),・・・」となっていますからエラーになって当然です
これで良いのか?と思う部分は多々ありますが…。
とりあえず、提示された条件文通りのサブルーチンは
↓のような感じに書けそうです。(動作はさせていません。適宜修正して下さい)

Sub SelectStatementTest()
Dim i As Long
For i = 2 To 32
Select Case Cells(5, i).Value
Case "●"
Cells(6, i) = 0
Case "B"
Select Case Cells(3, i).Value
Case "月", "火", "木", "金"
Cells(6, i) = 8
Case "水", "木"
Cells(6, i) = 4
End Select
Case ""
Select Case Cells(3, i)
Case "月", "火", "木", "金"
Cells(6, i) = 9
Case "水", "木"
Cells(6, i) = 5
End Select
End Select
Next i
End Sub

Select Case文は比較元として1つの変数のみを扱いますので、
複数の変数値をチェックしたい場合は、上述のように入れ子にして
記述する必要があります。
記述可能なCase内容は、この辺のページが参考になります。
http://excelvba.pc-users.net/fol6/6_2.html
皆さんありがとうございました。

うまく作動しました。

上記の内容が理解できていないのでゆっくり解読したいと思います。
マリ男さまへ

[数式側の条件]
B5セルが"●" → 0
B5セルが空白 且 B2セルが"月"、"火"、"木"、"金"のどれかである → 9
B5セルが空白 且 B2セルが"水"、"土"のどちらかである → 4
B5セルが"B" 且 B2セルが"月"、"火"、"木"、"金"のどれかである → 8
B5セルが"B" 且 B2セルが"水"、"土"のどちらかである → 5

が正しいです。

申し訳ありませんでした。

数式がエラーがなるのは当然な理由は恥ずかしながらピンときません。
もっと勉強して理解できるようにしたいです。

追伸 VBAではセルの形式?ValueプロパティやTextプロパティなどを指定できますが、関数 =if() の場合Textプロパティなどの指定はできるのでしょうか?
とりあえず、
=IF(論理式,真の場合,偽の場合)
数式でIF文を使うと例えば、提示された数式を改変して
=IF(B5="●","0", IF(AND(OR(B2="月",B2="火",B2="木", B2="金"),OR(B5="")),"9", IF(AND(OR(B2="月",B2="火",B2="木", B2="金"),OR(B5="B")),"8", IF(AND(OR(B2="水",B2="土"),OR(B5="")),"4", IF(AND(OR(B2="水",B2="土"),OR(B5="B")),"5",)))))

=IF(B5="●",0,IF(AND(OR(B2="月",B2="火",B2="木",B2="金"),B5=""),9,IF(AND(OR(B2="月",B2="火",B2="木", B2="金"),B5="B"),8, IF(AND(OR(B2="水",B2="土"),B5=""),4,IF(AND(OR(B2="水",B2="土"),B5="B"),5,"")))))

=IF(B5="●",0,IF(B5="",IF(OR(B2="月",B2="火",B2="木",B2="金"),9,IF(OR(B2="水",B2="土"),4,"")),IF(B5="B",IF(OR(B2="月",B2="火",B2="木",B2="金"),8,IF(OR(B2="水",B2="土"),5,"")),"")))

=IF(B5="●",0,IF(OR(LEN(B2)<>1,ISERROR(FIND(B2,"月火水木金土"))),"",IF(B5="",IF(NOT(ISERROR(FIND(B2,"月火木金"))),9,4),IF(B5="B",IF(NOT(ISERROR(FIND(B2,"月火木金"))),8,5),""))))

=IF(B5="●",0,IF(OR(LEN(B2)<>1,ISERROR(FIND(B2,"月火水木金土"))),"",IF(NOT(ISERROR(FIND(B2,"月火木金"))),IF(B5="",9,IF(B5="B",8,"")),IF(B5="",4,IF(B5="B",5,"")))))



また、VBAでIf文を使うと例えば
Sub Macro1()
For i = 2 To 32
  R2 = Cells(2, i).Value
  R5 = Cells(5, i).Value
  If R5 = "●" Then
    Cells(6, i) = 0
  ElseIf R5 = "B" And (R2 = "月" Or R2 = "火" Or R2 = "木" Or R2 = "金") Then
    Cells(6, i) = 8
  ElseIf R5 = "B" And (R2 = "水" Or R2 = "土") Then
    Cells(6, i) = 5
  ElseIf R5 = "" And (R2 = "月" Or R2 = "火" Or R2 = "木" Or R2 = "金") Then
    Cells(6, i) = 9
  ElseIf R5 = "" And (R2 = "水" Or R2 = "土") Then
    Cells(6, i) = 4
  End If
Next i
End Sub

Sub Macro2()
For i = 2 To 32
  R2 = Cells(3, i).Value
  R5 = Cells(5, i).Value
  If R5 = "●" Then
    Cells(6, i) = 0
  ElseIf R5 = "B" Then
    If R2 = "月" Or R2 = "火" Or R2 = "木" Or R2 = "金" Then
     Cells(6, i) = 8
    ElseIf R2 = "水" Or R2 = "土" Then
     Cells(6, i) = 5
    End If
  ElseIf R5 = "" Then
    If R2 = "月" Or R2 = "火" Or R2 = "木" Or R2 = "金" Then
     Cells(6, i) = 9
    ElseIf R2 = "水" Or R2 = "土" Then
     Cells(6, i) = 4
    End If
  End If
Next i
End Sub
> 6
| 追伸 VBAではセルの形式?ValueプロパティやTextプロパティなどを指定できますが、関数 =if() の場合Textプロパティなどの指定はできるのでしょうか?
断言は避けますが、多分できません。
ワークシート関数の IF は基本的に セルの値(VBAでのValueプロパティ) が評価対象です。
勿論、関数の戻り値も評価できますが、各プロパティを評価する関数があったかどうか……。

取り敢えず、 Is関数 というのをヘルプで調べてみてください。


--
VBAで所望の関数を作ってワークシートから呼び出す――ってやり方はありますけどね。

function wsfGetFontColorIdx(byref a_rng as range)
 
 wsfGetFontColorIdx = a_rng.Font.ColorIndex

end function

として、ワークシートに =wsfGetFontColorIdx(A1) とか書けば、セルA1のフォントの色が返ってきます。
上の関数はコメントボックスに直打ちしただけで動作確認してませんので、流用する場合は実態に合わせてください。
皆さん、大変参考になりました。ありがとうございます。

内容の理解まではできていませんが理解できるようにがんばります。
今見てみると>8のMacro2
R2 = Cells(3, i).Value は、
R2 = Cells(2, i).Value の入力ミスですね
すみません

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。