今日、次のコードは機能しませんでした。誰かが私のコンピューターをいじっていると思います。これがどのように複製されるのか、または私のコードにエラーがあるのだろうか:
'number of rows for a certain column:
dim c as integer
c = WorksheetFunction.counta(columns("A:A"))
'get a value
c = range("A1")
追加:
私のコードは宿題「モンテカルロ シミュレーション」です。基本的に、クッキーを焼くために使用されるアイテムのリストのコストを変更し、そのためにさまざまなタイプの分布 (均一、正規、離散) を使用しています。循環参照を使用した不正なループが原因で、Excel はそのリソースを使い果たしました - そのため、エラー メッセージが表示されます)。Excelを何度も再起動しました。最終的に、教授から提供された元のコードを使用し、既にコーディングした関数と手順を段階的に再挿入して、コーディング作業で Excel のエラー メッセージがどのように発生したかを調べました。以前は観察されていた 30 分ではなく、1 分で 1000 回の「モンテカルロ シミュレーション」を実行することになりました。私が提供したコードは基本的なものだと思いますが、古いコードを VBA モジュールにコピーしても問題を解決できません。
2021 年 7 月 20 日に追加された
このコードは、コントロール コレクションを使用して、フォーム上のデータの値を取得します。2 つのテキスト フィールドを持つフォームが必要です。つまり、double 値のコンテンツが必要です。そのため、今日からコントロール コレクションが機能していません。
つまりtxtPerc1
、txt1
関数は離散分布とともに値を返します。
「サブまたは関数が定義されていません。フィールドの名前を確認しましたが、問題ありませんでした。
'sample call:
'discreteDistribtion("Hallo", 3)
' So I have six fields named:
' halloPerc1, halloPerc2, halloPerc3 and hallo1, hallo2, and hallo3
' the function takes here "hallo" and generates the names Hallo1, Hallo2, Hallo3 and halloPerc1, halloPerc2, and halloPerc3
' the function takes the value of hallo1, hallo2, or hallo3, each of these fields having doubles as content.
' According to the logic, hallo1, hallo2 or hallo3 values are returned!
' The code does not work on my computer, when I uncomment the controls code, it worked the weeks before.
Function discreteDistribution(strCtrl As String, iEnd As Integer, Optional iStart As Integer = 1)
Dim i As Integer, sum As Double, r As Double, strTemp As String
sum = 0
r = Rnd
discreteDistribution = 0
For i = iStart To iEnd
strTemp = strCtrl & "Perc" & i
''''''sum = sum + Controls(strTemp).Value
If r < sum Then
strTemp = strCtrl & i
'''''' discreteDistribution = Controls(strTemp)
Exit For
End If
Next i
End Function
ワークブックに別のシートで 2 番目のユーザーフォームを追加しましたが、次のコードが機能しています。
Option Explicit
Dim i As Integer
Private Sub CommandButton1_Click()
For i = 1 To 10
Controls("TextBox" & i).Value = Cells(i + 1, 1).Value
Next i
End Sub
Private Sub UserForm_Click()
End Sub
このコードは、スプレッド シートに集められた電話番号を多数のテキスト ボックスに入力します。それでも、元のコードを機能させることができませんでした。