• ベストアンサー

VBA

ExcelのVBAについて質問です。 1000以下の任意の整数nを画面入力から読み込んで、1+2+3+4+・・・+nの合計値をセルA1に表示させたいのですが、1とnの和が足されてしまいます。 どこがおかしいのでしょうか? 指摘お願いします。 以下テキストです。 スペースなどは気にせずテキストの部分でご指摘お願いします Sub ()   Dim i As Integer Dim n As Integer n = Application.InputBox(Prompt:="1000以下の整数を入力してください", Type:=1) If n <= 1000 Then For i = 1 To n iResult = i + 1 Cells(1, 1) = iResult Next i End Sub よろしくおねがいします。

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

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.1

こんにちは。 >iResult = i + 1 ではなくて、 iResult = iResult + i にしましょう。

その他の回答 (2)

  • f272
  • ベストアンサー率46% (8020/17142)
回答No.3

For i = 1 To n iResult = i + 1 Cells(1, 1) = iResult Next i これをfor文を使わないで書いたら iResult = 1 + 1 Cells(1, 1) = iResult iResult = 2 + 1 Cells(1, 1) = iResult iResult = 3 + 1 Cells(1, 1) = iResult (途中省略) iResult = n + 1 Cells(1, 1) = iResult となります。 Cells(1, 1)に代入されるのは当然n + 1ですね。

zenen03
質問者

お礼

3人の方々ありがとうございました。 おかげさまで解決いたしました!

  • hahuuno
  • ベストアンサー率27% (3/11)
回答No.2

あと、 iResultの変数の宣言もしましょう~

関連するQ&A

  • VBAで縦一列に数字を入力したい

    Private Sub CommandButton1_Click() Dim n As Integer Dim i As Integer Dim x As Integer For i = 1 To n x = i + 3 n = InputBox("層数の値を入力してください") Cells(3, 1).Value = ("基板") Cells(x, 1).Value = i x = x + 1 Next End Sub 上記のようなマクロを組んだのですが、4行目に1が入ってとまってしまいました。 これを完成させるにはどうしたらいいでしょうか?

  • VBAを使った九九、及び合計、平均の表の作り方

    Visual Basic初心者です。 Excel 2003を使って、九九表を表示させるプロジェクトを作りたいのですが、どうしても途中で詰まってしまい、九九だけどころか、合計と平均すら表示させることができない状態です。 私の途中まで組んだタグは以下の通りです。どなたかよろしくお願いします。 Private Sub CommandButton1_Click() Call Kuku End Sub Option Explicit Dim Sum(20) As Double Sub Kuku() Dim i As Double, j As Double, num As Integer num = InputBox("numの値を入力しなさい") Sheets("Date").Cells.Clear For i = 1 To num Sheets("Date").Cells(1, i + 1) = i Sheets("Date").Cells(1 + i, 1) = i Sum(i) = 0# For j = 1 To num Sheets("Date").Cells(i + 1, j + 1).Value = Sum(i) Sum(i) = i * j Next j Next i Call Heikin Call Hyoudai MsgBox ("処理が終了しました") Sheets("Date").Select End Sub Sub Heikin() Dim i As Double, num As Integer, n As Integer For i = 9 To num Sheets("Date").Cells(i + 1, n + 2).Value = Sum(i) Sheets("Date").Cells(i + 2, n + 1).Value = Sum(i) Next i End Sub Sub Hyoudai() Sheets("Date").Cells(1, 1) = "九九" Sheets("Date").Cells(1, 11) = "合計" Sheets("Date").Cells(1, 12) = "平均" End Sub

  • VBAで関数を使うには?

    こんな感じだったとします。   A1      B1 2002/9/2 2002/9/3 2002/9/4 2002/9/5   : このB1にそれぞれの曜日を表示させるVBAを以下のようにしました。 Sub youbi() Dim i As Integer For i = 3 To 10 Cells(i, 3).Value = Weekday(Cells(i, 2), "aaa") Next End Sub もちろんエラーでした。 (メッセージは「型が一致しません」です。) そこで以下のように変更しました。 Sub youbi() Dim i As Integer For i = 3 To 10 Cells(i, 3).Value = "=text(Weekday(b3), ""aaa"")" Next End Sub するときちんと曜日が表示されたのですが、もちろん全部B3のセルの日付の曜日です。 ここを変数にするにはどうしたらいいのでしょうか? とっても簡単なことのように思えますが、意外とハマってしまって抜け出せません。 よろしくお願いします。

  • VBAでの拡散計算

    エクセルのVBAを使って添付画像のようなグラフを作成しようと考えています。 以下の計算で作成できそうなのですが、⊿tを10-5より小さく設定し、1000sec~の濃度変化が知りたいため表計算ではなくVBAを使ってみました。 表計算では、 t=0のときx0=C0(飽和濃度)、x>x0でC=0とし(初期条件) x0では、 C(j+1,i) = C(j,i) +D * ( C(j,i-1) - C(j,i) ) / dx / dx * dt x >x0では、 C(j+1,i) = C(j,i) +D * ( C(j,i-1) - 2 * C(j,i) + C(j,i+1) ) / dx / dx * dt の計算を行い、セル表記が以下のようになりました。どの時間も物質量は一定です。(たぶん・・・)   t0、t1、t2、t3t、・・・ x1,60、58.8、57.6・・・ x2, 0、 1.2、2.38・・・ x3, 0、 0、0.02・・・ 上の計算をVBAで以下のように書いてみました。 Sub diffusion_dry_up2() Dim n As Integer, nt As Integer Dim i As Integer, j As Integer Dim b As Double, te As Double, dt As Double Dim c0 As Double, cs As Double, d As Double Dim x As Double, dx As Double, t As Double Dim a As Double, cjp As Double, cj0 As Double Dim cjm As Double b = InputBox("配管の長さb(m)") n = InputBox("配管の長さの方向分割数n") te = InputBox("計算する時間長t(sec)") dt = InputBox("時間増分dt(m)") c0 = InputBox("配管底部の濃度c0(vol.%)") cs = InputBox("時刻t=0の時の配管内の濃度cs(vol.%)") d = InputBox("拡散係数d(m^2/sec)") Sheet1.Cells(1, 2) = "配管の長さb(m)" Sheet1.Cells(2, 2) = "配管の長さの方向分割数n" Sheet1.Cells(3, 2) = "計算する時間長t(sec)" Sheet1.Cells(4, 2) = "時間増分dt(sec)" Sheet1.Cells(5, 2) = "配管底部の濃度c0(vol.%)" Sheet1.Cells(6, 2) = "時刻t=0の時の配管内の濃度cs(vol.%)" Sheet1.Cells(7, 2) = "拡散係数(m^2/sec)" Sheet1.Cells(1, 3) = b Sheet1.Cells(2, 3) = n Sheet1.Cells(3, 3) = t Sheet1.Cells(4, 3) = dt Sheet1.Cells(5, 3) = c0 Sheet1.Cells(6, 3) = cs Sheet1.Cells(7, 3) = d nt = te / dt dx = b / n Sheet1.Cells(1, 1) = nt t = 0 a = d * dt / dx ^ 2 Sheet1.Cells(1, 5) = t Sheet1.Cells(1 + 1, 4) = -dx Sheet1.Cells(1 + 2, 5) = c0 Sheet1.Cells(1 + n + 2, 4) = b + dx Sheet1.Cells(1 + n + 3, 5) = cs Sheet1.Cells(3, 5 + i) = a * (-cj0 + cjp) + cj0 For i = 1 To nt t = t + dt Sheet1.Cells(1, 5 + i) = t Sheet1.Cells(1 + n + 3, 5 + i) = a * (cjp - 2 * cjo + cjm) + cj0 For j = 2 To n + 2 cjp = Sheet1.Cells(1 + j + 1, 5 + i - 1) cj0 = Sheet1.Cells(1 + j + 0, 5 + i - 1) cjm = Sheet1.Cells(1 + j - 1, 5 + i - 1) Next j Next i linegraph 2, 4, 4 + n, nt + 2 End Sub Sub linegraph(sr As Integer, sc As Integer, lr As Integer, lc As Integer) ActiveSheet.ChartObjects.Add(200, 10, 240, 200).Select ActiveChart.ChartWizard _ Source:=Range(Cells(sr, sc), Cells(lr, lc)), _ gallery:=xlXYScatter, _ Format:=3, _ PlotBy:=xlColumns, _ categoryLabels:=1, _ SeriesLabels:=0, _ HasLegend:="false", _ Title:="ex2", _ categoryTitle:="t", _ ValueTitle:="y", _ ExtraTitle:="" End Sub しかしまったく表計算のようになりませんでした。 a = d * dt / dx^2以降の書き込みが変だと思うのですが、どのようにすればよいのでしょうか。 また、上のような表記ではtを大きくdtを小さくするとエラーになってしまいます。 質問項目が多いですが、よろしくお願いします。

  • EXCEL VBA

    EXCEL VBAで空白行が現れたら「小計」の文字を入力したいと思い以下のように記述しましたが、うまくいきません。どこがおかしいのか教えてください。 宜しくお願いします。 Sub write小計() Dim i As Integer Dim rowcnt As Integer rowcnt = Cells(1, 1).CurrentRegion.Rows.Count Range("B1").Select For i = 1 To rowcnt If Cells(i, 2).Value = "" Then Value = "小 計" ActiveCell.Offset(1).Select Next i End Sub

  • エクセル VBA もっときれいな書き方?

    Sub test() Dim i As Integer, n As Integer n = 1 For i = 2 To 150 If Cells(i, 1) <> Cells(i - 1, 1) Then Cells(i - 1, 5) = i - n Cells(i - 1, 6) = Application.WorksheetFunction.Sum(Range("B" & n & ":" & "B" & i - 1)) n = i End If Next i End Sub 上記のマクロですが Application.WorksheetFunction.Sum(Range("B" & n & ":" & "B" & i - 1)) この部分、もっとスマートに書く方法を教えてください。 Range("B" & n & ":" & "B" & i - 1)って、ちゃんと動きますが、書き方が何か変なような気がするんです。 よくわかってもいないのにすみません。

  • Excel 2007 <VBAでグラフの操作>

    Excel 2007 <VBAでグラフの操作> 現在すでにあるグラフを修正しています。 下記マクロでは「各グラフに系列が2つあり、その1つ目を削除して残る1つのデータ範囲(X軸の値)を再設定する」という内容です。 下記マクロではFor構文冒頭のSet~の行で、 「実行時エラー '1004': 'Cells'メソッドは失敗しました:'_Global'オブジェクト」 とのエラーが出ます。 このエラーについて検索してみたのですが、これといったものが見つからなかったので、このマクロでおかしなところがあれば直接指摘していただけないでしょうか。 よろしくお願いします。 Private Sub Test_Arrange()   Dim MyRng As Range   Dim R As Integer   Dim n As Integer   Dim i As Integer   n = 10   R = Sheets("Sheet1").Range("A1").End(xlDown).Row   For i = 1 To n     Set MyRng = Sheets("Sheet1").Range(Cells(2, 2 * n + 3), Cells(R, 2 * n + 3))     Charts(i).SeriesCollection(1).Delete     Charts(i).SeriesCollection(1).XValues = MyRng   Next i End Sub

  • 以前に回答いただいたVBAですが、理解できない部分があったので、抜粋し

    以前に回答いただいたVBAですが、理解できない部分があったので、抜粋して質問に投稿したところ、多くの方々から、「これでは、わからない」などの指摘をいただき、これでは、以前に回答していただいた回答者様の名誉にかかわると思い全文を記載させていただくことにしました。  あわせて、この、VBAの詳しい説明を快くしていただける方は回答よろしくお願いします。以下のとうりです。  A列  B列 1 期間  90 2 人数  21 3 4 氏名  回数 5 A   23 6 B   23 7 C   19 8 D   16 9 E   12 10 F   9 11 G   8 12 H   7 13 I   7 14 J   6 15 K   6 16 L   6 17 M   5 18 N   5 19 O   4 20 P   4 21 Q   4 22 R   4 23 S   4 24 T   4 25 U   4 Sub 当番割当() Dim 期間 As Integer Dim 人数 As Integer Dim 氏名() As String Dim 回数() As Integer Dim i As Integer Dim j As Integer Dim k As Integer Dim m As Integer Dim n As Integer Dim n1 As Integer Dim n2 As Integer Dim p As Single Dim q As Single Dim 当番() As String Dim 担当() As Single 期間 = Cells(1, 2) 人数 = Cells(2, 2) ReDim 氏名(人数) ReDim 回数(人数) For i = 1 To 人数 氏名(i) = Cells(4 + i, 1) 回数(i) = Cells(4 + i, 2) Next i ReDim 当番(期間 * 2) ReDim 担当(期間 * 2) n = 0 For i = 1 To 人数 n1 = 0 n2 = 0 For j = 1 To 人数 If 回数(j) = 回数(i) Then n1 = n1 + 1 If j <= i Then n2 = n2 + 1 End If Next j p = 期間 / 回数(i) For j = 1 To 回数(i) q = p * (n2 - 0.5) / n1 + p * (j - 1) m = 1 For k = n To 1 Step -1 If 担当(k) <= q Then m = k + 1 Exit For End If 当番(k + 1) = 当番(k) 担当(k + 1) = 担当(k) Next k 当番(m) = 氏名(i) 担当(m) = q n = n + 1 Next j Next i Range("E:G").Clear For n = 1 To 期間 Cells(n, 5) = n & "日" Cells(n, 6) = 当番(n * 2 - 1) Cells(n, 7) = 当番(n * 2) Next n End Sub

  • VBAで指定範囲の整理NOを付けたい

    下記VBAで 整理NOを例えば  最初と最後を0010~0050と指定したいのですが 命令文を指導願います Sub ページ番号付印刷() Dim mypage As Integer mypage = InputBox(Prompt:="最終となるページ番号を入力してください。") For i = 1 To mypage Range("D47") = i ActiveSheet.PrintOut Next End Sub

  • VBAでの説明がわかりません

    以下のコードは、都道府県ごとに1枚のデータシートを作成する処理なんですが、コードが1行づつどんな作業を意味しているのかがわかりません。1行ごとにどのような処理をしているのかの説明をよろしくお願いします。長文で申し訳ありません。 Sub まとめ() Dim i As Integer 'カウンタ変数iの宣言 Dim n As Integer  Dim MyS1 As Worksheet 'ワークシート型オブジェクトMyS1を宣言 Dim MyC As Worksheet Worksheets.Add before:=Worksheets("全国") ActiveSheet.Name = "data" Set MyS1= Worksheets("data") With Worksheets("全国") MyS1. Range(MyS1.Cells(1,1),MyS1.Cells(11,12))=.Range(Cells(1,1),.Cells(11,12)).Value End With i=12 For Each MyC In Worksheets If MyC.Name<> "data" Then n = 12 MyS1.Cells(i,1)=MyC.Name i=i+1 Do While MyC.Cells(n,2).Value<>"" MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value i=i+1 n=n+1 Loop End If Next Myc End Sub

専門家に質問してみよう