- ベストアンサー
割り算でセルへの入力方法とは?
- マクロ初心者の方へ、割り算結果をセルに入力する方法をご紹介します。
- 例えば、セルA1に20、セルB1に5が入っている場合、A1/B1で4が求められます。
- この結果をループさせて、セルE1以下に順次入力する方法を解説します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> 定番の Range("E" & Cells.Rows.Count).End(xlUp).Row + 1 > を使用するため、何とかマクロで行いたいと思いました。 E1にデータが入っていない場合(一番最初の実行時)にはE2からデータが入りますので、その処理をIF文で分けてみました(他に方法があるかもしれませんがちょっとわからないので) 取り敢えず参考までに(極力セルにアクセスせずに変数にデータを入れてループ処理し、その後一括でセルにデータを代入しています) Sub Example() Dim Mydata() As Double Dim Divisor As Double Dim x As Long Dim i As Long x = Range("A1").Value / Range("B1").Value - 1 ReDim Mydata(x, 0) Divisor = Range("B1").Value For i = 0 To x Mydata(i, 0) = Divisor * i Next If Range("E1").Value <> "" Then Range("E" & Cells.Rows.Count).End(xlUp).Offset(1, 0).Resize(x + 1) = Mydata Else Range("E1").Resize(x + 1) = Mydata End If End Sub
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
なぜこの質問が出るのか、よくわからないが、式を作って試行錯誤してやってみるほかない。すぐ思考をあきらめただけではないか。 (1)For Next を使うなら(繰り返し回数中心?) 初期値は0,終値 A1-1、階数はB1 Sub test01() j = 2 For i = 0 To Range("A1") - 1 Step Range("B1") Cells(j, "c") = j - 1 Cells(j, "D") = i j = j + 1 Next i End Sub 結果 A1,B1はデータ A2:BXは質問麻データ。C、D列(特にD列)が回答の式の結果。 20 5 1 0 1 0 2 5 2 5 3 10 3 10 4 15 4 15 別シートで 30 6 1 0 1 0 2 6 2 6 3 12 3 12 4 18 4 18 5 24 5 24 この場合は初めの値、終わりの値、間隔を質問の文章で書く(というか認識してみる)べきだ。 データ例と結果を質問に書いて、上記を書かないのは、説明がまずいし、発想がまずい。 ーーー (2)Do Until を使うなら(終り値中心、間隔値は式の中に組み込まれる形)繰り返し回数は、式の結果で自ずと決まる) Sub test02() j = 2 x = 0 Do Until x > Range("A1") - 1 Cells(j, "c") = j - 1 Cells(j, "D") = x j = j + 1 x = x + Range("B1") Loop End Sub ーー Loop処理は、どの種類のループ処理を使ってもできるはず。
お礼
imogasiさん ご回答ありがとうございました。 同様の処理をE列空白行以下に連続で処理させたいので、非常に助かりました。 追加で教えて頂けますでしょうか? A1に2 B2に0.5 とした場合 2/0.5は4なのですが 0 0.5 1 という結果となり1.5が得られません。 変数をいじってどのような動作をするのか試してみましたがわかりません。 また、厳しいお言葉を頂き、感謝しております。 自身の引き出しが少ないのと、テキストレベルでの勉強が実践になかなか結び付かないのが悩みどころでもあります。
- mshr1962
- ベストアンサー率39% (7417/18945)
マクロならこんな形でいいかと。。。 Sub Macro1 j = 0 For i = 0 To Cell(1,1) - 1 Step Cell(1,2) j = j + 1 Cell(j,5) = i Next i End Sub マクロを使わないで数式で対応ならE1に =IF(AND($A$1<>"",$B$1<>0,$A$1/$B$1>=ROW()),$B$1*(ROW()-1),"") と入力して下方にある程度の余裕をもってコピーしてください。
お礼
mshr1962さん ご回答ありがとうございます。 ご教示頂いたマクロ及びIF文について勉強させて頂きます。 同様の処理を、E列の空白行以下に施したい為、今回はマクロに こだわっていたので勉強になりました。
- kkkkkm
- ベストアンサー率66% (1725/2595)
B1の整数倍を下方向にA1未満の範囲で表示したいよいう事ですよね。 マクロにこだわらないのでしたら E1は必ず0ですから0と入れておいて E2に =IF(E1<>"",IF(E1+$B$1<$A$1,E1+$B$1,""),"") として下方向に必要なだけコピーしておけば同じ結果が得られます。
お礼
kkkkkmさん ご回答ありがとうございます。 E2以下のセルで得たい結果が得られました。 ご教示頂いたIF文について勉強します。 今回はマクロにこだわっています。 同様の処理を、E列の空白行以下に施したいからです。 定番の Range("E" & Cells.Rows.Count).End(xlUp).Row + 1 を使用するため、何とかマクロで行いたいと思いました。
- mt2015
- ベストアンサー率49% (258/524)
For文で回すので十分だと思います。 せいぜい、A1/B1が整数で無かったり、1より小さかったり、B1が0だった時の処理を入れておけば良いでしょう。
お礼
mt2015さん ご回答ありがとうございました。 割り算結果は必ず0ではない整数になる数をA1及びB1セルに与えていますので 問題なしです。 お礼申し上げます。
お礼
kkkkkmさん ご回答ありがとうございます。 得たい結果が得られました。 最終セル:Cells.Rows.Count).End(xlUp) にOffsetプロパティを追加:Offset(1, 0) することでさらに1行下にオフセットできる。 ご教示頂いたものを一つずつ紐解いて勉強致します。