• ベストアンサー

VBAでIF文を作成したが、もう少しまとめたい。

以下のようなVBAを作成しました。 動作に問題はないのですが、 もっと簡単にまとめることができる気がしますが、うまくできません。 何かやりかたはあるのでしょうか。 宜しくお願い致します。 If Cells(5, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(5, 1) End If If Cells(6, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(6, 1) End If If Cells(7, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(7, 1) End If If Cells(8, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(8, 1) End If If Cells(9, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(9, 1) End If If Cells(10, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(10, 1) End If

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

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.3

訂正します for col = 1 to 10 If Cells(col, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(col, 1) End If next col なんてのはいかがでしょうか?

smorgas030
質問者

お礼

回答ありがとうございます。 FOR文を使えばいいのですね。 問題なく修正することができました。 ありがとうございました。

その他の回答 (3)

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.4

------------------------------------------------------- If Not (Range("A5:A10").Find(Cells(1, 1), LookAt:=xlWhole) Is Nothing) Then Cells(100, 100) = Cells(1, 1) End If ------------------------------------------------------- とかで良いのかな・・・

smorgas030
質問者

お礼

回答ありがとうございます。 問題なく修正することができました。 ありがとうございました。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

for col = 1 to 10 If Cells(col, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(col, 1) End If なんてのはいかがでしょうか?

noname#42041
noname#42041
回答No.1

Select Case を使ってみてはいかがでしょうか?

関連するQ&A

  • エクセルVBAのIf ~ Thenステートメントで

    予約フォームの作成に挑戦しています。 予約日が2022年8月1日の時のみ、シート4に結果を記入して行きたいのですが、 Private Sub CommandButton1_Click() If ListBox1.Text = "44774" Then Sheet4.Select Range("C2").End(xlDown).Offset(1, 0).Select ActiveCell.Value = Reservationform.ListBox2.Value ActiveCell.Offset(0, 1).Value = Reservationform.ListBox3.Value ActiveCell.Offset(0, 2).Value = Reservationform.ListBox4.Value ActiveCell.Offset(0, 2).NumberFormat = Range("C2").NumberFormat Exit Sub End If End Sub で、とりあえず成功しています。 "44774" の部分を、"Sheet6のA2"だった時のみ結果を記入するようにしたいです。 " "の中身をそのまま変えて、 If ListBox1.Text = "sheet6.Range("A2")" Then や If ListBox1.Text = "sheet6.Cells(2, 1).Value" Then に変えてみましたがうまく行きませんでした。 どのようにしたら良いでしょうか?

  • loop終了後のセルの一個右から同様のloopを行う方法

    ・loop終了後のセルの一個右から同様のloopのプログラムを組むのが目的です。 ・データはA列にランダムに数字が入っているものとします。 ・条件式としては基準値より小さな数字が一個下のセルにあったら↓を表示して、さらに下に行くという風にして、基準よりも多くなったところでloopがストップする設定です。 ・困っているところをうまく表現できてないかも知れませんが、よろしくお願いします。 --------------------------- Sub 比較() Dim i As Integer Dim j As Integer Cells(1, 2).Select ActiveCell.FormulaR1C1 = "=IF(RC1>R1C1,""→"",""↓"")" i = 1 Do While Cells(i, 2).Value <> "" If Cells(i, 2).Value = "↓" Then Cells(1 + i, 2).Select ActiveCell.FormulaR1C1 = "=IF(RC1>R1C1,""→"",""↓"")" End If i = i + 1 Loop Cells(i - 1, 3).Select ActiveCell.FormulaR1C1 = "=IF(RC1>R" & i - 1 & "C1,""→"",""↓"")" j = 1 Do While Cells(i - 2 + j, 3).Value <> "" If Cells(i - 2 + j, 3).Value = "↓" Then Cells(i - 1 + j, 3).Select ActiveCell.FormulaR1C1 = "=IF(RC1>R" & i - 1 & "C1,""→"",""↓"")" End If j = j + 1 Loop End Sub

  • 【VBA】 IFの中にIF

    いつもこちらの識者の方々にはお世話になっています。 VBAの質問です。 やりたいことは下記構文を見ていただければわかると思うのですが、 ------------------------------------------------------------------------------ Sub Test() Dim f As Long Dim lRow As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row For f = lRow To 2 Step -1 If Cells(f, 2).Value = "りんご" Then Cells(f, 2).EntireRow.Delete Else Cells(f, 2).Value = Cells(f, 2) & "0" & Cells(f, 3) Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif End If Next f End Sub ------------------------------------------------------------------------------ Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif の部分が解決したい部分になります。 IFで条件分岐したあとの処理にさらにIFで分岐を加えたいのですが、無茶だと思いつつやってみたらやはり通りませんでした。 こういうのはなんというのでしょうか、ネストとも違うと思うのですが・・・ 上記のような場合、どのような構文が適していますでしょうか。

  • VBA の if 文の質問です

    下記のようなif文を実行したのですが Or のあとの条件が無視されてしまっているようなのですが、このような書き方ではだめなのでしょうか? else if で地道に分岐させたほうがいいのでしょうか? If Cells(1, 1).Value <> "" Or Cells(1, 2).Value <> "test" Or Cells(1,3) <> 0 Then 処理内容 End If

  • エクセル VBAで入力フォームを作成し、そのフォームで検索をしようとF

    エクセル VBAで入力フォームを作成し、そのフォームで検索をしようとFindを使って動かしたのですが、一度表示したあと、再度別の値で検索しても最初に検索したデータが表示されてしまいます。 色々調べましたが、全く分からずこちらに質問しました。VBAは全くの初心者で本やHPを見ながら作っています。勉強不足なのは承知しております。どなたかご親切な方のご指導をお待ちしています。 顧客名   ・・・・・・・・・・・ 店舗名   ・・・・・・・・・・・ 略称    ・・・・・  ←ここに入力して検索をクリックします。 ・ ・ Private Sub 検索_Click() Dim w As Variant Dim r As Range ActiveSheet.Unprotect w = 略称.Value If w = "" Then Exit Sub Set r = Cells.Find(What:=w, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByRows, MatchCase:=False _ , MatchByte:=False, SearchFormat:=False) If TypeName(r) = "Range" Then 略称.Value = Cells(ActiveCell.Row, 2).Value 顧客名.Value = Cells(ActiveCell.Row, 3).Value 店舗名.Value = Cells(ActiveCell.Row, 4).Value 締日.Value = Cells(ActiveCell.Row, 5).Value 売単価.Value = Cells(ActiveCell.Row, 6).Value サイクル.Value = Cells(ActiveCell.Row, 7).Value 郵便番号.Value = Cells(ActiveCell.Row, 8).Value 住所.Value = Cells(ActiveCell.Row, 9).Value 電話番号.Value = Cells(ActiveCell.Row, 10).Value FAX.Value = Cells(ActiveCell.Row, 11).Value 担当者.Value = Cells(ActiveCell.Row, 12).Value End If ActiveSheet.Protect End Sub

  • Excel VBAについて

    以下のコードをFor Nextでまわすには どうしたらよいでしょうか? Sub sample() Range("A2").Select ActiveCell.FormulaR1C1 = "=テスト!R[1]C" Range("A3").Select ActiveCell.FormulaR1C1 = "=テスト!R[3]C" Range("A4").Select ActiveCell.FormulaR1C1 = "=テスト!R[5]C" Range("A5").Select ActiveCell.FormulaR1C1 = "=テスト!R[7]C" Range("A6").Select ActiveCell.FormulaR1C1 = "=テスト!R[9]C" Range("A7").Select ActiveCell.FormulaR1C1 = "=テスト!R[11]C" End Sub

  • Excel、VBAのIF文で

     いつもお世話になります。 エクセルのVBAでセルF4からF65536までを選択していれば印刷して、それ以外を選択していれば「氏名セルを選択してください」と表示させたいのですが、うまくいきません。  全く構文かもしれませんが以下が作成したプロシージャです。VB初心者です。ご指導よろしくお願いします。 Sub 成績個人印刷if() If Range("f5,f65536").Activate = True Then Worksheets("個人カード").Range("a3").Value = ActiveCell.Offset(0, -4) Worksheets("個人カード").PrintOut End If MsgBox "氏名セルを選択してください" End Sub

  • VBAでVlookupを使って

    いつもお世話になっています。 VBAで現場検索登録シートと言うところに 一覧シートからVlookupを使って 表示させようと思い作りました。 エラーも何もでません。 ただ、表示されるものがちゃんと検索されるものと まったくされないものがあります。 Vlookupはマクロの記録から作ったものです。 原因がわかりません。 よろしくお願い致します。 '検索ボタン Private Sub CommandButton6_Click() '送り方 Range("C4:D4").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,22,FALSE)" Selection.Value = Selection.Value '封筒 Range("C5:D5").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,23,FALSE)" Selection.Value = Selection.Value '得意先名ふりがな Range("C6:F6").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,6,FALSE)" Selection.Value = Selection.Value '得意先名 Range("C7:F8").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,4,FALSE)" Selection.Value = Selection.Value '現場名ふりがな Range("C9:H11").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,9,FALSE)" Selection.Value = Selection.Value '現場名 Range("C10:H11").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,7,FALSE)" Selection.Value = Selection.Value End Sub エラーも何もなく、ちゃんと動くことは動きます。 検索結果が、検索コードによって違うのです。 よろしくお願い致します

  • EXCEL VBA

    EXCEL VBAで空白行が現れたら「小計」の文字を入力したいと思い以下のように記述しましたが、うまくいきません。どこがおかしいのか教えてください。 宜しくお願いします。 Sub write小計() Dim i As Integer Dim rowcnt As Integer rowcnt = Cells(1, 1).CurrentRegion.Rows.Count Range("B1").Select For i = 1 To rowcnt If Cells(i, 2).Value = "" Then Value = "小 計" ActiveCell.Offset(1).Select Next i End Sub

  • エクセルVBAで無限ループ

    教えてください。 以下の2つのエクセルマクロはまったく同じことをさせようとしているのですが、test02の方は.Offset(1).Activateが働かないのか、無限ループに陥ってしまいます。 単にActiveCell.という記述をWith~End Withでまとめただけなのになぜこうなるのでしょうか? Sub test01() ActiveSheet.Cells(1, 1).Activate Do While ActiveCell.Value <> "" If Not IsNumeric(ActiveCell.Value) Then ActiveCell.Offset(0, 1).Value = "文字" ElseIf ActiveCell.Value > 0 Then ActiveCell.Offset(0, 1).Value = "正数" ElseIf ActiveCell.Value < 0 Then ActiveCell.Offset(0, 1).Value = "負数" Else ActiveCell.Offset(0, 1).Value = "その他" End If ActiveCell.Offset(1).Activate i = i + 1 Application.StatusBar = i Loop End Sub Sub test02() ActiveSheet.Cells(1, 1).Activate With ActiveCell Do While .Value <> "" If Not IsNumeric(.Value) Then .Offset(0, 1).Value = "文字" ElseIf .Value > 0 Then .Offset(0, 1).Value = "正数" ElseIf ActiveCell.Value < 0 Then .Offset(0, 1).Value = "負数" Else .Offset(0, 1).Value = "その他" End If .Offset(1).Activate i = i + 1 Application.StatusBar = i Loop End With End Sub

専門家に質問してみよう