advanced help
per page, with , order by , clip by
Results of 0 - 1 of about 0 (0.000 sec.)
[[20020510124352]]
@digest: 1e256d34f4be92a8665b14cecec37133
@id: 18
@mdate: 2003-04-29T06:41:45Z
@size: 8839
@type: text/plain
#keywords: wans (39542), 2330 (33599), ルf1 (15415), ロ]→ (14495), ルe1 (12583), integer (12437), 910 (9921), ルd1 (9125), 455 (8957), v5 (7781), calc (7646), ans (6482), ルc1 (6300), ー→[ (5662), v4 (5435), v3 (5263), ロ] (4603), ルb1 (4192), cells (3875), v1 (3527), v2 (3441), 255 (2645), ル] (2604), ルa2 (2592), 力→ (2249), 、25 (2127), int (1950), →[ (1893), ルa1 (1886), 回目 (1749), 140 (1597), activesheet (1521)
『エクセルの計算式』(momo)
エクセルの計算というかやり方の質問です。数字の組み合わせで合計が0になるようにしたいのです。例えば2330のなかに910、455、255、140、60の5つの数がいくつはいるかということです。2330なら910が2つと255が2つというように、最後にあまりがでないようにしたいのです。どのような方法で、またどのような式をいれればできるのかを教えてください。皆さんお力を!! ---- 数学が得意そうな人がいるところで聞いたほうがいいかもしれません。 そういう自分は数学苦手なんですけどね(汗)。 ↑の例だと2330で910が2つ、255が2つですけど、455x2=910ですよね。 そうすると910が1つ、455が2つ、255が2つとか、 455が4つ、255が2つというのも正解ということなんでしょうか? プログラムで組めないことはないですが、式でとなるとちょっと... 他の人にバトンタッチ。 (ramrun) ---- できましたァ。(kazu) [ツール]メニュー→[マクロ]→[VisualBasicEditor]を選択します。 画面が変わったら、[挿入]メニュー→[標準モジュール]を選択します。 ここに下のマクロをコピーして貼り付けます。 Excelワークシートに戻って セルF1 に 2330、セルA1 に 910、セルB1 に 455、セルC1 に 255 セルD1 に 140、セルE1 に 60と入力してから [ツール]メニュー→[マクロ]→[マクロ]でcalcを選択すると、 セルA2から下に答えがずらっと出ます。 0 0 2 1 28 0 0 2 4 21 0 0 2 7 14 0 0 2 10 7 0 0 2 13 0 0 0 6 1 11 0 0 6 4 4 0 1 1 0 27 0 1 1 3 20 0 1 1 6 13 0 1 1 9 6 0 1 5 0 10 0 1 5 3 3 0 2 0 2 19 0 2 0 5 12 0 2 0 8 5 0 2 4 2 2 0 3 3 1 1 0 4 2 0 0 1 0 0 2 19 1 0 0 5 12 1 0 0 8 5 1 0 4 2 2 1 1 3 1 1 1 2 2 0 0 2 0 2 0 0 Sub calc() Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, wans As Integer Dim r As Integer, c As Integer Dim ans As Integer, v1 As Integer, v2 As Integer, v3 As Integer, v4 As Integer, v5 As Integer ans = Cells(1, 6) ' セルF1 = 2330 v1 = Cells(1, 1) ' セルA1 = 910 v2 = Cells(1, 2) ' セルB1 = 455 v3 = Cells(1, 3) ' セルC1 = 255 v4 = Cells(1, 4) ' セルD1 = 140 v5 = Cells(1, 5) ' セルE1 = 60 r = 2 c = 1 For i = 0 To Int(ans / v1) + 1 For j = 0 To Int(ans / v2) + 1 For k = 0 To Int(ans / v3) + 1 For l = 0 To Int(ans / v4) + 1 For m = 0 To Int(ans / v5) + 1 wans = v1 * i + v2 * j + v3 * k + v4 * l + v5 * m If wans = ans Then Cells(r, c) = i Cells(r, c + 1) = j Cells(r, c + 2) = k Cells(r, c + 3) = l Cells(r, c + 4) = m r = r + 1 End If Next m Next l Next k Next j Next i End Sub ---- ありがとうございます。答えでましたが、2330のところを色んな数字を入力してマクロを使うと例えば2330の答えが70行あるとして850の答えが2行しかない場合上書きされて表示されるのですが、2行の残りの68行がシート上に2330の答えが残って表示されてしまうのです。丸ごとかきかえれますか?それと最終行のデータだけが必要なのです。それだけを表示させる方法はありますか?宜しくお願いします。 ---- とりあえず簡単に100行クリアするロジックを追加しました。 もし最後の答えだけで良いのなら、『r = r + 1』をコメントにすればできます。 (kazu) Sub calc() Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, wans As Integer Dim r As Integer, c As Integer Dim ans As Integer, v1 As Integer, v2 As Integer, v3 As Integer, v4 As Integer, v5 As Integer ans = Cells(1, 6) ' セルF1 = 2330 v1 = Cells(1, 1) ' セルA1 = 910 v2 = Cells(1, 2) ' セルB1 = 455 v3 = Cells(1, 3) ' セルC1 = 255 v4 = Cells(1, 4) ' セルD1 = 140 v5 = Cells(1, 5) ' セルE1 = 60 r = 2 c = 1 For r = 2 to 100 Cells(r, c) = 0 Cells(r, c + 1) = 0 Cells(r, c + 2) = 0 Cells(r, c + 3) = 0 Cells(r, c + 4) = 0 Next i For i = 0 To Int(ans / v1) + 1 For j = 0 To Int(ans / v2) + 1 For k = 0 To Int(ans / v3) + 1 For l = 0 To Int(ans / v4) + 1 For m = 0 To Int(ans / v5) + 1 wans = v1 * i + v2 * j + v3 * k + v4 * l + v5 * m If wans = ans Then Cells(r, c) = i Cells(r, c + 1) = j Cells(r, c + 2) = k Cells(r, c + 3) = l Cells(r, c + 4) = m r = r + 1 End If Next m Next l Next k Next j Next i End Sub ---- いつも答えが早くてすばらしいです。 たびたびすみません。 そのままコピーして貼り付けて使わせてもらってるんですが、マクロの実行にすると「コンパイルエラー Nextで指定された変数の参照が不正です」と表示されるのですが。 『r = r + 1』をコメントにすればできます←これはどうやれば良いですか? お忙しいと思いますが、宜しくお願いします。 ---- スミマセン。テストもせずに書き込んでしまいました。 訂正版を下へ書きます。誤『Next i』正『Next r』です。 コメントは先頭に『'』シングルクオーテーション(SHIFT+7)を入れます。 (kazu) Sub calc() Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, wans As Integer Dim r As Integer, c As Integer Dim ans As Integer, v1 As Integer, v2 As Integer, v3 As Integer, v4 As Integer, v5 As Integer ans = Cells(1, 6) ' セルF1 = 2330 v1 = Cells(1, 1) ' セルA1 = 910 v2 = Cells(1, 2) ' セルB1 = 455 v3 = Cells(1, 3) ' セルC1 = 255 v4 = Cells(1, 4) ' セルD1 = 140 v5 = Cells(1, 5) ' セルE1 = 60 r = 2 c = 1 For r = 2 to 100 Cells(r, c) = "" Cells(r, c + 1) = "" Cells(r, c + 2) = "" Cells(r, c + 3) = "" Cells(r, c + 4) = "" Next r r = 2 For i = 0 To Int(ans / v1) + 1 For j = 0 To Int(ans / v2) + 1 For k = 0 To Int(ans / v3) + 1 For l = 0 To Int(ans / v4) + 1 For m = 0 To Int(ans / v5) + 1 wans = v1 * i + v2 * j + v3 * k + v4 * l + v5 * m If wans = ans Then Cells(r, c) = i Cells(r, c + 1) = j Cells(r, c + 2) = k Cells(r, c + 3) = l Cells(r, c + 4) = m ' r = r + 1 End If Next m Next l Next k Next j Next i End Sub ---- ありがとうございます!!ばっちりできました。またわからないことがあれば質問させてもらいます。宜しくおねがいします。 ---- またまた質問です。 マクロででた答えをこたえがでるたびに別のシートにうつしたいのですが。例えば、 910 455 255 140 60 1回目の入力→2330 1 0 2 0 0 2回目の入力→3140 2 0 4 0 5 3回目 というような感じにしたいのですが。最後にそれぞれの集計をしたいので。ややこしいことをいってすみません。宜しくおねがいします。 ---- 作り直しました。 ばたばたしていて、オーバーフローする場合があるなど テストがまだ完全ではありませんが。 セルB1 に 910、セルC1 に 455、セルD1 に 255 セルE1 に 140、セルF1 に 60と入力します。 セルA1 に 2330、セルA2 に 2530、セルA3 に 600と入力して、 この範囲を選択します。 [ツール]メニュー→[マクロ]→[マクロ]でCellRangeを選択すると、 新しいシートのセルA2からF2に答えが出ます。 一度実行すると、シートの名前を2330などと変更したので、 2回目からは前回のシートを削除する必要があります。 (kazu) Sub CellRange() Dim cl As range For Each cl In Selection calc cl.Value Next End Sub Sub calc(ans) Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, wans As Long Dim r As Integer, c As Integer Dim v1 As Integer, v2 As Integer, v3 As Integer, v4 As Integer, v5 As Integer v1 = Sheets("Sheet1").Cells(1, 2) ' セルB1 = 910 v2 = Sheets("Sheet1").Cells(1, 3) ' セルC1 = 455 v3 = Sheets("Sheet1").Cells(1, 4) ' セルD1 = 255 v4 = Sheets("Sheet1").Cells(1, 5) ' セルE1 = 140 v5 = Sheets("Sheet1").Cells(1, 6) ' セルF1 = 60 Sheets.Add ActiveSheet.Select ActiveSheet.Name = ans c = 1 r = 2 ActiveSheet.Cells(r, c) = ans For i = 0 To Int(ans / v1) + 1 For j = 0 To Int(ans / v2) + 1 For k = 0 To Int(ans / v3) + 1 For l = 0 To Int(ans / v4) + 1 For m = 0 To Int(ans / v5) + 1 wans = v1 * i + v2 * j + v3 * k + v4 * l + v5 * m If wans = ans Then ActiveSheet.Cells(r, c + 1) = i ActiveSheet.Cells(r, c + 2) = j ActiveSheet.Cells(r, c + 3) = k ActiveSheet.Cells(r, c + 4) = l ActiveSheet.Cells(r, c + 5) = m End If Next m Next l Next k Next j Next i End Sub ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/200205/20020510124352.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 87334 documents and 561520 words.

訪問者:カウンタValid HTML 4.01 Transitional