
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは。
>大きな数字を代入しないでと書いてあるのですが、どれくらいの桁数を入れてしまうとダメでしょうか?
というよりも、元々、ご質問の主旨は、数学的な問題だと理解したのですから、それが、どうなるのかは、後は、PCの性能とか、Excelの仕様とかに制約されるということです。たぶん、配列変数のバッファの大きさに関係するものだと思いますが、おやりになってみるのが早いのではありませんか?
数学的な問題としては、この2点の解答で、私は、解決していると思っておりますので、ご質問者が、今、現実に抱えている問題を解決できるのかどうなのかは、こちらからでは分りません。それに、ご質問なさったことは解決しているのではないでしょうか?
>また、もしVBA以外の手段をご存知でしたら教えて頂けますか?
そういうことは、ご質問の時点で明示してください。もちろん、私は、VBA以外を検討した上で、回答をしています。こちらの書いた内容を良く読んでください。
おそらくは、市販のソルバーを購入されればよいのではないかと思います。社名は、Microsoft のサポートに出ているかと思いますが、ソルバー社といいます。Microsoft社では、以下の会社のソルバーを薦めています。
http://www.solver.com/
No.2
- 回答日時:
既に答えがでていますが、私も作ってみました。
(最近似たような問題( http://okwave.jp/kotaeru.php3?qid=1999665 )をやったのでそれの焼き直し)
----------------------------------------------------------------
Private List() As Integer
Private Level As Integer
Private Count As Integer '組み合わせの総件数
Public Sub partition() 'プログラム起動のきっかけ
Dim n As Integer
Count = 0
Level = -1
n = 10 ' 合計となる数
Range("A1").Value = "1~" & n & "の数字があって、その中から合計が10になる組み合わせを探す"
ReDim List(n)
Call part(n)
Debug.Print Count & "通り"
End Sub
Private Sub part(n As Integer)
Dim i As Integer
Dim first As Integer
Dim result As String
If n < 1 Then Exit Sub
Level = Level + 1
List(Level) = n
result = ""
For i = 0 To Level
result = result & List(i) & "+"
Next
result = Left(result, Len(result) - 1)
Range("A2").Offset(Count).Value = result
Count = Count + 1
If Level = 0 Then
first = 1
Else
first = List(Level - 1) + 1
End If
For i = first To n \ 2
List(Level) = i
If n - i <> i Then
Call part(n - i)
End If
Next
Level = Level - 1
End Sub
No.1
- 回答日時:
こんばんは。
ソルバーでやってみようとしたけれど、「解」が見つかりませんでしたので、それは、たぶん、VBAしか無理ではないかと思います。以下で、作ってみました。あまり、大きな数を代入しないでくださいね。
下記の
要素の数:9 というのは、1~9までのこと
合計の目的の数:10 というのは、合計の数値のこと
後は、いじらなくてよいと思います。
'<標準モジュール>
'-----------------------------------------------------------
Private Const N As Integer = 9 '要素の数
Private Const TARGETNUM As Integer = 10 '合計の目的の数
Private k As Integer '取り出される要素数
Private buf() As Integer '出力の際のバッファ
Private ar() As Integer '要素を格納する配列
Private i As Integer
Private j As Integer
Private m As Long
Sub Init()
Dim flg() As Boolean
ReDim ar(1 To N)
ReDim flg(1 To N)
Range("A1").CurrentRegion.ClearContents
For k = 2 To Int(N / 2)
ReDim buf(1 To k)
j = 0: m = 0
For i = 1 To N
ar(i) = i
Next i
Comb 1, flg(), 0
Next k
End Sub
Private Function Comb(Lb As Integer, flg() As Boolean, Used As Integer)
If (N - Lb + 1 + Used < k) Then Exit Function
If (Used = k) Then
For i = Lb To N
flg(i) = False
Next
j = 0
For i = 1 To N
If flg(i) Then
buf(j + 1) = ar(i)
j = j + 1
End If
Next
Call WorkOut(buf())
m = m + 1
Exit Function
End If
flg(Lb) = True
Comb Lb + 1, flg(), Used + 1
flg(Lb) = False
Comb Lb + 1, flg(), Used
End Function
Private Sub WorkOut(BaseArray() As Integer)
Dim rw As Long
Application.ScreenUpdating = False
rw = Range("A65536").End(xlUp).Offset(1).Row
If WorksheetFunction.sum(BaseArray()) = TARGETNUM Then
Cells(rw, 1).Resize(, k).Value = BaseArray()
End If
Application.ScreenUpdating = False
End Sub
この回答への補足
ご回答ありがとうございます!
ところで、大きな数字を代入しないでと書いてあるのですが、どれくらいの桁数を入れてしまうとダメでしょうか?
また、もしVBA以外の手段をご存知でしたら教えて頂けますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- 統計学 Rを用いた「繰り返しがある直交表実験計画法」の分析方法 8 2023/08/01 17:58
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Excel(エクセル) 1から9まで表示するのに必要なボタン 1 2023/02/05 19:06
- Excel(エクセル) エクセルの関数に関しての質問です。 5 2022/10/07 11:17
- 高校 数学A組み合わせの考え方 3 2022/04/19 09:05
- レシピ・食事 栄養的に質問文のやり方を実践しても大丈夫ですか? 4 2022/10/14 04:55
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- その他(プログラミング・Web制作) COBOL計算 2 2022/11/18 14:35
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセル 合計値に一番近い件数を出したい
Excel(エクセル)
-
エクセルで決められた合計になる組み合わせを作成
その他(ソフトウェア)
-
EXCELで数値が異なった数字を足して目標値に最も近い組み合わせを選び、かつその目標値を超えないよう
Excel(エクセル)
-
-
4
エクセルVBAで、特定の数字になる組み合わせを知りたいのですが・・・
Excel(エクセル)
-
5
Excelで合計値を基にデータを均等に分ける
Excel(エクセル)
-
6
エクセルで、幾つかの数値を合計が100になるように計算させる方法
Excel(エクセル)
-
7
エクセル2010で合計5000に近い数字の組み合わせを選ぶ
Excel(エクセル)
-
8
エクセルで重複しない組み合わせ出力方法
Excel(エクセル)
-
9
エクセルで特定の数字となる組み合わせを探したい
Excel(エクセル)
-
10
ナップザック問題?をエクセルにて解決したいです。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
40人は、▄人の50% を教えて欲し...
-
小三算数です。 0➗4=0 4➗0=0...
-
X2乗-1を公式を利用する因数...
-
中3数学についてです! (X3乗)...
-
(2)解説してください!! 数2の...
-
aの2乗かける4乗の答えはなんで...
-
(2分の3)の2乗と(2分の3の2...
-
小学6年生の算数問題の答えを教...
-
『1以外に正の公約数をもたない...
-
3分の2時間を 分に直すにはどー...
-
式の計算の展開についてです。 ...
-
6➗8= 答え 何あまり何 で答えて...
-
一次方程式と二次方程式の連立...
-
xかけるxって答えなんですか?
-
小学5年の算数です。 姪の宿題...
-
1から9までの9個の数字から異な...
-
2√2の答えを教えてください!
-
2xy-3=0 dy/dxの求め方教えて...
-
数B 数列について 209 (1) 2, 2...
-
足し算の順序
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
小三算数です。 0➗4=0 4➗0=0...
-
1から9までの9個の数字から異な...
-
中3数学についてです! (X3乗)...
-
xかけるxって答えなんですか?
-
X2乗-1を公式を利用する因数...
-
式の計算の展開についてです。 ...
-
aの2乗かける4乗の答えはなんで...
-
1500円に3/4を乗じるとは!?...
-
6➗8= 答え 何あまり何 で答えて...
-
(1×6分の1)+(2×6分の1)+...
-
15000円の5%オフ の計算の仕方...
-
3分の2時間を 分に直すにはどー...
-
関数y=2x²において、xの値が1...
-
時速40㎞を分速に直すとどのく...
-
6年生の算数平均値
-
割合の問題について 24Lが30%に...
-
中1数学の問題。 『長椅子に4人...
-
複数の数字の組み合わせの中か...
-
2√2の答えを教えてください!
-
一次方程式と二次方程式の連立...
おすすめ情報