• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロ。セルの値により複数条件分岐を)

エクセルのマクロで複数条件分岐を自動化する方法

このQ&Aのポイント
  • エクセルのマクロを使用して、セルの値に基づいて複数条件分岐を自動化する方法をご紹介します。
  • セルの内容に応じて、特定の値を別のセルに自動的に入力することができます。
  • これにより、手作業で値を入力する手間を省くことができます。また、マクロを使って自動化することで、条件が増えてもコードの追加を行うだけで対応できます。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 次の様にされては如何でしょうか。 Sub 科目自動入力() Dim a As Long, myArray As Variant, i As Long myArray = Array("売上", 700, "切手", 756, "レター", 756, "残業", 746, "食事", 746, "旅費", 755, "交通費", 755) a = 6 '内容が空白になるまで繰り返す Do Until Cells(a, 4).Value = "" For i = 0 To UBound(myArray) - 1 Step 2 If Cells(a, 4).Value Like "*" & myArray(i) & "*" Then Cells(a, 7).Value = myArray(i + 1) Next i a = a + 1 Loop End Sub

ennkai
質問者

お礼

ご回答ありがとうございました、 配列を使った方法 とっても参考になりました。

その他の回答 (4)

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.5

項目が後から増えたり減ったりするなら、項目とデータを一覧にしてその一覧を参照するようにした方がいいです。 以下のサンプルではJ4:K20を一覧として使用する例です。 Sub Sample()    Dim a As Integer    a = 6    aList = Range("J4:K20")        '内容が空白になるまで繰り返す    Do Until Cells(a, 4).Value = ""       '一覧に空白が出るか、一致する項目があるまで繰り返す       For i = 1 To UBound(aList)          If aList(i, 1) = "" Then Exit For          If Cells(a, 4).Value Like "*" & aList(i, 1) & "*" Then             Cells(a, 7).Value = aList(i, 2)             Exit For          End If       Next i       a = a + 1    Loop End Sub

ennkai
質問者

お礼

ありがとうございます、 シートに項目とデータを書いておけば 今後の更新においてマクロを書き換えなくても すむのですね 勉強になりました

  • f272
  • ベストアンサー率46% (8467/18128)
回答No.4

こんな感じでどうでしょう。 Sub hogehoge() With Range("D6", Range("D" & Rows.Count).End(xlUp)).Offset(, 3) .Formula = "=LOOKUP(0,0/FIND($A$6:$A$12,D6),$B$6:$B$12)" End With End Sub A列とB列の6行目から12行目には 売上 700 切手 756 レター 756 残業 746 食事 746 旅費 755 交通費 755 が書かれていることが前提です。

ennkai
質問者

お礼

ありがとうございます VLOOKUPとマクロを組み合わせての方法 勉強になりました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

Sub 科目自動入力() Dim a As Integer Dim x As Integer a = 6 '内容が空白になるまで繰り返す Do Until Cells(a, 4).Value = "" x = 0 Select Case Cells(a, 4).Value Case is like "*売上*" x = 700 Case is like "*切手*" x = 756 Case is like "*レター*" x = 756 Case is like "*残業*" x = 746 Case is like "*食事*" x = 746 Case is like "*旅費*" x = 755 Case is like "*交通費*" x = 755 End Select Cells(a, 7).Value = x a = a + 1 Loop End Sub

ennkai
質問者

お礼

ご回答ありがとうございます、 未熟なせいか ためしてみてうまくつかいこなせませんでしたが 勉強していきたいとおもいます

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは スマートかどうかは別として、こんな感じで、 Sub test1()   With Range("D6", Range("D" & Rows.Count).End(xlUp)).Offset(, 3)     .Formula = "=IF(ISERROR(FIND(""売上"",$D6,1))," & _           "IF(ISERROR(FIND(""切手"",$D6,1))," & _           "IF(ISERROR(FIND(""レター"",$D6,1))," & _           "IF(ISERROR(FIND(""残業"",$D6,1))," & _           "IF(ISERROR(FIND(""食事"",$D6,1))," & _           "IF(ISERROR(FIND(""旅費"",$D6,1))," & _           "IF(ISERROR(FIND(""交通費"",$D6,1))," & _           "0," & _           "755)," & _           "755)," & _           "746)," & _           "746)," & _           "756)," & _           "756)," & _           "700)"     .Value = .Value   End With End Sub Sub test2()   Dim v(1 To 7, 1 To 2)   Dim r As Range   Dim i As Long   Dim j As Long   Dim d As Range   Dim g As Variant   v(1, 1) = "売上":  v(1, 2) = 700   v(2, 1) = "切手":  v(2, 2) = 756   v(3, 1) = "レター": v(3, 2) = 756   v(4, 1) = "残業":  v(4, 2) = 746   v(5, 1) = "食事":  v(5, 2) = 746   v(6, 1) = "旅費":  v(6, 2) = 755   v(7, 1) = "交通費": v(7, 2) = 755   Set d = Range("D6", Range("D" & Rows.Count).End(xlUp))   g = d.Offset(, 3).Value   For Each r In d     j = j + 1     For i = 1 To UBound(v, 1)       If InStr(1, r.Value, v(i, 1)) > 0 Then         g(j, 1) = v(i, 2)         Exit For       End If     Next   Next   d.Offset(, 3).Value = g End Sub 2番目のコードの変数vは書き方を変えて、セル上のデータをセットする事も 出来ます。 条件が増えた場合にコードを修正するか、セル上にセットした条件を追加するか どちらがいいかによります。

ennkai
質問者

お礼

2種類も回答を下さってありがとうございます。 両方とも今後の参考にさせてください。