• 締切済み

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

noname#7476
noname#7476

みんなの回答

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

Sub test01() For i = 2 To 7 'Range("A" & i) = Worksheets("テスト").Cells((i - 2) * 2 + 1, 1) Range("A" & i) = Worksheets("テスト").Range("A" & (i - 2) * 2 + 1) Next i End Sub 1方はコメント化してありますが、2通りの書き方を上げます。 両辺にそれぞれ Range-Cells Cells-Range Range-Range Cells-Cells のどれかの書き方が出来ます。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 いちいちSelectする必要はないのでは? For i = 2 To 7   Cells(i, 1).FormulaR1C1 = "=テスト!R[" & (2 * i - 3) & "]C" Next i

関連するQ&A

  • エクセルVBAが書ける方へ

    お世話になります。 下記VBAはB19からB28までのデータをA11:12の横列に貼り付けさせる内容です。 Sub 特価() ' ' 特価 Macro ' ' Range("A11:A12").Select ActiveCell.FormulaR1C1 = "=R[8]C[1]" Range("B11:B12").Select ActiveCell.FormulaR1C1 = "=R[9]C" Range("C11:C12").Select ActiveCell.FormulaR1C1 = "=R[10]C[-1]" Range("F11:F12").Select ActiveCell.FormulaR1C1 = "=R[11]C[-4]" Range("H11:I12").Select ActiveCell.FormulaR1C1 = "=R[12]C[-6]" Range("T11:U12").Select ActiveCell.FormulaR1C1 = "=R[13]C[-18]" Range("X11:Y12").Select ActiveCell.FormulaR1C1 = "=R[14]C[-22]" Range("AD11:AE12").Select ActiveCell.FormulaR1C1 = "=R[15]C[-28]" Range("AN11:AO12").Select ActiveCell.FormulaR1C1 = "=R[16]C[-38]" Range("AW11").Select ActiveCell.FormulaR1C1 = "=R[17]C[-47]" Range("B23").Select End Sub これに下記内容を追加したいのですが教えて下さい。 ・B19からB28のデータは入力後消す。 ・貼り付けたら次に入力する時は下の行(A13:14)に貼り付ける。 ・同様にデータを消してA15:16に貼り付ける。以下、下の行に貼り付けていくようにする。 ・貼り付けたらカーソルはB19を選択した状態にする。 言葉足らずでしたら補足します。 何卒宜しくお願い致します。

  • VBAでエラーになってしまう

    初心者です。 RangeクラスのSelectメゾットが失敗しました。となります。 このコードは、マクロの記録を行い、そのコードをコマンドボタンのコードにコピーしたものです。 初心者なので、マクロの記録からやりました。 どうか、わかる方がいらっしゃいましたら、教えてください。 Private Sub CommandButton4_Click() Sheets("印刷ページ").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C6").Select ←ここが黄色くなり、エラーになります。 ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D6").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E6").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("B8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("F8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("B10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" End Sub

  • Excel VBAで表組みしたらデバック発生

    Excel VBAの初心者です。Windows Vistaで Excel2007を使っています。 表をマクロの実行で作成したいと思っています。 何もないエクセルブックより 「開発」→「マクロの記録」→「相対参照」 →「表の作成」→「記録終了」→「相対参照で記録の解除」 →「エクセルマクロ有効ブックで保存」 ところがこのマクロ記録が入ったブックを再度立ち上げ、 表をオールクリアにし、マクロボタンより表作成を実行 させようとすると、次のエラーメッセージがでました。 『実行時エラー'9' インデックスが有効範囲にありません。』 デバックからModule1をみると以下の記述となっていました。 Sub 表組み() ' ' 表組み Macro ' ' ActiveCell.Range("A1:E5").Select Selection.Copy Windows("Book1").Activate ActiveSheet.Paste ActiveCell.Columns("A:A").EntireColumn.Select ActiveCell.Rows("1:1").EntireRow.RowHeight = 11.25 ActiveCell.Rows("1:5").EntireRow.Select Selection.RowHeight = 21.75 ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 14.88 ActiveCell.Offset(0, 4).Range("A1").Select Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(1, -3).Range("A1:D4").Select Selection.NumberFormatLocal = "#,##0_ " ActiveCell.Select ActiveCell.FormulaR1C1 = "78000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "102000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9800" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "65000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "204000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "500" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "86000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "151000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10200" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, -3).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(-4, -2).Range("A1:D1").Select Selection.AutoFilter End Sub 上から9行目(?)のWindows("Book1").Activateに 黄色い矢印が示され、また行全体が黄色く四角に 覆われていました。 おそらくこの記述に問題があると思いますが、 どんな記述に変えたらいいのか分かりません。 Excel VBAにお詳しい方ご教示願います。 なお、マクロで作成したい図を添付いたします。 参考にしていただければ幸いです。

  • Excel VBA 複数のSheet の合計

    Excel VBA  超超 初心者です。見よう見まねで、複数のSheet の L11:Q1000 ,T1:AW100 セル範囲にある文字 "~" を計算できたのですが、 更に各Sheet で計算された合計をしたいのですが、さっぱり判りません。Sheet 名は、バラバラです。合計は、最初か最後のsheet のどこかのセルに表示させたいです。どなたかヒントをてください。よろしくお願いします。 Sub すべてのシートでマクロ実行() Application.ScreenUpdating = False Dim シート As Worksheet For Each シート In Worksheets シート.Select Range("H3").Select ActiveCell.FormulaR1C1 = "=COUNTIF(R[8]C[4]:R[997]C[9],""*~*"")" Range("I3").Select ActiveCell.FormulaR1C1 = "=COUNTIF(R[-2]C[11]:R[997]C[40],""*~*"")" Range("I4").Select Next Application.ScreenUpdating = True End Sub

  • エクセルxpのVBA

    VBA初心者です。下記を実行すると、「elseに対応するifがありません」と出ます。なぜかわからず困っています。 For hiniti = DateSerial(Range("A3"), Range("A4"), 21) To DateAdd("m", 1, DateSerial(Range("A3"), Range("a4"), 20)) ActiveCell.Value = hiniti ActiveCell.Offset(0, 1).Select If ActiveCell.Column = 7 Then ActiveCell.Offset(1, -7).Select Else: ActiveCell.Offset(0, 1).Select End If next end sub

  • EXCELのマクロについて

    お世話になっております。 以下のマクロを1万行分繰り返したいのですが、回数を1万回と指定する構文を 教えてください。よろしくお願いします。 Sub Macro16() ' ' Macro16 Macro ' ' Keyboard Shortcut: Ctrl+Shift+Z ' ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.Offset(-1, 0).Range("A1:M1").Select Selection.Copy ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "7/5/1905" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "7/6/1905" ActiveCell.Offset(1, -2).Range("A1").Select End Sub

  • エクセルVBAでの関数

    下記、コードでセルに関数を入れるようにしてるのですが 関数で得られた値をセルに反映されるようにしたいのですが Dimを使用してもどう指定してよいのかわからず苦戦しております。 宜しくお願い致します。 Range("F1").Select Do Until ActiveCell.Offset(0, -1).Value = ""       With ActiveCell .FormulaR1C1 = "=MID(RC[-1],2,3)" .Offset(1, 0).Select End With Loop Range("A1").Select Do Until ActiveCell.Offset(0, 2).Value = "" With ActiveCell .FormulaR1C1 = "=RC[11]&RC[5]&Rc[8]&rc[9]&rc[3]" .Offset(1, 0).Select End With Loop

  • Excell : 現在のカーソルがある行の特定の列に値を書き込むマクロ

    現在のカーソルがある行の特定の列に値を書き込むマクロの書き方を教えてください。以下は20行めのA列、B列にa, b を書き込むものですが、最初のRange("A20").Selectをカレント行に設定するコードを書けばいいのでしょうか?具体的な記述を教えてください。よろしくお願いします。 Sub Macro4() Range("A20").Select ActiveCell.FormulaR1C1 = "a" Range("B20").Select ActiveCell.FormulaR1C1 = "b" Range("C20").Select End Sub

  • EXCEL VBAの書き方

    EXCEL VBAの初心者です。 EXCEL2003を使っています。 数式の中のパラメータの書き方が分からず困っています。 具体的には、単純な計算をR1C1形式の数式を使い、FOR文でループを回そうとしました。 この際、例えば以下のようなVBAを、試行錯誤の結果やっと動くようにはなりましたが、とくに「"」(ダブルクォーテーション)の使い方が理解できていません。 NGだった理由、OKとなった理由を、すみませんがお分かりの方教えていただけないでしょうか。 (ヘルプを読んでも残念ながら理解できる程のレベルを持っていません。) やりたいこと:例えば単純な引き算を複数のセルに、ループをまわして設定したい。 --------------- Sub 質問() Dim i As Integer ' "A1"との差を求めるVBA→ "B2"から"E2"に数式入力 For i = 2 To 5 Cells(2, i).Select ' (1)問題の行→これはOKの例 ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c[" & 1 - i & "]" Next i End Sub --------------- ' (2)問題の行→実行時エラー'1004' ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c[1 - i]" --------------- ' (3)問題の行→コンパイルエラー(構文エラー) ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c["1 - i"]" --------------- ' (4)問題の行→コンパイルエラー(構文エラー) ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c["&1 - i&"]" ---------------

  • エクセルVBAの保存

    毎月異なった新しいエクセルファイルに同じような加工を施すため、VBAを書きました。対象はActivesheetとしています。 で、質問は、この新しいエクセルファイルの標準モジュールにいちいちこのVBAをコピーペーストせずに実行する方法です。 きっと何かあるとは思うのですが・・・・。 VBAは次のような簡単なものです。 Sub 加工1() Dim e As Integer, s As String, n As String e = Range("A4").End(xlDown).Row s = Replace(Mid(Range("A2"), 8, 5), "年", "") & "-" n = Replace(Mid(Range("A2"), 19, 5), "年", "") & "-" Range("A1:C2").MergeCells = False Columns("B:B").Select Selection.Insert Shift:=xlToRight Columns("A:A").Select Selection.Insert Shift:=xlToRight Columns("C:C").Select Selection.NumberFormatLocal = "G/標準" Range("B3").Select Selection.AutoFill Destination:=Range("B3:C3"), Type:=xlFillDefault Range("B3").Select ActiveCell.FormulaR1C1 = "商品番号1" Range("C4").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C" & e), Type:=xlFillDefault Range("A3").Select ActiveCell.FormulaR1C1 = "抽出年月日" Range("A4").Select ActiveCell.FormulaR1C1 = s & n & 1 Range("A4").Select Selection.AutoFill Destination:=Range("A4:A" & e), Type:=xlFillDefault Rows("3:3").Select Selection.Insert Shift:=xlDown Range("B1:E1").MergeCells = True Range("B2:E2").MergeCells = True ActiveSheet.Name = "提出用" End Sub

専門家に質問してみよう