17/11/26 11:16:38.23 KMInKg0R0.net
ソンタクして変数名にvarを採用
263:デフォルトの名無しさん
17/11/26 11:24:16.70 A1ZwwN/70.net
>>254
いや、
やれば改善する可能性があるのにやっていない状態、ということで下位になっている
264:デフォルトの名無しさん
17/11/26 11:44:51.98 DTyNodR2M.net
>>251
底辺のお前も頑張ってるもんな w
265:デフォルトの名無しさん
17/11/26 11:50:05.48 ApNVvKeX0.net
>>253
ローカル変数がないの意味がよくわからん
値渡しの引数はローカル変数なんだけど
それを除外したとしても、変数なしで書ける処理は限られてくるし
266:デフォルトの名無しさん
17/11/26 12:54:24.61 pGcZHtwF0.net
>>258
不要な変数を作るなってことだろ
そのまま代入すりゃいいのに>>224みたいにいったん変数に格納したがる奴は一定数いる
267:デフォルトの名無しさん
17/11/26 12:56:36.30 OTnHPyYR0.net
VBAからどんどん離れて公開オナニーになってきた
268:デフォルトの名無しさん
17/11/26 13:04:15.84 ci9PkC0t0.net
>>253
tmpとか、座標系の短い変数はきちっと関数化して処理の分断ができてるときに限るけどね
大体そんなもんじゃないかな
>>259
配列に格納してから云々はそれぞれの処理を独立させることであとから見通しがよくなるんだよ
たとえば、代入する値に条件付きで何らかの処理を加えなきゃいけなくなったときなんかにループしながら直接吐き出してるとネストが深くなって可読性が低くなる
それぞれ独立してれば関数化するのも楽だしな
269:デフォルトの名無しさん
17/11/26 13:33:08.74 pGcZHtwF0.net
>>261
> たとえば、代入する値に条件付きで何らかの処理を加えなきゃいけなくなったとき
その時にやればいいだけ
270:デフォルトの名無しさん
17/11/26 14:16:29.61 ci9PkC0t0.net
>>262
一回変数にいれることでそれがなんの値か、というのを明示するって意味もある
意味があるからやってんだよ
271:デフォルトの名無しさん
17/11/26 14:40:03.00 pGcZHtwF0.net
>>263
>>216ならコメントで十分
272:デフォルトの名無しさん
17/11/26 15:20:43.89 A1ZwwN/70.net
>>258
日付が変わっているからIDは違うが、元の俺の発言は>>250の
>「引数名は大事だがローカル変数名はたいして大事じゃない」という意味だ。
なんだよね。
つまり引数は別として狭い意味のローカル変数について語っている。
それと、>変数なしで書ける処理は限られてくるし
については、良い~悪いの序列の話なので、「変数なしで書けるくらいスコープが狭い方が良い」ということさ。
273:デフォルトの名無しさん
17/11/26 16:18:08.52 t/ZpdAAca.net
( ・ω・)∩シツモーン
範囲A1:C10の値をまとめてD1:F10に代入するときにさ
直接=で結ぶと駄目で
一旦変数で
tmp=range(A1:C10).value
range(D1:F10)=tmp
とかいうふうにすればオッケーなのって何でなのん?
274:デフォルトの名無しさん
17/11/26 16:56:09.10 A1ZwwN/70.net
>>266
Range(A1:C10).Value = Range(D1:F10).Value
でいけると思うけど?
275:デフォルトの名無しさん
17/11/26 17:06:14.25 A1ZwwN/70.net
ごめん逆
>>266のやりたいことは
Range(D1:F10).Value = Range(A1:C10).Value
だね
276:デフォルトの名無しさん
17/11/26 17:18:28.93 ApNVvKeX0.net
値のコピーは
Range("D1:F10") = Range("A1:C10").Value
277:デフォルトの名無しさん
17/11/27 09:03:15.77 3l0DMD54a.net
範囲が同じなら
R1.Value=R2.Valueで行けるな、普通に
Set R1=R2はなんか無理
R1=R2でいけない理由はよくわからん
RangeオブジェクトのデフォルトプロパティってValueだよね?
278:デフォルトの名無しさん
17/11/27 12:39:02.79 Hzamsy590.net
>>270
Rangeの既定のプロパティは、ドキュメント上だとItem
実際はちょっとトリックがあって、_Defaultっていう隠しプロパティ
こいつがアドレス指定しない場合はValueを返す
279:デフォルトの名無しさん
17/11/27 22:21:45.18 HF1f2kGW0.net
>>270
Setを使うということはオブジェクトということだぞ。
それはRangeそのものを代入することを意味する。
A1セルにB1セルを代入など出来よう筈が無い。
A1セルのアドレスがB1?
意味不明だろ。
280:デフォルトの名無しさん
17/11/27 22:54:13.44 scsxtpuJM.net
indirectの悪口はそこまでだ
281:デフォルトの名無しさん
17/11/27 23:55:45.37 ++h0dxh80.net
indirectが未だに理解できない
282:デフォルトの名無しさん
17/11/27 23:58:34.84 VuuuCAGm0.net
>>272
rangeオブジェクトの実体はアドレス情報ってことか?
283:デフォルトの名無しさん
17/11/28 02:02:42.04 +NcnLu/Q0.net
>>275
???
それだけじゃねーだろ。
が、それも含むのは当然。
284:デフォルトの名無しさん
17/11/28 07:27:08.64 ZnyBsd4x0.net
indirectとかsumproductとか、便利なんだけどいまいちよく解らんよな。
285:デフォルトの名無しさん
17/11/28 09:30:34.94 PHeqRDr40.net
忘れちまえよindirectの事なんか
286:デフォルトの名無しさん
17/11/28 09:41:03.64 /j8R3q5Od.net
>>272
Set の左辺は変数だから当然と言えば当然
A1セル自体は変数じゃなくてオブジェクトだからな
287:デフォルトの名無しさん
17/11/28 10:01:09.63 mtOclWiza.net
>>276
いやまあ、セル同士を直接セットが無理っぽいのは何となく感覚でわかるんだが、どういう動きでそうなってんのかなーって気になるわけよ
288:デフォルトの名無しさん
17/11/28 12:43:56.96 ZLcA5r8L0.net
Range()みたいなのって返却値がRangeクラスなだけあってRange()自体は関数だから
289:デフォルトの名無しさん
17/11/28 14:06:44.13 WkhkCF1D0.net
Rangeオブジェクト
Rangeプロパティ
Range関数
Rangeでチン
これが区別できれば完璧
290:デフォルトの名無しさん
17/11/28 22:19:20.97 0EijvfTXM.net
ら...らんげ?
(´・ω・`)b
291:デフォルトの名無しさん
17/11/29 19:36:16.84 vIwO7IkJ0.net
>>281
getRangeにしとけよな
紛らわしいわ
292:デフォルトの名無しさん
17/11/30 20:52:21.44 Acf/eaNYa.net
リストを絞り込み別のリストで1行だけを表示できるようにしたらどうしたらいいでしょうか?
わかりやすくいうと、sheet1にA1からZ1000までのリスト置き、それを何らかの方法で絞込
sheet2のEの1にE列の絞り込んだ1行目をEの2にF列の1行目を表示し次へを押すと2行目を表示するようにしたい
オートフィルみたいなことですが表示したいセルが文文章で多くそのセルだけを表示できるようにしたいです。
1行だけならなんとなくわかるのですが次の行にコマンドボタンを押すことで表示する方法はイメージできません。
for文ならiを使えばいいんでしょうけどやりたいことと違う
293:デフォルトの名無しさん
17/11/30 21:50:06.23 ECoRVPVY0.net
>>285
Find関数使って検索してヒットした行数を返すようにして、
受け取った行数を元に情報を取得、次へボタンはFindNextにしておく。
というのが一番簡単かなぁ。本当はExcelじゃなくてAccessで扱う方がやりやすいんだけど。
294:デフォルトの名無しさん
17/12/01 14:32:31.35 4uYh51s/0.net
以下不明点を教えて
1なぜ変数を初期化するのか?
2なぜNextjでjだけループが終わるのか?
3If Hantei Then (もしも変数の場合は。。。) もはや意味がわからない
初心者にもわかりやすく答えよ
Sub CorrectCode()
Dim i As Long
Dim j As Long
Dim Hantei As Boolean
'変数の値を初期化する
Hantei = False
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
For j = 2 To Cells(Rows.Count, 3).End(xlUp).Row
If Cells(i, 1) = Cells(j, 3) Then
'変数に"True"を代入する
Hantei = True
Exit For
End If
Next j
If Hantei Then
'変数の値を"False"に戻す
Hantei = False
Else
'セルの背景色を変える(チェックする)
Cells(i, 1).Interior.ColorIndex = 6
End If
Next i
End Sub
295:デフォルトの名無しさん
17/12/01 14:54:37.77 RC6w6Z/F0.net
>>287
Next j の捉え方からすると、そもそも実行の順番が分かっていないようなので基礎からやる事をおすすめする。
296:デフォルトの名無しさん
17/12/01 15:05:39.92 4uYh51s/0.net
俺なりに日本語訳してみた
間違っていたら教えてくれ
VBA初めて3日です
基礎は本読んでるからわかっている
変数宣言
変数に初期値を入れる わかりやすいように
変数iは2から一番下からみて最初に値の入ってセルまでをループする
変数jも同様
もしもA列とC列にループする上で同じのが見つかったら
変数にTUREを入れる
そしてループを抜ける
そんでまたjのループを繰り返す
もしも変数がTUREをもっていたら
FALSEに変える → なぜ?
セルの
297:色を変える そんでiのループを繰り返す
298:デフォルトの名無しさん
17/12/01 15:48:12.50 AGjDU3vg0.net
初期値をfalseにする理由
trueの時は色づけという流れにしたいので、予めfalseにしておく必要がある
boolean型の初期値はtrueなので。
途中でfalseを入れる理由
i=1 のままで j を最終行までループさせてチェック
その次に i=2 にして j を同じく最終行までループさせてチェックするのだが
i=1 でのチェックが終わった結果 true なら i=2 でのチェックに備えて false に初期化する必要がある
これは基本的に最初の初期化と同じ考え方
299:デフォルトの名無しさん
17/12/01 15:49:27.01 Mw452gW7E.net
Hanteiの初期化、j のループの直前に置けばIf文の後の変数初期化がいらなくなる気がする・・・
300:デフォルトの名無しさん
17/12/01 16:20:04.74 4uYh51s/0.net
>>290
なるほどわかりやすい
このプログラムを日本語化して
301:デフォルトの名無しさん
17/12/01 16:42:02.13 xc+Vk5Dr0.net
>>287
最初の変数初期化は全く必要無い。
そもそもこういうBooleanな変数を用意することに疑問。
こういう変数は、どうにもそれが無いとプログラムが組み立てられない時に使うべきで、出来るなら使わない方向で組み立てるべき。
そして、やってる内容を見ればこんなもの使わない方向で組み立てられる。
こういうコードはやりたいことを論理的につめられていない時に安易に書き出してしまった時になりやすい。
はっきり言ってクソコード。
全く参考にならん。
1.最初の初期化はいらん。
宣言後の初期値はFalseだから。
逆に初期値をTrueにする場合は初期化が必要。
途中の初期化については、jに関する1つの処理が終わった時にTrueになってたら次の処理の結果がおかしくなるから必要。
2.Exit Forのことを言ってるなら最も内側のFor Nextから抜けるからとしか言えん。仕様だね。
3.If~Thenは~がTrueかどうかを判定している。
If i=0 Thenはiが0だったらと考えがちだが正しくはi=0の文がTrueかどうかを判定している。
イミディエイトウィンドウに?(10=10)と入力してEnterキーを押すとTrueとなるし?(10=5)と入力してEnterキーを押すとFalseになる。
302:デフォルトの名無しさん
17/12/01 17:52:43.75 P9JEW6xna.net
>>287
同じこといってるかもしれんけどこの場合変数Hanteiが丸々要らない
if文の中にセルの色変更のコードを書けばいい
仮に、この変数がいるとしてもどんな値が入っててもどうせfalseにするんだからif分岐してる意味がわからない
もっと言うとHanteiとかいう変数名がクソ過ぎる
なんの判定かさっぱりわからん
canChangeColorとかnotMatchValueとかしとけば目的が分かりやすいのに
303:デフォルトの名無しさん
17/12/01 19:09:05.50 RC6w6Z/F0.net
A列の各セルの情報と合致するものが、C列に一件も無かった場合、
次に合致するデータが現れるまでA列の背景色を変え続ける
という処理なのでHanteiが要らない様に書き換えるって難しい気がするんだけど。
304:デフォルトの名無しさん
17/12/01 19:13:14.77 P9JEW6xna.net
>>295
ごめん、そこちゃんと読み込めてなかったわ
一致したら変えると勘違いした
なんにしてもフラグの初期化は頭かケツでいいと思うけど
305:デフォルトの名無しさん
17/12/01 19:49:15.65 4uYh51s/0.net
ちなみにこのコードはVBAエキスパート公式のだよ
306:デフォルトの名無しさん
17/12/01 20:08:56.93 4uYh51s/0.net
似たようなソースコードを作ってみました
なぜだかエラーがでます
Sub test()
Dim i As Long
Dim j As Long
Dim U As Long
For i = 1 To Cells(Rows.Count, 1).End(xUp).Row
For j = 1 To Cells(Rows.Count, 3).End(xUp).Row
If Cells(i, 1) = Cells(j, 3) Then
U = 1
End If
Next j
If U = 1 Then
U = 0
Else
Cells(j, 3).ColorIndex = 3
End If
Next i
End Sub
307:デフォルトの名無しさん
17/12/01 22:17:56.90 eRljVU/z0.net
xUp → xlUp
308:デフォルトの名無しさん
17/12/02 00:44:57.80 aL/u+cy30.net
>>295
確かに一致したものが無かったらだからBoolean使う方が自然か。
使わなくても簡単だけど自然なBoolean使うのが正しいわ。
俺も勘違いした。
ちなみに、一致せずに全てチェックしてjのループを終了した場合のjの値を調べればBooleanはいらんし、そもそもFind使ってループ1つにしてもいらん。
この仕様を見た場合、絶対こんなコード書かないけど、俺が書くとした場合の配列にぶちこむ方法はBoolean使うのが自然だな。
ちなみにランダムで10000行にデータ入れた場合、このコードで320秒、Find使う方法で22秒、配列入れる方法で9秒だった。
309:デフォルトの名無しさん
17/12/02 01:37:25.51 jpak6rxd0.net
小学生がなんで3×5が15になるの?って聞いてるのに
俺なら電卓で答えだすぜ!って息巻いてる人のようにみえる
学習の初段階でつまずいてる人への的確な回答ではないわな
310:デフォルトの名無しさん
17/12/02 05:02:50.84 EvURnJTn0.net
なんつうか、これが俺の後輩なら、フローチャート書いてみって言いたくなるな
もうフローチャートなんて10年以上見てないけどな
>1なぜ変数を初期化するのか?
あってもなくてもこのコードなら動くけど
すべての言語が変数を初期化してくれるわけではないので、変数は必ず自分で初期化しろって作法もある
自分で初期化すれば、初期値を間違えて覚えていたりしてもバグになりにくいしな(Booleanの初期値はFalse)
>2なぜNextjでjだけループが終わるのか?
ちょっと質問の真意がわからん
ForとNextは1対1で対応するんで、Next jならjのループ終端だぞ
>3If Hantei Then (もしも変数の場合は。。。) もはや意味がわからない
IfとThenの間に書くのは、条件式と呼ばれる式(文じゃないよ)
式の値がTrueかFlaseで条件分岐する
そして変数はそれだけで式として成り立つ。この場合は変数の内容そのものが式の値
If Hantei=True Thenって書いても良いんだけど、(とくにBooleanに対する=Trueは)冗長だと言って嫌う作法もある
VBAはExcelが現役だから、いつまでたっても入門者が一定数いるよなぁ
はっきり言えば、今どきのブログラムの勉強にはVBAは向かないよ
311:デフォルトの名無しさん
17/12/02 08:17:12.76 /lrBlva0M.net
ブック名 C:\book.xlsx
シート名 データ
説明文パート 1~5行目
データパート
..ヘッダ A6~Z6
..データ A7~Z*
..データ件数 不定
プロバイダ Microsoft.ACE.OleDB.12.0
このような設定でヘッダとデータをselect文で全件取得するにはどうすればいいですか?
312:デフォルトの名無しさん
17/12/02 08:26:37.96 aL/u+cy30.net
>>301-302
超初心者の話かよ。
VBAエキスパートの話じゃなかったんか?
あと、If Hantei Thenを分からないって言ってるのは感覚の話で、君の説明じゃ分からないと思うぜ。
Hantei=Trueという式自体に値があって、それが正しい場合にその値は(Hantei=True)=Trueという結果になっているということが感覚的に分からないと理解できんだろ。
初心者はHanteiとTrueが等しかった場合と感覚的に理解してるんだから。
その感覚ではIf Hantei Thenが理解出来ない。
313:デフォルトの名無しさん
17/12/02 08:27:57.05 cPyK88Sm0.net
>>303
SQLで任意のセル範囲を取得する場合はFROM文で取得出来たはず。
SELECT * FROM [ データ$A6:Z1000] みたいな形。
ただその条件だとデータベースに投げる前にエクセル上で整形した方が効率いいと思うけど。
314:デフォルトの名無しさん
17/12/02 08:31:27.69 7+Ics+9V0.net
if hentai = true then 変態は正義
315:デフォルトの名無しさん
17/12/02 09:32:03.18 1C3LInkCp.net
まず>>287のプログラムを動作順に日本語訳してくれよ
316:デフォルトの名無しさん
17/12/02 11:12:44.97 aL/u+cy30.net
>>307
簡単だろ。
A列のそれぞれのセルに対してC列に同じ値が無かったら色を付けてる。
1.A2からA列の最終セルまで1つ1つのセル(以下Aiとする)について以下を繰り返す。
2.C2からC列の最終セルまでにAiと同じ値が有ったときHanteiをTrueに設定。
3.HanteiがFalseの場合(C列にAiと等しい値はなかった場合)はAiに色を付ける。
4.HanteiがTrueの場合はFalseに設定。(どんな場合だろうがFalseに設定したいが、既にFalseなのにFalseに設定する必要は無い。単にFalseに初期化してるだけ。)
5.Aiの次のセルに対して繰り返し処理続行する。
317:デフォルトの名無しさん
17/12/02 11:17:14.58 tnWofmmQ0.net
>>304
「VBAエキスパート」という資格の勉強をしている超初心者の話だろ?
VBA始めて3日と書いてるし
318:デフォルトの名無しさん
17/12/02 11:45:34.19 cPyK88Sm0.net
エキスパート名乗ってる割にはバグくさいコードなんだよな。
If Not Hantei Then Cells(i, 1).Interior.ColorIndex = 6
Hantei = False
っていう書き方がたぶん本来意図した仕様に近いと思うんだけども。
319:デフォルトの名無しさん
17/12/02 11:46:30.49 ab3YxIeg0.net
Hantei が Hentai に見える
320:デフォルトの名無しさん
17/12/02 14:09:12.13 aL/u+cy30.net
>>309
勉強してる奴が質問してるんであって、
このコードはそいつが書いたもんじゃない。
VBAエキスパート公式ってんだから、
資格の参考書かなんかに載ってるんだろ。
>>310
いや、この書き方自体は良くあるよ。
あんたのも間違いじゃない。
321:デフォルトの名無しさん
17/12/02 14:24:58.47 fk+w59AEa.net
○○でもわかる
○○のすべて
○○エキスパート
○○完全ガイド
こういうタイトル付いてるのは初心者向け
322:デフォルトの名無しさん
17/12/02 14:38:18.30 zmHPgLHa0.net
>>312
だから初心者用の本に載ってるコードが分からないと言ってるんだからこその>>301のツッコミなわけだろ?
本に載ってるコードの評価をしてくれという質問ではない
323:デフォルトの名無しさん
17/12/03 08:02:30.09 Q2bt/ZXPa.net
エクセル相談所にあった質問で、とりあえずVBAなしじゃ出来ないって言っといったんだけど、VBAでリストの絞り込みって一度で出来る?
多分第1候補のリストを出したままその右には第2のリスト候補が表示されそれを第3候補までマウスの操作だけで選択させようって事だと思うんですけど。
インターネットの選択方式でそんなの見た事あるけど一から開発するの面倒くさそう。
ユーザーフォームと2次元配列でも使えばできるかな?
ちなみにこの機能の名称あれば教えて欲しいです。
自分も配列すら参考書でかじったくらいでその必要性がわかってない初心者です
324:デフォルトの名無しさん
17/12/03 08:42:40.14 U0ESQ6dD0.net
残念ながらVBAなしで実現可能
325:デフォルトの名無しさん
17/12/03 09:19:50.58 lwbJHU3ya.net
お力添えをお願いします
チェックボックスでチェック入れたら行の高さを0にし、チェック入れなかったら13.5にしたいのですがうまく動作してくれません
Sub チェック8_Click()
Dim A As Boolean
Dim B As Boolean
If A = True Then
A = Rows(43).RowHeight = 13.5
B = Rows(44).RowHeight = 13.5
Else
A = Rows(43).RowHeight = 0
B = Rows(44).RowHeight = 0
End If
End Sub
どこが間違っているのかご教示お願いします。
326:デフォルトの名無しさん
17/12/03 09:52:22.12 ObUuqjZI0.net
>>317
行は適当に変えてくれ
Private Sub CheckBox1_Click()
If CheckBox1.Value Then
Rows(3).RowHeight = 13.5
Rows(4).RowHeight = 13.5
Else
Rows(3).RowHeight = 0
Rows(4).RowHeight = 0
End If
End Sub
327:デフォルトの名無しさん
17/12/03 10:04:41.09 ObUuqjZI0.net
>>317
フォームコントロールならこっちだわ
コントロール名は適当に変えてくれ
Sub チェック2_Click()
If Sheet1.CheckBoxes("チェック 2").Value = 1 Then 'これでダメなら下を試そう
'If "Sheet1".Shapes("チェック 2").ControlFormat.Value = 1 Then
Rows(3).RowHeight = 13.5
Rows(4).RowHeight = 13.5
Else
Rows(3).RowHeight = 0
Rows(4).RowHeight = 0
End If
End Sub
328:デフォルトの名無しさん
17/12/03 10:11:57.07 lwbJHU3ya.net
>>319
ありがとうございます!!!こちらで動作しました!!本当に有難うございます!!!
329:デフォルトの名無しさん
17/12/03 10:42:36.13 HLUSF6su0.net
〉〉314
できるの?
入力規則の絞り込みじゃないよ?
階層化してリストから直接下層に移動(3段階くらい)して選択する方法だよ? <
330:デフォルトの名無しさん
17/12/03 11:18:12.75 U0ESQ6dD0.net
おいおい急に条件増やすなよw
URLリンク(www.tschoolbank.com)
こういうことじゃないのかよ
331:デフォルトの名無しさん
17/12/03 11:24:14.71 pXIsIngK0.net
>>322
これの話だから知らないなら絡んでくるなよ
スレリンク(bsoft板:713番)
332:デフォルトの名無しさん
17/12/03 11:39:56.54 JkBkmVnb0.net
>>314
違う。
そのコード書いた奴に向かって言ってるのと、躓いてる奴にはそのコードはよろしくないと言ってる。
何の例かは分からんが、もっと現実的なコードにすべきなんだぜ。
333:デフォルトの名無しさん
17/12/03 12:12:17.46 HLUSF6su0.net
>>322
しかも、わかりにくいかもしれないけど条件ちゃんと書いてあるんだけどね
入力規則の絞り込み検索じゃない。
階層ごとにクリック選択する事すらめんどくさいと言ってるんだよ。
一度の選択でリストの階層移動ができるかどうかを質問主は相談所で聞いていて
自分はVBAないとだめだよと回答したけどVBAだとどうなんだろうとこっち
で聞きなおしてみたんだけど、
334:デフォルトの名無しさん
17/12/03 12:58:31.51 A600L+iiM.net
>>325
さすがにそれは読み取れん
335:デフォルトの名無しさん
17/12/03 13:12:35.66 bN8T4SKTM.net
>>323
こういう糞レスがつくからスレが過疎るんだぞ
336:デフォルトの名無しさん
17/12/03 13:54:27.80 HLUSF6su0.net
ちゃんと、VBAでリストの絞り込みって一度で出来る? こう書いて
その下に
多分第1候補のリストを出したままその右には第2のリスト候補が表示されそれを第3候補までマウスの操作だけで選択させようって
こう書いてあるんだけど読み取れない?
しかも、前文にエクセル相談所にあった質問こうも書いてあるし。
で、わざわざVBAで聞いてるのにわからないかー
337:デフォルトの名無しさん
17/12/03 15:23:42.34 icSWQcwl0.net
具体的なコードが伴わない場合は外野がなんかゴチャゴチャ言っている程度に聞き流すべき。
>>323の質問はウィンドウズ標準のメニューバーみたいな形を想定しているみたいなので、
外部参照にMicrosoft Toolbarとかあれば、それを追加して解決するんじゃないかな。
338:デフォルトの名無しさん
17/12/03 15:57:02.43 pXIsIngK0.net
>>328
> 多分第1候補のリストを出したままその右には第2のリスト候補が表示されそれを第3候補までマウスの操作だけで選択させようって
マウス操作にはクリックも含むのが普通だと思うぞ
>>327
無駄なレスしてなにか楽しいのか?
>>329
あっちのスレ読めばわかるけどそもそも VBA 使わずにできるかどうかの問題になってるから Toolbar 云々の話ですらない
お前さんこそ聞き流すべき
339:デフォルトの名無しさん
17/12/03 16:12:49.11 icSWQcwl0.net
>>330
どちらかというと>>315の質問に答えた形だけど。
向こうの質問にこっちで答える義理もないし。
340:デフォルトの名無しさん
17/12/03 17:11:02.86 JkBkmVnb0.net
>>315
それは、VBAでも出来ないと思う。
というかWindowsの標準動作と違う。
似たようなのは出来るかもしれないけど。
コンボボックスじゃなくメニューなら出来るかな。
見ためが違うけど。
見ためをコンボボックスにしたいならコンボボックス使わずにフォ-ムに描画した方が楽じゃね?
コンボボックスだと選択しないとイベント発生させるのが難しいし、イベント発生時にブルダウンが閉じるのが通常動作だから。
サブクラスでHITTEST検出で出来るかどうか。
VBAではウルトラC級に難しい。
341:デフォルトの名無しさん
17/12/03 17:13:47.51 JkBkmVnb0.net
>>329
メニューバーの見ためは駄目なんじゃないの?
俺もメニューバーが現実的だとは思うけど。
342:デフォルトの名無しさん
17/12/03 18:36:56.64 RpLqv7Ag0.net
>>315
階層付きMenuで3項同時に入力するってこと?
自分だったらContextMenuの改造またはPopupでやるかな。
見た目悪いけど、最下層をデリミタ区切りのフルセットにすれば
Splitして投げ込むだけでいいでしょ?
CellのContextMenuだとあとで標準に戻すこと考えないと
いけないので最近はもっぱらPopupばかり使ってる。
Cellのプルダウンだと表示数に限りがあるけど、Popupだと
画面サイズいっぱいまでいけるし、、
あ、もちろんCommandBarsのアレのことです。
343:デフォルトの名無しさん
17/12/03 22:48:18.35 DUCKYmEka.net
>>315
いえ、1つ目のリストを表示して、マウスの位置をその位置まで持ってきて
2つ目のリストを表示してって3つ目のリストを最終的に表示するみたいな。
エクセルの旧表示みたいな感じで、ファイル→検索みたいな感じです。
多分
344:デフォルトの名無しさん
17/12/04 00:43:15.26 oPXdl+lm0.net
>>335
いやだからそれって、階層メニューのことでしょ?
手近なところでいうと、、、たとえばFireFoxだと、
表示 > テキストエンコーディング > 自動判別 > 日本語
みたいな。この手のMenuって、onMouseOverイベントで
下層が勝手に開いていきますよね。
それで各階層の選択肢を全部入力値として使うことじゃないの?
345:デフォルトの名無しさん
17/12/04 02:58:02.92 Fxj9yJGL0.net
そう、これはメニューの動作なんだ。
コンボボックスで実現するのはとても難しい。
ほとんどの奴は上級者でも不可能と言うだろう。
それとも俺の知らない何かがあるかもしれないけど。
346:デフォルトの名無しさん
17/12/04 03:21:07.64 oPXdl+lm0.net
コンボの配下にメニュー作ろうとすると怒られた。
階層メニューによる一括入力、自分でも使うかもと思い作ってみたよ。
1) 前提:質問者のリンク先キャプチャを参考
A2:C2が回答入力欄
キャプチャにある凡例を登録するための矩形範囲を"R_Master"とする。
2)呼出部:キャプチャのA1セルにある "商品"の文字列を右クリックで発動。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Resize(1, 1).Value = "商品" Then
Cancel = True
Call Popup_FullPut(Range("R_Master"), " 個")
End If
End Sub
347:デフォルトの名無しさん
17/12/04 03:23:18.02 oPXdl+lm0.net
3)Menu生成部
Sub Popup_FullPut(rngMst As Range, Optional strUnit As String)
Dim r As Range
Dim i As Long, j As Long, k As Long
With CommandBars.Add(Position:=msoBarPopup)
For i = 0 To rngMst.Rows.Count - 1
Set r = rngMst.Offset(0, 0).Resize(1, 1).Offset(i, 0)
If r.Value = "" Then Exit For
With .Controls.Add(msoControlPopup)
.Caption = r.Value
For j = 0 To rngMst.Rows.Count - 1
Set r = rngMst.Offset(0, 1).Resize(1, 1).Offset(j, 0)
If r.Value = "" Then Exit For
With .Controls.Add(msoControlPopup)
.Caption = r.Value
For k = 0 To rngMst.Rows.Count - 1
Set r = rngMst.Offset(0, 2).Resize(1, 1).Offset(k, 0)
If r.Value = "" Then Exit For
With .Controls.Add(msoControlButton)
.Caption = r.Value & strUnit
.OnAction = MkAction( "Popup_Input", rngMst.Address(external:=True),i & "|" & j & "|" & k )
End With
Next
End With
Next
End With
Next
.ShowPopup
.Delete
End With
End Sub
348:デフォルトの名無しさん
17/12/04 03:24:02.05 oPXdl+lm0.net
4)入力実行部
Sub Popup_Input(strMst As String, strAns As String)
Dim rngR1 As Range: Set rngR1 = Range("A2")
Dim rngR2 As Range: Set rngR2 = Range("B2")
Dim rngR3 As Range: Set rngR3 = Range("C2")
Dim rngMst As Range: Set rngMst = Range(strMst)
Dim i As Long, j As Long, k As Long
i = Split(strAns, "|")(0)
j = Split(strAns, "|")(1)
k = Split(strAns, "|")(2)
rngR1.Value = rngMst(i + 1, 1).Value
rngR2.Value = rngMst(j + 1, 2).Value
rngR3.Value = rngMst(k + 1, 3).Value
End Sub
349:デフォルトの名無しさん
17/12/04 03:28:37.65 oPXdl+lm0.net
5)引数付きのOnActionコマンドの生成に普段使っている関数
ん?書き込めない、、なんで?
要は文字列生成がメンドーだから関数使ってるだけなんだけど、、
350:デフォルトの名無しさん
17/12/04 03:36:14.51 oPXdl+lm0.net
刻んでみる。
5)引数付きのOnActionコマンドの生成に普段使っている関数
Function MkAction( strCMD
351: As String, Optional arg1 As String, Optional arg2 As String )
352:デフォルトの名無しさん
17/12/04 03:41:24.99 oPXdl+lm0.net
Dim文のところではじかれるみたい、、
5)引数付きのOnActionコマンドの生成に普段使っている関数
Function MkAction( strCMD As String, Optional arg1 As String, Optional arg2 As String )
Dim DQ As String: DQ = Chr(34)
Dim SQ As String: SQ = Chr(39)
Dim buf As String
buf = strCMD & " "
If arg1 <> "" Then buf = buf & DQ & arg1 & DQ
If arg2 <> "" Then buf = buf & "," & DQ & arg2 & DQ
MkAction = SQ & buf & SQ
End Function
書き込めたかな?
Chr関数は禁則?
353:デフォルトの名無しさん
17/12/04 03:44:57.18 oPXdl+lm0.net
書き込めた。
Chr関数で引っかかっていたみたい。実際は半角です。
インデントは全角スペースになっているので変換が必要です。
354:デフォルトの名無しさん
17/12/04 07:27:39.63 65GoxPZl0.net
VBEにコピペすると、全角スペースは自動的に半角スペースに変換されるから意識する必要ない
355:デフォルトの名無しさん
17/12/04 07:55:50.52 oPXdl+lm0.net
>>345
本当ですね。 tnx!
356:デフォルトの名無しさん
17/12/05 20:57:29.50 dwGLun0F0.net
エクセルのVBAで、サーバー上にディレクトリを作成して、そこにファイルを移動させたいのですが、
MkDIRで作成できませんでした。どうすればよいでしょうか?
357:デフォルトの名無しさん
17/12/05 21:25:35.80 JPkeWfWn0.net
>>347
FileSystemObject使えばできますよ。
サーバー側の権限は大丈夫ですか?
358:デフォルトの名無しさん
17/12/05 21:34:50.27 dwGLun0F0.net
>>348 ありがとうございます!
dim myFSO as new filesystemobject
myFSO.CreateFolder (サーバー上のつくるディレクトリ名)でいけますか?
それともカレントドライブをサーバー上に移動すべきでしょうか?
359:デフォルトの名無しさん
17/12/06 00:43:40.01 D6s1mPo40.net
>>349
試してみたら?
360:デフォルトの名無しさん
17/12/06 11:15:00.00 8dpxpCOD0.net
質問です。
プロシージャの処理の途中でイミディエイトウィンドウをうまくクリアする方法はありますか?
361:デフォルトの名無しさん
17/12/06 11:39:53.74 MQk7+ulPa.net
あるかないかでいえば、
ないこともないアル
地道にセンドキーでキー送って
全選択してデリートしてって方法がな
362:デフォルトの名無しさん
17/12/06 11:46:45.28 vAzWmOhld.net
関係ないけどブックを開くとイミディエイトウィンドウ上の変数が消滅するの困る
363:デフォルトの名無しさん
17/12/06 13:39:40.38 yYTt94fN0.net
>>352
その際はFocusをVBEに移してイミディエイトPaneをアクティブにする操作を挟むのでしょうか?
364:デフォルトの名無しさん
17/12/06 16:07:50.81 ykbUk5IV0.net
エクセルのVBAで競馬予想ソフト作っている人っていますか?
365:デフォルトの名無しさん
17/12/06 19:37:25.77 sdGXOm2ja.net
>>354
デバッグ クリア VBAで検索したら
幸せになれるかもよ
366:デフォルトの名無しさん
17/12/06 21:02:08.65 H8Zs2M1B0.net
VBAでコンボボックスのリストのみクリアってどうやってやるんですか?
367:デフォルトの名無しさん
17/12/06 23:12:55.48 ClwZMpdPa.net
>>357
正式にやるのは多分すごく難しい。
Win32APIでコンボボックス内のリストボックスに対してどうにかするということになると思う。
しかし、単純に
strCombo=ComboBox1.Text
ComboBox1.Clear
ComboBox1.Text=strCombo
でテキストが一瞬クリアされたのは見えないから現実的な案だと思う。
368:デフォルトの名無しさん
17/12/07 10:43:49.53 cGZzJnMw0.net
シートの非表示設定について
Sheets(”sheet1").Visible = False
でシート非表示設定をしたのですが元々非表示だとバグになってしまいます。
釦を押せば特定のシートのみを表示できるようにしたいんですけど表示時非表示時がランダムで
非表示時でもそのコード無視するかと思ったら非表示なのに非表示にするんじゃねぇと怒られた。
369:デフォルトの名無しさん
17/12/07 10:55:46.75 SgQPpSGG0.net
>>359
VisibleプロパティがBooleanで状態を返すのでIfで分岐させる
If Sheets("sheet1").Visible Then
Sheets("sheet1").Visible = False
Else
Sheets("sheet1").Visible = True
End If
こうすると実行するたびに表示/非表示が切り替えられる
370:デフォルトの名無しさん
17/12/07 11:24:06.29 cGZzJnMw0.net
>>358
ありがとうございます。できました。
なんとなく、if文使うのかなと思ったのですがif文が思いつかなかった。
Elseの下を消すことで、非表示時は非表示のままのする思い通りの事が出来ました。
371:デフォルトの名無しさん
17/12/07 11:50:17.69 /U/N3RBoa.net
>>360
それだと非表示の時は表示されるからElseはいらねえだろ。
俺も
Sheets("sheet1").Visible=(Not Sheets("sheet1").Visible)
と最初考えたけどやっぱIf文にしないと駄目かと考えた。
372:デフォルトの名無しさん
17/12/07 12:06:28.65 SgQPpSGG0.net
>>361
たぶん他人にも使わせるのだと思いますが
シートをシート名じゃなくオブジェクト名で指定すると
誰かが勝手にシート名を変えても関係ないのでオススメ。
さらにわかりやすいオブジェクト名に書き換えると、尚良し。
オブジェクト名はVBEのプロパティウィンドウの(オブジェクト名)を見てね。
初期値はSheet1なので
Sheets("sheet1")をSheet1に置き換えてもうごくはず。
>>362
あとから余計なこと書いたかなーと思ったけど、本人が気づいてくれてよかった。
373:デフォルトの名無しさん
17/12/07 13:06:30.92 cGZzJnMw0.net
〉〉361
ど素人で何もわからないままマクロの記述させながら必要なところ
コピペしてとネットコピペでほとんどコード打ち込まず作ってるので
まだ、オブジェクトまで触ってません。
今度触ってみたいと思います。
標準モジュールは逆になんのモジュールかわからなくなるの必要なモジュールと区別するために名前つけてるけど
sheet名はそのままです。
374:デフォルトの名無しさん
17/12/07 21:42:15.17 F/BnOZfeM.net
>>287
ワシはティンコを2本もっている
2本目はとっておきだ(´・ω・`)b
375:デフォルトの名無しさん
17/12/07 22:24:29.94 QxT2u2P9d.net
>>365
マジ気になるわー
V字になってるのか、真ん中で2段になってんのか、前後に生えてんのか?
1本は普通だが、もう1本はデコに生えてんのか?
376:デフォルトの名無しさん
17/12/08 00:07:26.11 8mEkhztWa.net
コードのコメントについて
どこまで記入してますか?
素人なもんで変数の内容から
変更前のコードまでコメント化してるからコード自体が長くなる。
社内のVBAコード見るとコメントほとんど書いてなくてf8で追っても、よくわからないからなにがいいか分からない
377:デフォルトの名無しさん
17/12/08 00:27:27.18 tPe4A27O0.net
設計さえキチンとしていれば大抵はコメント要らない。
Dim SLine As Long:SLine = 3 '読み込むファイルのヘッダーが二行ある為
みたいにプログラム依存でないパラメータを解説する時に使ったりはする。
ある程度の習熟が必要なので、ステップ実行でも何してるか分からない(正常に追えない原因が分からない)のであれば、
まだコメントの必要性について論ずる段階では無いので特に要らないんじゃないかな。
自分の昔書いたコードを改修しようとして訳分からないみたいなのを何度も経験して始めてコメントの要点が掴めると思う。
378:デフォルトの名無しさん
17/12/08 00:40:24.89 MH/bn/0fH.net
>>367
変数名からなるべく中身を類推できるようにつけてコメは最小限にしてる。
後で迷うくらいならつけたほうがいいと思う。コード記述して直後は完全にわかってるから迷うポイントに気づけない。一週間後とかに再レビューして、「コレなにやってんだろ?」と引っかかった所はポイントかな。
あとExcel本体の不具合、制限回避とかコメしてないと中々思い出せないことがある。
379:デフォルトの名無しさん
17/12/08 00:50:05.27 04xg1k3G0.net
コメントは書いた方が良いんだが、余計なのはいらない。
変数名で分かるものは必要ない。
むしろどういう処理かのコメントを書く場合が多い。
それもそこのメンバーのレベルによる。
書ける奴らが集まってるなら、こんなもん分かるだろと書かない場合も多い。
380:デフォルトの名無しさん
17/12/08 08:12:21.44 WX0K1LcLa.net
コメントは処理の内容についてはしない
なぜその処理をするのかつかみにくいとリッキーだったり使用上やむを得ないときに理由を簡潔に書く
変更履歴をコード上に書くのは愚の骨頂だけどVBAだとほかに方法が少ないから自分かチームでルール決めるしかないな
381:デフォルトの名無しさん
17/12/08 08:13:11.00 WX0K1LcLa.net
とリッキー→トリッキー
使用→仕様
382:デフォルトの名無しさん
17/12/08 18:16:29.95 3k7CQU1Hd.net
質問です。
シミュレータソフトをVBAを使って制御しています。順々にモデルを解析していき、逐次計算結果がエクセルに反映表示されるような動作をします。
ただそのとき、きちんと逐次結果が表示されていく場合と画面に全く結果が表示されずプログラムが終わった途端に一気に数値が表示される場合とがあります。
途中でも解析結果が分かるよう安定して逐次表示するようにしたいのですが解決策分かる方いたら教えてください。
なお画面更新はもちろんオンです。調べたところdo eventsというのでWindowsに制御を渡すやり方もあるようですが、途中の動作が割り込む可能性がありそれは避けたいです。
383:デフォルトの名無しさん
17/12/08 19:13:35.05 jJUgyerEM.net
自分も普段はほとんどコメント書かない。
適切な命名とコードの流れで処理は説明して、意図や補足説明にコメントを書くのが正しいと思ってる。
ただ、VBAではかなり細かく書いてる。理由は、VBAの時点でどうやっても読みづらいから。
勝手に行間調整するせいで
int n
WorkBook book
みたいな整列ができないし、Dim n As Integerって構文自体が無駄な単語多くて、数並んでいると読む気がなくなる。
スコープの区切りにEndを使うのも()よりコードに埋もれて見づらいしVBEの色設定は貧弱だし。
VBAに限ってはコメントで処理追った方が楽だって最近は思ってる。
早くエクセル操作に向いたもっとまともな言語出ないかな。
384:デフォルトの名無しさん
17/12/08 19:16:35.83 wpv6YuQca.net
そうか、ここもvba方式なんだった。
int__________a
WorkBook___book
みたいにタイプと変数名で表っぽく配置することね。
385:デフォルトの名無しさん
17/12/08 19:34:22.58 tPe4A27O0.net
>>374
VBAは宣言しないのがデフォなんだから、いちいちDimなんちゃらってやってたら、そりゃ不便だろ。
386:デフォルトの名無しさん
17/12/08 20:15:19.13 F+K0Jtko0.net
>>376
そうではなくて、変数の宣言構文がシンプルではないところを言っていると思うよ。
387:デフォルトの名無しさん
17/12/08 20:45:47.90 kuqPkTCcd.net
やれやれ、また長い関数を書いてしまった
388:デフォルトの名無しさん
17/12/09 01:25:45.78 naguWC2La.net
宣言しない奴のコードは読みたくないな。
宣言全部入れてから持って来いと言うかも。
389:デフォルトの名無しさん
17/12/09 01:27:01.02 vu3Y0INla.net
>>375
VBAに慣れてれば、そんなの違和感無いけどな。
390:デフォルトの名無しさん
17/12/09 01:39:08.64 vu3Y0INla.net
>>373
それじゃコメントのしようがない。
どんな風に制御しているのかとか、結果はそのシュミレータソフトから取ってきてるんだろうけど、そこから逐次結果が得られてるのかとかの詳細が分からんと何とも言えない。
391:デフォルトの名無しさん
17/12/09 11:52:36.39 oQ1pndO0d.net
Debug.Print もApplication.Statusbar もちょっと処理が重くなってくると表示が止まって役に立たない
392:デフォルトの名無しさん
17/12/09 13:26:29.70 Px3+LsGd0.net
>>382
Debug.Printの次にDoEventsを書けばすぐに出力される
393:デフォルトの名無しさん
17/12/09 20:32:20.11 uW7BpcjHa.net
コメント関連ありがとう。
もう、人には見せない用だけどくどいくらいコメント書きまくってるw
394:デフォルトの名無しさん
17/12/10 08:18:11.50 PzHPENwqa.net
VBAの開発環境について
デバッグ作業してると2画面欲しくなるんだけど皆さんどうしてる?
vBEの画面と通常の画面をフルスクリーンで見たいし、VBEもコード書き込む画面のほかに現在の変数が分かる画面と実行結果が分かる画面が欲しいからノート1台でやってると画面グチャグチャ
395:デフォルトの名無しさん
17/12/10 08:41:31.53 2VZ9i3vi0.net
ノートはUPS付きのデスクトップとして使ってる
24インチのモニタに繋いで
無線キーボードとマウスで操作
396:デフォルトの名無しさん
17/12/10 09:29:22.82 s+zBVK9X0.net
モニタ2枚でやってるけど
ツールボックスのウィンドウとかフォームが画面の境界に表示されたりして
地味に対応していない感を醸し出してる。
フルHD以上なら1枚でもVBEを端っこによけておけば窮屈じゃないと思う。
それよりエディタの貧弱ぶりをどうにかしてほしい。
今時のIDEを触ると、VBEはふた昔前のオマケ機能なんだなと思い知る。
397:デフォルトの名無しさん
17/12/10 12:22:00.56 w7IPLNC5r.net
まあデバッグが必要になる様なマクロなんかこさえんなっで事だ
398:デフォルトの名無しさん
17/12/10 13:02:23.44 rJurKCVR0.net
デバグが不要なマクロって相当短くないと無理だろ
399:デフォルトの名無しさん
17/12/10 19:23:33.18 RKQe6ZfS0.net
バグ発生に関与する要因としてコードの量のみを気にかけている
→ 初心者またはそれに準ずる低スキルのもち主
>>388を受けてバグが一切発生しない事を想定している
→ 0か100でしか物事を考えられないアスペ
デバッグをデバグと言っている
→ ガチのジジイか極端にセンスの悪い意識高い系
たった一言でここまでプロファイリング出来ました
400:デフォルトの名無しさん
17/12/10 20:54:53.56 DUp9AezHa.net
え??コード書き書きしたら一度も動作チェックしないで実装するの?
すげー!
ほぼ途中で止まって黄色くなる身としては信じられない.
全ての動作の確認と変数の動作に変な所がないか見るの楽しい.
それに人が書いたコードで動作チェックするにもf8必要だし
ただ、F8連打も大変だから超ゆっくり動作する機能でもあればいいのに
401:デフォルトの名無しさん
17/12/10 21:56:00.33 tyDER63C0.net
虫見付けるたんびに「バッグだ!バッグだ!」言うんか 自分の発言に違和感無いんか
402:デフォルトの名無しさん
17/12/10 22:02:23.86 UfhTQ4hV0.net
プログラムがおかしい以上バグはバグだ
開発中に個人で見つけてるから影響が小さいというに過ぎないが
べつにいいじゃんバグでも
403:デフォルトの名無しさん
17/12/10 22:28:29.51 rJurKCVR0.net
リリース版を出すかどうかをデバグ作業と呼ぶかどうかの境界線にしてるって事なのかな?
バグまみれでリリースして、ネット経由でパッチを当てるのが当たり前になった事が原因で、
そういう感覚が生まれたって考えるとなかなか興味深い現象だな。
404:デフォルトの名無しさん
17/12/10 22:54:03.35 5raOMeRU0.net
お前、リアルで嫌われ者だろ
たった一文でここまでプロファイリング出来ました
405:デフォルトの名無しさん
17/12/10 23:42:33.59 05lOR9eq0.net
質問です。(スレチかもだけど、他よりここの人たちのほうがLevel高そうなので)
Excel2013 @Win10 64bit Core i7 Mem8GB
ここ数日でAutoFilterのパフォーマンスが急に悪くなったと感じています。
テーブルは2000行*50列程度。
症状としてはフィルタリング済みのシートをSelectする際にタイムラグが発生します。
最初原因が分からなかったのですが、設計を少しずつ切り落としていった結果、
フィルタ範囲に入力規則が設定されていたのが原因でした。
その内容はIMEOffのみ。
フィルタがかかってない場合は瞬時にシート切替できるのに、フィルタリングされていると
切替に数秒待たされます。
フィルタ列が増えるとラグが倍増します。
また、列要素の先頭行付近の要素でフィルタされている場合の方が影響が大きいです。
2~3日前までこのようなことはなかったのに、、何かExcel環境自体がかわったのかと
思いくまなく調べるのですが、原因が掴めません。
(つづく)
406:デフォルトの名無しさん
17/12/10 23:43:42.33 05lOR9eq0.net
>>396
(つづき)
マクロやシート上の把握できていない設計要素の影響を除外するために新規xlsxファイル
で試しました。
前提:評価ブック以外のブックは開かない。
シート1:2000行*50列の表を作成、A-Zの1文字をランダムに埋め、AutoFilter設置。
書式設定、条件付き書式等は一切行わない。
入力規則は評価条件とする。(IME制御なしの場合とIME-Offの場合)
フィルタ実施時は、2列絞り込む。
シート2:空シート
評価用Macro(シート1)
Option Explicit
Dim st As Single, ed As Single
Private Sub Worksheet_Deactivate()
st = Timer
End Sub
Private Sub Worksheet_Activate()
ed = Timer: Debug.Print ed - st
End Sub
(つづく)
407:デフォルトの名無しさん
17/12/10 23:44:00.59 05lOR9eq0.net
>>396
(つづき)
評価方法:
1)フィルタ設置のシート1を表示
2)Ctrlキーを押しながら、PgDn→PgUpを連続して押下。
3)Immediateウィンドウで計測時間を確認。
上記を5回程度実施
条件と結果:
Case IME制御なし+フィルタなし ▼平均時間:約70msec
Case IME制御なし+フィルタ-On ▼平均時間:約70msec
Case IME-Off+フィルタなし ▼平均時間:約70msec
Case IME-Off+フィルタ-On ▼平均時間:約7000msec
ちなみに1列フィルタリングした場合は、約1400msec程度でした。
対症療法としては「入力規則使うな」となりそうですが、2~3日前までは上記
現象は発生していなかったので、、原因療法が知りたいです。
どなたか上記現象分かるかたいらっしゃいませんか?
408:デフォルトの名無しさん
17/12/10 23:47:36.15 VPQqZskd0.net
>>398
思い当たるのは、FCUでIMEの挙動がおかしくなったという報告多数な件
409:デフォルトの名無しさん
17/12/11 03:47:36.99 /hRyHJmR0.net
>>399
Version1703なのでまだFallは当たってないようです。
410:デフォルトの名無しさん
17/12/11 11:20:26.75 TIu41blJ0.net
ホントMSはアップデートなのかウイルスなのか分からんことするよな・・・
411:デフォルトの名無しさん
17/12/11 13:06:28.39 NoGJiqM0H.net
>>401
ちなみに職場の環境
Excel2010 @Win7
Excel2013 @Win8
では再現しませんでした。
やっぱりなんらかのUpdateが当たったのか、それとも自分でなんかやらかしてるのか、、、
412:デフォルトの名無しさん
17/12/11 13:32:28.01 pEROMoD00.net
午前中にメッセージが出てアプデするか? とか聞きゃあがったから「あいよ」ってんで気軽に再起動した
90%ぐらい完了した後で Cannot だってやんの しょーもないから電源落として午後
413:再起動したら また「アプデするか?」 って もうね、アホかと
414:デフォルトの名無しさん
17/12/12 01:03:48.16 vtwEo9S/0.net
Windows
押しつけがましいアップデートメッセージが出て
いいえしまくってたんだけど
ちょっと目を離して風呂入ってたら勝手に合意したことにしてOSインストールされてた
そんな俺が客先で作らされてるのは顧客が一日黙ってたら契約に合意したことになるシステム
415:デフォルトの名無しさん
17/12/12 04:17:56.67 VGkGFTOK0.net
質問です。
LastCellって簡単に取得できるのにHomePositionってこれといった決定打がないんですかね?
SendKeys以外で簡単に安定して取得する方法ってありますか?
できればSelectしなくてよい方法で。
416:デフォルトの名無しさん
17/12/12 11:56:45.28 R9+tEHmjd.net
ADODB.Streamで大きめのテキストファイルを読むときLoadFromFileが重いので、Openの引数でファイル指定してから
ReadTextするようにしたいんですがうまくいきません。
パスをそのまま書いても、"file://C:temp/data.txt"のような書き方をしてもことごとくOpenのところで落ちてしまいます。
どう書けばいいんでしょうか?
ちなみに先頭100行を試し読みするときとかに使いたいです。
417:名無し
17/12/12 12:18:28.61 KlMiw57eM.net
>>406
それならコード貼ったほうが早い
使い方云々が知りたいだけならググればいいし
418:デフォルトの名無しさん
17/12/12 12:50:26.86 R9+tEHmjd.net
>>407
スマホなのでちょっと待ってて
419:デフォルトの名無しさん
17/12/13 11:40:21.94 5F7kXiJk0.net
名前を付けて保存する際
最近使った“アイテム”が
今週~,先週~,しばらく前,という順番で使用履歴の各ファイル名が表示されます。
これを表示させない設定を教えてください。
よろしくお願いいたします。
スペック
↓
OS=Win10
Excel2016
Officeバージョン=1710
420:デフォルトの名無しさん
17/12/13 14:40:49.78 5F7kXiJk0.net
↑すいません、質問するべき板を間違えました。ここはVBAでしたね。
他で聞いてみます。
421:デフォルトの名無しさん
17/12/13 22:03:05.49 lbNGI0B20.net
チョイ前に変数の宣言が話題になってたから俺も一ネタ言いたい
「redim で変数の宣言が出来る仕様はやめて欲しい」
変数名を間違えた時にエラーで気付けるように普段から変数の宣言を強制してるんだけど、
redim で配列を変更する時に変数名を間違えても
新たな別の変数扱いされてエラーにならないから気付かないことがある
配列変数でも宣言は dim 、要素変更は redim っていう風にしといてくれたらと願ってやまない
422:デフォルトの名無しさん
17/12/13 23:22:51.89 b+I23nON0.net
Application.GetOpenFilename でファイルのパスを求められることが分かった
Application.GetOpenFilename
Workbooks.Open.Filename:=Application.GetOpenFilename
ってできないことが意味がわらない
あと
Workbooks(Application.GetOpenFilename)ってやるとパス付のでエラーになってしまうこともわかった
Workbookオブジェクトに適当な変数を宣言して iとする
i = Application.GetOpenFilename
i.worksheet()ってできない意味がわからない
i = Workbooks.Open(filename:= ApplicationGetOpenFilename)
i.worksheets()
これならできる意味がわからない
()で戻り値をくくるのはわかる
でもこの場合の戻り値はパス付戻り値であるから Applcation.GetOpen....
はいらないのでは?パス付戻り値ならば
i = Application.GetOpenFilename
でもできるのでは?WorkBookオブジェクト変数だから
誰か答えられる?
423:デフォルトの名無しさん
17/12/13 23:34:03.63 fRI8/I3E0.net
そういう言語仕様なので
424:デフォルトの名無しさん
17/12/13 23:49:56.82 b+I23nON0.net
わりと真面目に答えてくれ
オブジェクト変数に直接パス付のファイル名をぶち込んでエラーになるのが意味わからない
なんのためのオブジェクト変数なんだ
Workbooks.Open(filename:= ApplicationGetOpenFilename)
これもパス付のファイル名なのになんで格納できるんだ?
425:デフォルトの名無しさん
17/12/14 00:01:33.96 iqnmwrCv0.net
まず型というものを理解してください
つぎに、プロパティというものを理解してください
つぎに、オブジェクトにはデフォルトプロパティというものがあるのを理解してください
あと名前付き引数に対する理解も必要ですね
VBAではSetでの代入とLet(を省略した)代入では意味が違うので、それもちゃんと区別してください
いちいち全部ここで解説はせんが
このぐらい理解すればたぶん答えはわかるだろ
426:デフォルトの名無しさん
17/12/14 00:13:48.84 iqnmwrCv0.net
まじめに答えといてやるけど
>オブジェクト変数に直接パス付のファイル名をぶち込んでエラーになるのが意味わからない
たぶんお前がやってるのは、そのオブジェクト変数のデフォルトプロパティに代入しようとした
で、そのオブジェクトがそれを受け入れないからエラーがでたんだろうな
>Workbooks.Open(filename:= ApplicationGetOpenFilename)
>これもパス付のファイル名なのになんで格納できるんだ?
格納の意味が分からん
ApplicationGetOpenFilename(の結果)をたんにOpenの(filename)引数として渡してるだけ
ApplicationGetOpenFilenameの結果がOpenのfilename引数として適当だからエラーが出なかっただけ
427:デフォルトの名無しさん
17/12/14 00:14:33.99 FrwGQASIx.net
パス付戻り値っていう表現が凄い
Application.GetOpenFilenameの戻り値は、パス文字列か、パス文字列の配列か、ダイアログがキャンセルされたときに返されるFalseかのいずれかしかない
パス付って、何にパスがくっついてると理解してるんだろう
パスが戻り値そのものだろう
428:デフォルトの名無しさん
17/12/14 00:18:35.88 oVDd8Fug0.net
>>416
意味がわからん
初心者相手に専門用語で勝った気になるなよ
429:デフォルトの名無しさん
17/12/14 00:21:23.88 oVDd8Fug0.net
>>417
パスってのは
¥C:のことだろ?
openメゾットの戻り値も¥C:ついてるのに
WBオブジェクト変数に格納できる意味がわからない
専門用語でこたえるな わかりやすく答えろ
外人相手に口喧嘩して勝ち誇ってるやつと同じだわ
430:デフォルトの名無しさん
17/12/14 00:23:38.19 oVDd8Fug0.net
workbookのオブジェクト変数のデフォルトプロパティってなんだよ
そこを答えろ
答えろって言わないと答え出て来ねえのかよ
431:デフォルトの名無しさん
17/12/14 00:24:22.55 oVDd8Fug0.net
ちなみにおれはVBA初めて3時間
ここまでの疑問が出るだけすごいと思うけど
432:デフォルトの名無しさん
17/12/14 00:24:26.11 0XKK4N9O0.net
>>412
>Workbooks.Open.Filename:=Application.GetOpenFilename
>ってできないことが意味がわ「か」らない
Workbooks.Open Filename:=Application.GetOpenFilename
なら動くんだが、それではダメ?(open と filename の間は半角スペース)
何故かと言えば言語の仕様として
引数はピリオドで繋ぐものではないからとしか言いようがない
(workbooks はオブジェクト、open はメソッド、filename:=~ はその引数)
>i = Application.GetOpenFilename
>i.worksheet「s」()ってできない意味がわからない
変数i が workbook型だとして、Application.GetOpenFilename の戻り値はworkbook型ではない。
戻り値はvariant型なんだけど、キャンセル時に false になるだけで、ファイルが選択されていれば文字列が返される
複数ファイルが選択されてても文字列が配列で帰るだけ
それに、i がworkbook型変数なので set を付けないとダメ
i が variant型変数 なら文字列か false が帰るだけでヤッパリ workbook としての挙動はしない
i.worksheet「s」() っていうのも、worksheetオブジェクトは
既に開いているブックのシートしか指定出来ないから、i がブックとしてオープンしてなきゃ当然ダメ
>i = Workbooks.Open(filename:= ApplicationGetOpenFilename)
>i.worksheets()
>これならできる意味がわからない
set i = Workbooks.Open(filename:= ApplicationGetOpenFilename)
じゃないと動かないよ
理由は前述のとおり
433:デフォルトの名無しさん
17/12/14 00:32:01.43 FrwGQASIx.net
>>419
Openメソッドの戻り値はパスではなく、Workbookオブジェクトそのものだ
開いているブックの集まりであるWorkbooksコレクションオブジェクトに、引数Filenameで指定したブックを追加して、戻り値としてそのブックそのものを返す処理だ
何か根本的に勘違いしてるだろ君
434:デフォルトの名無しさん
17/12/14 00:33:36.37 oVDd8Fug0.net
>>422
お前がまだわかりやすいな
ただし
おれはすでに開いているファイルじゃないと操作できないとかは全部知っている
オブジェクト型変数の前にsetステートメントを置くことも知っている
つまり
Application.GetOpenfilename = ファイルを開いた時は文字列が返される
workbook型に返せないのか?
答えはパス付きの文字列で帰って来るためにノーだ
これも知ってる
Workbooks.Open filename:=Application.GetOpenfilename
これも知っている
しかし結果としては
ファイルを選択で開いたパス付き文字列を開く
という命令なはず
同じパス付き文字列なのにworkbook型に格納できないのが意味がわからない
435:デフォルトの名無しさん
17/12/14 00:35:42.03 oVDd8Fug0.net
>>423
ん?なんで?
msgboxで表示されてもパス付きになるよ?
436:デフォルトの名無しさん
17/12/14 00:41:28.15 oVDd8Fug0.net
またも意味不明な現象が起きた
拡張子を指定しなかったのに開いた
拡張子を指定したらなぜかエラーが出た
なんでだ?
URLリンク(i.imgur.com)
437:デフォルトの名無しさん
17/12/14 00:42:52.81 FrwGQASIx.net
>>420
オブジェクトには、特にプロパティ名を指定しないでアクセスする場合に、優先的に参照されるプロパティが決められていて、それをデフォルトプロパティと呼ぶ
オブジェクト型に合わないデータを代入してしまう構文になっているときでも、データの型がデフォルトプロパティの型に適合していればVBAはデフォルトプロパティへの代入として解釈して処理を受け付ける
438:デフォルトの名無しさん
17/12/14 00:44:33.92 oVDd8Fug0.net
>>423
Workbooks.Open(filename:= ApplicationGetOpenFilename)
→\C:~~~~という文字列が返される
ApplicationGetOpenFilename
→これも同じ
なぜ前者はWorkbook変数に格納できて
後者はできないんだ?
439:デフォルトの名無しさん
17/12/14 00:45:53.39 oVDd8Fug0.net
>>427
そんなもん知ってるわ
Rangeやcellsのvalueみたいなもんだろ?
Workbookオブジェクトのデフォルトプロパティはなんだ?
440:デフォルトの名無しさん
17/12/14 00:48:20.20 0XKK4N9O0.net
>>424
悪いけど>>412 の書き方じゃ分かってるようには見えない
set を付けてない時点でこの人は分かってないんだなと判断されても仕方ない
そして
>Application.GetOpenfilename = ファイルを開いた時は文字列が返される
も間違い
Application.GetOpenfilename は、
あくまでもファイルのパス情報を文字列(或いは false)で返すだけで
実際にブックを開けることはしない
だから正確に書くと
Application.GetOpenfilename = ファイルを「選択した」時は文字列が返される
というべきで、そのブックを開くためにworkbooks.open を用いる必要がある
441:デフォルトの名無しさん
17/12/14 00:51:58.64 oVDd8Fug0.net
>>430
set
オブジェクト変数を代入するとこに扱うステートメント
442:デフォルトの名無しさん
17/12/14 00:53:08.36 oVDd8Fug0.net
>>430
ファイルを開いたっていうのは
選択したって意味なんだが
オブジェクトとOPENメゾットで初めて開く
こんなの知っている
443:デフォルトの名無しさん
17/12/14 00:53:19.64 0XKK4N9O0.net
>>430でもまだ不正確だった
より正確に言うと
Application.GetOpenfilename =
「開きたい(あるいは移動、コピー、改名、削除など何らかの操作をしたい)」ファイルを「選択した」時は文字列が返される
ですね
444:デフォルトの名無しさん
17/12/14 00:55:08.87 oVDd8Fug0.net
>>433
んなもんしってるわ
キャンセル押されたらフェイルス
ファイルを選択したらパス文字列
445:デフォルトの名無しさん
17/12/14 00:56:13.50 0XKK4N9O0.net
>>432
いや、それが分かってるなら何を問題にしてるのかがよく分からない
それと「メゾット」じゃなくて「メソッド」ね
446:デフォルトの名無しさん
17/12/14 00:56:39.81 pIjJ7/MG0.net
真面目に答えるんじゃなくて
わりと真面目に答えるように
447:デフォルトの名無しさん
17/12/14 00:58:18.78 FrwGQASIx.net
>>420
ちなみにworkbookオブジェクトのデフォルトプロパティは存在しない
存在しないから当然、workbook型に合わないデータは代入できない
448:デフォルトの名無しさん
17/12/14 01:00:54.08 oVDd8Fug0.net
>>437
じゃあなんで
workbook.openのパス文字列は入るんですかねえ
449:
450:デフォルトの名無しさん
17/12/14 01:01:13.61 oVDd8Fug0.net
ここまで答えなしだが
誰もわからないのか?
451:デフォルトの名無しさん
17/12/14 01:01:34.43 oVDd8Fug0.net
おれの質問ってVBAの穴をついた?
452:デフォルトの名無しさん
17/12/14 01:04:09.93 0XKK4N9O0.net
質問の意味がわからないんですよね
何が疑問なのか、独自表現を用いずに、
set やなんかも省略せずに正しく動作するコードと
動作しない理由が知りたい動かないコードを書いてみてもらえます?
453:デフォルトの名無しさん
17/12/14 01:05:31.95 FrwGQASIx.net
>>428
workbooksは、workbookクラスではない
別のオブジェクトのクラスだ
それから、さっきも書いたが、Openメソッドの戻り値は引数で指定されたパスを持つWorkbookオブジェクトなのであって、Openメソッドによってパス自体が戻ってくる訳ではない
パスを返してくるApplicationクラスのGetOpenFilenameメソッドとは全く働きが違う
プロパティやクラスや引数の名前で何となくbookとかfileとか付けばパス付のWorkbookオブジェクトが返ってくるものと混同してるようだが、きちんと区別しないといけない
454:デフォルトの名無しさん
17/12/14 01:13:20.35 FrwGQASIx.net
>>438
Openメソッドが要求する名前付き引数Filenameに、GetOpenFilenameで取得したパスを設定して、その結果新しく開いたWorkbookオブジェクトが返っているからだよ
このFilenameはApplication.GetOpenFilenameメソッドの戻り値ではあるけど、Workbooks.Openメソッドの戻り値ではない
Worksheets.Item(Index:=ActiveSheet.Name)みたいな処理と一緒だと言えば少しは分かるか?
455:デフォルトの名無しさん
17/12/14 01:13:59.17 FrwGQASIx.net
>>440
突いてない
典型的な初心者の質問
456:デフォルトの名無しさん
17/12/14 01:17:18.86 LaUulqGP0.net
典型ではないな
低次元な初心者の質問
457:デフォルトの名無しさん
17/12/14 01:22:45.67 FrwGQASIx.net
たぶんこの質問者は、コレクションを知らないタイプだな、
それから、式に含まれるプロパティ名やメソッド名をオブジェクトのクラス名と同一視しているタイプだろう
458:デフォルトの名無しさん
17/12/14 01:34:07.25 n2gI2QxJ0.net
たぶんハイパーリンクでパスが表現される事が多いところから、
パスが文字列とは異なるデータ型を持つ何かだと勘違いしてるだけじゃないの?
459:デフォルトの名無しさん
17/12/14 07:32:56.86 oVDd8Fug0.net
>>443
workbooks.open filename:=Application.GetOpenfilename
この場合はworkbooksオブジェクトに選択したパス文字列が格納されるのか?
だからworkbook型に格納できるのか?
460:デフォルトの名無しさん
17/12/14 07:37:06.65 oVDd8Fug0.net
>>446
ん?
workbooks
worksheets
rows
これはコレクションだろ?
コレクションはオブジェクトの最上位
プロパティはオブジェクトの何?
メゾットはオブジェクトに命令
違うか?
461:デフォルトの名無しさん
17/12/14 07:40:17.60 oVDd8Fug0.net
マジでわかりやすい答えがない
462:デフォルトの名無しさん
17/12/14 08:30:04.65 mohvOYX1x.net
>>448
君の言う「格納」は、コレクションへのオブジェクトインスタンスの追加、プロパティ値の設定、変数への代入、引数の受け渡し等がごちゃごちゃになっていると思う
まず、Workbooksコレクションに、データの代入はできない
WorkbooksコレクションはWorkbookオブジェクトの集まりを要素に持つコレクションオブジェクトだから
それから、Workbooks.Open Filename:=Application.GetOpenFilenameという構文は、Workbook型の変数に値を代入しているわけではない
Filenameという名前付きで定義されたOpenメソッドの文字列型の第一引数に値を渡していて、その結果としてOpenメソッドがWorkbookオブジェクトを返しているわけで、オブジェクト型変数への代入ではない
463:デフォルトの名無しさん
17/12/14 08:45:33.01 YV9D93CW0.net
>>449
コレクションは最上位じゃない
一番上にあるのはオブジェクト
464:デフォルトの名無しさん
17/12/14 08:46:43.07 QIiUylbtp.net
>>451
いやそんなのしってるんだけど
dim i string
dim wb workbook
application.Getopen filename:=で目的のファイルを開く
そしたら「¥:目的のワークブック.xlsx」が文字列として帰って来る
workbooks.open filename:=目的のファイル
これで初めて目的のファイルが開く
ここで本題
どちらも目的のファイルのバス名が返ってきているのに
set wb = application.GetOpen filename
だとエラーで
set wb = workbooks.open (filename :=目的のワークブック.xlsx)
これならwbオブジェクト型変数に代入される意味がわからない
これをはっきり答えろ
わかりやすくな
465:デフォルトの名無しさん
17/12/14 08:47:18.91 QIiUylbtp.net
>>452
一番上
↓
最上
日本語やり直したほうがいい
466:デフォルトの名無しさん
17/12/14 09:00:03.55 n2gI2QxJ0.net
>>453
Set wb = Application.GetOpenFilename
は、String型をWorkbook型のポインタへ代入しようとしてエラー吐いてる。
Set wb = Workbooks.Open(Application.GetOpenFilename)
Set wb = Workbooks.Open("目的のワークブック.xlsx")
は、OpenメソッドにString型変数を渡しているから機能する。
467:デフォルトの名無しさん
17/12/14 09:02:02.66 QIiUylbtp.net
>>455
workbook型のポインタってなに?
これがわかればすっきり
468:デフォルトの名無しさん
17/12/14 09:02:04.79 CHPwg0pDx.net
>>449
コレクションはオブジェクトの最上位、という発想がそもそも間違い
コレクションは子要素に追加されているデータやオブジェクトへのアクセス等を提供する、子要素からは独立したオブジェクトだ
更に、WorkbooksコレクションオブジェクトはWorkbookオブジェクトのみを要素に持つようにあらかじめ最適化された規定のコレクションオブジェクト
469:デフォルトの名無しさん
17/12/14 09:05:19.87 QIiUylbtp.net
>>455
WB型変数に文字列代入は不可
メゾットの戻り値の代入は可能ってこと?
なんで?
470:デフォルトの名無しさん
17/12/14 09:05:51.56 YV9D93CW0.net
>>454
日本語だけ知ってても言語仕様を正確に説明する難しいんだよ
コンピューター業界では「上位」などの言葉には特別な意味を持たせる場合もあるし、
とくに相手がド素人だと、言葉の意味から説明するのも面倒だから、あえて上位という単語は避けた上で
なんとなく通じてくれそうな「上」って言い方をしたんだよ
お前の態度が気に入らないからワッチョイ Spc7はNGするわ
人に何か質問する時は最後までていねいな言葉を使え
471:デフォルトの名無しさん
17/12/14 09:07:28.47 QIiUylbtp.net
>>459
うんこーwwwwwwwwwwうんこーwwwwwwwwww
472:デフォルトの名無しさん
17/12/14 09:08:52.24 CHPwg0pDx.net
>>453
そもそもApplication.GetOpenFilenameはブックを開いてブックへの参照を返すメソッドじゃなくて、ユーザーにダイアログ画面上で選択させたファイルのパスを返すメソッドなんだが
メソッド名で混乱してるだろ君
473:デフォルトの名無しさん
17/12/14 09:11:20.55 QIiUylbtp.net
>>461
いやしってるけど
キャンセルが押されたらフェイルスだし
選択したらパス名が返って来る
何回言えば気がすむんだよ
474:デフォルトの名無しさん
17/12/14 09:12:47.30 QIiUylbtp.net
Openメゾットはただブックを開くだけだろ?
ただし 引数を戻り値として得られる
つまり 開いたファイル名がOpenメゾット内にある
違うかい?いい線いってる?
475:デフォルトの名無しさん
17/12/14 09:13:02.91 n2gI2QxJ0.net
>>458
なんでも何もデータ型が一致するかどうかが問題であって、メソッドの戻り値の型は一致するってだけ。
たぶんJavaScriptから始めたせいで認識がおかしくなってるんだろうけど、
普通はデータ型が異なる変数同士の代入は出来ない。
476:デフォルトの名無しさん
17/12/14 09:14:18.68 CHPwg0pDx.net
この質問者みたいな人が言語仕様について思い込みや勘違いをしたまま共用マクロを組んだりすると、会社にとって迷惑なだけなんだよな
作ったマクロを他人と共有しないことを祈るのみ
477:デフォルトの名無しさん
17/12/14 09:20:19.35 CHPwg0pDx.net
>>462
それ俺がきのう説明したことだよねw
オブジェクト型変数にGetOpenFilenameから返った文字列型データやデータ配列を設定しようとしてるのがおかしいんだがw
データ型とか一回学んだ方が良いと思うよ
それから蛇足だけど、フェールスじゃなくて、フォルス、フォールス、ファルスの何れかの表記にしないと、Falseのことだと理解してもらえないことが多いと思うよ
478:デフォルトの名無しさん
17/12/14 09:25:08.03 CHPwg0pDx.net
>>463
引数の文字列は戻り値にならない
Openの戻り値はWorkbookオブジェクトの実体だ
Workbookオブジェクトの実体とパス文字列はイコールじゃない
それから、メゾットじゃなくてメソッドな
あんまり特徴的な言葉づかいしてるとメゾット君と
フェールス君とか呼ばれたりするかもしれないから気を付けなよ
479:デフォルトの名無しさん
17/12/14 09:30:34.82 QIiUylbtp.net
>>467
実体でなに?どころどころで補足質問しねえといけねえのかよ
480:デフォルトの名無しさん
17/12/14 09:31:25.92 QIiUylbtp.net
>>464
変数同士?
workbook型あとは何?
これも補足質問
481:デフォルトの名無しさん
17/12/14 09:32:51.20 QIiUylbtp.net
>>466
データ型の参考ページは?
猿でもわかるやつ
482:デフォルトの名無しさん
17/12/14 12:17:27.13 7XekaZVWx.net
>>470
その言い方は猿に対して失礼だぞメゾット君
WordやPowerPointのVBAと違ってExcelは「Excel VBA データ 型」でググれば腐るほど情報が出てくるから、好きなページを読んで出直してきたらいいさ
インスタンスもググってみたらいいよ
483:名無し
17/12/14 12:34:50.44 DWbie50BM.net
>>468
Workbookの実体とは開いて実行しているエクセルブックのことだよ。ブックはVBAが管理しているメモリ上のデータではないってこと。そこにアクセスする為の情報だけがWorkbook型変数には格納されている。
これ以上はググったほうがいいな。メゾットちゃんには言葉だけでは通じないみたいだし。
484:デフォルトの名無しさん
17/12/14 12:36:44.73 bra/P7/Ad.net
どう考えてもこいつは型も文法も戻り値も
485:理解できてないだけだろ
486:デフォルトの名無しさん
17/12/14 12:45:31.15 PlqHEg1vH.net
インスタンスはお湯かけて3分で完成するよ
(´・ω・`)b
487:デフォルトの名無しさん
17/12/14 13:37:10.14 D0PQd/9/a.net
体系だてた答えがほしいならオブジェクト指向あたりの本読んだ方がいいんじゃねえの
正確にはオブジェクト指向じゃないけどクラスとインスタンス(やそれにくっついてるメソッドやプロパティ)の関係を理解するにはそれがはや道だわ
ここは教科書じゃないから
488:デフォルトの名無しさん
17/12/14 14:17:01.84 QIiUylbtp.net
なんでぱぱっと答えられねえの?頭悪いの?
489:デフォルトの名無しさん
17/12/14 14:18:03.10 QIiUylbtp.net
>>472
ふーん
開いてから格納する
これだけだよね?詰まる所は
490:デフォルトの名無しさん
17/12/14 14:27:22.00 QIiUylbtp.net
Openメソッドで開かないと
workbook型に入らない
491:デフォルトの名無しさん
17/12/14 14:28:58.06 oiVEYMPnp.net
それは結果に過ぎない
ちゃんと原因や理屈を押さえないとまた同じことで詰むぞ
492:デフォルトの名無しさん
17/12/14 14:49:26.55 QIiUylbtp.net
>>479
それをわかりやすく教えて
ほんとにわかりやすく
493:デフォルトの名無しさん
17/12/14 14:51:48.29 /xE3TN/oa.net
>>480
無理だよ
494:デフォルトの名無しさん
17/12/14 15:05:19.17 QIiUylbtp.net
>>481
別の言葉に置き換えればいいだろ?
495:デフォルトの名無しさん
17/12/14 15:22:14.17 yqG/N6/gM.net
ID:QIiUylbtpはVBA以外の言語知ってるの?
それともExcel VBAで初めてプログラミングに触れましたって人?
お前の学習レベルがわからないからお前でもわかるように説明できないんだ
496:デフォルトの名無しさん
17/12/14 15:43:20.73 Sk339KZTa.net
ここには、彼の疑問に答えられるような人はいない。
こんぴゅうたーのでんげんをいれるとどうしてえくせるがうごくのかをせつめいするのはむずかしい。
でんきにはつうでんしてるときとつうでんしていないときがあるのでそれをりようしてぜろといちをくべつできる。
ぜろといちをくべつできればにしんすうをりようして...
497:デフォルトの名無しさん
17/12/14 17:51:08.32 Gx1HQ3cua.net
大体教えてもらう立場のやつがとる態度じゃないからまともに取り合ってもらえると思ってる時点で頭が悪い
498:デフォルトの名無しさん
17/12/14 18:34:15.80 Dm16MIru0.net
初心者なのに態度悪いからNGにしたわ。
教えてもらう態度じゃないよね。子供ならまあ納得だけど。
499:デフォルトの名無しさん
17/12/14 19:23:24.80 IXGcMbV0a.net
そもそもWorkbooksに指定するのはエクセルファイル名じゃない。
ブック名だ。
開いたブックのブック名とファイル名が同じになるから勘違いしてる奴もいるかもしれんが。
500:デフォルトの名無しさん
17/12/14 19:24:50.30 oezENCsV0.net
同じだったらファイル名でええやんw何鼻息荒くしてんの?w
501:デフォルトの名無しさん
17/12/14 20:32:08.46 g1PrWAQxx.net
>>487
恐らく>>486はWorkbooks.Itemの引数について話してるんだろうだが、君にはそのあたりが分からんみたいだな
502:デフォルトの名無しさん
17/12/14 20:33:08.02 g1PrWAQxx.net
>>489
安価間違えた、これは>>488宛
503:デフォルトの名無しさん
17/12/14 21:01:41.06 bra/P7/Ad.net
>>455
をもとに考えてみた
お金を入れるとカップにジュースが注がれる自販機を思い浮かべるんだ
Set wb = 'ジュースが入るカップ
Workbooks.Open( _'お金を判別してボタンが押されるとジュースを出す回路
Application.GetOpenFilename _'お金
)
→お金を入れてボタンを押したらカップにジュースが注がれる
Set wb = Application.GetOpenFilename
→カップに直接お金を入れて飲めないと騒ぐあほ
どうだ!?
504:デフォルトの名無しさん
17/12/14 21:06:22.48 zDxHi8mM0.net
>>453
お前バカだろ
変数wbはただの入れ物
workbook型しか入れられない入れ物にString型入れようとしてんだぞ?
これでわからないならただのバカだから二度と来るな
505:デフォルトの名無しさん
17/12/14 21:25:56.75 oezENCsV0.net
>>492
おまえのカアチャンは誰でも受け入れるのにwbって意外と固いんだな
506:デフォルトの名無しさん
17/12/14 21:27:02.90 QIiUylbtp.net
>>492
うん
それはしってるよ
でもworkbooks.Openでも同じだよね
文字列帰って来るよね
507:デフォルトの名無しさん
17/12/14 21:32:46.73 QIiUylbtp.net
application.getOpenfilename
→あ.xlsxを選択
C:¥あ.xlsx が帰って来る
workbooks.Open filename:=application.getOpenfilename(つまりC:¥あ.xlsx)
ん?どっちもパス付きのブック名じゃねえの?
ってことをいってる
508:名無し
17/12/14 21:55:08.02 5D+dY0yO0.net
>>495
文字列として返ってきたから文字列型と思ってるなら、一回workbook型をウォッチに入れてみたら?
ツリー形式でオブジェクトの、中身が見れるから全然別ものだとわかるはず
509:デフォルトの名無しさん
17/12/14 21:58:53.83 zDxHi8mM0.net
>>494
バーカw
"C:\うんち.xlsx"がworkbooks型の変数に代入できる分けないだろw
まあデフォルトプロパティなんてものが罪なんだが
てか、workbooks型のデフォルトプロパティってNameプロパティなんだな(Pathか?)
はじめて知ったわ、使わんから
510:デフォルトの名無しさん
17/12/14 22:19:18.62 cH/6/SdG0.net
Application.GetOpenFilename → 指定したファイルのパス【String型(正確にはVariant)】を取得
Workbooks.Open → filenameに【String型でファイルパスを指定】すると
そのファイルを開いた結果の【Workbook型オブジェクト】を取得
Dim str as String
Dim wb as Workbook
str = Application.GetOpenFilename →OK
str = Workbooks.Open(Application.GetOpenFilename) →NG
Set wb = Application.getOpenfilename →NG
Set wb = Workbooks.Open(Application.GetOpenFilename) →OK
オブジェクトブラウザーを見ると勉強になるよ
それぞれ、こうなっている
Class Application
Function GetOpenFilename()
Class Workbooks
Function Open(Filename As String) As Workbook
511:デフォルトの名無しさん
17/12/14 23:32:44.97 IXGcMbV0a.net
>>488
違う。
新規ブックの場合はファイル名じゃないだろ。
理解出来て無い奴に理解出来る奴向けの説明をしても駄目だ。
たまたま同じになってもブック名はファイル名じゃ無い。
だからパス付きだろうがパス無しだろうがファイルはファイルだと考えても、それとは関係ないブック名は違う。
C:¥abcd.xlsxというファイルとブック名としてのabcd.xlsxとは何の関連も無い。
似たように見えるのはたまたまだ。
だからC:¥abcd.xlsxはブック名には成りようがない。
>>495
Application.GetOpenFilenaneで帰ってくるのは"C:¥あ.xlsx"という文字だけな。
Excelブックとは関係ないファイル名だな。
例えばメモ帳で適当に入力して保存したファイルでも取ってこれるだろ。
それに別に"C:¥あ.xlsx"はExcelじゃないと開けないというわけでも無いぞ。
そもそも"C:¥あ.xlsx"はApplication.GetOpenFilenaneで取ってきたからファイル名だろうけど、取ってきた後のその文字列は=ファイル名とは限らん。
Dim wb As Workbook
Dim strFile As String
strFile=Application.GetOpenFilename
ってのはstrFileにたまたまApplication.GetOpenFilenameによってファイル名が入ったということで、
Set wb = Workbooks.Open(strFile)
のstrFileがファイル名かどうかは分からん。
このー文はApplication.GetOpenFilenameのことなんか知らんからな。
このー文の意味するところはstrFileをファイル名と思って開いてみて、開けたらwbに格納するってこと。
512:デフォルトの名無しさん
17/12/14 23:34:29.57 oVDd8Fug0.net
短くわかりやすくまとめられるやついねえの?
いくらVBAができたって引き継ぎができない奴は無能なんだが
513:デフォルトの名無しさん
17/12/14 23:41:16.00 oVDd8Fug0.net
俺もずっとROMってたけど
こいつらの説明はマジで意味不明だわ
お、良い線言ってんな って思ったらいきなりカタカナ語がでてきてググっても意味不明
こいつらマジもんのコミュ障すぎてイラつきしかない
オナニー発言ばっかで答えがない
Apllcation.GetOpen
でaaaっていうエクセルを開く
C:\aaa.xlsx が返ってくる
しかしWB(Workbookオブジェクト変数にしている)では指定できない
でも
Workbooks.Open filename:=Apllcation.GetOpen
これはWorkBook型に入る
つまるところどっちもC\aaa.xlsxって文字列を
514:返してんじゃねえの?何がちげえの?ってこと これいうの10回目ないい加減学習しろイラつくな
515:デフォルトの名無しさん
17/12/14 23:44:38.82 oVDd8Fug0.net
こいつらのたとえ
子供がリンゴを指さす
「これなに?」
こいつら
「これは物質○○が含まれて○○っていう色素があって赤い、つまり栄養は○○がふくまれている
ちなみにその栄養は○○って物質にも入っている」ドヤァ
って感じ
見ててムカつくから発言したわ
516:デフォルトの名無しさん
17/12/14 23:46:05.94 oVDd8Fug0.net
おれが聞きたいのは
なんでワークブックスオープンで指定したファイル名文字列だとワークブック変数に格納できんだよって話
ゲットオープンはパスがついているから格納できないのはわかった
わかりやすく答えろ
517:デフォルトの名無しさん
17/12/14 23:55:54.24 n2gI2QxJ0.net
前にいた関西弁の荒しと同一人物なんだろうけど、健気にもちょっと勉強してきてるのが笑えるw
518:デフォルトの名無しさん
17/12/14 23:56:28.06 qidVZ8HWa.net
>>503
無理。
軍事用にコンピューターというものが発明されてから今日までの歴史と仕組みを説明しなきゃならんから。
そして、君にそれを理解出来るだけの能力が有るとは思えないから。
大抵の人は全てを理解しているわけじゃ無いが、自分の利用している範囲ぐらいは理解している。
519:デフォルトの名無しさん
17/12/15 00:06:16.08 sv72SjNaa.net
>>501
ん?
>Apllcation.GetOpenでaaaっていうエクセルを開く
これ間違い。
開かない。
ファイル名を取得するだけ。
>しかしWB(Workbookオブジェクト変数にしている)では指定できない
ファイル名じゃないからな。
ブック名を指定する必要がある。
たまたま偶然ファイル名と同じだけどパス付きはブック名とは違うな。
>Workbooks.Open filename:=Apllcation.GetOpen
これはWorkBook型に入る
Workbook型に入ってるのはファイル名じゃない。
Set WB=Workbooks.Openの意味するところはfilenameに指定された文字列をファイル名と見立ててブックを開き、もし仮に運よく開くことができたらそのブックをWBに格納するという意味。
520:デフォルトの名無しさん
17/12/15 00:18:22.73 qta4Ddk+0.net
>指定された文字列をファイル名と見立ててブックを開き
これが意味不明
GetOpenで指定したファイル名を返すんだろ?
じゃあこれはファイル名になるじゃねえのか?
ファイルを開かなかった場合はファルスがかえることはわかる
521:デフォルトの名無しさん
17/12/15 00:22:57.61 OGmesrFEa.net
>>507
GetOpenFilenameの文とWorkbooks.Openの文は別の文だろ。
プログラム組む奴はGetOpenFilenameで取得したものと違うものを入れることも出来る。
だから結果的に入ったのはファイル名でも、
Workbooks.Open自身はそれを前提にはしないだろ。
522:デフォルトの名無しさん
17/12/15 00:25:39.28 HZMi2rOwd.net
>>498
このレスの一番下がわかりやすいんじゃない?
523:デフォルトの名無しさん
17/12/15 00:26:48.82 qta4Ddk+0.net
>>508
日本語話して
ドヤ顔くん
524:デフォルトの名無しさん
17/12/15 00:26:50.88 Ma3k2IENa.net
GetOpenFilenameはメモ帳のファイル名を取って来ることも出来る。
Wordのファイル名を取って来ることも出来る。
Workbooks.Openで開けないファイル名ということも有るし、Workbooks.Openで開けるファイル名だとしてもExcelで開かなければならないということも無い。
525:デフォルトの名無しさん
17/12/15 00:27:25.61 qta4Ddk+0.net
>>509
オブジェクトブラウザーでてなんだよ
わからねえよ
526:デフォルトの名無しさん
17/12/15 00:28:29.79 qta4Ddk+0.net
>>511
あーなんとなくわかったかな
Openメソッドで開ける=エクセル型=ワークブック型に格納可能
ってこと?
527:デフォルトの名無しさん
17/12/15 00:32:05.55 qta4Ddk+0.net
>>498
つまりだ
君が言いたいのは(要約しないとダメなのかよ、、、)
application.GetOpenfilenameだと文字列として返ってくる
workbook型には文字列は入らない
こういうことが言いたいのね?
528:デフォルトの名無しさん
17/12/15 00:33:26.47 JSBwNcqSa.net
>>510
それはコンピューターというものをまるで理解出来ていないからそうなる。
厳密には
strFile = Application.GetOpenFilename
が実行されたからstrFileはファイル名だろとコンピューターに言っても、コンピューターは違います、文字列です。と言う。
strFileに入っている文字列のファイルは有るのかと問えば、有ります。と言う。
じゃあ、strFileはファイル名じゃねえかと問えば、違います、文字列です。と言う。
コンピュ-ターは人間が考えるような意味を理解しない。
定義通り動くだけ。
529:デフォルトの名無しさん
17/12/15 00:35:45.56 qta4Ddk+0.net
>>515
また回りくどい言い方してんな
530:頭悪いのか
531:デフォルトの名無しさん
17/12/15 00:39:33.42 OGmesrFEa.net
>>514
その理解で良い。
532:デフォルトの名無しさん
17/12/15 00:41:12.92 qta4Ddk+0.net
>>517
最初からこう言えよ
馬鹿じゃねえの?
ほんとにバカしかいねえよ
呆れるというか心配になってくる
533:デフォルトの名無しさん
17/12/15 00:42:06.72 qta4Ddk+0.net
補足するとworkbook.Openで返ってくる(開く)=workbook型ということね
534:デフォルトの名無しさん
17/12/15 00:42:07.75 W4xtzKqva.net
>>516
君がどこまで分かって無いのか、こっちは分からないんだ。
エスパーじゃ無いんだから。
>>514の話だって型とは何だ?という説明もしなきゃならんのか?と考えれば>>515のような話も必要になって来る。
535:デフォルトの名無しさん
17/12/15 00:57:45.39 2M4lhz74x.net
>>518
最初からみーんなそう言ってるぞw
ようやく頭が追い付いてきたのかな?
536:デフォルトの名無しさん
17/12/15 01:03:08.36 2M4lhz74x.net
メゾット君もだんだん自分の頭の悪さを自覚してきてるみたいだし、あと二日以内には恥ずかしい捨て台詞を残して消える運命かな
レス保存したからいつでも再放送出来るけどなwww
537:デフォルトの名無しさん
17/12/15 01:23:44.47 IJmI7Oq80.net
>>514,518
>>415でまっさきに型を理解しろって言ってんだが
まあここまで食い下がる根性は認めるけど、いいかげん最低限は自分で勉強してくれ
538:デフォルトの名無しさん
17/12/15 01:24:37.63 JMZCHg3W0.net
多分Excel VBA入門的な記事を読み進めればすぐに理解できたと思うんですけど
勉強の進め方が下手くそすぎる
539:デフォルトの名無しさん
17/12/15 09:26:34.27 qta4Ddk+0.net
で、この型をしっかりと説明してるのはどこだ?
540:デフォルトの名無しさん
17/12/15 09:27:43.96 qta4Ddk+0.net
URLでもなんでも貼ってよ
541:デフォルトの名無しさん
17/12/15 10:46:54.06 qta4Ddk+0.net
ちなみにさ
VBAってなんでメンテナンスがいるの?
コードを直接弄るわけじゃないからバグなんてでないと思うけど
542:デフォルトの名無しさん
17/12/15 11:01:21.94 sRcKW4ZTM.net
てめーの提示したコードエラー出まくりバグばっかじゃねーか
543:デフォルトの名無しさん
17/12/15 11:23:22.68 HChVIO9E0.net
コードは変わらなくてもWindowsとかExcelとか業務仕様とか、まわりが変わっていく
544:デフォルトの名無しさん
17/12/15 11:26:16.78 qta4Ddk+0.net
VBAは楽しいぞ
俺はmos マスターだがVBAはいっさん知らんかった
最終目標としては意味不明な超複雑なコードを記述し
おれが辞めた後は誰も対処ができないという優越感を味わいたい
そしてVBEをだしてカチカチしてる姿がなんとも知的でかっこいい
ほんとこれだけのきっかけが知識につながって行く
545:デフォルトの名無しさん
17/12/15 11:36:34.77 yfj2Ro7Gd.net
今どきVBAに新規参入者がいる驚き
546:デフォルトの名無しさん
17/12/15 11:48:05.70 HChVIO9E0.net
>>530
>>500
547:デフォルトの名無しさん
17/12/15 12:00:52.51 IqUBh/zH0.net
>>530
それは能力の低い奴の言う言葉。
能力のある奴はお前が辞めても対処できるように記述する。
548:名無し
17/12/15 12:08:15.31 aoP9DSfXM.net
>>530
いや、ずっと同じ質問してる辺りこれっぽっちも知識が増えているように見えないんだが
そしてブーメランに草
549:デフォルトの名無しさん
17/12/15 12:11:37.98 IqUBh/zH0.net
>>523
そこをあっさり理解出来ないからここまで時間制掛かってる。
彼の分かってない所はみんながそういうもんだとあっさり進む所で自分中心で考えること。
コンピューターが自分と同じように考えてくれると思ってる。
アレンブラやマシン語の不自由な世界で自分と同じようには考えてくれないということを思い知った方が良い。
550:デフォルトの名無しさん
17/12/15 12:26:43.87 SvHkecGU0.net
もの凄く複雑で他人の理解が及ばな�
551:「ようなコード書くのが目標なら、 なおさら誰の助けも借りずに独学で高めていくのが重要なんだよなぁ。 ネットで検索して簡単に見つかるような情報すら当たれないヤツが目指すものじゃないよね。
552:デフォルトの名無しさん
17/12/15 12:27:05.72 JZsZmqT4r.net
>>499
いやなんかまた鼻息荒くしちゃってるけど元々同じって言ったのお前だからなw
なんで素直にブック名とファイル名は違うって言えないんだよw
どうせ下手くそな説明なんだから無理して技巧的に言おうとすんなw
553:デフォルトの名無しさん
17/12/15 12:27:38.94 qta4Ddk+0.net
>>535
こいつらのオナニー意見なんて一切参考にせず自己解決したんだが?
Wrokbook型変数「これは文字列だから俺の方にははまらないよ」 = _
Application.GetOpenFilename「すまん、俺はただ選択されたファイルの文字列を返すだけなんだよ」
Workbook型変数「お、WorkbooksオブジェのOpenメソッドで開いとるやん。格納できるよ」= _
Workbooks.Open (Filename:=Application.GetOpenfilename)「俺は開いた文字列をファイル名として返すね」
これでどう?誰でもわかりやすいと思うけど?
頭悪すぎね?君たち
554:デフォルトの名無しさん
17/12/15 13:00:25.68 yfj2Ro7Gd.net
なんか
1 + 1 =2
を
「1に1を加えると2になる」
と表現してる感じだなあ
555:名無し
17/12/15 13:01:13.53 aoP9DSfXM.net
もう突っ込まないぞ!
次のお客様どうぞ
556:デフォルトの名無しさん
17/12/15 13:03:33.01 SvHkecGU0.net
>>539
そもそもWorkbooks.Openメソッドはファイル名を返さないから、
「1+1 は 2 じゃないぞ。俺たちは 1 + 1で200だ。10倍だぞ10倍」みたいなもん。
557:デフォルトの名無しさん
17/12/15 13:34:09.09 8rowC9ysa.net
>>538
わかった!君はプログラムじゃなくて日本語の勉強から始めよう
558:デフォルトの名無しさん
17/12/15 13:34:59.69 8rowC9ysa.net
会話形式にしてくれないと理解できないといってくれれば誰か頑張ったかもねw
559:デフォルトの名無しさん
17/12/15 13:57:32.57 qta4Ddk+0.net
>>541
はいはいブック名ね
どっちでもいいだろアホ
560:デフォルトの名無しさん
17/12/15 14:06:04.35 SvHkecGU0.net
>>544
ブック名も返さないよ。
何にせよWorkbooks.Openメソッドが名前を返したら
Set WB = Workbooks.Open(Application.GetOpenFilename)
が成立しないから。
561:デフォルトの名無しさん
17/12/15 14:12:36.10 sRcKW4ZTM.net
いいからMSDNのリファレンス読んでこいよ
562:デフォルトの名無しさん
17/12/15 14:42:08.62 qta4Ddk+0.net
>>545
はいはい
workbookオブジェクトを返すのね
はいはい死ね死ね
563:デフォルトの名無しさん
17/12/15 14:44:22.53 IqUBh/zH0.net
>>538
それ、全部既に言ってたからw
お前はみんながすんなり分かるところをこれだけすったもんだしてやっと分かっただけ。
これまでのやりとりが無かったら、それそのまんま言っても理解出来て無い。
そもそも、バカがどうしてバカなのかなんてこっちは理解出来ない。
お前とは違うからな。
564:デフォルトの名無しさん
17/12/15 14:47:50.40 xyZ0U828M.net
メソッドの返り値として何の型のどんなオブジェクトが返ってくることを意識する重要さが微塵もわかってないのでこいつのVBAスキルはここで打ち止めだな
565:デフォルトの名無しさん
17/12/15 15:09:10.26 vqijPR8bp.net
以降はスルーしよう
566:デフォルトの名無しさん
17/12/15 15:21:09.44 yfj2Ro7Gd.net
整数 + 整数の戻り値が整数なのに整数 / 整数の戻り値が整数じゃない理由がわからない、不合理だ、と
駄々をこねる人間もいるんだからしょうがない
567:デフォルトの名無しさん
17/12/15 19:31:32.21 lmKJ5VLWa.net
世の中にはこういう本物のバカもいるんだなあと勉強になったよ
568:デフォルトの名無しさん
17/12/15 19:39:48.70 IAZ3SurN0.net
わりとそこかしこに居るけどな、本物のバカ
ひきこもりか?おまえw
569:デフォルトの名無しさん
17/12/15 21:40:28.03 qta4Ddk+0.net
>>549
まだ始めて2週間って話してなかった?
ちなMOSエキスパート所持者ね
570:デフォルトの名無しさん
17/12/15 21:49:11.45 SvHkecGU0.net
>>421からもう二週間も経ったのか。時が経つのは早いな。
571:デフォルトの名無しさん
17/12/15 22:06:37.13 5LKBHQ7A0.net
>>554
> ちなMOSエキスパート所持者ね
ここ、笑うとこですか?
572:デフォルトの名無しさん
17/12/15 22:06:40.33 sA/nQpBXa.net
MOSエキスパート?
何それ美味しいの?
昔、「初心者だから仕様がないけどさ」と説教した相手が今回君が挑戦してる言語のエキスパート持ってたけどさ。
573:デフォルトの名無しさん
17/12/16 04:53:25.79 kSf4Qz7z0.net
先日、AutoFilterとValidationの不具合で質問したものです。
(まだ解決していませんが、、)
また新たな不具合に悩まされています。
このような場合、どこに報告すればMSの目にとまりますかね?
もし同一環境のかたおられましたら再現テストしていただけるとありがたいです。
[環境]
Microsoft Office Home and Business 2013
バージョン: 15.0.4989.1000 (2017/12)
Excel2013
Win10 64bit Core i7 Mem8GB
[手順]
以下の手順で実行するとシートSelectが不完全な状態になる。
Trigger: 別シートの貼付画像のOnAction
→PopupMenuのOnAction
→呼び出されたProc内で、SheetSelect
続けてAutofilter実施 (直接の原因ではない)
(その2へ)
574:デフォルトの名無しさん
17/12/16 04:53:47.87 kSf4Qz7z0.net
>>558
(その2)
[現象]
・Fitering成功しているように見えるが、非表示セルにカーソル移動できてしまう。
・セル値の削除が効かない。(連動イベントが動かず、本現象に気づく)
・範囲コピー貼り付けが正しく行われない。
・セルをコピーモードにしても、選択範囲が破線矩形にならない。
→なんと恐ろしいことに、操作の対象が現在見えているActiveCellではなく、
呼出元画像のあるシートの同一番地に対して行われている様子。
破線矩形も元シートを開いたらそこにあった。
削除処理も元シートに対して行われる。
ステータスバーのセル値カウントも、現在見えているシートではなく、呼出元の情報を返す様子。
ActiveCell.Address(External:=True)は実際に見えている移動先シートを示しているのに、、、
[発生条件の再検証]
・別シートの画像.OnAction→Popup.OnActionで初めて成立。
・画像.OnActionから直接Proc実行(Sheet選択、Autofilter実施)では再現せず。
・Alt+F8からのPopup起点とすると再現せず。
・Popup.OnActionを入れ子にしても再現せず。
・ボタンをTableと同じシートに配置した場合は再現せず。
・Office2010では再現せず。
(その3へ)