
いつもお世話になっております。
ブックAのマクロからブックBのデータを以下のように配列に入力しています。
myData = Workbooks("ブックB.xls").Worksheets("temp").Range("A1:G1000")
配列myDataに格納された値の最小値を調べたいのですが、myDataに格納されているデータは数値だけではなく、日付、時間も含まれます。
数値のみが含まれるのはmyDataの3~6列です。
myDataが数値のみの配列の場合、
WorksheetFunction.Min(myData)
で配列全体を調べることが出来るのは分かったのですが、今回の場合は日付、時間が含まれるため「型が一致しません」というエラーがでて、最小値を求めることが出来ませんでした。
WorksheetFunction.Minを使って特定の列(今回の場合3~6列)に格納されている数値の最小値を調べることは出来るのでしょうか。
3~6列を別の配列に格納すればそれで解決なのですが、出来れば変数をmyDataだけで済ませたいと思っています。
また、WorksheetFunction.Minを使わないでfor文を使う方法も考えつきましたが、できればWorksheetFunction.Minなどの関数を使ってスマートにやりたいと思っています。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんばんは。
>関数を使ってスマートにやりたいと思っています。
よく質問で、「スマート」という言葉が出てきますが、私は意味が良く分からないです。「スリム」というなら意味は分かりますが、それは、良いときと悪いときがあります。
コードに合理性があって、エラーを吐かなければそれで良いとすればよいと思います。ベテランの人のコードは、単に論理性と合理性の追求だけであって、それ以上のものを求めているわけではありません。しょせん、VBAマクロの、マクロという意味は、タスクを実行するという意味を含んでいるので、仕事をしなければマクロではない、という結果論でしかありません。それと、関数も、中身は人の作ったプログラミングです。単に、作られた言語の違いでしかありません。
コードですが、myData で、配列を使うのでしょうか?
Dim r As Range
Dim ret As Double
Set r = Workbooks("ブックB.xls").Worksheets("temp").Range("C1:F1000")
ret = WorksheetFunction.Min(r)
で良いと思うのです。
それに、時間であろうが、日付であろうが、日付型は、すべて数値型ですから、それ自体ではじかれることはありません。時間や日付のセルを省くなら、ループで探すしかないと思います。範囲内に、エラー値があれば、プロパティエラーが発生します。
「型が一致しません」
そのエラーは、おそらく、基本的に、配列の変数の型の問題だろうと思います。
ワークシートの2次元配列を受けるなら、
Dim myData As Variant
ということです。
回答、ありがとうございます。
私の稚拙な文章で不快な思いをされたようで申し訳ありませんでした。
myDataで配列を使う理由は、今回の質問と関係ない部分でループ処理をするためです。
ループ内でいちいちブックBへアクセスすると速度低下を招くと考えたからです。
今回の質問の、2次元配列に格納された値の最小値を知りたいというのは私がやりたいと思っていることのごく一部分に過ぎません。
hana-hana3様へのお礼でも書きましたが、私はプログラミングに対する考え方から直さないといけませんね。
お騒がせいたしました。
No.1
- 回答日時:
>スマートにやりたいと思っています。
myData をどのように利用するのか解りませんが、スマートにやりたいと言うなら、意味の異なる部分まで取り込まない事だとおもいます・・・。
myMin = WorksheetFunction.Min(Workbooks("ブックB.xls").Worksheets("temp").Range("C1:F1000"))
回答、ありがとうございます。
WorksheetFunction.Minを使って特定の列に格納されている数値の最小値を調べることが出来るかどうかが知りたかったのですが、どうやらそういう方法はないようですね。
スマートにと言うなら、hana-hana3様が仰るように余計なものを取り込まなければいいんですよね。
質問をする前に、私はプログラミングに対する考え方から直した方がいいようですね。
申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
このQ&Aを見た人はこんなQ&Aも見ています
-
配列の中の最大値とそのインデックス番号を取得する方法
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
Excel vba 配列内の最大値を求めたいです。
Excel(エクセル)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
6
Excel VBA ListViewサブアイテムの文字色
その他(プログラミング・Web制作)
-
7
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
8
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
9
VBA 配列に格納した値の平均のやり方についてお教え願います
Visual Basic(VBA)
-
10
Excelで重複データの件数ではなく、何番目かを求める方法
Excel(エクセル)
-
11
split関数で区切り文字がない場合
Visual Basic(VBA)
-
12
'ユーザーフォーム右上隅の[×]ボタンを表示しない
Visual Basic(VBA)
-
13
VBA ListViewの選択Itemを削除する
Excel(エクセル)
-
14
VBA 1次元配列を2次元に追加する
Visual Basic(VBA)
-
15
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
Accessのクエリの結果を、既存...
-
access2021 強制終了してしまう
-
access2021 VBA メソッドまたは...
-
Access Error3061 パラメータが...
-
Access VBA [リモートサーバー...
-
アクセスの更新クエリでカレン...
-
ACCESS VBA でのエラー解決の根...
-
AccessVBAで任意の複数リンクテ...
-
Microsoft365にAccessってあり...
-
Accessのクエリで、replace関数...
-
Excelを開く時と閉じる時に一度...
-
列が255以上のCSVファイルをAcc...
-
Accessのフォーム上のテキスト...
-
エクセルのVBAについて教えてく...
-
Access で半角スペースと全角ス...
-
MS.Access でサブフォーム付の...
-
Accessのレポートについて
-
access2019の起動が遅い
-
access2021 メッセージボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
Accessのクエリで、replace関数...
-
access2021 強制終了してしまう
-
ACCESS VBA でのエラー解決の根...
-
Access VBA [リモートサーバー...
-
Accessのスプレッドシートエク...
-
Accessのレポートについて
-
access2021 VBA メソッドまたは...
-
Access Error3061 パラメータが...
-
access2019 チェックボックスと...
-
Accessのクエリの結果を、既存...
-
accessでlaccdbファイルが削除...
-
Access VBA を利用して、フォル...
-
accessデータを指定したExcel、...
-
Accessのリンクテーブルのパス...
-
列が255以上のCSVファイルをAcc...
-
Accessのクエリの印刷設定
-
Accessでレポートを印刷する時...
-
Accessフォームの配色テーマを...
-
Accessデータベースに含まれる...
おすすめ情報