[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロの繰り返しについて』(ビギナー)
はじめまして
エクセル初心者ですが
マクロを組んでみたのですが
A B C
1 数値1 マクロ1結果 マクロ2結果
2 数値2
3 数値3
4
という感じで配置されております。
マクロ1とマクロ2は数値1〜3の数値を基に結果が出ております。
このマクロ1とマクロ2下に下記の様10行オフセットしながら5回マクロを実行したいのですがどのようにすればよろしいでしょうか?
下記の倍は数値4〜6を基にB11とC11に結果表示させたいです。
A B C
11 数値4 マクロ1結果 マクロ2結果
12 数値5
13 数値6
14
知識があまりなく困っており助けていただけると助かります。
よろしくお願いします。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
マクロで繰り返す方法は、
For 変数=a to b (Step C)
処理
next 変数
という方法と
While 条件が成立している間
処理
Wend
という方法があります。
ご希望は5回繰り返されたいのですから、
For I=1 to 51 step 10
Cells(I,2)= マクロ1結果
Cells(I,3)= マクロ2結果
Next I
という風になさればできると思います。
Offset関数は使っていませんが、ご理解いただけますでしょうか?
(パオ〜〜ン) 2017/06/06(火) 12:02
Sub TEST()
Dim Rng As Range Dim i As Long
Set Rng = Range("B1") For i = 0 To 5 Rng.Offset(i * 10 + 1, 0).Value = マクロ1結果 Rng.Offset(i * 10 + 1, 1).Value = マクロ2結果 Next i
End Sub
Offsetを使うとこんな感じでしょうか。 (ろっくん) 2017/06/06(火) 12:13
すみません。間違っていたので訂正します。
Sub TEST()
Dim Rng As Range Dim i As Long
Set Rng = Range("B1") For i = 0 To 5 Rng.Offset(i * 10, 0).Value = マクロ1結果 Rng.Offset(i * 10, 1).Value = マクロ2結果 Next i
End Sub
ちなみに繰り返し処理にはDo〜Loopステートメントもあります。
パオ〜〜ンさん 余談ですみません。 While〜Wend ステートメントは最近あまり使われなくなりましたね。 おそらくですが Do〜Loopで代用ができ、Exit Doなどで抜ける処理が できないためでしょうかね。 (ろっくん) 2017/06/06(火) 12:38
返信ありがとうございます。
やってみましたがうまくいきませんでした。
当方の説明が悪かったようで
A B C
11 数値4 マクロ1をつかった結果 マクロ2を使った結果
12 数値5
13 数値6
14
B1とB11は計算結果なので違う値になってほしいですが
説明難しいのですがB11でもマクロ1を実行したいといえば
伝わりますでしょうか?
すみませんがよろしくお願いします。
基本は書きこむセルを変更したように計算対象のセルも変更することだがそちらで応用できないようであればもともとの VBAを示してみてくれ。
あと、返信は編集からではなく下にある「コメント」からおこなってくれ。 (ねむねむ) 2017/06/06(火) 13:09
Sub 発動()
'
' Macro0 Macro
'
マクロ1 マクロ2
End Sub
現状上記のようなマクロ1とマクロ2を実行できるようにマクロを作っております。
よろしくお願いします。
(ビギナー) 2017/06/06(火) 13:14
そのマクロ1とマクロ2のコードが知りたいのですが。。。
現在は 発動 というマクロで マクロ1 と マクロ2を動かしてあるのですね。
それを拝見すると、まとめた形でご提示できるものと思います。
(パオ〜〜ン) 2017/06/06(火) 14:25
Sub マクロ1()
'
' Macro1 Macro
'
Dim AAA As String Dim BBB As Double Dim CCC As String
Dim DDD As String Dim EEE As String Dim FFF As String, GGG As String Dim HHH As String Dim III As String Dim JJJ As String Dim KKK As String Dim LLL As String Dim MMM As String
Dim cal_01 As Double
AAA = ThisWorkbook.Worksheets("sheet1").Cells(9, 4).Text BBB = ThisWorkbook.Worksheets("sheet1").Cells(10, 4).Text CCC = ThisWorkbook.Worksheets("sheet1").Cells(11, 4).Text
DDD = ThisWorkbook.Worksheets("sheet1").Cells(13, 4).Text EEE = ThisWorkbook.Worksheets("sheet1").Cells(14, 4).Text FFF = ThisWorkbook.Worksheets("sheet1").Cells(15, 4).Text GGG = ThisWorkbook.Worksheets("sheet1").Cells(16, 4).Text HHH = ThisWorkbook.Worksheets("sheet1").Cells(17, 4).Text III = ThisWorkbook.Worksheets("sheet1").Cells(9, 13).Text JJJ = ThisWorkbook.Worksheets("sheet1").Cells(18, 4).Text KKK = ThisWorkbook.Worksheets("sheet1").Cells(19, 4).Text LLL = ThisWorkbook.Worksheets("sheet1").Cells(20, 4).Text MMM = ThisWorkbook.Worksheets("sheet1").Cells(21, 4).Text
cal_01 = Val(Right(CCC, 5)) / BBB ThisWorkbook.Worksheets("sheet1").Cells(5, 10) = cal_01
If BBB >= 0.01 And BBB <= 1# Then ThisWorkbook.Worksheets("sheet1").Cells(9, 14) = ThisWorkbook.Worksheets("sheet2").Cells(10, 4)
ElseIf BBB >= 1.001 And BBB <= 2# Then ThisWorkbook.Worksheets("sheet1").Cells(9, 14) = ThisWorkbook.Worksheets("sheet2").Cells(11, 4)
ElseIf BBB >= 2.001 And BBB <= 3# Then ThisWorkbook.Worksheets("sheet1").Cells(9, 14) = ThisWorkbook.Worksheets("sheet2").Cells(12, 4)
Else ThisWorkbook.Worksheets("sheet1").Cells(9, 14) = "?????" End If
'
End Sub
と
Sub マクロ2()
'
' Macro2 Macro
'
Dim AAA As String Dim BBB As Double Dim CCC As String
Dim DDD As String Dim EEE As String Dim FFF As String, GGG As String Dim HHH As String Dim III As String Dim JJJ As String Dim KKK As String Dim LLL As String Dim MMM As String
Dim cal_01 As Double
AAA = ThisWorkbook.Worksheets("sheet1").Cells(9, 4).Text BBB = ThisWorkbook.Worksheets("sheet1").Cells(10, 4).Text CCC = ThisWorkbook.Worksheets("sheet1").Cells(11, 4).Text
DDD = ThisWorkbook.Worksheets("sheet1").Cells(13, 4).Text EEE = ThisWorkbook.Worksheets("sheet1").Cells(14, 4).Text FFF = ThisWorkbook.Worksheets("sheet1").Cells(15, 4).Text GGG = ThisWorkbook.Worksheets("sheet1").Cells(16, 4).Text HHH = ThisWorkbook.Worksheets("sheet1").Cells(17, 4).Text III = ThisWorkbook.Worksheets("sheet1").Cells(9, 13).Text JJJ = ThisWorkbook.Worksheets("sheet1").Cells(18, 4).Text KKK = ThisWorkbook.Worksheets("sheet1").Cells(19, 4).Text LLL = ThisWorkbook.Worksheets("sheet1").Cells(20, 4).Text MMM = ThisWorkbook.Worksheets("sheet1").Cells(21, 4).Text
cal_01 = Val(Right(CCC, 5)) / BBB ThisWorkbook.Worksheets("sheet1").Cells(5, 10) = cal_01
If DDD = "a" Then ThisWorkbook.Worksheets("sheet1").Cells(9, 5) = ThisWorkbook.Worksheets("sheet2").Cells(14, 3)
ElseIf DDD = "b" Then ThisWorkbook.Worksheets("sheet1").Cells(9, 5) = ThisWorkbook.Worksheets("sheet2").Cells(15, 3)
ElseIf DDD = "c" Then ThisWorkbook.Worksheets("sheet1").Cells(9, 5) = ThisWorkbook.Worksheets("sheet2").Cells(16, 3) End If
If DDD = "d" Then If HHH = "e" Then ThisWorkbook.Worksheets("sheet1").Cells(9, 5) = ThisWorkbook.Worksheets("Sheet2").Cells(9, 3) End If End If
If DDD = "f" Then If HHH = "g" Then If BBB >= 0.01 And BBB <= 0.03 Then ThisWorkbook.Worksheets("sheet1").Cells(9, 5) = ThisWorkbook.Worksheets("sheet2").Cells(8, 3) Else ThisWorkbook.Worksheets("sheet1").Cells(9, 5) = "?????" End If End If End If
'
End Sub
のようなマクロのコードです。
実際はマクロ10位まであり、発動を押すと表の中に値が反映される状態です。
今ある表を下に5個ほど作成したいと思っております。
よろしくお願いします。
(ビギナー) 2017/06/06(火) 15:41
マクロ1では、sheet1 の J5とN9の値を決めています。
マクロ2では、sheet1 の J5とE9の値を決めています。
マクロはマクロ1〜マクロ10位まであるのですね。
で、発動というマクロを起動すると、表の中に値が反映されるのですね。
申し訳ありませんが、発動というマクロのコードはどのようになっているのでしょうか?
マクロ1とマクロ2だけでは、J5とN9とE9の値以外は決まりません。
マクロ1の結果と言っても、行を変えてそのまま貼り付けても、相変わらず J5とN9 の値を入れるだけです。
(パオ〜〜ン) 2017/06/06(火) 16:23
追加で、 Min_tolerance という関数? は何なのでしょう? 不勉強で知りません。
ご教示いただければありがたいのですが・・・
(パオ〜〜ン) 2017/06/06(火) 16:31
発動のコードは少し前に書かせていただいております。
よろしくお願いします。
このままセル指定していってもいいのですが恐ろしく長文になるので
表同士の間隔は一定なのでloopなどの繰り返しでどうにか短くできないかと思い質問しております。
よろしくお願いします。
(ビギナー) 2017/06/06(火) 16:58
マクロ1〜マクロ10位まであるのではないのでしょうか?
発動というマクロで示していただいたのは、マクロ1とマクロ2だけですが・・・・
それとも今マクロ1とマクロ2だけなのを、5回繰り返して下へ表を伸ばして処理できるようにしたい、 ということでしょうか?
N9、E9の値を着ているマクロを
場所によって N19とE19 N29 とE29 〜 としたいということでしょうか?
最初に
1行目の数値1に対して マクロ1 マクロ2
11行目の数値4に対して マクロ1 マクロ2 とお書きでしたが、
1行目のマクロ1とマクロ2は N9、E9の値を決め、
11行目の数値4に対するマクロ1とマクロ2は N19、E19の値を決めるようにしたいということでしょうか?
(パオ〜〜ン) 2017/06/06(火) 17:08
ぱおーんさんのおっしゃるように
1行目のマクロ1とマクロ2は N9、E9の値を決め、
11行目の数値4に対するマクロ1とマクロ2は N19、E19の値を決めるようしたいです。
よろしくお願いします。
(ビギナー) 2017/06/07(水) 09:05
再度整理してみます。
マクロ1を整理すると
Sub マクロ1()
' ' Macro1 Macro ' Dim cal_01 As Double Dim S1 As Worksheet Dim S2 As Worksheet
Set S1 = Sheets("sheet1") Set S2 = Sheets("sheet2")
cal_01 = Val(Right(Min_tolerance, 5)) / S1.Range("D10") S1.Range("J5").Value = cal_01
Select Case S1.Range("D10").Value Case 0.01 To 1# S1.Range("N9").Value = S2.Range(J4).Value Case Is < 2# S1.Range("N9").Value = S2.Range(K4) Case Is < 3# S1.Range("N9").Value = S2.Range(L4) Case Else S1.Range("N9").Value = "????" End Select
End Sub
となり sheet1のN9を sheet2のJ4などなどから値を決めています。
マクロ2は
Sub マクロ2()
'
' Macro2 Macro ' Dim cal_01 As Double Dim S1 As Worksheet Dim S2 As Worksheet
Set S1 = Sheets("sheet1") Set S2 = Sheets("sheet2")
cal_01 = Val(Right(Min_tolerance, 5)) / S1.Range("D10") S1.Range("J5") = cal_01
Select Case S1.Range("D13").Value Case "a" S1.Range("E9").Value = S2.Range("C14").Value Case "b" S1.Range("E9").Value = S2.Range("C15").Value Case "c" S1.Range("E19").Value = S2.Range("C16").Value Case "d" If S1.Range("D17").Value = "e" Then S1.Range("E9").Value = S2.Range("C9") End If Case "f" If S1.Range("D17").Value = "e" Then If S1.Range("D10").Value >= 0.01 And S1.Range("D10").Value <= 0.03 Then S1.Range("E9").Value = S2.Range("C8") End If Else S1.Range("E9").Value = "?????" End If End Select
End Sub
となりsheet1のE9の値をsheet2のC8等々から決めています。
最初に仰った
>マクロ1とマクロ2は数値1〜3("A1"〜~"A3")の数値を基に結果が出ております。 とはどこで結びつくのでしょうか?
>下記の倍は数値4〜6を基にB11とC11に結果表示させたいです。 > > A B C > 11 数値4 マクロ1結果 マクロ2結果
数値4〜6はsheet1のA11〜A13だと思いますが、これはマクロ1、マクロ2でどの様に絡めれば良いのでしょうか?今のままでは数値4(A11)〜数値6(A13)はマクロ1マクロ2の中には出てき方がわかりません。
まだ何か私が知らない別の条件などがあって、私が理解できないのでしょうか?
(パオ〜〜ン) 2017/06/07(水) 10:06
ぱおーんさんのおっしゃられている通り現状では数値4〜6に関しては組み込んでおりませんので
値は出ませんよね・・・
やりたいことは
数値1〜3の部分が表1だとすると
数値4〜6は表2
現状自分が分かる方法で書いていくと実際は表10以上まであるので今のセル指定のやり方ではかなりの長文になってしまうので
いい方法はないものかと思い質問させていただきました。
(小心者) 2017/06/07(水) 10:32
なんだか後から後から条件が出てきているような(^^;;
ということは、回答はお持ちのようですね。
繰り返しの処理ではうまくいかない、ということでしょうか?
何らかの関係性があれば、繰り返し処理も使えるのでしょうが..
最初に繰り返しのマクロをお伝えした後、
結果が出てこない、と仰っていらっしゃいましたが、必要な条件を教えていただけないので、当然といえば当然ですね。
こんなときは地道にいくしかないのかもしれません。
また、何かありましたら、よろしく。
(パオ〜〜ン) 2017/06/07(水) 11:27
また何かいい方法あればご教授よろしくお願いします。
(小心者) 2017/06/07(水) 11:34
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.