• ベストアンサー

excel マクロ 「select case」への条件盛り込み方法について

初めまして。 仕事にて、EXCELに工程遅延の原因を記入しているのですが、 同じ理由(約50種類あります)を何度も記入する必要があるため、 理由ごとに番号を割り振って、ボタン一つで記入できるようにしたいと思っています。 そこで、下記のようにマクロを作成してみたのですが、 現状では、例えばCells(1, 1)に何かを特記していた場合、 記入後にこのマクロを実行してしまうと、Cells(1, 1)の特記が、 上書きにより消えてしまいます。 そこで、Cells(num, 1)が空白であれば、Cells(num, 1)に上書きする、 という条件を付加したいのですが、可能でしょうか。 EXCELマクロの本を参考に作成しているのですが、 組み合わせの方法が分かりません。 お時間がある方いらっしゃいましたら、 ご検討よろしくお願い致します。 Sub 理由挿入() Dim num As Integer For num = 1 To 100 Select Case Cells(num, 2).Value Case 1 Cells(num, 1).Value = "理由1" Case 2 Cells(num, 1).Value = "理由2" Case 3 Cells(num, 1).Value = "理由3" Case 4 Cells(num, 1).Value = "理由4" End Select Next End Sub

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

Sub 理由挿入() Dim num As Integer For num = 1 To 100 If Cells(num, 1).Value = "" Then Select Case Cells(num, 2).Value Case 1 Cells(num, 1).Value = "理由1" Case 2 Cells(num, 1).Value = "理由2" Case 3 Cells(num, 1).Value = "理由3" Case 4 Cells(num, 1).Value = "理由4" End Select End If Next End Sub でいいんじゃないか。

wager1234
質問者

お礼

okormazd殿 ご回答くださり、ありがとうございます。 早速試してみたところ、希望通りの動きをしてくれました。

その他の回答 (3)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.4

> EXCELマクロの本を参考に作成しているのですが、 > 組み合わせの方法が分かりません。 Select Caseの中に、更にIfやSelect Caseを入れられます。 以下は、Cells(i, 1)が空白でない場合は改行をして同じセルに 追記する場合のサンプルです。 (セルに記録する値を、一旦変数で受ける形にしました) Sub 理由挿入()   Dim i As Integer, Val1 As String, Val2 As String   For i = 1 To 100     Val1 = Cells(i, 1)     Val2 = Cells(i, 2)     Select Case Val2       Case 1         'If文を入れ子にする例(1)         If Val1 = "" Then           Val1 = "理由1"         Else           Val1 = Val1 & vbCrLf & "理由1"         End If       Case 2         'If文を入れ子にする例(2)         If Val1 = "" Then Val1 = "理由2" & Val1 = Val1 & vbCrLf & "理由2"       Case 3         'IIF関数を使用する例         Val1 = IIF(Val1 = "", "", Val1 & vbCrLf) & "理由3"       Case 4         'Select Case を入れ子にする例         Select Case Val1           Case ""             Val1 = "理由4"           Case Else             Val1 = Val1 & vbCrLf & "理由4"         End Select     End Select     '変数に記録した値でセルを上書き     Cells(i, 1) = Val1   Next End Sub

wager1234
質問者

お礼

DexMachina殿 ご回答ありがとうございます。 無事、ファイルを作成することができました。 丁寧にご記入くださったのに、ポイントを差し上げることができず、 申し訳ございません。

  • freetaka
  • ベストアンサー率53% (106/197)
回答No.3

うぎゃ・・・End Ifの位置をまちがった^-^; Sub 理由挿入() Dim num As Integer For num = 1 To 100 If Cells(num,1) = "" Then Select Case Cells(num, 2).Value Case 1 Cells(num, 1).Value = "理由1" Case 2 Cells(num, 1).Value = "理由2" Case 3 Cells(num, 1).Value = "理由3" Case 4 Cells(num, 1).Value = "理由4" End Select End If Next End Sub

wager1234
質問者

お礼

freetaka殿 ご回答、ありがとうございます。 なんとかファイルを作り直すことができました。

  • freetaka
  • ベストアンサー率53% (106/197)
回答No.2

IF文で空白の時だけSelect文を実行するようにすれば 処理可能です Sub 理由挿入() Dim num As Integer For num = 1 To 100 If Cells(num,1) = "" Then Select Case Cells(num, 2).Value Case 1 Cells(num, 1).Value = "理由1" Case 2 Cells(num, 1).Value = "理由2" Case 3 Cells(num, 1).Value = "理由3" Case 4 Cells(num, 1).Value = "理由4" End Select Next End If End Sub

関連するQ&A

  • エクセル 条件に合わせてマクロを停止させたい

    VBA初心者です。よろしくお願いします。 Sub テスト1() Select Case Cells(ActiveCell.Row, "a").Value Case "○" テスト2 Case "×" ここでマクロを停止させたい End Select End Sub これをループさせているのですが、”a”に”×”がきたときにマクロを停止させる記述方法はありますか?

  • エクセル マクロ CASEの使い方

    超初心者です。よろしくお願いします。 以前にこのような使い方を教わりました。 Sub test1() Select Case Cells(ActiveCell.Row, "b").Value Case "夏" test2 Case "冬" test3 End Select End Sub 夏と冬で条件を分けているのですが、これを変えて Cells(ActiveCell.Row, "b").Value が空白じゃないときにtest2を実行して空白のときにtest3を実行するためにはどのように書いたら良いですか?

  • Select Case について

    Sub dummy() Dim Dummy As Worksheet Dim SheetName As String Dim i As Integer Dim GEN As Long Dim OTA As Long With Sheets("入力") '3行目~22行目まで For i = 3 To 22 SheetName = Sheets("入力").Range("D3").Value On Error Resume Next Set Dummy = Sheets(SheetName) 'もしシートがあれば・・・ If Err.Number = 0 Then Select Case .Cells(i, 14).Value Case "TK-001" OTA = Sheets("TK-001").Range("B65536").End(xlUp).Row + 1 Sheets("TK-001").Range("B" & OTA).Value = .Cells(i, "H").Value Sheets("TK-001").Range("I" & OTA).Value = .Cells(i, "I").Value Sheets("TK-001").Range("F" & OTA).Value = .Cells(i, "K").Value Sheets("TK-001").Range("G" & OTA).Value = .Cells(i, "L").Value Sheets("TK-001").Range("J" & OTA).Value = .Cells(i, "M").Value End Select 'シートが無ければ・・・ Else '原紙をコピーする Sheets("原紙").Copy BEFORE:=Sheets(1) 'シートの名前を市場コードにする Sheets(1).Name = SheetName End If Next End With On Error GoTo 0 End Sub 上記の通りマクロを組みましたが、以下の事を行うのに悩んでいます。 (1)Select Case が100通りあるのですが、全てCaseを入れるのではなく  もっと簡単な方法はありますか?  ※『リスト』シートを作っており、B1~B100までcaseになるコードが入力されています。  例:   B    1  TK-001    2  TK-002    3  TK-003        ・        ・        ・   100   TK-100 というシートを作っています。 (2)今のマクロではどんな値でもシートがなければシートを作ってしまう状態ですが、  もし『リスト』シートの中に値があればシートを作る、無ければ作らないというマクロは可能ですか  

  • マクロが実行しない

     二行三列を一枡として月の勤務割表を作成しています。マクロで同じ事を しているのにMacro1の方が実行しません。お教え願えませんでしょうか。 (尚、図形を枠線上にコピペしています。) Sub Macro1()実行しません。 Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 10 To 103 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste End Select Next Next End Sub Sub Macro2()実行します。 ActiveSheet.Shapes.Range(Array("四角形1")).Select Selection.Copy Range("J11:K11").Select ActiveSheet.Paste End Sub

  • エクセルのマクロでの質問です

    エクセルのマクロでの質問です。 やりたいことは、 明細シートから、「1.3.5」の条件に合うものを実績シートの最終行にコピーして追加していきたいんです。 これだと、実績シートの最終行にはコピーされるんですが 最終行に全部が上書きコピーされる状態になってしまってます。 どう直せば、追加される形になりますか? Sub コピー() '1,3,5のものを実績にコピーする i = 5 J = Sheets("実績").Cells(Rows.Count, 4).End(xlUp).Row + 1 Sheets("明細").Select Do While Cells(i, 8).Value <> "" If Cells(i, 3).Value = 1 Or Cells(i, 3) = 3 Or Cells(i, 3) = 5 Then Range("D5", "H5").Copy Sheets("実績").Select Range("C" & J).PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End If i = i + 1 Loop End Sub まったくのマクロ初心者です。 分かりやすく教えていただけると、助かります。 また、参考になりそうなサイトなどがあったら、教えてください。

  • エクセル マクロ:文字変更

    教えてください。 sheet5にデータがあります。 マクロを実行すると、一番右の列のセルに○があると●と書き換える 一番右の列のセルに△があると▲と書き換えるコードを作成しています。 下記のコードでは時間がかかってしまいます。 省略 If Sheets("sheet5").Cells(r, cmax).Value = "○" Then Sheets("sheet5").Cells(r, cmax).Value = "●" 省略 AutoFilterを使用してマクロを作成しましたが、列に○と△が両方無いと 範囲指定したセルがすべて▲となってしまいます。 下記コードをどのように手直ししたらよいのか教えて頂けないでしょうか。 よろしくお願いします。 Sub 文字変更() Dim c As Integer Dim cmax As Integer Dim rmax As Long With Sheets("sheet5") rmax = .Range("A3").End(xlDown).Row cmax = .Range("A3").End(xlToRight).Column .Rows("1:1").Select Selection.AutoFilter For c = 2 To cmax Selection.AutoFilter Field:=c, Criteria1:="○" .Cells(1, c).Offset(1, 0).Select .Range(Selection, Cells(rmax, c)).Value = "●" Selection.AutoFilter Field:=c, Criteria1:="△" .Cells(1, c).Offset(1, 0).Select .Range(Selection, Cells(rmax, c)).Value = "▲" Selection.AutoFilter Field:=c Next c End With Selection.AutoFilter End Sub

  • エクセルの select case文

    Dim i For i = 1 To 5 Select Case Cells(i, "A") Case "午前" Range("w1").Select Selection.Copy  Cells(i, "C").Select ActiveSheet.Paste Case "午後" Range("x1").Select Selection.Copy Cells(i, "d").Select ActiveSheet.Paste  End Select Next i Dim j For j = 1 To 5 Select Case Cells(j, "A") Case "関東" Range("y1").Select Selection.Copy  Cells(j, "e").Select ActiveSheet.Paste Case "関西" Range("z1").Select Selection.Copy Cells(i, "F").Select ActiveSheet.Paste  End Select Next i 毎回皆様にはお世話になっています。 あるセルを参照してその入力結果により 違うセルを貼り付けるマクロを組みました。 参照するセルが複数個(この例だと2セル)あるので それぞれに変数を宣言してfor nextで まわしています。 この内容を変数ひとつだけで すっきりと記述することは可能でしょうか? 参照するセルや判別する内容が増えると 記述が膨大になって マクロが 見にくくなるので 良い方法がありましたら 御教授ねがいます。

  • EXCELマクロの話ですが

    EXCELマクロの話ですが マクロでcellに以下のようなものを書き出したいとします。 TOM-001,TOM-002,TOM-003・・・TOM-010,TOM-011 と続くようなものを作りたいとおもい以下のようなマクロを組んでみたが・・・ sub tom()  Dim i As Integer  For i = 0 To 11   cells(i + 1,1).value = "TOM-" & i + 1  Next i end sub 当然のことながら・・・ TOM-1,TOM-2,TOM-3・・・TOM-10,TOM-11 どのようにしたら 最初に描いた『TOM-000』のようなものになるだろうか?

  • EXCELマクロでシート作成&シート名をつける方法

    EXCELでセルK列に入力した名称でシートをどんどん作成したいのですが、 下記のようにやってみましたが、うまく実行されません。 2回目の←の部分で、終わってしまいます。 詳しい方、教えてください。 Sub Macro3() Dim neSheet As String Dim fMax As Integer Dim num As Integer Dim i As Integer fMax = Range("B2").Value num = 2 For i = 1 To fMax neSheet = Range("k" & num).Value Worksheets.Add(After:=Worksheets(1)).Name = neSheet ← num = num + 1 Next i End Sub

  • Select Case の条件式

    VBAの初心者です。 家計簿の品目に対して値段を自動で入力したいです。 以下のように、Select Case の条件式の指定方法で、 列に入力された文字列の条件に対して、 自動でとなりのセルに入力したいのですが解らなくて困っております。 Sub TEST() ' A列セルの条件(文字列)でとなりのセルに文字列を入れたい Select Case Range("A1").Value 'A1をどうすればいいのでしょうか。 Case "a": Range("列のセルのとなりに入力したい").Value = "リンゴ" Case "o": Range("列のセルのとなりに入力したい").Value = "オレンジ" Case "b": Range("列のセルのとなりに入力したい").Value = "バナナ" Case Else: Range("列のセルのとなりに入力したい").Value = "error" End Select End Sub ご存じの方がおられましたら教えていただけませんでしょうか。 よろしくお願いします。

専門家に質問してみよう