• 締切済み

【至急助けて下さい!!】VBAでのIF関数挿入

VBA初心者です。上級者の方助けてください。 VBAで入力セルを消去後、IF関数をN列に挿入したいです。 挿入したいIF関数のところが解決できればあとの記述はなんとかなります。 ■挿入したいIF関数 =IF(M4=$Y$5,$Z$9,IF(M4=$Y$6,$Z$9,IF(M4=$Y$7,$Z$9,IF(M4=$Y$8,$Z$6,IF(M4=$Y$9,$Z$10,IF(M4=$Y$10,$Z$9,IF(M4=$Y$14,$Z$7,IF(M4=$Y$15,$Z$8,"")))))))) 他関数は下記構文でうまくいくのですが、 IF関数はどのように記述したらよろしいでしょうか。 ■他 ws.Cells(i, jig_col).Value = "=VLOOKUP(F" & i & ",Sheet1!$A$2:$C$358,2,0)" ■現在の記述 Dim ws As Worksheet Dim endrow As Long Dim endcol As Long Dim you_col As Integer Dim gak_col As Integer Dim jig_col As Integer Dim bc_col As Integer Dim chg_col As Integer Dim i As Long '確認メッセージを表示し、「NO」の場合は処理を行わない If MsgBox("入力されている内容をクリアします。よろしいですか?", vbYesNo) = vbNo Then Exit Sub End If '画面の更新を行わない Application.ScreenUpdating = False Set ws = ThisWorkbook.Sheets("シンフォームイレギュラー運用状況") '呼び出し元シートの最終行、最終列を取得する endrow = ws.Cells(ws.Rows.Count, 6).End(xlUp).Row endcol = ws.Cells.Find(What:="変更フラグ", LookIn:=xlValues, LookAt:=xlWhole).Column - 2 If endrow < 4 Then Exit Sub ws.Range(ws.Cells(4, 1), ws.Cells(endrow, endcol)).ClearContents you_col = ws.Cells.Find(What:="曜日", LookIn:=xlValues, LookAt:=xlWhole).Column gak_col = ws.Cells.Find(What:="学年", LookIn:=xlValues, LookAt:=xlWhole).Column jig_col = ws.Cells.Find(What:="事業所", LookIn:=xlValues, LookAt:=xlWhole).Column 'bc_col = endcol - 1 'chg_col = endcol For i = 4 To endrow ws.Cells(i, you_col).Value = "=B" & i ws.Cells(i, gak_col).Value = "=VLOOKUP(F" & i & ",Sheet1!$A$2:$C$358,3,0)" ws.Cells(i, jig_col).Value = "=VLOOKUP(F" & i & ",Sheet1!$A$2:$C$358,2,0)" 'ws.Cells(i, bc_col).Value = "=IFERROR(MID(H" & i & ",LEN(H" & i & ")-1,1), "")" 'ws.Cells(i, chg_col).Value = 0 ws.Range("W" & i).Value = 0 Next '画面の更新を行う Application.ScreenUpdating = True End Sub

みんなの回答

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

こんばんは! わざわざVBAでワークシート関数を入力させるより 数式が完成しているのであれば そのままセルに数式を入れてはダメなのですか? 数式を拝見すると絶対参照になっているので、おそらくオートフィルでコピーしたいのですかね? 数式はほんのわずかですが、簡単にできると思います。 =IF(OR(M4=$Y$5,M4=$Y$6,M4=$Y$7,M4=$Y$10),$Z$9,IF(M4=$Y$8,$Z$6,IF(M4=$Y$9,$Z$10,IF(M4=$Y$14,$Z$7,IF(M4=$Y$15,$Z$8,""))))) といった感じでしょうか? 他の回答者様が回答されていらっしゃる通りで、上記数式をコードに組み込みたい場合は 「空白」部分はダブルクォーテーションを4個続けます。 どうしてもVBAで!というご希望であれば、IF関数部分だけは Select Case Range("M4") Case Range("Y5") N列セル = Range("Z9") Case Range("Y6") N列セル = Range("Z9") Case Range("Y7") N列セル = Range("Z9") Case Range("Y10") N列セル = Range("Z9") Case Range("Y8") N列セル = Range("Z6") Case Range("Y9") N列セル = Range("Z10") Case Range("Y14") N列セル = Range("Z7") Case Range("Y15") N列セル = Range("Z8") Case Else N列セル = "" End Select といった具合でもOKだと思います。 おそらくこれをループさせることになるかと・・・ ※ 「N列セル」とは数式を入れたいセル番地とします。m(_ _)m

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.2

挿入したいIF関数の中に""が含まれているので、単に両サイドを""で囲むだけではうまく行かないのだと思います。 "=IF(M4=$Y$5,$Z$9,IF(M4=$Y$6,$Z$9,IF(M4=$Y$7,$Z$9,IF(M4=$Y$8,$Z$6,IF(M4=$Y$9,$Z$10,IF(M4=$Y$10,$Z$9,IF(M4=$Y$14,$Z$7,IF(M4=$Y$15,$Z$8," & """""" & "))))))))" のようにしてみてください。

回答No.1

「■現在の記述」以下は見てない。関係ないから。なお、Ifも関係ない。 あなたが失敗しているのはダブルクォートの扱いです。 文字列の中でダブルクォートをあらわす場合は「""」としなければなりません。じゃないと区切りと区別がつかないでしょう? IF(M4=$Y$5,$Z$9,IF(M4=$Y$6,$Z$9,IF(M4=$Y$7,$Z$9,IF(M4=$Y$8,$Z$6,IF(M4=$Y$9,$Z$10,IF(M4=$Y$10,$Z$9,IF(M4=$Y$14,$Z$7,IF(M4=$Y$15,$Z$8,"")))))))) ↓ "=IF(M4=$Y$5,$Z$9,IF(M4=$Y$6,$Z$9,IF(M4=$Y$7,$Z$9,IF(M4=$Y$8,$Z$6,IF(M4=$Y$9,$Z$10,IF(M4=$Y$10,$Z$9,IF(M4=$Y$14,$Z$7,IF(M4=$Y$15,$Z$8,""""))))))))" ' どうでもいいけど、そんなに大量の関数を配置するくらいなら ' マクロ内でそのまま計算しちゃうほうがいいんじゃないのかなあ…… ' シートの運用を知らんから余計なお世話かもしれないけど