Excelマクロ:変数を複数使う場合

このQ&Aのポイント
  • Excelマクロ初心者のため、変数を複数使ってFor文で処理する方法を知りたいです。
  • 例えば、A列の並んだ数字をB列に1つ飛ばしで入力するようなマクロを作成したいです。
  • iとjという2つの変数を使用し、iが1つ増えるたびにjも1つ増えるようなVBAの書き方を教えてください。
回答を見る
  • ベストアンサー

Excel マクロ:変数を複数使う場合

マクロ初心者です。 For文で、変数を2つ定義し、それぞれが1つずつ増えてくれるような マクロを組みたいのですが、うまくいきません。 例えばA列の並んだ数字を、B列に一個とばしで入力するとして・・・ 例) Dim i As Integer Dim j As Integer For j = 2 To 10 Step 2 For i = 1 To 9 Cells(j, 2).Value = Cells(i, 1).Value Next i, j ではだめですよね。iが1つ増える時に、jも1つ増える、 というようにVBAを組むことが可能なのでしょうか? ど素人な質問ですみませんが、教えてください。

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

> A9の値→B85に といった具合なんです。 A9の値は、B50 と思いますが ? データがもっとあった場合、A16の値が、B85では ? 1つの変数の場合 Sub test() Dim Rw As Long For Rw = 1 To 9   Cells(Rw * 5 + 5, 2).Value = Cells(Rw, 1).Value Next End Sub 普通は、変数 2つで Sub test2() Dim Rw As Long Dim WRw As Long WRw = 10 For Rw = 1 To 9   Cells(WRw, 2).Value = Cells(Rw, 1).Value   WRw = WRw + 5 Next End Sub

その他の回答 (3)

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

No.1です。 > 実際には、 > A1の値→B10に > A3の値→B15に > A5の値→B30に > : > A9の値→B85に > > といった具合なんです。 B列の行の規則性が良く判りませんが、単純に15づつ増えると言うわけではないのですね。どういう規則性があるのか判れば、的確な答えが得られると思います。 例をもう少し挙げて見てください

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

こんな感じでしょうか Aは初期値から2づつ増加、Bは初期値から15づつ増加 (例とBが10ずれていますが) Sub test() Dim i As Long Dim lngAS As Long Dim lngBS As Long lngAS = 1 lngBS = 10 For i = 1 To 10 Cells(lngBS + (i - 1) * 15, 2).Value = Cells(lngAS + (i - 1) * 2, 1).Value Next i End Sub

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

A1の値→B2に A2の値→B4に : A9の値→B18に と、言うことですか? それなら1つの変数を使いまわせば良いですよ。 Dim i As Integer For i = 1 To 9 Cells(i*2, 2).Value = Cells(i, 1).Value Next i

kanayukita
質問者

補足

早速のお返事ありがとうございます。 言葉足らずですみません。 実際には、 A1の値→B10に A3の値→B15に A5の値→B30に : A9の値→B85に といった具合なんです。 片方がSTEP2、片方がSTEP15なので (自分のしょぼい脳ミソでは)1つの 変数でうまく組めなかったもので・・・ この場合はいかがでしょうか?

関連するQ&A

  • エクセルマクロ配列で変数は使えますか

    エクセル2013です。 初めて配列を使います。 以下のように作成し思ったようにできました。 Sub 計算() '成功 Dim a As Integer Dim c As Integer Dim b(5) As Integer Dim 最終行 Dim 値列  値列 = 17 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For 処理業 = 1 To 最終行 For a = 1 To 5 b(a - 1) = Cells(1, 値列) 値列 = 値列 + 1 Next 値列 = 17 For a = 1 To (22 - 値列) c = c + b(a - 1) Next Cells(処理業, 30) = c a = 0 c = 0 Next 処理業 End Sub ただ計算する列の範囲をインプットボックスで入力した値 にしたい為以下のように改造しました。 Dim b(対象列) As Integerでエラーになります 配列には変数は使用できないのでしょうか? よろしくお願いします。 Sub 計算() '失敗 Dim a As Integer Dim c As Integer Dim b(対象列) As Integer’★ここでERRになる Dim 最終行 Dim 対象列 Dim 値列  対象列 = 22'インプットボックスで入力した値 値列 = 17 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For 処理業 = 1 To 最終行 For a = 1 To (対象列 - 17) b(a - 1) = Cells(1, 値列) 値列 = 値列 + 1 Next 値列 = 17 For a = 1 To (22 - 値列) c = c + b(a - 1) Next Cells(処理業, 30) = c a = 0 c = 0 Next 処理業 End Sub

  • エクセルでくんだVBAマクロが途中でとまるのですが、

    エクセルでくんだVBAマクロが途中でとまるのですが、 どこがおかしいかご指摘して頂けませんでしょうか? 以下のプログラムは セル(19.6)にxの値を代入し、 E24にそれに対応したyを出力させるプログラムです。 あと余談となりますが、 繰り返し構文は同時に複数の変数はできないのでしょうか? 例えば以下のものは変数iをステップ0.1で加算していますが それに対応して表示させるセルを一つずつずらすために 変数kを指定してfor構文を連立させようとしたのですが うまくいきませんでした。 Sub k() Dim i As Double For i = 0 To 10 Step 0.1 Cells(22 + 10 * i, 7).Value = i Cells(19, 6).Value = i Range("H" & 10 * i + 22).Value = Range("E24").Value Next i End Sub

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

    マクロ初心者です。アドバイスをお願いします。以下のマクロですとB列の100行目までの塗りつぶしのセルのカウントは出来るのですが、シート上の全てをカウントしたいのです。1TO 100の100の部分をどう変更したら良いのか教えてください。 Sub セルの色数1() Dim I As Integer Dim Count As Integer Count = 0 For I = 1 To 100 If Cells(I, 2).Interior.ColorIndex <> xlNone Then Count = Count + 1 Next I Range("C1").Value = Count End Sub

  • 合計値がある範囲の場合に印をつけるには?

    どなたかご存じでしたらご回答をお願いします。 【質問】 下記のVBAを実行すると、「異なる 25個のものから 5個を選ぶ組み合わせ の総数 nCr (53,130通り)」を作成します。A列~E列の合計をF列に表示しておりますが、 F列の値が58~102の場合、G列に”●”をつけるには、 下記VBAのソースはどのように修正すればよいでしょうか? ●VBAソース ub test() Const MaxNum = 25 Dim s(25) As String Dim i As Integer Dim r As Integer Dim c As Integer i = 1 For r = 1 To 5 For c = 1 To 5 s(i) = Cells(r, c).Value i = i + 1 Next Next Dim j, k, l, m Dim rowX As Long rowX = 0 rowX = rowX + 1 For i = 1 To MaxNum - 4 For j = i + 1 To MaxNum - 3 For k = j + 1 To MaxNum - 2 For l = k + 1 To MaxNum - 1 For m = l + 1 To MaxNum Cells(rowX, 1).Value = s(i) Cells(rowX, 2).Value = s(j) Cells(rowX, 3).Value = s(k) Cells(rowX, 4).Value = s(l) Cells(rowX, 5).Value = s(m) Cells(rowX, 6).Value = Application.WorksheetFunction.Sum(s(i), s(j), s(k), s(l), s(m)) rowX = rowX + 1 Next m Next l Next k Next j Next i End Sub ●VBA実行結果(やりたいこと) A    B     C     D     E     F  G 1     2     3     4     5     15       1     2     3     4     6     16       1     2     3     4     7     17  1     2     3     4     8     18 1     2     3     4     9     19             :             : 1     5     12    19     20    57 1     5     12    19     21    58  ● 1     5     12    19     22    59  ● 1     5     12    19     23    60  ●             :             : 20    21    22     24    25    112 20    21    23     24    25    113 20    22    23     24    25    114 21    22    23     24    25    115   【注意事項】   ・使用するエクセルは2010です。 以上、よろしくお願いします。

  • エクセルのマクロで複数セル指定は?

    以前(7月22日 質問No.936181)の質問でご回答を頂いたマクロなんですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyData As String Dim i As Integer Dim ImaNanji As String Dim SakkiNanji As String Dim ImaNanpun As String Dim SakkiNanpun As String SakkiNanpun = Cells(2, 3).Value ImaNanji = Cells(1, 3).Value ImaNanpun = Mid(ImaNanji, Len(ImaNanji) - 4, 2) If ImaNanpun <> SakkiNanpun Then Application.EnableEvents = False For i = 10 To 2 Step -1 MyData = Cells(i - 1, 2).Value Cells(i, 2).Value = MyData Next i MyData = Cells(1, 1).Value Cells(1, 2).Value = MyData Cells(2, 3).Value = ImaNanpun Application.EnableEvents = True End If End Sub A1のデータをB1からB10に一分おきにつぎつぎに書き込むというものなんですが、ひとつのセルではなく複数のセル(例えばA1からA30の30個のセル)をいっぺんに書き込むようにしたいのですが可能でしょうか? よろしくお願いします。

  • エクセルマクロに関する質問

    最近、エクセルマクロを始めてたのですが、下記のような状態で困っています。 プログラムを実行した際に、Cells((I1 + I5), I6)のセルに計算式がはいって欲しいのですが、 現状では計算結果が入るだけになってしまっています。 また、単純に文字列に変換してしまうだけだと、変数が邪魔になって式になってくれません。 誰かお分かりになる方がいましたら、教えてください。  Dim I1 As Integer Dim I2 As Integer Dim I3 As Integer Dim I4 As Integer Dim I5 As Integer Dim I6 As Integer Dim I7 As Integer Dim I8 As Integer Cells((I1 + I5), I6) = Cells((I1 + I5) - 2, I6) + Cells((I1 + I5), I6 - 2) - Cells(I1 + I5, I6 - 1)

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

    お手数ですが誰か教えてください! BのデーターをAに集計するマクロを作ったのですが 処理速度とっても遅いのです。 高速で処理する方法はありませんでしょうか? 私が作ったマクロ Sub 集計() Dim Z As Integer Dim i As Integer Dim X As Integer For Z = 2 To 2000 For i = 2 To 2000 For X = 3 To 20 If Worksheets("A").cells(Z, 1) = Worksheets("B").cells(i, 1) And       Worksheets("A").cells(1, X) = Worksheets("B").cells(i, 14) Then Worksheets("A").cells(Z, X) = Worksheets("B").cells(i, 16) End If Next X Next i Next Z End Sub       どこかが間違っている気がしますがマクロ初心者のため       先に進めません。       どうかご教授よろしくお願い致します。

  • マクロが実行しない

     二行三列を一枡として月の勤務割表を作成しています。マクロで同じ事を しているのに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

  • エクセルVBA:ある有名な方のサイトで・・・

    VBA初心者です。よろしくお願いします。 いま、VBAを勉強しています。 有名なT氏のエクセルVBAに関するサイト(オフィスT・・)の、「高速化テクニック」のところで、下記、★ ★ ★以下のような例がありました。 「Cells(j, 1).Font.FontStyle = "太字"」 が目的の作業であるならば、 「Dim i As Integer」「For i = 1 To 100」を何のために宣言し、記述しているのでしょうか?「j」の変数の宣言は「Cells(j, 1).・・・」で理解できますが、「i」の宣言また、「For i = 1 To 100」は不要のように思われるのです。 最初は何かの間違いかと思っていましたが、同氏の他の解説にも同様の記述がありましたので、きっと、意味があるのですね。教えてください。 ★ ★ ★ Sub Test2() Dim i As Integer, j As Integer For i = 1 To 100 For j = 1 To 10 Cells(j, 1).Font.FontStyle = "太字" Next j Next i End Sub

  • VBAの変数の定義について

    いつもお世話になっております。 VBAでの変数の定義についてお尋ねします。 VBAの勉強を始めたばかりの超初心者です。 I.チェック:A列とC列の和をE列に記載してその正誤を判定。 II.リセット:E列をクリアし、A列、C列の数字をランダムに置き換える。 という練習問題のコードを私が書いたものです。 以下について質問させていただきます。 (1)下記はモジュールレベルでの変数の宣言になると思いますが、変数の定義?例えば、最終値 = Range("A4").End(xlDown).Rowはそれぞれのプロシージャで定義しなければならないのでしょうか? (2)モジュールレベルでの変数の宣言は,Dimではなく、Privateでやるべきなのでしょうか? (3)何か指摘事項があれば、教えてください。 超初歩的な質問で、申し訳ありませんが、よろしくお願いいたします。 Option Explicit Dim i As Integer '処理用カウンタ変数 Const 初期値 As Integer = 4 '表の最初 行 Dim 最終値 As Integer '表の最終 行 Sub チェック() 最終値 = Range("A4").End(xlDown).Row '表の最終行番号を取得 For i = 初期値 To 最終値 Step 1 If Cells(i, 1).Value + Cells(i, 3).Value = Cells(i, 5).Value Then 'A列+B列 Cells(i, 5).Font.Color = vbBlue '回答が正ならフォントを青 Else Cells(i, 5).Font.Color = vbRed '回答が誤ならフォントを赤 End If Next i End Sub Sub リセット() 最終値 = Range("A4").End(xlDown).Row '表の最終行番号を取得 For i = 初期値 To 最終値 Step 1 Cells(i, 5).ClearContents '回答をクリア Cells(i, 5).Font.Color = vbBlack '回答のフォントを黒 Cells(i, 1).Value = Int(Rnd * 100) 'A列にランダムな数値 Cells(i, 3).Value = Int(Rnd * 100) 'C列にランダムな数値 Next i End Sub

専門家に質問してみよう