エクセルマクロ if文を繰り返したい

このQ&Aのポイント
  • マクロ初心者です。以下のようなマクロを作ったのですが、これをE34まで繰り返しの処理をしたいです。どこにどんな文章を挟んでいいのかわかりません。
  • エクセルマクロ初心者が、特定条件によって条件分岐をするマクロを作成しました。しかし、この処理をE34まで繰り返す方法がわかりません。どこにどのようなコードを挿入すれば良いのか教えてください。
  • エクセルマクロの初心者ですが、特定の条件に基づいて処理を分岐させるマクロを作成しました。しかし、この処理をE34まで繰り返す方法が分かりません。どのようにコードを修正すれば良いのでしょうか?
回答を見る
  • ベストアンサー

エクセルマクロ if文を繰り返したい

マクロ初心者です。 以下のようなマクロを作ったのですが、 これをE34まで繰り返しの処理をしたいです。 どこにどんな文章を挟んでいいのかわかりません。 Sub けいさん() If Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "A" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "B" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "D" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("C22") = "" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" Else Workbooks("日報.xls").Worksheets("お手本").Range("C22").Copy Workbooks("test.xls").Worksheets("II-1(1)").Range("E11").PasteSpecial End If End Sub

  • yesQP
  • お礼率84% (149/177)

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

  • ベストアンサー
  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.1

どのように繰り返すのかが情報不足ですね。 O22とE11を上記マクロの通り処理したら、次はO23とE12という形でよいのでしょうか? この場合の繰り返しはForを使うのが一番良いです。 またセル参照はA1参照ではなく、Cells(行数,列数)のようにCellsプロパティを使った参照の方がよいですね。 例えば上記をO22~O45、E11~E34まで繰り返したいという場合は For n = 0 To 23 If Workbooks("日報.xls").Worksheets("お手本").Cells(22 + n, 15) = "A" Then Workbooks("test.xls").Worksheets("II-1(1)").Cells(11 + n, 5) = "" ~ End If Next のように「Range("O22")」の部分は「Cells(22 + n, 15)」(15はO列の意味、左から15列目なので)に 「Range("E11")」の部分は「Cells(11 + n, 5)」にすると良いです。 For処理でnには0~23を代入しながら繰り返し処理するので、各行ずつ処理してくれるようになります。

yesQP
質問者

お礼

ありがとうございます。 すいません、おっしゃるとおり、次はO23とE12という形で最終的にO45とE34まで繰り返し、という意味です。 いろいろ調べたときに確かにcellsが出ていたのですが、イマイチ良く分からず、今ようやく分かりました。 試してみます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

こういうコードを書いたあとで、何をしたいのか、文章で書いてみること。 >E34まで繰り返しの処理をしたいです では良くわからない。 -- コードがあまりにも見慣れたものと違い、初心者という感じ。 O22セルがA,B、DならE11を空白にするなら .Rnge("O22") = "A" Or .ange("O22") = "B" Or Range("O22") = "D" Then ・・・ とOrを使う ーー または Select Case .Range("O22") Case "A" ・・ Case "B" ・・ とする。 ーーー Workbooks("日報.xls").Worksheets("お手本").の部分はしつこいので With Workbooks("日報.xls").Worksheets("お手本") .Range("O22")=・・ End With などとする。 または Set Sh1=Workbooks("日報.xls").Worksheets("お手本") Sh1.Range("O22")=・・ などとする。 ーーー 初心者はなるべくCopyを使わず、代入で済ます。(書式まで問題にしてない場合) -------- >E34まで繰り返しの処理をしたいです セルは質問のコードで何箇所も出てきている。 どこを繰り返すのですか。 初心者らしく、質問もあいまい。

yesQP
質問者

お礼

ありがとうございます。Orが使えるなんてことももちろん知りません。 参考になります。 やりたいのはひとつの日報から4つの他のシートに反映させたいのですが、その分け方がO22セルに入れているA~Dのアルファベットなのです。 test.xlsは"C"の日報を抜粋したいのです。 そして、もし”C”であれば、お手本シートのC22をtest.xlsのII-1(1)シートのE11にコピペ、以下それをC23 C24・・・と繰り返しみて、指定のセルまでで処理を止めたいのです。 本当に初心者丸出しですいません。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

"お手本"シートのセルとしてO22が3回、C22が2回出てきますが、これは全部O22の間違いですか?それとも、C22が2回出てくるのは正しいのでしょうか?

yesQP
質問者

お礼

ありがとうございます。 はい、おっしゃるとおり、間違えです。 やりたいのはひとつの日報から4つの他のシートに反映させたいのですが、その分け方がO22セルに入れているA~Dのアルファベットなのです。 test.xlsは"C"の日報を抜粋したいのです。 そして、もし”C”であれば、お手本シートのC22をtest.xlsのII-1(1)シートのE11にコピペして、以下それをC23 C24・・・と繰り返しみて、指定のセルまでで処理を止めたいのです。 本当に初心者丸出しですいません。

関連するQ&A

  • マクロ

    いつも参考にさせていただいています。初歩的すぎてとは思いますが 宜しくお願いします。 Sub ブック2() Workbooks("頭取用紙200808.xls").Worksheets("データ").Range("a1:ac32").Copy _ Workbooks("日報200808.xls").Worksheets("1").Range("a40") End Sub 上記のように組んで、月が変わりとブック名も頭取用紙200809.xlsと 日報200809.xlsに変更したらマクロが使えなくなりました。当然なの でしょうが、記述も変更するしかないでしょうか? Worksheetsは30(1か月分)あります。どうしてもわかりません。 宜しくお願いします。

  • EXCEL マクロ 

    お世話になります。 マクロは初心者です。 セルの数値を参照して、シートをアクティブにしたいのですが 下記のような繰り返しでシートが30ぐらいあるので、簡単な 表現に出来ないでしょうか。 宜しくお願いします。 Private Sub Workbook_Open() If 0 <= Worksheets(4).Range("M1") < 7 Then Worksheets(4).Activate End If If 0 <= Worksheets(5).Range("M1") < 7 Then Worksheets(5).Activate End If If 0 <= Worksheets(6).Range("M1") < 7 Then Worksheets(6).Activate End If If 0 <= Worksheets(7).Range("M1") < 7 Then Worksheets(7).Activate End If If 0 <= Worksheets(8).Range("M1") < 7 Then Worksheets(8).Activate End If If 0 <= Worksheets(9).Range("M1") < 7 Then Worksheets(9).Activate End If End Sub

  • マクロif文での条件式について

    マクロ初心者です。Excel2003を使用しています。 仕事上で使用しているエクセル表より、ある値以上の項目を抽出し、その値を用いて計算結果を出すためのマクロを作成いたしました。いろいろなサイトを参考にして自分なりに書いてみたのですが、どうしてもうまくいきません。 表は簡単なもので、以下のようなものです。 1 9 2 24 3 45 4 67 1列目は使用濃度、2列目は測定値です。この測定値が30より大になった項目を抽出し、計算式にその値を代入し計算結果として出したいのです。また、全ての測定値が30以下だった場合は、計算結果の欄に”<30”とのように表示をさせたいと考えています。 以下のようにマクロを書いてみました。 Sub Macro1() For i = 1 to 4 if Worksheets("sheet1").cells(i , 2).value <=30 then Range("A5")=0 '測定値が=<30だった場合は計算をしないので、フラグとして値を入力 Elseif Worksheets("sheet1").cells(i , 2).value > 30 then Range("A5")=Cells(i , 1) Range("B5")=Cells(i , 2) Exit for Endif if Worksheets("sheet1").Range("A5").value > 0 then Range("A6").Formula ="=(50-B5) / A5" Elseif Worksheets("sheet1").Range("A5").value = 0 then Range("A6") ="<30" Else Endif Next i End Sub >30だった項目の抽出まではできたのですが、計算値をだすところがどうしてもうまくいかず、A6セルにはどんな値でも”<30”と入力されてしまいます。 マクロの基本的なルールなどがまだまだ未熟なので、基本的な構文も書けていないと思います。 全然方向性が違うかもしれないので、そういった点も含めてご教示いただけたら幸いです。 分かりにくいかもしれませんが、どうぞよろしくお願いいたします。

  • excelのマクロでrangeの選択がうまくいきません。

    excelのマクロでrangeの選択がうまくいきません。 以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。 Sub testcopy() Worksheets("sheet1").Range("B3:C10").Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub Sub testcopy2() Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub

  • エクセル2007のマクロについて

    実践で学ぶ Office Excel 2007 VBAというマクロの学習サイトで Sub Macro実践1() 'ブック シート セルアドレスを指定すればブック シートをアクティブにする必要はない             Workbooks("転記.xlsx").Worksheets("転記シート1").Range("A1").Value = _               Workbooks("データ.xlsx").Worksheets("データ1").Range("A1").Value                 End Sub         と入力すると「インデックスが有効範囲にありません」となってしまいます。なにか間違っているのでしょうか?

  • マクロ EXCELの範囲をコピーして貼付け

    『End(xlDown).Row』で取得した値を使ってセルの範囲指定&コピーを行い、 新しく追加したシートに貼り付けたいのですがうまくいきません。 Sub attendanceJoin() Dim MaxRow As Integer 'シートの最終行の値 Workbooks("test.xls").Activate Dim NewWorkSheet As Worksheet Set NewWorkSheet = Worksheets.Add() '新しいシートを追加する MaxRow = Worksheets(2).Range("M1").End(xlDown).Row  'A列の最終行を取得 NewWorkSheet.Name = "統合"  '新しく追加したシートの名前を変更 With Workbooks("test.xls") .Worksheets(2).Range("A1:M&MaxRow").Copy   'コピーするセルの範囲を指定    '↑ここでエラー。.Worksheets(2).Range("A1:M38").Copy を指定するイメージです。 .Worksheets("統合").Range("A1").PasteSpecial End With End Sub どなたか間違っている箇所のご教示お願い出来ますでしょうか。 どうぞよろしくお願い致します。

  • エクセルマクロ文を 教えてください

    お世話になります。 下記マクロ文で各シ-トのV4セル或いはW4セル or X4セルの値が増減値と表示されている場合には、当該シ-トは当該セル列と前2列の幅を0にする目的で記載したのですが、ステップインでは全く処理を行っていない形となっております。 初心者のため教則本を横に置いて作成したのですが所与目的を達成させる正しいマクロ文を お教えいただけますよう御願いいたします。 Application.ScreenUpdating = False Worksheets("表紙").Visible = True Worksheets("表紙").Select Dim sht As Worksheet For Each sht In Worksheets Range("V4").Select If Range("V4").Value = "増減値" Then Range("T4:V4").ColumnWidth = 0 End If If Range("W4").Value = "増減値" Then Range("U4:W4").ColumnWidth = 0 End If Range("X4").Select If Range("X4").Value = "増減値" Then Range("V4:X4").ColumnWidth = 0 End If Next Worksheets("表紙").Activate Worksheets("表紙").Select Range("A1").Select Application.EnableEvents = True Application.Interactive = True Application.ScreenUpdating = True End Sub

  • VBA初心者です。値を貼り付け について質問です。

    VBA初心者です。 値を貼り付け について教えてください。 Sub test() With Workbooks("A.xls").Worksheets("sheet1") .Range("A1").Copy Workbooks("Bxls").Worksheets("sheet1").Range("B2") .Range("A2").Copy Workbooks("B.xls").Worksheets("sheet1").Range("B4") End With End Sub コピーする方に計算式が入っているので 値を貼り付け したいのですが、どうすればいいのでしょうか? PasteSpecial Paste:=xlPasteValues を使ったらよいというところまではわかったのですが・・・。 教えてください!よろしくお願いします!

  • Excelマクロの命令文を教えてください。

    EXCEL2002です。現在Access2002に簡単なマクロを作りAccessよりExcelで作った000.xlsを開いてます。その000.xlsに下記のようなマクロを入れて実行し目的を果たしています。 Sub LROpen() ChDir "D:\EXCEL\LRTotal" myfile = Application.GetOpenFilename Workbooks.Open Filename:=myfile End Sub 本当はAccessからいっぺんに上記マクロのEND SUBまで行きたい所ですが私の力では無理なのでこのように段階的になってます。質問はこの上記マクロが張ってある000.xlsが開いたとき自動的にマクロが実行される様にする方法があるかお尋ねする次第です。宜しくお願いします。

  • エクセルのマクロを教えてください。

    マクロの初心者です。 特に変数が全く使えず、下記もどのように記載していいのかわからないため教えていただけないでしょうか。 ユーザーフォームのtextbox2に開始番号があります。 textbox3に本数があります。 sheet1のB12セルには開始番号が入ります。 開始番号から本数分+1したものを順番にセルに入っていくようにしたいです。 ただ、入れたいセルが横→左下(開始番号の列)→横→左下(開始番号の列)・・・としたいため、どのように書いていいのかわかりません。 地道に書くのであれば、下記のようになると思うのですが、変数を使って書く場合はどのようになるのか教えていただけないでしょうか。 Worksheets("Sheet1").Range("B12").Value = TextBox2.Value If TextBox3.Value = 2 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 ElseIf TextBox3.Value = 3 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 ElseIf TextBox3.Value = 4 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 ElseIf TextBox3.Value = 5 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 Worksheets("Sheet1").Range("B14").Value = TextBox2.Value * 1 + 4 ・ ・ ・ End If

専門家に質問してみよう