我流でVBAを勉強し、マクロを作っている者です
あるデータの度数分布を調べるマクロをつろうとしていますが、うまくいきません。
FREQUENCY関数のデータ範囲の指定で変数を使いたい(元のデータが日を追う毎に増えていくので・・・)のですが、エラーになります。どこが変でしょうか?
よろしくお願いします。
Sub データ最終行を調べる()
Dim 総件数 As Long
Dim 値 As Integer
総件数 = 100000
Sheets("データシート").Select
Range("d2").Select
For G = 1 To 総件数
値 = ActiveCell.Value
If 値 = 0 Then
Exit For
Else
ActiveCell.Offset(1, 0).Activate
End If
Next G
gyou = ActiveCell.Row
dataHANI = Range("d2:d" & gyou)
End Sub
Sub 度数分布を調べる()
データ最終行を調べる
Sheets("度数分布").Select
Range("B2:B21").Select
Selection.FormulaArray = "=FREQUENCY(dataHANI,a2:a21)"
End Sub
No.3ベストアンサー
- 回答日時:
こんにちは。
私の回答は、VBAに関するのみになりますが、エラーになる理由からですが、
Sub 度数分布を調べる()
データ最終行を調べる '1
Sheets("度数分布").Select
Range("B2:B21").Select
Selection.FormulaArray = "=FREQUENCY(dataHANI,a2:a21)" '2
End Sub
1. データ最終行を調べる
で、せっかく範囲は取れていても、その範囲を「度数分布を調べる」の次の行に渡していないのです。こういう場合は、別のプロシージャでは、モジュールレーベルの変数を取るか、引数にして参照渡ししなければなりません。(少し、難しくなります)
2.
式の中は、文字列です。文字列の中に、変数を入れても、ただの文字だけです。範囲をアドレスに換えて、文字列にしなければなりません。
それで、総合的に、このマクロをそのまま達成しようとすると、難しいコードになってしまいます。そして、最終的に、数式に渡すのは、文字列ですから、せっかく、Rangeオブジェクトで範囲をとっても、それ自体は活かしきれません。
今のままのコードを換えてみると、以下のようになるかと思います。
With ステートメントで括られていますが、同じ文字の繰り返しになるので、見易さのために、使いました。(「.」の位置にご注意)
Sub 度数分布を求める2()
Dim dataHANI As String
With Sheets("データシート")
.Select
dataHANI = .Range("d2", .Range("d2").End(xlDown)).Address
dataHANI = .Name & "!" & dataHANI
End With
Sheets("度数分布").Select
Sheets("度数分布").Range("B2:B22").FormulaArray = _
"=FREQUENCY(" & dataHANI & ",a2:a21)"
End Sub
No.4
- 回答日時:
こんにちは。
VBAを使うときは質問のコードのように式をセルに代入するのではなくて、直接計算結果を入れた方がベターだと思います。
--------------------------------------------------
Sub 度数分布を求める()
Dim LastRow As Long
Dim dataHANI As Range
With Sheets("データシート")
LastRow = .Range("D65536").End(xlUp).Row
Set dataHANI = .Range("D2:D" & LastRow)
End With
Sheets("度数分布").Select
Range("C2:C22").Value = WorksheetFunction.Frequency(dataHANI, Range("A1:A21"))
End Sub
----------------------------------------------
以上です。
No.2
- 回答日時:
こんにちは。
maruru01です。全部見たわけではないですが。
FREQUENCY関数を入力する配列範囲(質問欄では「B1:B21」)は、
FREQUENCY関数の第2引数の区間配列(質問欄では「A1:A21」)より1つ大きくないといけないと思います。
なので、入力範囲を、
「B1:B21」や「B2:B22」
にしてみて下さい。
ちなみに、
区間配列が{A,B,C}
の場合は、データ区分は、
「0~A」「A~B」「B~C」「C~」
になります。
(詳細は、VBAではなく一般の方のヘルプを参照)
No.1
- 回答日時:
[データ最終行を調べる()]で取得した変数[dataHANI]はどのようにして[度数分布を調べる()]に渡されますか?
VBAを書くときは Option Explicit宣言してありますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
この行は既に別のテーブルに属...
-
VBA 空白セルを削除ではない方...
-
【エクセル】測定時間がバラバ...
-
ブレーカー落ちで壊れたりしな...
-
C言語プログラム変更
-
Winsockで1460Byte以降のデータ...
-
オープンチヤットでデータ削除...
-
大学のゼミのレポートがムカつ...
-
配列でデータが入っている要素...
-
曲線グラフからピーク値を求め...
-
C#でヒストグラムの作り方
-
パースとはなんですか?
-
メモ帳(テキストデータ)をExc...
-
逆離散フーリエ変換
-
TBWに達するまで後5GBの時に100...
-
DataGridViewのデータの引渡し...
-
VBAで「"」[']をエスケープする...
-
[VBA] CountIfに変数を使いたい
-
モジュラス103の算出方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
エクセルで2つの時系列のデー...
-
二分探索の平均探索回数
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
ブレーカー落ちで壊れたりしな...
-
この行は既に別のテーブルに属...
-
ACCESSからEXCELに出力する際、...
-
ユーザーフォームのテキストボ...
-
シーケンサにパソコンからアク...
-
EXCELVBAでSQLserverからデータ...
-
VBAを使ってOutlookメール本文...
-
S9タイプからXタイプにデータ...
-
ウィンドウ枠の固定を行の2箇所...
-
プログラミング python pandas ...
-
Accessで該当データにフラグを...
-
カンマからスラッシュに
おすすめ情報