- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
109 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 09:12:08.74 ID:7xRC3K/l0 - >>102
氏名は2列目じゃなくて1列目、住所は7列目じゃなくて6列目にしないといけないのでは? つまり If myData(i, 1) Like "*" & TextBox1.Value & "*" And myData(i, 6) Like〜
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
112 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 11:30:18.32 ID:7xRC3K/l0 - >>111
オッ、今はセル範囲.Value で取れる配列が 1オリジンなんだな!!! 素で間違えていたわ。スマソ
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
113 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 11:34:09.69 ID:7xRC3K/l0 - >>102
自分のプログラムではセル範囲からとった配列を0オリジン(LBound = 0)に変換する関数を10年くらい使っていて 無意識のうちにそれがデフォルトの仕様だと思いこんでいた。 >>109は忘れてください。すまんこって
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
115 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 12:14:39.77 ID:7xRC3K/l0 - >>114
ごめん15年だった
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
120 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 12:38:41.90 ID:7xRC3K/l0 - >>118
複数の配列を扱うプログラム中では下限を統一しとかないと面倒でしょ
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
126 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 18:38:46.15 ID:7xRC3K/l0 - >>124
あと VBA.Array も Option Baseと関係なしに LBound=0 だね。 (Array はOption Baseの指定通りになる)
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
129 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 19:11:04.55 ID:7xRC3K/l0 - >>128
混在して厄介だから統一するために 「セル範囲からとった配列を0オリジン(LBound = 0)に変換する関数を使う」 という話なんだが。 つまりvarArry=Range("C3:P250")としたあとすぐにLBound(varArry)を0にチェンジしておけばそのあと楽だ、ということ。
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
132 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 22:06:16.39 ID:7xRC3K/l0 - >>130
すごく単純化して言うと、関数の引数が ArrayA と ArrayB で、 For i : ArrayC(i) = ArrayA(i) + ArrayB(i) みたいにして作った ArrayC が返り値だとして、 ArrayA と ArrayB のLBoundが違っていたら単純に面倒な上にArrayC のLBoundを 何にするかが問題になる。 だから全部0に統一したい。
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
134 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 22:50:58.30 ID:7xRC3K/l0 - >>133
Option Base = 0 にしといてもExcel VBAの仕様で範囲.Value のLBoundは強制的に 1になっちゃうんだよ。
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
136 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 22:57:38.53 ID:7xRC3K/l0 - >>135
形も長さも同じでLBoundが違うだけでもおかしいな行為なのかよ? その感覚の方がおかしい
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
137 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:02:05.59 ID:7xRC3K/l0 - 例えばArrayAはテキストファイル由来の配列データでLBound=0
ArrayBはワークシート由来の配列データでLBound=1 同じ大きさだとして、これを比較して何か結果を返す関数なんていくらでも考えられるだろ?
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
139 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:07:07.34 ID:7xRC3K/l0 - >>138
だから0に統一すると言っているじゃないか
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
141 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:10:00.23 ID:7xRC3K/l0 - >>138
コードに対する感覚っていうことなら Option Base 0 と設定しているのに 範囲.Value のLBoundが 1になるのがおかしい、 が正解なんじゃないか? 製品の仕様に文句付けても実りがないから、0に統一する関数を自分で作るというのはとても真っ当だと思うけどね。
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
144 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:13:29.28 ID:7xRC3K/l0 - >>140
シーケンスがどうとか関係なく出来上がった結果の配列を処理するときの話だぞ? 出来上がった配列を引数に取る関数が、その配列の由来がどこかなんて気にしないだろ。 加算:ArrayC(i) = ArrayA(i) + ArrayB(i) と 比較:If ArrayA(i) < ArrayB(i) Then〜 で何の意味合いの違いがあるというのか?
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
146 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:15:24.65 ID:7xRC3K/l0 - >>142-143
ごめん、ちょっと意味がわからない
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
148 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:23:12.41 ID:7xRC3K/l0 - >>138
Function FuncX(配列A, 配列B) という関数があって、配列Aと配列Bが同じLBoundであるべきだ、っていうのはまあその通りさ。 俺が言っているのは、FuncXのユーザーがふたつの配列を渡したいんだけど、片方はLBound=0で他方はLBound=1のとき困るから LBoundを0に変える関数を用意してあげる、っていう意味だぞ?
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
149 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:24:32.61 ID:7xRC3K/l0 - >>147
「形」って何だよ?定義してくれ
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
153 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:35:33.45 ID:7xRC3K/l0 - >>151
それは単に不便だ。 セル範囲由来の配列を使う場面は多い。 >>152 俺の定義は違うな 「2つの配列の各次元のサイズが同じならそれを同じ形とする」だ
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
154 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:38:27.57 ID:7xRC3K/l0 - >>151
「勝手に」とか「直感に反する」とかいうのがまさに主観的過ぎてついていけませんね
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
155 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:41:41.40 ID:7xRC3K/l0 - 「配列とオフセットを渡すようにしなさい」
とかいうのも微妙におかしな主張であるな
|
- Excel VBA 質問スレ Part47 [無断転載禁止]©2ch.net
158 :デフォルトの名無しさん (ワッチョイ 53a6-tpgq)[sage]:2017/03/19(日) 23:49:28.78 ID:7xRC3K/l0 - >>156
どうでもいいよ。 単に「不便だ」、と言っている。 ユーザーにとってLBoundが違うだけでFuncXが使えないのが不便と感じるなら LBoundを0に変える関数を用意したから使ってね、というだけのこと。 もしくは 範囲.Value をラップして LBound=0の配列を返す関数を用意するとか。 「勝手にLBoundを変えるな」とか「直感に反する」とかどうでもいいや。俺はな。
|