自然数m,nの掛け算を足し算の繰り返しで計算するプログラムを作成したいのですが、プログラミングの本を見ても全く分かりません。 悩みの種です・・・

このQ&Aに関連する最新のQ&A

A 回答 (3件)

m*nですよね。


mをn回足せばいいのではないでしょうか?

for分か何かを使って、
for i = 1 to n かな?VBは最近さわってないから、
おかしいかもしれませんが、
sum = 0
for 1~nを数える
 sum = sum + m
繰り返し
これでいいと思いますが・・・

ではでは☆
    • good
    • 0
この回答へのお礼

長い間お礼をせずマコトに申し訳ありません!     これからは即・お礼&締め切りします!!       最も分かり易く非常に参考になりました。       アリ・ガトー・ショコラ♪    

お礼日時:2001/07/30 17:28

いきなり、答えを書いてしまうのもなんかな?と思ったのですが、


関数を作ってみました。

こいつを

Kotae = Hoge(3,4)

という風に呼ぶと、3が4回足されて12。
すなわち、3*4になります。
ただし、MやNの値が、マイナスの場合は、どうかな?
たぶん、これでいいと思うけど。
M=-3 N=4の場合は、-12になるよね。
M=3 N=-4の場合は、-12ですね。
M=-3 N=-4の場合は、12で、OKですね。
よって、以下の関数でOKだと思います。

まあ、もっと「エレガント」な方法もあると思いますが、べたで書くと、
このようになりますね。

Function Hoge(lngM As Long,lngN As Long) As Long

Dim lngLoopCnt As Long 'ループカウンタ

'戻り値の初期化
Hoge = 0

'N回ループする。
For lngLoopCnt = 1 To Abs(lngN)
IF lngN > 0 THEN
'引数Mを加算する。
Hoge = Hoge + lngM
Else
Hoge = Hoge - lngM
End If
Next

End Function
    • good
    • 0
この回答へのお礼

長らくお待たせしまして誠にすみませんでした。 一番長く丁寧に書かれてあったのですが、初心者も初心者の僕にはサッパリ意味が分かりませんでした。 知識が足り無い様なんで、これから勉強して分かる様なりたいです。 

お礼日時:2001/07/30 17:50

mをn回足していくと


掛け算になるので、

for文で1からnまでループする。

で、合計にmを毎回足していく

という、プログラムでOKだと思います。
    • good
    • 0
この回答へのお礼

長い間お待たせさせてしまって非常に申し訳が無いです。簡潔に無駄無く御説明して戴き、有り難かったです。

お礼日時:2001/07/30 17:37

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフォームのラベルのプロパティを自動で設定したい

Access2013 vba です。

フォームの全てのラベル、テキストボックス、ボタン類をそれぞれの背景色や、テーマ、背景スタイルなどを設定したいのですが、どうやれば、全てのラベル、テキストボックス、ボタンなどを自動でループ処理で取得出来ますでしょうか。

よろしくお願いします。

Aベストアンサー

フォームをデザインビューで開く必要があります。で、保存。
windowmode は適当に。
標準モジュールで
docmd.OpenForm "formName",view:=acDesign,windowmode:=acHidden
forms!formName!ラベル2.backcolor = vbred
docmd.Close acForm ,"formName",save:=acSaveYes

Q繰り返しの足し算

こんにちは、いつもお世話になっています。
今回、セルに符号がランダムで、絶対値が同じ数を足していきたいのですが、思うようにいきません。
(5→0→0→-5→-10→-15・・・)
何が悪いのでしょうか・・・?

Sub ランダムの足し算()
Cells.Clear

a = 0
For dt = 1 To 20
Cells(dt, 1) = a + di '足していきたいのに、足せない?

di = Int(rnd - 0.5) * 5 'これが足す数です。
If di = 0 Then
di = di + 5

End If

Next
End Sub

回答よろしくお願いします。(> <)"

Aベストアンサー

やりたいことが良くわかりませんが、
選ばれた数をA列に
その都度足した数をB列に表示するなら
こんな感じでいいんじゃないかと思います。
Sub ランダムの足し算()
Cells.Clear
a = 0
For dt = 1 To 20
di = Int(Rnd - 0.5) * 5 'これが足す数です。
If di = 0 Then
di = di + 5
End If
Cells(dt, 1) = di
a = a + di
Cells(dt, 2) = a
Next
End Sub

QVBA:ユーザフォームのラベルの指定の仕方教えてください。

 今、ユーザフォームに20個のラベルがあります。それぞれのラベルは、条件によりラベルの表示内容が変更します。そこで、ラベルの表示変更が必要なときにすぐに変更できるようにしたいと考えています。しかし、例えば以下のようなコードを作成するとエラーになり困っています。
 Label(i)で、iの番号によりラベルが呼び出されないだろうかと自分なりに作りましたがダメでした。以下のようなループ文中で特定のラベルを呼び出し処理することは不可能でしょうか?
 やはり、UserForm1.Label3などのように番号をきちんと書かないとダメでしょうか?本当は、ラベルが82個ありその一つ一つにコードを割り当てるのが大変です。また、きれいなコードで書きたいと思うからです。宜しければ、ご教授願います。
--------------------------------------------
Sub セルの値をラベル表示する()
For i = 1 To 20
With UserForm1.Label(i)
.Caption = Cells(1, i)
End With
Next i
End Sub

 今、ユーザフォームに20個のラベルがあります。それぞれのラベルは、条件によりラベルの表示内容が変更します。そこで、ラベルの表示変更が必要なときにすぐに変更できるようにしたいと考えています。しかし、例えば以下のようなコードを作成するとエラーになり困っています。
 Label(i)で、iの番号によりラベルが呼び出されないだろうかと自分なりに作りましたがダメでした。以下のようなループ文中で特定のラベルを呼び出し処理することは不可能でしょうか?
 やはり、UserForm1.Label3などのように番号...続きを読む

Aベストアンサー

 Excel VBAではコントロール配列はサポートされていませんが、ラベルの名前をLabel1, Label2,・・・ Label20とすると、以下のコードでほぼ同じことを実現できます。

Sub セルの値をラベル表示する()
 For i = 1 To 20
  With UserForm1.Controls("Label" & i)
   .Caption = Cells(1, i)
  End With
 Next i
End Sub

Q1からNの素数を求めるプログラミング

エクセルのVBAでの1からNの素数を求めるプログラミングを教えてください。プログラミング関係はまったく分からないのでよろしくお願いします。

Aベストアンサー

こんばんは。

ここのカテゴリを検索すれば出てくるはずです。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1468422

OkWave でしたら、今のURL に、数字だけ入れ換えてください。まあ、このスレッド自体は、私にとっては、あまり愉快ではありませんが。(^^;

Qエクセルグラフの軸ラベルを一括変換出来なくて困っています。

お世話になります。
初めて投稿いたします。

VBA初心者です。エクセルグラフの軸ラベルを一括変換したいのですが、分からなくて困っています。

過去ログ、個人HPなどを参考にして、一つのグラフを選択、下記マクロを実行すれば、一つのグラフのみなら軸ラベルを変更する事が出来たのですが、ワークシート内の複数の埋め込みグラフを一発でラベル変更する場合のマクロが作成できません。

当方会社員、データをまとめる為、今回100ヶほどのグラフを一括変換したいため、どうしてもマクロ処理したいと考えています。
For Each・・・Next でループさせたいのですが、何分初心者勉強中の為、エラー多発、何方かお分かりの方、お助け下さい。


Sub 軸ラベル一括変換()
With ActiveChart
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "X"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "y"
End With
End With
End Sub

お世話になります。
初めて投稿いたします。

VBA初心者です。エクセルグラフの軸ラベルを一括変換したいのですが、分からなくて困っています。

過去ログ、個人HPなどを参考にして、一つのグラフを選択、下記マクロを実行すれば、一つのグラフのみなら軸ラベルを変更する事が出来たのですが、ワークシート内の複数の埋め込みグラフを一発でラベル変更する場合のマクロが作成できません。

当方会社員、データをまとめる為、今回100ヶほどのグラフを一括変換したいため、どうしてもマクロ処理したいと考え...続きを読む

Aベストアンサー

こんなのではどうでしょうか?

ActiveSheetの全グラフを変更する場合
Sub 軸ラベル一括変換()
Dim co As ChartObject
For Each co In ActiveSheet.ChartObjects
With co.Chart
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "X"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "y"
End With
End With
Next
End Sub

全シートの全グラフを変更する場合
Sub 軸ラベル一括変換()
Dim ws As Worksheet
Dim co As ChartObject
For Each ws In ThisWorkbook.Worksheets
For Each co In ws.ChartObjects
With co.Chart
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "X"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "y"
End With
End With
Next
Next
End Sub

こんなのではどうでしょうか?

ActiveSheetの全グラフを変更する場合
Sub 軸ラベル一括変換()
Dim co As ChartObject
For Each co In ActiveSheet.ChartObjects
With co.Chart
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "X"
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = "y"
End With
End With
Next
End Sub

全シートの全グラフを変更する場合
Sub 軸ラベル一括変換()
Dim ws As Worksheet
Dim co As ChartObject
For Eac...続きを読む

Q0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題

0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題ですが、一つの数字しか計算が出来ません
5と12の場合は String "5 12" から型 'Long' への変換は無効です。と出てきてしまいます。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Long
Dim f As Long

n = CLng(TextBox1.Text) ←ここにエラーが出ます。

TextBox2.Text = CStr(Recur(n))
End Sub

Public Function Recur(ByVal arg As Long) As Long
If arg = 1 Then
Recur = arg
Exit Function
End If
Recur = arg * Recur(arg - 1)
End Function
End Class

というプログラムです。分かる方よろしくお願いします。
実行エラーです。

0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題ですが、一つの数字しか計算が出来ません
5と12の場合は String "5 12" から型 'Long' への変換は無効です。と出てきてしまいます。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Long
Dim f As Long

n = CLng(TextBox1.Text) ←ここにエラーが出ます。

TextBox2.Text = CStr(Recur(n))
End Sub

Public Function Recur(ByVal arg As Long) As L...続きを読む

Aベストアンサー

TextBoxに入力された値は、単一の文字列として扱われます。
[5 12]と入力した場合にTextプロパティで取り出せる値は、"5 12"というひとつの文字列です。"5"と"12"のふたつの値を取得することはできません。

なので、数字以外の文字を含む文字列である"5 12"を数値型に変換しようとするとエラーが出てきてしまいます。"5あいうえお12"を数値に変換できないのと一緒です。

複数の入力値を取りたいならば、入力用のTextBoxを複数個用意したり、または入力値をスペースで分割して複数個の値を取り出すコードを実装するなどの工夫が必要です。

Qループ中にlabel_clickの読み込みを認識する

開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが
ループ中に、ラベルがクリックされたことを認識したいのです。ソースで説明すると
private void Form1_Load(object sender, EventArgs e)
{
  while(1)
  {
    if(label1がクリックされたら・・・)
    {
    }
    else if(label2がクリックされたら・・・)
    {
    }
  }
}
このようなif文を書きたいのですが、よい方法はないでしょうか?
よければ御知恵を貸してください。よろしくおねがいしますm(__)m

Aベストアンサー

あるプロシージャの中でループしているときに他のコントロールでのイベントを認識させるなら Application.DoEventsなどを呼び出してWindowsのメッセージポンプを機能させましょう

LabelのClickイベント自体は別途記述して そのフォームクラスのフィールドにクリックされたのかどうかを記憶しておきます

そのループ処理中でフィールドをチェックするようにすればいいと思います

boolean lbl1Click= false, lbl2Click = false;
などと宣言しておいて

void lblClick( s as object, e as Eventargs )
{
  Label lbl = (Label)s;
  if ( lbl.Name == "label1 )
  {
    lbl1Click = true;
  }
  esle if ( lbl.Name == "label2" )
  {
    lbl2Click = true;
  }
}
といった具合でクリックイベントを処理します

ループ処理側では
while( 1 )
{
  Application.DoEvents();
  if ( lbl1Click )
  {
    // Label1がクリックされた場合の処理
  }
  else if( lbl2Click )
  {
    // Label2がクリックされた場合の処理
  }
}
といった具合でしょう …

あるプロシージャの中でループしているときに他のコントロールでのイベントを認識させるなら Application.DoEventsなどを呼び出してWindowsのメッセージポンプを機能させましょう

LabelのClickイベント自体は別途記述して そのフォームクラスのフィールドにクリックされたのかどうかを記憶しておきます

そのループ処理中でフィールドをチェックするようにすればいいと思います

boolean lbl1Click= false, lbl2Click = false;
などと宣言しておいて

void lblClick( s as object, e as Eventargs )
{
...続きを読む

Qプログラムとは全く関係ないですが、ウィンドウについて・・・

プログラムとは全く関係ありませんが、コーディングしている時に、
ローカルウィンドウとイミディエイトウィンドウとウォッチウィンドウを
出すと思うのですが、それの位置について前から疑問でした。
私は宙に浮かしておくと邪魔になるので、VBの一番外枠に固定したいのですが、
まず二つを横に並べてから一番下に固定したいのです。
(残りの一つは宙に浮いたままでも構いません)
ところが、宙に浮いてるときに横に並べようしても全然結合できなかったり、
下にくっついたりしてなかなかゆうことをききません。
何かいい方法はありますでしょうか?

Aベストアンサー

→←→←ABを押すとできます
冗談はさておき・・・

地道な努力と根気で解決しましょうw
こちらでできるのは応援だけかと思われ・・・
わたしもたまにそれらのウィンドウが動いてしまったとき、
努力と根気で乗り切っています。

ついでに
SDIは ツール→オプション→詳細設定


todoさんとは血はつながっておりませんが、痒いところに
手が届く発言が多いので、(尊敬の意を込め)勝手に言ってるだけです。

Qワードの連番のラベル名が消える

ワード2003+XPです。
連番機能で、三種類のラベルA,B,Cに対して連番を作成しました。
保存後に開くといつの間にか、ラベルAが全てラベルBに変わり、元のAとBが区別なく連番がつきました。

フィールドコードを見ると元は
ラベルA・・・・・ SEQ ラベルA・・・・
ラベルB・・・・・ SEQ ラベルB・・・・
ラベルC・・・・・ SEQ ラベルC・・・・
だったものが、何故か、

ラベルA・・・・・ SEQ ラベルA・・・・
が全て
ラベルB・・・・・ SEQ ラベルB・・・・
に変わっています。
オフィスと自宅で文書作成をしておりどこで変わったのかわからないのです。
どなたか原因について心当たりあれば教えてください。
手動で、もとに戻しましたが、再発を防止したいので。

Aベストアンサー

図表番号がおかしい動作をするのですね。
もしかしたらWord2000を使っていませんか?

例えば、変更履歴を使っていませんか?
[WD2000] クロスリファレンス、図表番号の番号が異なる
http://support.microsoft.com/kb/252619/ja

それ以外の原因だとこちら↓とか。
http://support.microsoft.com/kb/252619/ja
http://support.microsoft.com/kb/211707/ja

どれもWord2000の不具合のようなのですが、私はWord2000を触る程度に
扱ったことがありますが、現時点での対処方法はサポートページにある
ものを紹介する以外にアドバイスはできません。他のバージョンの場合
ならWordのバージョンを補足されてはいかが。

Word2007を使っている場合だと、私はまったく門外漢ですので補足への
追加回答はほとんどできないと思います。
(他のバージョンでも専門家ではないので門外漢は不適切な使い方かも)

とりあえず変更履歴を使わないとか、[ SEQ ]フィールドを[図表番号]
からではなく直接フィールドコードから入力するとかの手動で対応する
とかで対応ことになるようですが。
(確実な対処方法ではないし、適切なアドバイスでもありませんが)

図表番号がおかしい動作をするのですね。
もしかしたらWord2000を使っていませんか?

例えば、変更履歴を使っていませんか?
[WD2000] クロスリファレンス、図表番号の番号が異なる
http://support.microsoft.com/kb/252619/ja

それ以外の原因だとこちら↓とか。
http://support.microsoft.com/kb/252619/ja
http://support.microsoft.com/kb/211707/ja

どれもWord2000の不具合のようなのですが、私はWord2000を触る程度に
扱ったことがありますが、現時点での対処方法はサポートページにある
もの...続きを読む

Q「Cell( n , "A" )よりも10上のセルに1 or 2 が記入されていなければ、Cell( n , "A" )に1を記入する」

「Cell( n , "A" )よりも10上のセルに1 or 2 が記入されていなければ、Cell( n , "A" )に1を記入する」
というコードを作ってみましたが、メチャクチャな動きになってしまいます(動きが読めません)。
どこが間違っているのか教えてください。
また、もし、よりわかりやすいコードがありましたら教えていただけると嬉しいです。
よろしくお願いいたします。

Sub Cell( n , "A" )に1を記入する()

Dim n As Long
Dim m As Long
Dim s As Long

'現在のセル( n , "A" )より14行上に数値がないことを確認するために
'14行上のセルを全て足し算しています。
For m = n - 14 To n - 1
s = s + Worksheets("Sheet1").Cells(m, "A").Value
Next

'足し算結果がゼロならば何も記入していないと判断し、
'数字の「1」を記入します。
If s >= 1 Then
Worksheets("Sheet1").Cells(n - 1, "A").Value = 0
ElseIf s = 0 Then
Worksheets("Sheet1").Cells(n - 1, "A").Value = 1
End If
End Sub

「Cell( n , "A" )よりも10上のセルに1 or 2 が記入されていなければ、Cell( n , "A" )に1を記入する」
というコードを作ってみましたが、メチャクチャな動きになってしまいます(動きが読めません)。
どこが間違っているのか教えてください。
また、もし、よりわかりやすいコードがありましたら教えていただけると嬉しいです。
よろしくお願いいたします。

Sub Cell( n , "A" )に1を記入する()

Dim n As Long
Dim m As Long
Dim s As Long

'現...続きを読む

Aベストアンサー

はいはい了解。

今着目しているセルが (n,1)であるとする。

条件: 今いるところから上に14行サーチして、一度でも1か2の値が見つかったら
     回答を0とする。14行すべてに1・2の値がひとつも含まれていなければ1とする。



Ans = 1

for i = 1 to 14

x = cells ( n - i , 1 ).value

if x = 1 or x = 2
then
Ans = 0
endif
next i


cells ( n , 1 ) = Ans


デフォルトの回答値=1としておき、一回でも条件にヒットしたら回答値=0にする。
ヒットしたらfor~nextを強制的に閉じてもいいけど、面倒なのでそのまま14回検索する。


人気Q&Aランキング

おすすめ情報