トップページtech
1002コメント374KB

Excel VBA 質問スレ Part45 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2017/01/03(火) 02:51:16.56ID:9Y8iTik6
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part44
http://echo.2ch.net/test/read.cgi/tech/1479421482/


※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/
0710デフォルトの名無しさん2017/02/15(水) 13:47:11.11ID:6F4521pz
MSはよく言われるようにOSじゃなくてOfficeで金儲けしてるから
0711デフォルトの名無しさん2017/02/15(水) 14:58:51.71ID:5igOyxsI
シートのA列に日付、B列に時刻、C列はアイテム名称、D〜L列は属性データで、1行目は項目名を入れた表を作りました

日付、時刻は上から下へと、時系列に並んでいます
日付・時刻・アイテム名の同時重複ありです

やりたいこと=「表示したい”行数を入力”して、その行数をシートの左上にして表示する」

Sub Lookup_Row()

' 使用済みの最終セルの選択
 Dim MaxRow As Integer
 With Range("A1").SpecialCells(xlLastCell)
  MaxRow = .Row  '最終セルの行
 End With

' 表示したい行数を入力
 Dim NumRow As Integer
 NumRow = InputBox("表示したい行数を入力", Title:="行数入力", Default:=buf)
  If NumRow > 0 And NumRow <= MaxRow Then
   ActiveWindow.ScrollRow = NumRow
  Else
   MsgBox "行数が許容範囲を超えています =" & NumRow
  End If

End Sub

入力ミスがあった場合
入力で-100 → If文でチェック → MsgBox "行数が許容範囲を超えています =" & NumRow
入力で1000000 → 実行時エラー オーバーフローしました。
入力でAAA → 実行時エラー オーバーフローしました。
となります、入力が整数型で1〜MaxRowなら実行、それ以外はMsgBoxでエラー表示させたいのですが
0712デフォルトの名無しさん2017/02/15(水) 15:37:06.29ID:xVeThrOd
>>
On Error使うか
Dim NumRow As Variant にして後で数値か? 許容範囲か? チェックしる
0713デフォルトの名無しさん2017/02/15(水) 15:41:53.42ID:6lReDbAz
>>711
そうなんですか。
ご苦労が多そうですが
養生なさってください。
0714デフォルトの名無しさん2017/02/15(水) 17:50:36.24ID:uggMbaXG
変数の型とかわかってない奴はVBAなんか使うなよ
0715デフォルトの名無しさん2017/02/15(水) 18:10:31.64ID:khJPh7n1
inputboxじゃなくてフォームでっち上げた方が入力チェックは楽じゃねえか
0716デフォルトの名無しさん2017/02/15(水) 18:19:40.04ID:LgUU6dFz
>>714
面倒なので迷ったらVariantですごめんなさい
0717デフォルトの名無しさん2017/02/15(水) 18:58:10.50ID:MestFhjv
使い方を限定するのはプロジェクト単位でいいと思う
この場ではどんな使い方だとしても目的を果たせればいい
メンテナンス性を考えるならできあがってから考えても遅くないし
0718デフォルトの名無しさん2017/02/15(水) 19:35:12.52ID:8P5JIAcq
>>714
Variant 以外はあまり使いませんな。カウンタに Long を使うくらいか。
0719デフォルトの名無しさん2017/02/15(水) 19:49:51.07ID:yaVm0IDe
variantはクソなんかじゃない
variantを使えない奴がクソ呼ばわりしてるだけだ
0720デフォルトの名無しさん2017/02/15(水) 20:00:12.56ID:F/aHSwB0
型が決まる時はvariantにしちゃダメだろ。
基本使うべきじゃない。

Rangeを配列で受ける時とか、特別な理由があるなら分かるけど。
0721デフォルトの名無しさん2017/02/15(水) 20:15:18.98ID:8QtzDjS+
シート2枚のブック(シート1にデータ、シート2にグラフが20個ほど)がありまして、
揮発性関数を一切使ってないのに(マクロも外部データの参照も使っていません)
ブックを開いてすぐ閉じても変更を保存するか確認するダイアログボックスが出てきて困っています。
なんでこんな事になったのか心当たりが有りません。
揮発性関数以外にブックの保存を促す要素って何か有るのでしょうか?
0722デフォルトの名無しさん2017/02/15(水) 20:34:50.87ID:khJPh7n1
VariantはRangeを配列に突っ込むか関数の引数の型が確定しないときにしか使わんわ
型が確定してないのとかチンポジずれてるみたいで気持ち悪い
0723デフォルトの名無しさん2017/02/15(水) 20:46:48.47ID:wfPvVi6q
変数宣言時の型推論、Return文、ラムダ式、ジェネリックが足りない
マイクロソフトは早く拡張しろ
0724デフォルトの名無しさん2017/02/15(水) 20:52:37.92ID:UwBeD5Zq
Excel C#Aはよ
0725デフォルトの名無しさん2017/02/15(水) 20:52:53.63ID:je/ZAYb+
>>720,722
ほとんどの場合引数の型が確定しないので結局Variantだらけになる
0726デフォルトの名無しさん2017/02/15(水) 21:05:02.59ID:khJPh7n1
>>725
でもあとからキャストするでしょ
0727デフォルトの名無しさん2017/02/15(水) 21:09:13.63ID:F/aHSwB0
>>725
はあ?
確定しないことなんて殆ど無いわ。
設計が悪いんだろう。
0728デフォルトの名無しさん2017/02/15(水) 21:20:08.65ID:yaVm0IDe
ド素人の事務のねえちゃんでも全部variantで書けるのに
お前らどんだけプログラミングが下手なんだよ
0729デフォルトの名無しさん2017/02/15(水) 21:21:34.66ID:OJCj5dj4
>>725
馬鹿
0730デフォルトの名無しさん2017/02/15(水) 21:22:18.43ID:khJPh7n1
型が確定しない関数は入ってくる値をゴニョゴニョして任意の値に変換したいときとかに、日付だったり数値だったり文字列だったりで分岐させてリターンを変化させるときとかかな
他になんか必要な場面あるかね
0731デフォルトの名無しさん2017/02/15(水) 21:23:23.84ID:MestFhjv
ど素人だからこそvariantを多用するんだよ
0732デフォルトの名無しさん2017/02/15(水) 21:23:56.89ID:khJPh7n1
>>728
variantで書けるから偉いのか?
全部variantで書いて処理速度が問題ない程度のプログラムしか書かないならそれでも良いんじゃない
0733デフォルトの名無しさん2017/02/15(水) 21:25:00.63ID:yaVm0IDe
>>732
は?なんでそうなるんだよ

variantで書けないから下手なんだよ
0734デフォルトの名無しさん2017/02/15(水) 21:27:54.70ID:UwBeD5Zq
>>733
そんなにvariantが好きならjsをオススメする
0735デフォルトの名無しさん2017/02/15(水) 21:28:00.36ID:xVeThrOd
Dim a(10) As Long
Dim b As Variant
For Each b In a

Next
とか
0736デフォルトの名無しさん2017/02/15(水) 21:31:10.86ID:F/aHSwB0
いろんな言語のコーディングの本でも読んだら。
VB系のプログラマーが他から糞呼ばわりされるのが良く分かる。

俺に言わせればVBが糞なんじゃなく、そのプログラマーが糞なんだが、確かにVBAには糞コード書く奴が多いよな。
0737デフォルトの名無しさん2017/02/15(水) 21:33:07.33ID:khJPh7n1
>>733
いやね、variantで書けと言われれば書けるよ
書く必要がないし気持ち悪いし大抵遅くなるからやらないだけで
>>735
その書き方あんま見たことないけど普通のforに比べて速かったりするの?
0738デフォルトの名無しさん2017/02/15(水) 21:35:18.88ID:vaCBxgQg
>>721
コードはって
0739デフォルトの名無しさん2017/02/15(水) 21:38:36.03ID:A9woeCde
>>738
>マクロも外部データの参照も使っていません
って言ってるのに
>コードはって
とか言ってもな
0740デフォルトの名無しさん2017/02/15(水) 21:38:42.30ID:yaVm0IDe
>>737
variantの遅さなんてアルゴリズムの遅さに比べれば誤差にも届かんのだよ
つまり遅いのはvariantのせいではない
0741デフォルトの名無しさん2017/02/15(水) 21:46:30.70ID:F/aHSwB0
>>740
そういう問題じゃ無い。
そして、実際に遅い時点で糞コード。
メリットが無い安易な逃げだな。
技術力の無さを埋めるための。

まったく、動けば良いと思ってる奴が多すぎる。
0742デフォルトの名無しさん2017/02/15(水) 21:49:04.70ID:khJPh7n1
>>740
この人のプログラムは変数名もきっと適当であとから見たら何が何だかわからないだろうね
0743デフォルトの名無しさん2017/02/15(水) 21:49:26.25ID:yaVm0IDe
>>741
つまりお前がクソコード書いてるって事じゃないかw
何言ってんのお前w
0744デフォルトの名無しさん2017/02/15(水) 21:50:42.27ID:UwBeD5Zq
>>743
日本語でおk
0745デフォルトの名無しさん2017/02/15(水) 22:05:34.61ID:je/ZAYb+
>>727
確定しないことがほとんどさ
0746デフォルトの名無しさん2017/02/15(水) 22:13:59.52ID:YhLDJr+c
確定しないと言うか型の制御をexcelに委ねちゃって
コードに表れないことばっかになると読む方が辛い
0747デフォルトの名無しさん2017/02/15(水) 22:14:54.77ID:yaVm0IDe
最後にマジレス
variantを使って分かりにくくなるのは型をコントロール出来ていないコードだから
重要なのは変数の型ではなく値の型
値の型が一貫してコントロール下にあるコードは全てvariantでも読みやすくバグも出にくい
本当に気を使うべきは値の型
0748デフォルトの名無しさん2017/02/15(水) 22:15:25.45ID:je/ZAYb+
まあ定量的にいうと、手元にある大きめのbasファイルで As xxx を数えてみたら

As Variant 282個
As その他 102個

だった。
「ほとんど」というのは言い過ぎだったかも。
0749デフォルトの名無しさん2017/02/15(水) 22:19:05.17ID:je/ZAYb+
別のbasファイルでは
 As Variant 238個
 As その他 17個
だった。こっちは「ほとんど」と言える。
0750デフォルトの名無しさん2017/02/15(水) 22:28:33.65ID:wfPvVi6q
>>747
タイプセーフにすれば動作する前に型をコントロールできていることがはっきりする
0751デフォルトの名無しさん2017/02/15(水) 22:31:45.05ID:m87qnWVq
Excel VBAのみでgzファイルを解凍したいのですが可能でしょうか?
別途DLL、EXE、その他一切のファイルの使用は出来ません
Webサーバを立ててそっちにPOSTして解凍したファイルを送り返してもらう、
という案もだめでした(ネットワークに繋がっていなくても動ける必要アリ)

ZIPならApplication.Shellを使うという定番技があるんですが、gzファイルでも
同じように解凍出来ませんでしょうか?
.NETの System.IO.compressionが使えたりしないか試してみましたらCOMでは
ないようで駄目でした
0752デフォルトの名無しさん2017/02/15(水) 22:37:18.33ID:khJPh7n1
>>747
いや、最後にすんなやw
型をvariantにする必要性が全く見えてこない
少なくともVBAはコード側で型付けする言語だと思ってるんですが
.NETだったら全部Objectで処理するのか…?
0753デフォルトの名無しさん2017/02/15(水) 22:38:45.19ID:F/aHSwB0
>>747
だからそういう問題じゃない。
絶対にLong以外有り得ないのにVariantにするのはクソだ。
そして決まらないのは設計がクソだからだ。
というより設計して無いんじゃないか?
取りあえず動くようにしてるだけで。

「Variantでも」と言ってる時点で糞。
同等ではメリットになっていない。
そして実際にはデメリットに気付いて無いだけ。
0754デフォルトの名無しさん2017/02/15(水) 22:46:22.73ID:je/ZAYb+
>>747
値の型って何?
Variant変数に格納された値自体の型ってことなら、コントロールは難しいと思うよ。
0755デフォルトの名無しさん2017/02/15(水) 22:46:54.44ID:J6VHa6KY
これは数量だからロングにしよう、とか思ってもですねぇ、
ウチの会社のエクセルは、神エクセルですから、
セルに「1/3個」とか平気で書いちゃうんですね。
だから、バリアントじゃないとエローになっちゃうんですね。
0756デフォルトの名無しさん2017/02/15(水) 22:50:51.92ID:khJPh7n1
>>755
バカかな?
0757デフォルトの名無しさん2017/02/15(水) 22:51:02.74ID:BBx5ZcB8
Variant型を積極的に使用するかどうかなんて状況によるだろ。
とりあえず動けばいいマクロを書く場面だって社内SEならよくあるだろうし、
逆に型指定しておく事でバグが発生しにくくなるとかマクロが使いやすくなるっていうなら積極的に型指定すべきだし。

いついかなる場合においてもVariant型は極力避けるべきであるって論調なら、ただ頭が固すぎる。
0758デフォルトの名無しさん2017/02/15(水) 22:52:39.74ID:tPmatHBd
セルの書式で
0"個"
にしてあるのに「3個」って入力されて集計から漏れるのは防ぎようがない
VBA使っていいんなら勝手に「個」を消して、全角の数字も半角にして、オーをゼロに置換してやるんだけど
0759デフォルトの名無しさん2017/02/15(水) 22:53:31.89ID:yaVm0IDe
>>752,753
じゃあもう一回w

お前らプログラミングがヘタクソだから
variantでキレイなコードを書けるように練習しなよ

俺が言ってるのそういう事w
お前らの興味が向いている様な初心者のおまじないみたいな話は
ハナから問題にしてないw
0760デフォルトの名無しさん2017/02/15(水) 23:06:54.66ID:khJPh7n1
>>759
極論言えばだな
お前はループ用の変数までvariantで書くのか?
という話なんだよ
0761デフォルトの名無しさん2017/02/15(水) 23:09:58.33ID:F/aHSwB0
>>759
完全にアホ過ぎる。
Variantで書いても既にキレイなの。
分かる?
でもそれはきちんと型指定してもキレイなの。
0762デフォルトの名無しさん2017/02/15(水) 23:13:41.64ID:BBx5ZcB8
>>760
ループ用の変数はループに入る時点でロックされて型が決定するから、
Variant型でやろうがLong型でやろうが大して差は開かなかったはず。

ただ変数型の違いよる処理時間はVariant = Long > Integer > Byteの順になってたはずだから、
ループ回数の上限が分かっているならIntegerやByteを使うのは有効。
0763デフォルトの名無しさん2017/02/15(水) 23:15:19.21ID:F/aHSwB0
設計思想が無いんだろうな。
キレイに書くのは当たり前。

>>757
取りあえずってのはそいつのコーディングスタイルというか、癖みたいなもんもあるからあり得るだろうな。
俺だってコメント全く無しで書くこともある。
その時だけのマクロとか。

でもそれをOKとは言わないだろ。
0764デフォルトの名無しさん2017/02/15(水) 23:15:24.29ID:khJPh7n1
型の指定が初心者のおまじないとか何を言ってるのかわからないよ
まあその程度のプログラムしか書いてないんだよ
worksheetとかrangeとかを全部objectで指定してるのと一緒だぞ
0765デフォルトの名無しさん2017/02/15(水) 23:16:47.40ID:aYEzhSy+
基本的に変数はdoubleなりなんなりで宣言する派だが
ループ用の変数なんてどうでもいいから宣言もしてないな
結果variantになってるなw
0766デフォルトの名無しさん2017/02/15(水) 23:17:28.43ID:je/ZAYb+
>>755
それはエラーになるのが正解
というか自ら進んでエラーを出して止まるべき

俺のプログラムがほとんど As Variant だと言ったけど、それはVariantであるべきプログラムだから。
0767デフォルトの名無しさん2017/02/15(水) 23:18:17.50ID:pcB8Xi3u
型わかってるのにVariant型じゃないと入れられないのとかあるじゃん
0768デフォルトの名無しさん2017/02/15(水) 23:19:42.16ID:khJPh7n1
>>762
でもループ変数をvariantで書くやつなんかほとんどいない
なぜなら意味がないから
longで書くことには意味があるから
variantにすることに意味があるならする
処理速度的に意味がなくても明示的にこの変数はこの型ですよ、ってしてあげることで可読性は上がる
0769デフォルトの名無しさん2017/02/15(水) 23:20:13.95ID:je/ZAYb+
>>762
普通に考えると
Long <= Integer = Byte < Variant の順だと思う
0770デフォルトの名無しさん2017/02/15(水) 23:24:33.53ID:F/aHSwB0
>>758
いや、ここVBAのスレだろ。
で、"3個"をそのまま受け取るような処理を何も考えずに書くから糞なんだよ。

まず第1にそのまま受け取る処理が良いのかどうかを考えるべきだろ。
そして、そのまま受け取るのが良いと決まってから文字列で受け取るかVariantで受け取るかどちらが良いのかとかを考える。
その結果、Variantが良いとなるならVariantを使っても良いんだよ。

で、そういう考え方で設計してたら必然的にVariantは殆ど無くなるんだ。
0771デフォルトの名無しさん2017/02/15(水) 23:27:25.23ID:khJPh7n1
>>770
そもそもこの場合だってその可能性があるならまずstringで受け取ってから処理すりゃ良いだけのことだしな
variantである意味がほとんどない
0772デフォルトの名無しさん2017/02/15(水) 23:28:28.84ID:F/aHSwB0
>>768
そう、意味を考える。
一緒に速度も考える。
で、意味的に型決まってても速度のメリットを取ってVariantというのが配列をぶち込む定番の処理だろ。
0773デフォルトの名無しさん2017/02/15(水) 23:30:58.50ID:je/ZAYb+
>>770
よく考えて必然的に Variant が殆どになる場合もあるけどね
0774デフォルトの名無しさん2017/02/15(水) 23:41:14.47ID:khJPh7n1
>>772
セルをそのまま配列にぶちこむときはそうなるな
>>773
どういう場合だ?
あんまり経験ないんだがな
目的の処理をする場合処理したい対象の型は大抵決まってるし、返したい値も決まってるだろ
0775デフォルトの名無しさん2017/02/15(水) 23:45:21.19ID:je/ZAYb+
>>774
複数のユーザーが決める違う型の値を受け取る共通ライブラリを作る時。
0776デフォルトの名無しさん2017/02/15(水) 23:50:27.16ID:khJPh7n1
>>775
その手の処理をしたことないんだけど、受け取ったあとに型を確定はできないのか?
どういう結果を返すんだそりゃ
0777デフォルトの名無しさん2017/02/15(水) 23:58:29.83ID:je/ZAYb+
>>776
VarType で型を判別して分岐〜、なんてやってたら引数が複数の時は
組み合わせが爆発してしまうのでそれは(積極的には)やらない。

関数の単一目的性を守ってれば「処理できない型の値を入れたらエラーになる」という方針で破綻しないよ。
0778デフォルトの名無しさん2017/02/16(木) 00:01:00.36ID:W0y5+uWS
>>739
だからどうしたよ?
あーだコーダいうなら頭使えよ?
スレ名を大きな声で復唱してみなさい。
0779デフォルトの名無しさん2017/02/16(木) 00:17:58.70ID:SiA9A9XV
馬鹿はメンテに困るコードを書く
そういう馬鹿に限ってvariantを多用する
こういうことだよな
0780デフォルトの名無しさん2017/02/16(木) 00:32:38.95ID:vlXKqRPM
>>777
いやさ、variantで受け取ってvariantで返すのか?その関数
そもそもそんなたくさんの型不定の引数を受けとるような関数は欠陥じゃないのか?

どんな環境なのか想像できんわ
あんまりそれが一般的と思わぬよう
0781デフォルトの名無しさん2017/02/16(木) 00:45:35.60ID:XCVAoIB6
AT車に乗って、コンピューターが3速だと判断したのに、
う〜ん、そこは3速じゃねえんだよなぁとかブツブツ言いながら、
自分で2速に入れてる感じ。
キモイのでやめましょう。
0782デフォルトの名無しさん2017/02/16(木) 00:47:14.79ID:NIevlqDH
まったく例えになってない
0783デフォルトの名無しさん2017/02/16(木) 00:55:11.61ID:l4RhA8QW
まだやってたのか・・・この人ら
0784デフォルトの名無しさん2017/02/16(木) 00:57:14.89ID:XCVAoIB6
分かったよ。
あんたが使ってるのは、型指定しないと動かない変なExcel。(パチモン?)
俺が使ってるのは、型指定しなくても動くExcel。
これでいいだろ。
0785デフォルトの名無しさん2017/02/16(木) 01:26:19.50ID:XCVAoIB6
男は黙ってVariant。

Longの方が0.003秒速いとか言ってると、多分モテない。
0786デフォルトの名無しさん2017/02/16(木) 02:45:15.21ID:SiA9A9XV
ID:XCVAoIB6

馬鹿の見本
0787デフォルトの名無しさん2017/02/16(木) 02:58:29.09ID:7EemdXzw
ど素人だからこそvariantを多用するんだよ
0788デフォルトの名無しさん2017/02/16(木) 02:59:41.43ID:nVgOLTep
基本、>>780の言ってることが正解。
きちんと設計すれば大抵は型が決まる。
積極的にVariantを使う特別な理由があって、分かっててVariantを使うこともあるが、普段からVariantを使うことは無い。
0789デフォルトの名無しさん2017/02/16(木) 04:36:21.82ID:GoZ0ZsyN
Variant型で意見が分かれるのは成果物の想定が違うんだろうな。
具体的には上流工程なのか下流工程なのかで変わってくる気がする。

下流工程では引数の型は決まっているし、決まった型で返却すれば責任を全うできるけど、
上流工程ではプリミティブ型にしていても実行時に避けられない不測の事態が山ほどあるし、
下手に型決めた方がエラー吐きまくるっていう面倒な事もあるから、On ErrorとVariant型でいいやってなる場合も多い。

そして「ここは絶対に数値型で入力してください」と散々注意しても無意味に終わるから、
結局は>>777の言うような「想定外の場合にはエラーで返す」という設計が最もユーザビリティに優れる事になる。
誰かがコード見た時も、ある特定の条件でエラーとして弾いておく方が何を想定して書いたか分かりやすいしね。
0790デフォルトの名無しさん2017/02/16(木) 05:18:31.52ID:INRkCvNU
入力する値の形まで指定するならセルの入力規則で制限するとか
ユーザーフォーム用意しといてスピンボタンや
リストボックスからの選択しか出来ない様にするとか、
variantに頼らないやりようはあると思う。
俺は自分用のマクロしか作らないんでそんな厳密なことはやってないけど。
0791デフォルトの名無しさん2017/02/16(木) 05:26:27.50ID:GoZ0ZsyN
>>790
あるにはあるけど大人しく従ってくれると思ってはならない。

シートの書式だけを新しいブックにコピーして渡してくるくらいならまだマシで、
中途半端に機能を理解してると入力規則を消して入力した上にオリジナルに上書きしたりする馬鹿がいるからな。
俺たちの安全地帯はVBEの中だけだ。
0792デフォルトの名無しさん2017/02/16(木) 05:57:40.21ID:INRkCvNU
そこまで言い出したらマクロのコードも改変されるだろうとか、
パスワードかけて保護しても解除されるだろうとか、キリがないよ。
0793デフォルトの名無しさん2017/02/16(木) 07:09:32.22ID:5l57RGAF
自分のマクロさえ管理できていれば他人のマクロの型なんてどうでもいいや
お前ら布教大変だな
0794デフォルトの名無しさん2017/02/16(木) 07:15:37.69ID:+lEx52V9
>>792
入力書式とマクロじゃレベルが全然違うだろ
極論で論破したがる人なのか?
実際やってりゃ >>791 程度は普通にある
0795デフォルトの名無しさん2017/02/16(木) 07:16:57.78ID:+lEx52V9
>>793
アホとじゃれあってるだけだろ
2ちゃんではよく見る光景
0796デフォルトの名無しさん2017/02/16(木) 07:44:12.74ID:K21kVzL8
>>795
お前2ちゃん詳しいんだな、今度教えてくれよw
0797デフォルトの名無しさん2017/02/16(木) 07:57:26.78ID:NIevlqDH
マクロの改変をチェックする方法ってあるの?自分自身で
0798デフォルトの名無しさん2017/02/16(木) 08:08:51.07ID:QDmfNxD1
単純に入力部分の不確定要素であればそれようの関数を作っておけば良いだけの話
関数の出力部分まで型が決まらないのはどういう意図かわからん
どんな分野のエクセルだとそうなるんだ
単純にそこが疑問
ちゃんと説明してもらえればスッキリするんだが
0799デフォルトの名無しさん2017/02/16(木) 08:24:10.85ID:fAEKNUKM
配列in配列outってことじゃないの?
0800デフォルトの名無しさん2017/02/16(木) 08:24:11.96ID:+lEx52V9
>>797
設定必要でいいなら自分自身をエクスポートしてチェックサム計算するとか
0801デフォルトの名無しさん2017/02/16(木) 08:27:39.22ID:Fvt7S/mt
なるほど、その手があるか
0802デフォルトの名無しさん2017/02/16(木) 08:27:41.57ID:7EemdXzw
>>799
ならば配列を型とすればいい
0803デフォルトの名無しさん2017/02/16(木) 08:29:01.86ID:INRkCvNU
>>794
レベルの違いって、
そんな大層なもんでもないでしょ

大体、根本的には
「入力規則やマクロのコードを書き換え出来るかどうか」っていうより、
「それやっちゃったら正常に動かなくなる可能性が有る」ってことに
思い至れないようなバカ相手なら、何を考慮した所で無駄だって話じゃないかな。
0804デフォルトの名無しさん2017/02/16(木) 09:25:36.88ID:QDmfNxD1
エクセルを入力フォーム的に使ってゴニョゴニョするようなツールなら入力時点でチェック入れるべきでしょ
違うのかな
0805デフォルトの名無しさん2017/02/16(木) 10:21:07.08ID:fAEKNUKM
>>802
生配列を持ったクラス Array_T を作って引数は As Array_T で宣言し、関数内では中身の配列を処理するってことか。
Array_T 自身のメソッドにするなら引数は要らないな。

それはありかも。
使う側は生配列を直接渡せず Array_T にラップしなけりゃならないけど。
0806デフォルトの名無しさん2017/02/16(木) 10:33:49.94ID:nVgOLTep
あのね、ユーザーが何を入力するかは分からんのは当然なのよ。
そんなことは分かりきってる。
だからと言ってVariantに逃げるのがおかしい。
入力されたものを最後までそのまま使おうとする神経が分からない。

その関数の引数が意味的にLongで受けるべきなら関数を呼び出すまでにLongにすべき。
ユーザーの入力が"3.25個"ならそこから3を取得してから、意味的にDoubleで受けるべきなら3.25を取得してから関数を呼び出すべきだ。
例えば平方根を求める関数なら整数以外の平方根も十分あり得る→Double、今作ろうとしている処理では絶対に整数以外になることは有り得ない→Longというように設計の段階で決めて行くべきだろ。
0807デフォルトの名無しさん2017/02/16(木) 10:41:23.53ID:squjHSRZ
>>751
自分で解答するコードを書けば可能。
でも、事実上無理でしょうね(スキル的に)。
0808デフォルトの名無しさん2017/02/16(木) 10:55:09.68ID:squjHSRZ
>>798
> 関数の出力部分まで型が決まらないのはどういう意図かわからん
ん?よくあることでしょ?
Function add(a, b)
  add = a + b
End Function

Sub foo()
  Debug.Print add(1, 2)
  Debug.Print add(1.2, 2.3)
End Sub

結果 =>
3
3.5
0809デフォルトの名無しさん2017/02/16(木) 11:22:29.10ID:+lEx52V9
>>803
いやいや、入力規則を変更できる奴はそこそこいるけど、マクロまでいじる奴はそんなにいないでしょ
そもそもマクロいじるような奴なら対処できてるんだろうし
0810デフォルトの名無しさん2017/02/16(木) 11:33:37.99ID:+lEx52V9
>>805
なんでそんなややこしいこと考えるかな
単に関数の戻り値の型を配列にするだけでしょ
VBA 配列を返す関数
でググれよ
■ このスレッドは過去ログ倉庫に格納されています