Excel VBA 質問スレ Part49at TECH
Excel VBA 質問スレ Part49 - 暇つぶし2ch2:デフォルトの名無しさん (アウアウエー Sadf-hzVx)
17/06/26 05:44:32.43 SxRL95TLa.net
うんこ

3:デフォルトの名無しさん (ワッチョイ bf6d-ZLad)
17/06/26 06:30:06.46 K3TbTzv30.net
>>1

>>前1000
御目

4:デフォルトの名無しさん (アウアウエー Sadf-AGoN)
17/06/26 13:46:58.30 2dV2LE9Ka.net
おちるな!

5:デフォルトの名無しさん (スッップ Sdbf-iOY8)
17/06/26 17:31:56.55 mUlZZrNcd.net
埋め

6:デフォルトの名無しさん (スッップ Sdbf-iOY8)
17/06/26 19:50:29.41 mUlZZrNcd.net
Everything breaks.

7:デフォルトの名無しさん (ワッチョイ d76d-ZLad)
17/06/26 22:30:10.16 9LdZXFFA0.net
地獄の社内SE
URLリンク(anond.hatelabo.jp)
> 社内SEはなんとなく楽そうなイメージがあったので、就職した。
> 言語はエクセルVBAとVB.NET 1.0。
> 中身を見るとどちらもかなりやばい。
>
> VBA編
> ・ウォッチウインドウを知らないのか、変数はすべてセルに入れてる。変数名はすべてRANGE("A1").valueみたいな感じで全く意味が分からない。
> ・処理遷移がおかしい。
> セルに1を入れる。そのセルのchangeイベントで処理が動くとか。SHIFT+F2が無力化されてる。
> ・なるべくワークシート関数で処理してる
> データベースからとってきたデータを丸ごとワークシートにコピーしてif,vlookup,match関数を駆使して帳票にしたり、CSVにしてる。
> データ100件制限があったり、1関数を直すときは100行コピーしないといけない。画面中に埋め尽くされたワークシート関数をみて途方に暮れる。
> ・format関数を知らない。
> 8桁の日付をとりたいときyear、month、day関数がワークシートにあり、
> その下の行で月の二けた判定、日の二けた判定のif関数で頭の0をつけ3行目でconcatenateしている
> ・タイマー起動
> 毎朝100本ぐらいのマクロが動いてる。タイマー起動なので、毎日セットしないといけない。(タスクスケジューラーを知らない)
> がんがんエラーが発生するので、マクロ設定をエラー処理対象外のエラーで中断にしないと動かない。
> ・遅い
> textboxのchangeイベントでDBからのデータ取得処理を入れているので、データが多くなると1文字打つごとに数分待つ状態。exitイベントを知らないらしい
> DBの更新処理でもテーブル全件とってきて、ループしながらキーが一致するのを探して更新。
> ・変数や関数のスコープの管理
> ない。基本グローバル。
> ・クラス
> ない。
> ・ネスト
> ない。
> そんなつっこみどころしかないEXCELマクロが200本以上ある。
> おじいさんが20年にわたって深夜残業や休日出勤を厭わず作ってきた、地獄の社内システムの担当になったらしい。

8:デフォルトの名無しさん (ワッチョイ 9f06-NIhq)
17/06/26 22:46:39.40 sK3t30Mo0.net
>>7
ちょっとそうぞうしただけですっげーーーーーーーーーーーーーーーゲンナリした
うぇっっ

9:デフォルトの名無しさん (ワッチョイ 9f6f-LvKX)
17/06/26 22:56:04.38 TlqSsAWd0.net
地獄とか書いてるけど、
全然地獄じゃないんだろうな。
強敵と戦う悟空みたいな感じで。

10:デフォルトの名無しさん (ワッチョイ 970d-q+YL)
17/06/26 23:06:06.76 Wf2yMC4X0.net
VBAが仕事っていいじゃねーか
業務の合間にマクロ作ってるけエクセルが得意な人扱いしかされない
カラオケが上手いとか酒が強いとかと同じ扱いだよ俺もVBAだけやってたいな

11:デフォルトの名無しさん (ワッチョイ 9faa-ZLad)
17/06/26 23:18:33.41 NfcBoQUW0.net
何か公開するとか解説記事を続けて書くとかしないと残るものがないよな

12:デフォルトの名無しさん (ワッチョイ 9711-AGoN)
17/06/27 00:31:50.14 Ou4JxjyB0.net
>>7
ヤバすぎでしょ

13:デフォルトの名無しさん (ワッチョイ bf23-+Ny0)
17/06/27 01:25:43.69 mSdvPxdC0.net
>>9
おれ、ああいうののメンテナンスする仕事したこと有るけど地獄だよ。

14:デフォルトの名無しさん (ワッチョイ d723-vKbm)
17/06/27 05:39:28.87 RyWS1Zia0.net
そこまでわかってるなら直すだけじゃん

15:デフォルトの名無しさん (ワッチョイ 178f-ZLad)
17/06/27 12:11:28.10 VIhV6lAx0.net
inputとoutputがわかってんなら作り直したほうが…

16:デフォルトの名無しさん (アウアウエー Sadf-AGoN)
17/06/27 13:08:41.86 NeDeRylha.net
どう考えてもイチから作り直すべきだが、それを現場がどう理解してるかだわ
セルに値が入ってないと管理できない!とかありそう

17:デフォルトの名無しさん (ワッチョイ 9711-H8Dq)
17/06/27 20:49:18.00 s+Xomzrw0.net
質問失礼します。
ある一つのセルに、氏名コメント改行文字が5人分入っていて、選択するとformにテキストボックスが5人分用意されている所に、それぞれの氏名に合わせて入る様になっています。
やりたい事は、formのテキストボックスに作業者が入力したのの更新履歴を付けたいのです。
作業者は自分の氏名のテキストボックスに入力することになっています。
コマンドボタンをクリックしたタイミングで、どのテキストボックスが最後に変更されたのか取得できる方法が有りましたら教えてください。

18:デフォルトの名無しさん (ワッチョイ 9f11-NIhq)
17/06/28 01:46:45.72 YSCBV96g0.net
>>17
AfterUpdateイベントやChangeイベントで最後に更新されたテキストボックスを記録して、ボタンを押したときにその内容を読み取る、みたいな感じになる。
↓こんな感じ
Private LastUpdated
Private Sub TextBox1_AfterUpdate()
LastUpdated = "TextBox1"
End Sub
Private Sub TextBox2_AfterUpdate()
LastUpdated = "TextBox2"
End Sub
Private Sub CommandButton1_Click()
Dim str
If Not IsEmpty(LastUpdated) Then str = Me.Controls(LastUpdated).Text
'処理
End Sub

19:デフォルトの名無しさん (ワッチョイ 9f11-NIhq)
17/06/28 01:49:22.55 YSCBV96g0.net
>>17
追伸
「vba フォーム イベント」でググると色々とできることの幅が広がると思う。

20:デフォルトの名無しさん (ワッチョイ 37e4-nLBY)
17/06/28 03:46:14.99 2pXrvXuM0.net
しばらく前に騒ぎになったランサムウェアってVBAマクロなのか
マクロウイルスって今でもあるんだな

21:デフォルトの名無しさん (ワッチョイ 9711-H8Dq)
17/06/28 06:18:19.57 tYXWZB4k0.net
>>19
ご回答ありがとうございます。
今回の件はAfterUpdateで対応出来ました。
今後の為にお聞きしたいのですが、例えばテキストボックスが100個とかあった場合、VBのコントロール配列の様に一つのプロシージャで100個のテキストボックスのAfterUpdateに対応することは出来ませんか?
よろしくお願いします。

22:デフォルトの名無しさん (ブーイモ MMcf-xRMs)
17/06/28 12:49:44.66 zWYciN7lM.net
>>21
「vba フォーム イベント withevents」とかでググれば、クラスモジュールを使ってイベント付きコントロールを配列またはコレクション化する方法が出てくる。
フォームの履歴管理には、クラス変数にフォームへの参照と、配列のインデックスまたはコレクションのキーなんかを渡して処理すればたぶんOK。

23:デフォルトの名無しさん (ワッチョイ 9711-H8Dq)
17/06/28 22:25:33.70 tYXWZB4k0.net
>>22
ありがとうございます。
witheventsを使用してテキストボックスのチェンジイベントをひとまとめに出来ました。
afterupdateをまとめれるともっと良かったのですが、それは無理そうなのでこれで満足です。
本当にありがとうございます!

24:デフォルトの名無しさん (ワッチョイ f7e4-d3en)
17/06/28 23:11:40.00 E86Fbm8W0.net
100という10進数をDo loop を使って2進数に変換させるにはどのようにすればよいのでしょうか?
イメージとしては、100を2ずつ割っていってそこで出たそれぞれの余りの数をセルA1に表示させたいです。
よろしくお願い致します。

25:デフォルトの名無しさん (ワキゲー MMdf-Jbg4)
17/06/28 23:24:22.72 DPzzKFKPM.net
>>24
それでいいと思います

26:デフォルトの名無しさん (スプッッ Sd62-qZPv)
17/06/29 00:00:46.01 xnkaqZb4d.net
>>25
それが出来ないです…

27:デフォルトの名無しさん (ワッチョイ 4211-nP2k)
17/06/29 00:02:23.49 +TVRrlUj0.net
>>24
Do~Loop縛りなの?
worksheetfunction,dex2binを使えば楽ちんだけど。

28:デフォルトの名無しさん (ワッチョイ 4211-nP2k)
17/06/29 00:03:15.79 +TVRrlUj0.net
間違えた。DEC2BINでした。

29:デフォルトの名無しさん (ワッチョイ c98f-wjSU)
17/06/29 02:18:27.81 m+1z5FeZ0.net
セルA1を毎回上書きしてるとか
まぁこの手の奴はぐぐれば腐るほどでてくるけどな

30:デフォルトの名無しさん (ワッチョイ c206-nP2k)
17/06/29 10:46:30.06 eyQ8k34N0.net
セルA1を瞬時に上書きしていって、それで何をしたいんだか?
最終的な目標は何なのかワカンネ w

31:デフォルトの名無しさん (ワキゲー MM8a-I/sj)
17/06/29 12:17:53.07 JWTkSooHM.net
1100100を出力したいんだろ

32:デフォルトの名無しさん (ワキゲー MM8a-I/sj)
17/06/29 12:28:02.00 JWTkSooHM.net
曖昧だけど設計まであるのにできてないのなら今どんなコードを書いてるのか提示して質問してほしいなぁ
いっそのこと「この仕様を満たすコードをください!」と言ってくれてもいいけど

33:デフォルトの名無しさん (JP 0H92-9Mth)
17/06/29 16:10:07.03 YLVns9yBH.net
はい、作ったよ
仕様満たしてるかどうかはあんたたちで
みっちり見てね
バグ見つけたら教えてね

で仕様齟齬をあぶり出してもらわないと
仕様を具体的に言わないクライアント(身内だけど)とは付き合えない

34:デフォルトの名無しさん (JP 0H16-CicO)
17/06/29 16:13:40.02 ye6KcLeHH.net
>>33
作る前に要件定義すればいいのに

35:デフォルトの名無しさん (JP 0H92-9Mth)
17/06/29 17:05:28.77 YLVns9yBH.net
>>34
作ったモノ触らないと気がすまない連中なんだよ
もちろん作る前に要求仕様は聞くけど
後からチマチマと何か言ってくる

36:デフォルトの名無しさん (JP 0H16-CicO)
17/06/29 17:16:17.14 ye6KcLeHH.net
>>35
面倒でも文書化して読んでもらうのがいいよ
読んで始めて、自分が何を欲しているか気づく場合もあるし
後は、プロトタイプかな
全部できて「これ、全然違うし」とか言われるリスクあるなら、そういうことやってみたらいいと思う

37:デフォルトの名無しさん (ドコグロ MMe1-zH8r)
17/06/29 19:36:46.27 tZRd6cgNM.net
>>36
そう言う連中は要件定義書なんて読まんよ

38:デフォルトの名無しさん (ワッチョイ c206-nP2k)
17/06/29 20:02:23.80 eyQ8k34N0.net
このスレの人間って質問者置いてけぼりであーだこーだ言うのが多いけど、一番ムカつくのは、
肝心の質問者が自分のやりたい事はこういうことだって言わないこと。
少しは自分の質問に責任くらい持ちやがれ

39:デフォルトの名無しさん (ワッチョイ c66f-WwN4)
17/06/29 20:20:17.81 XN0IVm4b0.net
こういった輩が多いから双方の軋轢が絶えないんだろな
先方はまったくの門外漢だ て前提で仕事を引き受けられない
相手も自分と同レベルだと信じて疑わない もしくは少し下ぐらい
初めて住宅を新築する顧客が、いきなり詳細設計図渡されて理解できるか?
ソッチで仕様書と図面引いてください って言ってるのと同様だぞ?
引き受けるからにはその仕事を請け負う責任も勿論だが
これから実施する作業の概要・概略を相手に理解してもらうテクニックだって
必要だろ  それを持ち合わせないならサンプル品なり試作品なり作ってでも
相手と同じレベルで進捗を図るのが普通じゃ無いのか?
こっちはざっくり動きや結果を見越せるけれど、相手にもそれを要求するのは
傲慢でしかないんだが
いわんや、相手の業種・業態に依ってはコチラ側が思いもしないような入力・
操作が要求されるケースだってままある
仕様も要件も書き出せますよ なんてぇ企業相手ならおまえら不要だろ
社内で事足りるわ
も少し謙虚に成れんのか 会議だ仕様だ要件だなんてぇことに無駄な時間を
費やすぐらいなら、とっとと試作して「こうですか?」で何歩も進むだろ
いやすまん なんでもない

40:デフォルトの名無しさん (ワッチョイ c206-nP2k)
17/06/29 21:03:34.33 eyQ8k34N0.net
ここの人間は質問者から金貰ってるわけでもなんでもねーわ

41:デフォルトの名無しさん (ワキゲー MM8a-I/sj)
17/06/29 21:07:43.56 JWTkSooHM.net
>>39
言いたいことはわかる
だが発言のベースが「やったけどダメだった!答えを教えろ!ダメだったモノは見せない!」じゃあんまりだと思う

42:デフォルトの名無しさん (オイコラミネオ MMd6-BlaP)
17/06/29 21:21:50.99 pDUcXkTQM.net
コミュ障同志でケンカすんな

43:デフォルトの名無しさん (ワッチョイ 6d2e-mQuD)
17/06/29 22:02:03.85 irMBslcI0.net
最近、趣味でVBAのプログラムを始めた初心者です
区切り記号を含むテキストデータを Split() を使って二次元配列に入れようと思っています。
テキストデータは、vbLf で改行、行内のデータは、vbTab で区切り です
<例: String 型の TextData の内容>
あああああ アアアアアアアアア
いい イイイイイ
ううううう ウウウ
 (以下、同様の形式で全500行ある)

いろいろ宣言の仕方などを試した結果、次の方法でエラーなく実行できたのですが…
 Dim tmpDim As Variant
 Dim sqrDim(500) As Variant
 tmpDim = Split( TextData, vbLf )
 For i = 0 to UBound( tmpDim ) - 1
   For j = 0 to 1
     sqrDim( i ) = Split( sqrDim( i ), vbTab )
   Next j
 Next i
これでは、途中の38行目を読み込んだところ(i=37,j=1)で、
 実行時エラー '9':
 インデックスが有効範囲にありません
とのエラーが出て止まってしまいます。
(一次方向(行)には500個確保できていると思うので、なぜインデックスエラーなのか不思議です)
2回目のSplitの受けも、別の一次元配列で行い、後で二次元配列に格納すればいいとは思いますが
上手く二次元配列でSplitのデータを受けるやり方はあるのでしょうか? お手数ですが教えてください

44:デフォルトの名無しさん (ワッチョイ 066d-B6M/)
17/06/29 22:23:02.61 InemyE5a0.net
>>43
splitしたのがうまく行ってないと思う
ステップイン で実行しながら
ウォッチ式 を見ると変数の中身が分かり安いよ
そのテキストを上げてもらえればこっちでも確認する

45:デフォルトの名無しさん (ワッチョイ 4211-nP2k)
17/06/29 22:33:09.86 +TVRrlUj0.net
>>43
これ通るの?
   For j = 0 to 1
     sqrDim( i ) = Split( sqrDim( i ), vbTab )
   Next j
で sqrDim( i ) を2回splitしてる。
1回めは文字列のsplitだからいいけど、2回めは配列のsplitになってエラーになりそうだけど。
For j のループは不要。
あとついでに
For i = 0 to UBound( tmpDim ) - 1
だとTextDataの最終行のデータが配列に格納されないけど問題ないか?

46:デフォルトの名無しさん (ワッチョイ 42aa-wjSU)
17/06/29 22:47:04.00 CQo0iGok0.net
>>43
こうでしょ
 Dim tmpDim As Variant
 Dim sqrDim As Variant
 tmpDim = Split( TextData, vbLf )
 ReDim sqrDim(LBound(tmpDim), UBound(tmpDim))
 For i = LBound(tmpDim) to UBound( tmpDim )
     sqrDim( i ) = Split( tmpDim( i ), vbTab )
 Next i
sqrDimは2次元配列じゃなくて配列の配列になるけど、むしろこっちの方があとで楽だと思う。

47:43 (ワッチョイ 6d2e-mQuD)
17/06/29 23:32:28.05 irMBslcI0.net
>>44-46
早々に回答ください、どうもありがとうございます。
いろいろ回答を頂いておきながら、大変申し訳ないのですが、
38行目のデータをよく見たところ、TAB区切りではなく、ここだけスペースが入っていました
(他は、各行に2個の要素があったのですが、ここだけ要素が1個でした)
そして、これを修正したら、エラーなく実行できました。
お手数をおかけし、申し訳ありませんでした。
おっしゃる通り、j のループは不要ですね。(いろいろ修正していて、j を使わなくなったようです)
> だとTextDataの最終行のデータが配列に格納されないけど問題ないか?
いえ、ちゃんと最終行まで格納出来てました
(UBound()は要素数を表しているように思います)
>  ReDim sqrDim(LBound(tmpDim), UBound(tmpDim))
ReDim は使ったことがないので、また調べてみます
以上、ありがとうございました。

48:43 (ワッチョイ 6d2e-mQuD)
17/06/29 23:41:18.00 irMBslcI0.net
>>45
> これ通るの?
>    For j = 0 to 1
>      sqrDim( i ) = Split( sqrDim( i ), vbTab )
>    Next j
これ、写し間違いでした。 2回目に Split するのは tmpDim でした
×:      sqrDim( i ) = Split( sqrDim( i ), vbTab )
○:      sqrDim( i ) = Split( tmpDim( i ), vbTab )
申し訳ありませんでした

49:デフォルトの名無しさん (ワッチョイ 4211-nP2k)
17/06/30 00:06:21.55 pQmgso2J0.net
>>47
> (UBound()は要素数を表しているように思います)
一応言っておくと、これは間違い。
UBound(tmpDim) は配列tmpDimのインデックスの最大値を返す。
TextDataが500行(vbLfが499個)だとしたら、tmpDimのインデックスは(0 to 499)になるから、UBound(tmpDim) は499を返す。
このコードのsqrDim(500)が全部埋まってるのであれば、TextDataは501行あるはず。
まあ結果がOKならいいんだけどね。

50:デフォルトの名無しさん (ワッチョイ 4211-nP2k)
17/06/30 00:09:11.22 pQmgso2J0.net
失礼、>>49に間違い。
sqrDim(500) だとsqrDimの要素数は501だから、全部埋まってるの場合のTextDataの行数は502行になるはず。

51:43 (ワッチョイ 6d2e-mQuD)
17/06/30 00:48:26.80 K3G7Sb4z0.net
>>49-50
> 一応言っておくと、これは間違い。
> UBound(tmpDim) は配列tmpDimのインデックスの最大値を返す。
申し訳ないです。
おっしゃる通り、ググってみるとそのように書いてました。
なお、TextDataは実際には400行前後のため、偶然上手く動いているように見えてたのですね
(実際は、400~499までループが回っており、タチの悪いバグになるところでした、感謝です)
前にC言語を少しやっていたので、同じ扱いだと思っていましたが違ってたんですね
わざわざありがとうございます。

52:デフォルトの名無しさん (ワッチョイ 42aa-wjSU)
17/06/30 00:56:40.46 6tFD7y9X0.net
>>51
そう
[LBound, UBound) じゃなくて [LBound, UBound] で回さなきゃダメ

53:デフォルトの名無しさん (JP 0H92-9Mth)
17/06/30 10:48:30.68 cwrb3MSvH.net
ここの強者はExcelVBAエキスパートの資格持ってるの?
簡単そうだから取ろうかなと思ってる

54:デフォルトの名無しさん (JP 0H16-CicO)
17/06/30 10:58:10.76 vRopsyNtH.net
>>53
取ればいいんじゃないの?

55:デフォルトの名無しさん (ワッチョイ 5d73-BlaP)
17/06/30 11:59:14.93 p88B6ZFT0.net
そんなもんMOS以下の価値しかないと思うが…

56:デフォルトの名無しさん (ワッチョイ 6d3d-nP2k)
17/06/30 17:12:37.88 cZqMSATW0.net
コンピュータ関連も色んな資格あるけど、ああいう資格を基準にして採用している所ってどれだけあるんだろ。

57:デフォルトの名無しさん (ワッチョイ 066d-wjSU)
17/06/30 20:10:03.92 UW7c2V+i0.net
基準にはしないかな
あーできるんですねって程度。どちらにしても実地試験は受けてもらう

58:デフォルトの名無しさん (ワッチョイ c26f-CicO)
17/06/30 23:09:21.97 +ePBm/Xa0.net
俺、プログラムは作れるけど、試験は落ちそうだな。
DimとかRowとか、短い文字は打てるんだけど、
長いのは、普段コピペしてるから、打てない。
最近、やっとColumnsを間違えずに打てるようになったわ。
それまでは、Corums? ん? Colmns? え? Culomus? 違う?
Colums? わかんね。 もう諦めてコピペしよう、みたいな感じ。

59:デフォルトの名無しさん (ワッチョイ 066d-dnIi)
17/06/30 23:13:28.48 UW7c2V+i0.net
プログラムの実技試験で暗記力が必要なのはそろそろどうかとは思う

60:デフォルトの名無しさん (ワッチョイ 2e8f-wjSU)
17/07/01 00:25:54.92 ozDMgMeF0.net
10年選手だけど
フィボナッチとかハノイの塔とかソラで出できないぞ俺

61:デフォルトの名無しさん (ワッチョイ 066d-B6M/)
17/07/01 00:29:13.54 QYfDEdV/0.net
それは数学の知識の問題だと思うので、別にできなくてもいいと思う。多分一生役に立たない
でも最小二乗法とか漸近線、偏差値など、統計学的な知識はあったほうが良いと思う

62:デフォルトの名無しさん (ワッチョイ 4623-hx6n)
17/07/01 04:46:24.33 PtoY4rVn0.net
>>53
昔、某掲示板で質問した人に話の内容から初心者として扱ったらその資格持ってるとのことでびっくりしたことがある。
どんな資格でもそうだけど、そういうもんなんでしょう。
そうしないと受かる奴いなくなっちゃう。

63:デフォルトの名無しさん (ワッチョイ 4623-hx6n)
17/07/01 04:52:54.03 PtoY4rVn0.net
>>60
そんな問題が実際の案件に出てきた時に最適なコードが書ければ良いでしょ。
それにその程度の話ってググレば出てくるでしょ。
そんなのは何かあったよなと思うことが出来てググレればOK。
それよりも上手いやり方に気付かずにクソコード書く奴は多い。

64:デフォルトの名無しさん (オッペケ Sr71-UM0m)
17/07/01 08:01:59.81 JGSuKZu6r.net
>>63
自分のクソは棚上げかクソw

65:デフォルトの名無しさん (ワッチョイ c123-BlaP)
17/07/01 08:05:36.28 3teBbQmJ0.net
>>64
お前は試験も仕事も両方苦手みたいだな

66:デフォルトの名無しさん (ワッチョイ 4211-zH8r)
17/07/01 08:23:17.10 qXTa/p8N0.net
>>57
実地試験ってどんなことやるの?

67:デフォルトの名無しさん (ワッチョイ 066d-wjSU)
17/07/01 08:38:38.91 QYfDEdV/0.net
>>66
支店名 状態 月 売上
A支店     3 200
B支店     3 10
C支店     3 500
A支店     4 300
B支店 閉店 4 0
C支店     4 600
4月の売上平均を求めよ(制限時間5分)
って感じ。
D1=(300+0+600)/3
にはたまげた。もちろん関数を使わない人はアウト
B支店を入れるかどうか疑問に思えば合格

68:デフォルトの名無しさん (ワッチョイ 4211-zH8r)
17/07/01 08:58:05.68 qXTa/p8N0.net
>>67
関数?
VBA の試験なのに?

69:デフォルトの名無しさん (ワッチョイ 066d-wjSU)
17/07/01 08:59:25.55 QYfDEdV/0.net
>>68
あぁすまん、ここvbaスレか�


70:BExcelスレと思ってた。忘れてくれ



71:デフォルトの名無しさん (ワッチョイ b169-nP2k)
17/07/01 10:42:47.44 r7UjQGgF0.net
エクセルのある部分をリストボックスにしたいのですが、rowsourceで設定すると、間に空白が多くなった時に使いにくいです。
そこで下記のように空白だったら、リストに加えないとしたら、リストに何も出てきません。
どこがおかしいでしょうか? RowPN(i)には既にエクセルの1セルの値が167個入ってます。
i = 1
i1 = 1
Do Until i > 168
On Error Resume Next
If RowPN(i) <> "" Then
UF6ComboBox1.AddItem RowPN(i), i1
i1 = i1 + 1
End If
i = i + 1
Loop

72:デフォルトの名無しさん (ワッチョイ c26f-CicO)
17/07/01 11:20:29.10 PX/A+v/i0.net
VBAの試験って、やっぱ何らかの制限付きなんだろうか。
制限しないと、ソートにSQLとか、Worksheetfunctionとか、
Cells(1,1).Value="計算式"とか、正解だけど、試験の趣旨としてどうなの?
という答えが沢山出来てしまう。

73:デフォルトの名無しさん (ワッチョイ 4211-nP2k)
17/07/01 11:27:20.68 +dYABl5A0.net
>>70
・RowPNの中身が全て""またはEmptyになっていないか。
 Dubug.Printまたはローカルウィンドウでの確認を推奨する。
・リストボックスと言っているが変数はUF6ComboBox1で合っているか。
・RowPNの要素が(0 To 166)ないし(1 To 167)だとDoループがi=168までカウントするのでインデックスエラーになる。
 For文の方が無難そうに思えるのと、ここでOn Error Resume Nextはどうかと感じる。

74:デフォルトの名無しさん (ワッチョイ 0623-wjSU)
17/07/01 11:30:18.64 5ubPuGy00.net
>>70
セルから値をとってるならこれでいいと思われ
Dim i As Long
For i = 1 To 168
 If Cells(i, 1) <> "" Then
  ComboBox1.AddItem Cells(i, 1)
 End If
Next

75:デフォルトの名無しさん (ワッチョイ 4211-nP2k)
17/07/01 11:30:59.20 +dYABl5A0.net
>>72 3行目間違い。。
? Dubug.Print ○ Debug.Print

76:デフォルトの名無しさん (ワッチョイ 4211-nP2k)
17/07/01 11:45:10.97 +dYABl5A0.net
>>71
ググればすぐわかる。
なんか1日対策勉強したら余裕そう。

77:デフォルトの名無しさん (ワッチョイ b169-nP2k)
17/07/01 11:48:18.71 r7UjQGgF0.net
>>72 >>73 ありがとうございます。 値は入ってるのは確認しました。FOR文も空白ですね・・・。
シート使っているので、そこに1エリア儲けて、空白除いて再整列させて、ROWSOURCEで設定してみます。

78:デフォルトの名無しさん (ワッチョイ c26f-CicO)
17/07/01 12:12:06.78 PX/A+v/i0.net
>>75
いきなりサンプル問題で躓いたwwwwwwww
セルの範囲指定で「"A1:B1"」以外に「"A1","B1"」も使えるとか知らんわwwwww

79:デフォルトの名無しさん (ワッチョイ 0623-wjSU)
17/07/01 12:14:29.98 5ubPuGy00.net
>>76
その方法で納得ならいいですが
配列に入っているなら
On Error Resume Nextで
コントロールを参照できないのでエラーしているのを
すっ飛ばしているのではなかろうか。
つまり>>72が言っているようにUF6ComboBox1は存在しないのでは。
On Error~をコメントアウトしてみてはどうか。
と思う。

80:デフォルトの名無しさん (ワッチョイ b169-nP2k)
17/07/01 12:28:18.39 r7UjQGgF0.net
>>78 オブジェクト名は間違うと動かなくなるので、いつもコピペしてるんですよ。
とりあえずシート使って逃げて、rowsourceでうまいこと動きました。

81:デフォルトの名無しさん (ササクッテロラ Sp71-THY3)
17/07/01 14:17:52.99 zDfIbROqp.net
>>61
数学の知識というより再帰関数とかのプログラム技術の問題

82:デフォルトの名無しさん (ワッチョイ c179-9Mth)
17/07/01 23:37:04.61 AhlbWWig0.net
こんばんわ、
シティーボーイズやってました、再帰しげるです

83:デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
17/07/02 02:18:34.32 mbMXyeDF0.net
こんばんわ、
膣に挿入したら動きません、きたろうです

84:デフォルトの名無しさん (ワッチョイ b169-nP2k)
17/07/02 05:10:18.40 7bfaC3yX0.net
突然 なんだ!

85:デフォルトの名無しさん (アウアウウー Sa25-k1q/)
17/07/03 17:11:55.95 3aAVlqxCa.net
以下のプログラムで「該当するセルが見つかりません」となってしまいます。
該当するセル範囲のセルはすべて空白です。
期待する動作は、「B4:B6の範囲の空白セルにコメントを入れる」です。
Sub commentAddToBlankCells()
____On Error GoTo ERROR_ALL
____Range("B4:B6").SpecialCells(xlCellTypeBlanks).AddComment "目視確認"
____Exit Sub
ERROR_ALL:
____MsgBox Err.Description
End Sub
※Excel2010です。

86:84 (アウアウウー Sa25-k1q/)
17/07/03 17:42:48.19 3aAVlqxCa.net
Excelのバグのような気がしてきました。

87:デフォルトの名無しさん (ブーイモ MMed-tH5o)
17/07/03 18:37:30.90 C0KljlGTM.net
>>84
2007だけど、ActiveSheet.UsedRangeの範囲外のセルだとエラーになるっぽい。

88:デフォルトの名無しさん (ワッチョイ c206-nP2k)
17/07/03 20:07:31.53 Gbz1GVYR0.net
ここの板で質問するレベルでExcelになすりつけるのは100000年ほど早い
まぁそう言いたくなるときもあるんだがw

89:デフォルトの名無しさん (ワッチョイ c123-BlaP)
17/07/03 20:26:22.35 NJa6/A120.net
それ範囲指定できるんだっけ?

90:デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
17/07/03 20:33:45.35 S8hpBEzs0.net
例えば、
そのセルの値が0より大きければセルA1をコピーし、そのセルに書式を貼り付け、
そのセルの値が0より小さければセルA2のコピーし、そのセルに書式を貼り付ける。
この程度の処理を数百のセルに行うのに結構な時間がかかる。
短時間で完了させるにはどうしたらいいんでしょうか?
ある程度のセル範囲ごとにまとめて書式貼り付けすればいいんでしょうか?

91:デフォルトの名無しさん (ワキゲー MM8a-I/sj)
17/07/03 20:38:08.97 MkRtof65M.net
>>89
正確な日本語でよろしく

92:デフォルトの名無しさん (ワッチョイ 65c1-ZBdv)
17/07/03 20:39:25.48 u6VhpuAl0.net
Sub nisinsu()
Dim Z As Single, S As Long, N As String, A As String
Z = 100
S = 1
Do Until Z <= 0
N = Z Mod 2
Cells(S, 1) = Z
Cells(S, 2) = N
Z = Z \ 2
S = S + 1
A = N + A
Loop
Cells(1, 3) = A
End Sub
上の方で2進数について質問したものです
このコードである程度無事に解決しましたが、一つ分らないことがあります
Loop を抜けた後の Cells(1, 3) = A の所は Loopの一つ上の A = N + A によって 1100100 と正しい数字が表示されます
しかしこの A = の中を A = A + N というように A と N を逆にすると 10011 と全く別の数字になってしまいます
この理由がどうしてなのかを教えてください

93:デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
17/07/03 20:39:42.65 c364q6zP0.net
>>89
性格悪い日本語でよろしく

94:デフォルトの名無しさん (ワキゲー MM8a-I/sj)
17/07/03 20:45:47.19 MkRtof65M.net
>>91
まずはおめでとう!
質問についての回答は単純に逆転してるだけだよ
1100100となるところが0010011となってしまいそのまま表示させたら頭の0が消えたって感じ

95:デフォルトの名無しさん (ワキゲー MM8a-I/sj)
17/07/03 20:54:20.38 MkRtof65M.net
>>89
あー読み取れた
VBA使うまでもなく条件付書式使えば終わり

96:デフォルトの名無しさん (ワッチョイ 4211-nP2k)
17/07/03 21:15:28.35 TQ7WGTgT0.net
>>89
多分これでOK
Application.ScreenUpdating = False
処理
Application.ScreenUpdating = True

97:デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
17/07/03 21:15:43.91 S8hpBEzs0.net
>>89です
>>90>>92>>94
わかりにくかったですか、すいません。かなり酔ってます。
一日200行ぐらい増えるブックがあります。列数は50ぐらいです。
一ヶ月で6000行ぐらいでしょうか。あらかじめ条件付き書式を設定していましたが、
なんかブックを開くときに重くて、きっと条件付き書式が原因だろうと思い、
条件付き書式ではなく、VBAで各セルの値に応じて書式を固定しようと思ったわけです
でも、そのVBAが時間がかかって困ってるわけです。
書式のコピペって時間かかるんですね。
もっと書式のコピペを早くできる方法はないのかなって思ったわけですわ。

98:デフォルトの名無しさん (ワッチョイ 1911-Znx3)
17/07/03 21:28:10.61 3g7k10jb0.net
>>96
書式コピペするんじゃなくて、直接指定したらまだ速くなると思うよ
クリップボードを介する処理はとても時間がかかる

99:デフォルトの名無しさん (ワキゲー MM8a-I/sj)
17/07/03 21:40:24.58 MkRtof65M.net
>>96
こんな単純な条件ひとつだけで重くなるわけがない
問題は別にあるよ

100:デフォルトの名無しさん (ワッチョイ 066d-5V5Y)
17/07/03 21:49:40.34 wrAlhZZL0.net
>>96
条件付き書式が断片化してない?断片化ってのは勝手に作った言葉だけど・・・
例えば、A:Aに条件付き書式(=a1=1)を設定して、10行目を切り取って11行目に挿入したりすると
条件=A1=1
=$A$1:$A$10,$A$12:$A$1048576
条件=A11=1
=$A$11
のように分割される
一度条件付き書式の書式ルールの管理、「このワークシート」を見てみたほうがいいかも

101:デフォルトの名無しさん (ブーイモ MMed-DhWx)
17/07/03 21:55:55.71 We00lT8WM.net
そのセルにちゃんとワークシート名付けてる?

102:デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
17/07/03 22:20:14.51 S8hpBEzs0.net
>>97
明日試してみます。
>>98
そうですか。試行錯誤してみます・・・
>>99
レスの内容が難しいです。えっと、ちょっと考えさせてください。
>>100
つけてるはずです。

103:デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
17/07/03 22:23:39.09 S8hpBEzs0.net
今のコードはこんな感じです。
Public Sub シートの書式を設定する()
Dim iRow As Long, iCol As Long, LastRow As Long, ws As Worksheet, r As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Set ws = ThisWorkbook.Worksheets("対象シート")
startRow = 4
LastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row
For iRow = startRow To LastRow
For iCol = 4 To 100
Set r = ws.Cells(iRow, iCol)
If IsNumeric(r.Value) Then
If r.Value > 0 Then
r.Select
ws.Cells(1, "C").Copy
r.PasteSpecial Paste:=xlPasteFormats
DoEvents
ElseIf r.Value < 0 Then
r.Select
ws.Cells(2, "C").Copy
r.PasteSpecial Paste:=xlPasteFormats
DoEvents
End If
End If
Next iCol
Next iRow
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

104:デフォルトの名無しさん (ワッチョイ c26f-CicO)
17/07/03 22:28:05.66 9w7qW4Z10.net
>>96
>なんかブックを開くときに重くて
例えば、知らない間に、図形が1万個くらいに増殖しているとか。
いや、マジで。

105:デフォルトの名無しさん (ワッチョイ c123-BlaP)
17/07/03 22:41:18.92 NJa6/A120.net
なんでいちいちdoeventsしてんの?

106:デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
17/07/03 22:43:07.60 c364q6zP0.net
あ~万個増殖ね~ありがちだわ~

107:デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
17/07/03 22:46:45.91 S8hpBEzs0.net
>>104
あー、DoEventsuはマクロ実行終わるまで時間かかるんでEscでマクロ止めてた時の名残です。
今は必要ありません。消し忘れてました。

108:デフォルトの名無しさん (ワッチョイ 65c1-ZBdv)
17/07/03 23:22:39.55 u6VhpuAl0.net
>>91
すみません…
まだ勉強し始めたばかりで何故入れ替えただけで逆に表示されるのかが分かりません
理由を教えて下さりますと幸いです

109:デフォルトの名無しさん (ワッチョイ c123-BlaP)
17/07/03 23:23:15.28 NJa6/A120.net
ん~
まずはループが最終的に何回転してるのか見てみた方が良さそう
自分ならまず新しいファイルにコードをコピペしてゴミ掃除するが

110:デフォルトの名無しさん (ワキゲー MM8a-I/sj)
17/07/03 23:58:29.09 MkRtof65M.net
>>107
コレを動かしてみたらわかるよ
Sub nisinsu()
Dim Z As Single, S As Long, N As String, A As String
Dim AA As Single
Z = 100
S = 1
Do Until Z <= 0
N = Z Mod 2
Cells(S, 1) = Z
Cells(S, 2) = N
Z = Z \ 2
A = N + A
Cells(S, 4) = A
AA = AA + N
Cells(S, 5) = AA
S = S + 1
Loop
Cells(1, 3) = A
End Sub

111:デフォルトの名無しさん (ワッチョイ 4211-nP2k)
17/07/04 00:10:14.68 pX4cRUUJ0.net
>>102
<0と


112:>0をUnionでまとめてからコピペしたら速くなりそう。 ただUnionのセル数が増えすぎるとUnion自体が遅くなるみたいなので、1~数十行くらいで区切ったほうがいいかも? まあ>>97のほうが速い気はするけど。



113:デフォルトの名無しさん (ドコグロ MMa9-y/Rq)
17/07/04 05:36:03.11 JPw87neNM.net
これって今何行あるの?
何万行もあって列数50あれば大分重くなると思うけど

114:デフォルトの名無しさん (ワッチョイ 0111-0bL8)
17/07/04 06:53:55.04 SZEZ7cdP0.net
6000回もselectとcopyしてりゃ遅くなるの当たり前

115:デフォルトの名無しさん (オッペケ Sr71-nSMp)
17/07/04 08:12:48.47 n1qpisHfr.net
田のクラッカー

116:デフォルトの名無しさん (アウアウエー Sa4a-Znx3)
17/07/04 10:15:18.62 hKxheJiwa.net
セレクトなくしたら2/3ぐらいにはなりそうだな
まあどう考えてもコピペはロスがでかい
指定する書式はマクロの記録か大抵ググりゃ出てくるから調べんさい

117:デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
17/07/04 20:20:52.61 aFK9C0z90.net
>>89>>102です。
>>103 図形のオブジェクトはありませんでした。でも変なオブジェクトが多量に残っていたという経験は過去にありました。確認してみます。
>>110 Unionでまとめて処理ですか。試してみます。>>97と比較してみます。
>>111 実際の行は数千行ありますが、実際には最終行から200行しか処理してません。後出しになりますが>>102ではその部分を省きました。ごちゃごちゃするかなと思い・・・

118:デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
17/07/04 20:21:31.96 aFK9C0z90.net
>>89>>102です。
>>112 直接書式を設定したほうがよさそうですね
>>114 >>97を試してみます
みなさまありがとうございました。土日に試してみます。諸事情で今は試せないので。

119:デフォルトの名無しさん (ワッチョイ 1911-Znx3)
17/07/04 23:04:48.45 n6RB6fUl0.net
>>116
頑張ってベターな方法探してね!

120:デフォルトの名無しさん (ワッチョイ c179-9Mth)
17/07/05 00:29:10.07 VBidwpfq0.net
ベタな方法を探す?

121:デフォルトの名無しさん (アウアウウー Sa25-k1q/)
17/07/05 10:23:55.19 jMcI5nQfa.net
ダブルクリックとシングルクリックを区別する処理を考えましたがあまり
美しくないです。もっとスマートな方法はありますか?
VDim isDoubleClick As Boolean
Dim cancelClick As Boolean
Private Sub CommandButton1_Click()
____Dim i As Long
____For i = 0 To 2048
________DoEvents
________If isDoubleClick = True Then
____________Exit Sub
________End If
____Next i
____If (cancelClick = False) Then
________' シングルクリック時の処理はここ
________Worksheets(1).Range("a1").Value = "シングルクリック"
____End If
____cancelClick = False
End Sub
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
____isDoubleClick = True
____' ダブルクリック時の処理はここ
____Worksheets(1).Range("a1").Value = "ダブルクリック"
____isDoubleClick = False
____cancelClick = True
End Sub
Private Sub UserForm_Initialize()
____isDoubleClick = False
____cancelClick = False
End Sub

122:デフォルトの名無しさん (アウアウエー Sa4a-Znx3)
17/07/05 11:03:35.66 bK7Vkfgva.net
>>119
vba クラス コントロール イベント
とかでググれば

123:デフォルトの名無しさん (JP 0H16-CicO)
17/07/05 13:18:10.58 r0cXYB/2H.net
>>119
内容と全然関係ないけど、全角スペースでインデントすれば削除されないよ

124:デフォルトの名無しさん (アウアウウー Sa25-k1q/)
17/07/05 16:49:43.67 F7dOY4NYa.net
>>120
ありがとうございます。質問そのものについてはタイマー張ることで実現
できることがわかりました。
また、イベントハンドラをまとめる方法もついでに知ったので助かりました!
>>121
次からそうします。ありがとうございます。

125:デフォルトの名無しさん (ワッチョイ c26f-CicO)
17/07/05 22:43:43.51 kJzSrAyN0.net
セルの値を配列に入れる時、
セルが1つだけだと、一次元配列になっちゃうってひどくね。

126:デフォルトの名無しさん (ワッチョイ 066d-Opov)
17/07/05 22:47:37.84 VdD8AIen0.net
次元数が変化するとめんどくさい時は、常に同じ次元数になるようにfunctionを噛ませる

127:デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
17/07/05 22:49:15.43 odMt6Ynp0.net
セルが2つだと二次元配列になっちゃうよ

128:デフォルトの名無しさん (アウアウウー Sa25-k1q/)
17/07/05 23:46:14.85 F7dOY4NYa.net
DAOとADOの使い分けを教えて!

129:デフォルトの名無しさん (ワッチョイ f73d-1B52)
17/07/06 00:36:18.68 in8T4yu80.net
使い分けというかADOはDAOに比べて何かと便利だからADOだけ使えばいいんじゃないかな。
AccessだとデフォがDAOなんで使う事も多いけどエクセルで使うときのメリットは特に思い浮かばない。

130:デフォルトの名無しさん (アウアウウー Sa5b-pw7F)
17/07/06 00:50:14.75 J3gAfYSVa.net
>>127
回答ありがとう。今はMySQLに接続しようとしているのでADOを選びます。
まだVBA始めて4日目なのでわからないことばかりですが

131:デフォルトの名無しさん (ブーイモ MMfb-MhHl)
17/07/06 02:37:48.69 2ggUG7GkM.net
>>123
Resizeで1行追加して、配列を1行減らせばいいんじゃないかと思った。

132:デフォルトの名無しさん (ワッチョイ d72b-KuRC)
17/07/07 06:50:33.44 k9X/9vlT0.net
すいません
パソコンのエクセル2016で作ったVBAをスマホで動かすことはできますか?
スマホでVBAの作成編集は無理のようなので

133:デフォルトの名無しさん (スプッッ Sd3f-nGAm)
17/07/07 07:44:52.11 6QLBDLc9d.net
>>130
むしろ教えてもらいたい

134:デフォルトの名無しさん (ワッチョイ 7773-zf8i)
17/07/07 08:54:05.14 KQxBqvcO0.net
関数でがんばれ

135:デフォルトの名無しさん (ワッチョイ bf23-M/n7)
17/07/07 21:24:02.96 IxSbuhab0.net
>>130
基本的に無理じゃね。
スマホ側OfficeがVBAサポ―トしてないと。
その上でWin32API使用してたら、更に無理だし。

136:デフォルトの名無しさん (スプッッ Sdbf-kebf)
17/07/07 21:25:43.56 t0FXhP6Gd.net
ノートでも画面狭く感じるのにスマホでなんてストイック過ぎる

137:デフォルトの名無しさん (ワッチョイ ff8f-KuRC)
17/07/07 22:19:46.83 02peKi+J0.net
アリエッティだから…

138:デフォルトの名無しさん (ワッチョイ 778b-QU0D)
17/07/07 23:07:11.35 tdv0VtnU0.net
ネゴシックスだから…

139:デフォルトの名無しさん (ワッチョイ 97ea-okny)
17/07/07 23:13:49.66 q3zfwuJv0.net
vbaってエクセル用の言語?
他にも使えるの?

140:デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
17/07/07 23:24:32.16 IHJ5BTGs0.net
アクセスやワードでも使えるよ
アクセスvbaはたまによく使う。SQL覚えたほうがいいけど
ワードはワード自体使わん

141:デフォルトの名無しさん (ワッチョイ d701-LW04)
17/07/07 23:41:29.01 cLxiai6C0.net
初歩的な質問で、すみません。
vbaの公式本で独学で勉強中なのですが、
なぜこうなるのかわかりません。
よければ教えてほしいです。
不明点:
①なぜnumがセルa1~a3だと認識されるのか。
b1~b3も記述しているので、b1~b3と認識されないのはなぜか。
②こういうもんだと言われればそれまでなのですが、
ほかにもnum以外に自動認識されるような用語はあるのでしょうか。

Sub sampel()
 Range("b1") = percent(Range("a1"))
 Range("b2") = percent(Range("a2"))
 Range("b3") = percent(Range("a3"))
End Sub
Function percent(num) As String
 percent = num / 100 & "%"
End Function

142:デフォルトの名無しさん (ワッチョイ ff8f-KuRC)
17/07/07 23:52:29.75 02peKi+J0.net
関数 percent(num) で呼び出しもとで
引数 numに Range("a1") をセット(厳密には違うか)してるから

って釣りだよな

143:デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
17/07/07 23:55:59.29 IHJ5BTGs0.net
>>13


144:9 残念ながらかなり根本的な事がわかっていない function~はユーザー定義関数っつって、処理をひとまとめにしたもの numってのは変数名。これは自分で決めるもので、 「num」でも「namu」でも「ナンバー」でもなんでもいい。 「sub」「if」みたいな単語は予約語と言ってそれらは使えないんだけど、まぁ何となく分かるだろう 毎回'こう書くのがめんどくさいから Range("b1") = Range("a1") / 100 & "%" 'functionを定義して、使い回しできるようにしているだけの話 Range("b1") = percent(Range("a1")) function作るのめんどくさくね? と思ったかもしれないけど、それは何もわかっていないだけ 素直にこういうもんだと覚えてくれ



145:デフォルトの名無しさん (ワッチョイ d701-LW04)
17/07/07 23:57:08.34 cLxiai6C0.net
すみません。意味が分かりました。

146:デフォルトの名無しさん (ワッチョイ 9f06-1B52)
17/07/07 23:58:31.41 J/by2x1N0.net
>num以外に自動認識されるような用語

自動認識されるような用語って何?初めて聞いた

147:デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
17/07/08 00:00:19.52 lNWyFXj50.net
>>142
良かった、頑張ってねぇ~

148:デフォルトの名無しさん (ワッチョイ ff8f-KuRC)
17/07/08 00:06:47.50 13H3LMpq0.net
>>143
AレジスタとかBレジスタとかと想像してみる
>>142 ほ、ほんとに初心者だったのかスマン

149:デフォルトの名無しさん (ワッチョイ f791-nB+A)
17/07/08 00:07:48.82 ieaMtMqy0.net
>>143
多分だが、引数を理解できてなくて
numに勝手にマッピングされてる、みたいに思ったんじゃないか
なんか勉強の順番おかしいんじゃない?
もっと前のフェーズでの学習が抜け落ちたまま次進んでる気がする

150:デフォルトの名無しさん (ワッチョイ 9f06-1B52)
17/07/08 00:09:10.26 pa5RQPEd0.net
>>145
いやいや、いきなりアセンブラは無いだろとw

151:デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
17/07/08 00:11:00.51 lNWyFXj50.net
>>146
俺もそう感じた
ただ学習の本やサイトも「おまじない」とかアホなことぬかすからわけがわからなくなるんだと思う

152:デフォルトの名無しさん (スプッッ Sdbf-kebf)
17/07/08 01:17:01.28 5hrqvRHFd.net
俺何年もVBAつかってるけどオプションイクスプリシットとか読めないわ書けるけど
ただのおまじないだしないいよな別に

153:デフォルトの名無しさん (ワッチョイ 97ea-okny)
17/07/08 04:13:51.39 4CWa99QQ0.net
Private Sub Worksheet_Calculate()

If Worksheets("sheet1").Cells(3, 20) > 4000 Then
Worksheets("sheet1").Range("V4:AP4").Insert
End If

end sub
インサートがめっちゃ繰り返される。どうして?

154:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/08 08:57:15.58 YOB7IyKs0.net
>>150
ifが永遠にtrueになるからではないか
セル挿入→再計算→ifがtrue→セル挿入→再計算→ifが(略
Worksheets("sheet1").Cells(3, 20) がいつ4000以上になるのか
本当になるのかチェック

155:デフォルトの名無しさん (ワッチョイ bf6d-KuRC)
17/07/08 09:26:58.00 lNWyFXj50.net
>>150
Application.EnableEvents = False
で、eventを止める
そうしないと
>セル挿入→再計算→Worksheet_Calculate→ifがtrue→セル挿入→再計算→Worksheet_Calculate→ifが(略
が起こる
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
If Worksheets("sheet1").Cells(3, 20) > 4000 Then
Worksheets("sheet1").Range("V4:AP4").Insert
endif
Application.EnableEvents = True
End Sub

156:デフォルトの名無しさん (ワッチョイ 97ea-okny)
17/07/08 13:34:02.80 4CWa99QQ0.net
>>151,>>152
的確な指示ありがとう!!(笑)
すごいなここの人は

157:デフォルトの名無しさん (ワッチョイ b7e3-jTKI)
17/07/08 16:53:25.86 Z/1cPHhj0.net
>>149
別にいいよ、モジュールの一番上にそれを書くのを忘れなければ

158:デフォルトの名無しさん (スプッッ Sd3f-kebf)
17/07/08 17:53:16.70 lfjWBFMWd.net
モジュールの一番上に書くのは153でしょ
'2ちゃんねるの神様に教えてもらったコードです
'神様ありがとうございます
Option Explicit
Sub foo()


159:デフォルトの名無しさん (ワッチョイ ffb9-wcci)
17/07/09 00:06:53.03 8a4WwF270.net
こんばんは。
困ってます。
先日作成したマクロが動かなくなりました。
作成した日は動きました。
(特定のフォルダをコピーしてリネームするだけの動きです。)
プログラムを手動で実行したときは問題なく動くので、
プログラムの問題ではなさそうなのですが。
エクセルのセキュリティは、「警告を表示してすべてのマクロを無効にする」
にしています。
エクセルの再起動・PC再起動は試しましたが、だめでした。
C:\...Local\Temp\Excel8.0のMSForms.exdも消してみたりしましたがダメでした。
原因は何でしょうか・・・?

160:デフォルトの名無しさん (ワッチョイ ffb9-wcci)
17/07/09 00:08:43.90 8a4WwF270.net
スペック全然書いてなかった。
Windows8.1
Excel2013 です。

161:デフォルトの名無しさん (ワッチョイ ffb9-wcci)
17/07/09 00:14:34.37 8a4WwF270.net
すみません。
書き込んですぐに自己解決しました。
コマンドボタンのオブジェクト名が違ってた・・・。

162:デフォルトの名無しさん (ワッチョイ bf23-SyLM)
17/07/09 03:04:28.53 EKrowZUC0.net
>>158
良いんだけどさ、最低限デバッグ出来るようになってくれ。

163:デフォルトの名無しさん (ドコグロ MMbf-d65a)
17/07/09 10:34:39.10 ouwdb2hLM.net
まあ、解決したことを書いてくれたのはよかった

164:デフォルトの名無しさん (ワッチョイ 9f4e-cnUH)
17/07/09 12:02:55.24 P74F/v7B0.net
デバッグ始めにtypoを疑って問題ないと確認して、
さんざん調べてやっぱりtypoの時の脱力感

165:デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
17/07/09 12:34:26.09 XJb9KLmK0.net
optionexplititをつけよう(typo)

166:デフォルトの名無しさん (ドコグロ MMdf-d65a)
17/07/09 13:33:12.66 Uu/MlKNRM.net
>>161
他人のtypoはすぐにわかるのになぜかわからない自分のtypo

167:デフォルトの名無しさん (アウアウカー Sa2b-nSBM)
17/07/09 19:05:53.04 WoCQL3Mea.net
初心者的な内容ですいません。
よければ教えてください。
1はなぜactivesheetでなくshが回答となるのでしょうか。
shがworksheetsとして定義されていないのになぜ、worksheetsとして考えられるのかわかりません。
---------
次のイベントプロシージャはブックに新しいシートを挿入したときに実行される。
挿入されたシートのシート名を、ユーザーがダイアログボックスから入力した名前に変更させたい。
このとき、【 1 】に入る適切な命令を解答欄に入力しなさい。
ただし、シート名の重複などのエラー処理は省略しているものとする。
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim strSheetName As String
strSheetName = InputBox("新しいシートの名前を入力してください")
If strSheetName <> "" Then
【 1 】.Name = strSheetName
End If
End Sub

168:デフォルトの名無しさん (ワッチョイ 9f6f-rvkC)
17/07/09 19:17:48.71 IxMSo5tD0.net
Sh As Objectって何だよ。
Sh As Worksheetじゃないのか。
問題に突っ込んでもしょうがないけど。

169:デフォルトの名無しさん (アウアウカー Sa2b-nSBM)
17/07/09 19:25:01.06 WoCQL3Mea.net
スタンダード公式ページの模擬問題3に書いてありました。
問題がおかしいのでしょうか?

170:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 19:29:29.32 e2g8wwYr0.net
>>164
新しくできたシートが引数Shで渡されている。
(ByVal Sh As Object)の部分。
Workbook_NewSheetのイベントプロシージャの仕様。
たいてい、どのイベントプロシージャも自分自身の参照を引数で渡されている。
ので、この場合、新しくできたシート自身を操作したければ
引数で渡ってきているShを操作すればよい。

171:デフォルトの名無しさん (ワッチョイ 9743-ClOc)
17/07/09 19:33:19.71 aVb+3v1/0.net
挿入された新規シートが必ずActiveSheetだとは限らないんじゃない?
イベントプロシージャに新規シートが引数として渡されるのだから、それを使うのが確実
ちなみに問題が As Object なのは間違ってない
URLリンク(msdn.microsoft.com)

172:デフォルトの名無しさん (アウアウカー Sa2b-nSBM)
17/07/09 19:35:24.63 WoCQL3Mea.net
こういう仕様があったんですね‼
ありがとうございます。
スタンダード合格出来るよう頑張ります。

173:デフォルトの名無しさん (ワッチョイ bf6d-gkD3)
17/07/09 19:42:48.30 XJb9KLmK0.net
worksheetでもいいだろ、と思ったらエラーになった
確かにobjectであって、worksheetではない
URLリンク(stamp-uploda.com)
ってかこれ、一体なんなんだ?参照だろうけど、中身が全くないobjectが渡されてる。意味がわからない

174:デフォルトの名無しさん (ワッチョイ bf6d-gkD3)
17/07/09 19:44:44.18 XJb9KLmK0.net
ウォッチ式では
sh.name
はウォッチ式が不正です
イミディエイトウィンドウでは
?sh.name
Sheet4
とシート名が返ってくる
なんだこりゃ??

175:デフォルトの名無しさん (アウアウカー Sa2b-M/n7)
17/07/09 19:56:26.06 B1MJdm2Aa.net
>>171
ウォッチ式にsh.nameが指定されてる?
shじゃ無くて?

176:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 20:10:27.05 e2g8wwYr0.net
ためしに別の変数にShを突っ込んでみたら
中身が見られるようになった。
どっかで、オブジェクト変数は利用されるまで中身が入らないよ
みたいな話を聞いたような・・・。

177:デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
17/07/09 20:17:33.00 XJb9KLmK0.net
>>172
試してみたら、ウォッチ式でもイミディエイトウィンドウでもsh.nameはうまく取れた。
ウォッチ式のshは取れない。
なんかバグの温床になりそうで、このshあんまり使いたくないなぁ…
環境はwindows7 エクセル2010
vbaコード
Private Sub Workbook_NewSheet(ByVal Sh As Object)
MsgBox 1 'ブレークポイントを設定している
End Sub
ウォッチ式に
sh
sh.name
を追加
shは図のとおり、変な状態になる。プロパティなどが表示されない
sh.nameはシート名が表示される
イミディエイトウィンドウは正常
?sh.name
Sheet5
URLリンク(stamp-uploda.com)
>>173
プロパティ(sh.name)を呼び出してみた後の状態
(メッセージボックスにはsheeet6と正常に表示された)
やっぱりダメだった。
URLリンク(stamp-uploda.com)
なんらかの理由でウォッチ式が正常に機能してないだけならいいけど、正常な状態でこれだとどういう状況なんだろう

178:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 20:42:05.40 e2g8wwYr0.net
>>174
Dim sheet as Worksheet
Set sheet = Sh
これをmsgboxの前に追加すると全部の変数がウォッチで見られると思う。
ググってみたらNewで作ったオブジェクトは初めて利用するまで空ですよ
らしいので、新シートのオブジェクトは内部的にNewで作成している?
Sh.nameが引けるのは何ででしょう?

179:デフォルトの名無しさん (スップ Sdbf-Yl52)
17/07/09 20:43:00.97 vBmV/XSmd.net
それよりも改行しないコードかく人は何を考えてコード書いてるのか気になる

180:デフォルトの名無しさん (ワッチョイ 9791-9DAm)
17/07/09 20:43:34.76 BT4+59vh0.net
>>174
objectで受け取ってるからshのままでは何のクラスなのかわからないからどんなプロパティがあるかわからない
Nameプロパティを指定したら
Nameプロパティを持っているクラスとして解釈して
Nameプロパティの位置を文字列として表示しただけ
worksheetクラスのデフォルトプロパティがNameだからかな
countプロパティとかとして解釈させたら想定外の値になると予想

181:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 20:46:50.81 e2g8wwYr0.net
>>177
VBAマスター現る。
なっとく。

182:デフォルトの名無しさん (ワッチョイ 9791-9DAm)
17/07/09 20:49:10.77 BT4+59vh0.net
>>178
VBAだけじゃなくて他のプログラミング言語C言語とかと共通の考え方
メモリ確保とかキャストとか

183:デフォルトの名無しさん (ワッチョイ 9791-9DAm)
17/07/09 20:54:20.52 BT4+59vh0.net
>>164
1が実行されるまでの間にactivesheetが変わるかもしれないからactivesheetでは不正解だと思う
出来るだけactivesheetを使わない方が想定外の動作にならないと思う

184:デフォルトの名無しさん (ワッチョイ 778b-utq/)
17/07/09 20:55:59.71 oI2zN/et0.net
てかお前らそんなに一か八かでactivesheet使ってんのかよw

185:デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
17/07/09 21:19:51.98 XJb9KLmK0.net
これが通るけど、ウォッチ式には現れない
多分ウォッチ式の不具合だと思う
そう考えないと気持ち悪くて仕方ないし疲れてきた・・・
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Calculate
MsgBox Sh.Index
End Sub
URLリンク(stamp-uploda.com)
>>175
sheetでもShでも見れるようになりました
Shの参照をコピーしたのでインスタンスが生成されたのかな
>>177
indexプロパティでも通りましたし
Sh.Calculateメソッドでも通りました
>>181
使ってないよ。sheetの指定はsetした変数を使ってる
昔はactive~やselect~を使ってたけどね

186:デフォルトの名無しさん (ワッチョイ 9791-9DAm)
17/07/09 21:38:18.71 BT4+59vh0.net
>>182
worksheetクラスではないクラスのプロパティを指定したらどうなると予想する?
例えばRangeクラスのプロパティとか
もしかしたらサイズとかを見ていてサイズが異なる場合はキャスト出来ないかもしれないど
メモリ領域には値が格納されているけどそれをどう解釈するかはクラスが決まらないと特定できない

187:デフォルトの名無しさん (ワッチョイ bf6d-U373)
17/07/09 21:45:51.77 XJb9KLmK0.net
>>183
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Debug.Print Sh.Range("a1").Address
End Sub

$A$1
が返ってきたわ
URLリンク(stamp-uploda.com)

188:デフォルトの名無しさん (ワッチョイ bf6d-U373)
17/07/09 21:47:17.93 XJb9KLmK0.net
写ってないけどウォッチ式のshのプロパティは不明なままね
ウォッチ式がおかしい以外考えにくい

189:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 22:03:56.91 e2g8wwYr0.net
Private Sub Workbook_NewSheet(ByVal sh As Object)
 Dim obj As Object
 Set obj = sh
 MsgBox obj.Name
End Sub
これだと中身が見られないけど通る。
やっぱり>>183の型キャスト説じゃないかなぁ。
ローカルウィンドウでも見られないし。
obj.Value = "aaa" で実行時エラーになる。
「ん~何か知らないけどValueに入れるよ?あっねえわw」 ってことでは?
.Nameや.Range().Addressはあったんで通る。

190:デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
17/07/09 22:23:32.11 XJb9KLmK0.net
>>186
それはrange指定してないっす・・・
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Cells(1, 1).Value = "aaa"
End Sub
で通ったよ

191:デフォルトの名無しさん (ワッチョイ 9791-Razr)
17/07/09 22:31:30.92 BT4+59vh0.net
>>184
Debug.Print Sh.Range("a1").Address
ではなくて
Debug.print sh.address
だったらどうなるかって意図だったけど
ためしたら実行時エラーになる
これはtypename(Sh)を表示したらわかるけど
Shという変数自体にクラス(型)に関する情報を持っているから
無理矢理Rangeクラスのプロパティを表示させようとするとエラーになる
dim rng as Range
set rng = Sh
とかやっても実行時エラーになる
文法的にはエラーじゃないからコンパイルは通る
VBAが型チェックしてバグにならないようにしていると思う
他の言語だとこれができるものもある

192:デフォルトの名無しさん (ワッチョイ 9791-Razr)
17/07/09 22:35:23.27 BT4+59vh0.net
>>187
ShがWorksheetクラスだっていうのが判ってるからRangeを指定するってわかるけど
Objectクラスだったら何のプロパティを持っているかわからなくない?
Objectクラスはすべてのクラスのスーパークラスだから何でも参照できる
Sh as Objectと宣言されているShが実態はRangeクラスである場合もある
その場合は、Sh.Value = "a"でも実行時エラーにはならない

193:デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
17/07/09 22:50:14.83 XJb9KLmK0.net
>>188-189
なるほど、意図が分かりました。コンパイルエラーになる意味もわかりました、ありがとうございます
以下の状態だと、shの型はobject/Sheet5としてウォッチ式に認識されます
この「Sheet5」というのは何でしょうか?
デフォルトプロパティでしょうか?
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim sheet As Worksheet
Set sheet = Sh
Debug.Print 1 'ここでブレークポイント
End Sub

194:デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
17/07/09 22:58:28.17 XJb9KLmK0.net
しかし>>175がどうしてもわかりません
object型をobject型に渡してもプロパティは分からない、それは分かります
URLリンク(stamp-uploda.com)
object型をworksheet型に渡すと、ウォッチ式で見れるようになる、それがわからない
URLリンク(stamp-uploda.com)
全部のプロパティ・メソッド見たら全部一致してたからworksheetとしてコピーしますね~ということ?

195:デフォルトの名無しさん (ワッチョイ 9791-Razr)
17/07/09 23:03:28.23 BT4+59vh0.net
>>190
Set sheet = Sh
を実行した時点で、Sh = sheet = Worksheetクラスのオブジェクトと特定可能
なのでworksheetクラスのデフォルトプロパティを表示しているのではないか
ウォッチ式にsheet変数も追加すると、そのタイミングで
Shの他のプロパティも見えるようになった

196:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 23:06:31.26 e2g8wwYr0.net
>>191
型キャストで
Shがワークシートだと判明したので
Shとsheetは同じ物なので
両方のプロパティが同じで表示されるのではと思うが。
詳しくはマスターにまかせる。
と思ったらもう回答されていた。
すごい勉強になった。

197:デフォルトの名無しさん (ワッチョイ 9791-Razr)
17/07/09 23:09:27.92 BT4+59vh0.net
>>191
ウォッチ式の表示更新タイミングはその内容が特定されたときに
即座に表示更新されるとは限らない
つまり表示更新されるよりもずっと前に表示すべき内容が特定されていた可能性もある

198:デフォルトの名無しさん (アウアウエー Sadf-thUc)
17/07/10 09:22:58.03 HOfsyLJOa.net
activesheet使うのはworksheets.copy使うときぐらいだな
真面目に作るときは書式とか直で指定するように頑張るけど

199:デフォルトの名無しさん (ワッチョイ 7773-zf8i)
17/07/10 12:08:47.45 G+8qCprO0.net
レコードセットをそのままシートに張り付けると、元の型を継承して数字のみのカラムも文字列として貼られるんだけど、さすがにどうしようもない?

200:デフォルトの名無しさん (スップ Sd3f-nGAm)
17/07/10 12:39:11.04 okOc14zTd.net
>>196
あとで一括して和0すりゃいいじゃん

201:デフォルトの名無しさん (ササクッテロロ Spcb-9DAm)
17/07/10 12:47:22.77 8dcdQUy6p.net
>>197
和は加算の結果を表す言葉
0を加算とか足す0じゃないと意味が違ってくる
因みにレコードセットの型はcolumnの最初の7行分のデータから推測されるとかだったと思うから
目的の型になるようにソートすればいいかも

202:デフォルトの名無しさん (ドコグロ MM2b-jxDt)
17/07/10 13:37:23.50 WkincIndM.net
関数の引数にbyval ws as Worksheetってやるとどうなるの?
worksheetに対しては、byrefしか使ったことない

203:デフォルトの名無しさん (ワンミングク MM7f-jTKI)
17/07/10 14:25:22.38 /gGZBLtxM.net
オブジェクト型はbyval渡し出来ないんじゃなかったっけ?

204:デフォルトの名無しさん (スップ Sd3f-nGAm)
17/07/10 14:36:15.11 okOc14zTd.net
>>198
なるほどそうだぬ
「ゼロを一括して加算(D)すりゃいい」と言い直させてもらう
もともと具体的に書かず曖昧な表現を目指していた

205:デフォルトの名無しさん (スップ Sd3f-nGAm)
17/07/10 14:38:53.50 okOc14zTd.net
>>200
できるよ。
メソッド呼び出しもそのオブジェクトに対するものとなる。
違いが出るのは代入(=)演算の意味だけだと思う。

206:デフォルトの名無しさん (ブーイモ MMbf-MhHl)
17/07/10 15:15:06.40 UwxUnls6M.net
>>199
たぶんプロシージャ内の set ws=hoge が引数に反映されるかされないかが変わってくる

207:デフォルトの名無しさん (ドコグロ MMdf-jxDt)
17/07/10 16:10:50.58 1UBLPYX0M.net
>>203
ありがとうございます。
時間あるときに試してみます!

208:デフォルトの名無しさん (スッップ Sdbf-Yl52)
17/07/10 17:19:20.24 1LvSwn3ad.net
thisworkbookをoptionalな引数のデフォルト値にしたいんだけどできない
何かいい方法知りませんか

209:デフォルトの名無しさん (スップ Sd3f-nGAm)
17/07/10 18:34:12.31 okOc14zTd.net
>>205
確認せずに答えるけど、できないならOptionalのデフォルト値をNothingにして、
モジュール内で判断・分岐する
If a Is Nothing Then Set a = ActiveWorkBook
とか

210:デフォルトの名無しさん (ワッチョイ bf6d-KuRC)
17/07/10 18:40:40.88 9dSXLq4x0.net
デフォルト値は定数式で、って言われるな
デフォルト値を文字列にして"thisworkbook"、evalで…とか考えたけど2013持ってないから試せない
そこまでしても読みにくくなるだけなので、素直に>>206みたいに条件分岐させたほうが良いと思う

211:デフォルトの名無しさん (ブーイモ MMdb-MhHl)
17/07/10 19:04:18.69 fjsjDBbbM.net
質問です。
ユーザーフォームをShowModal=Falseで表示しており、フォームを表示したまま、フォーカスをフォームからセルに移動することは可能でしょうか?
cells(1,1).select や application.goto cells(1,1) ではフォーカスがフォームから動きませんでした。

212:デフォルトの名無しさん (ワッチョイ bf6d-gkD3)
17/07/10 19:17:57.83 9dSXLq4x0.net
>>208
昔やったことあるなぁ
と思って試したら、仕様変更でできなくなってるっぽい
URLリンク(www.vbalab.net)
2010は無理だった

213:208 (ブーイモ MMdb-MhHl)
17/07/10 19:26:18.02 fjsjDBbbM.net
>>209
回答ありがとうございます。
後出しで申し訳ないですがバージョンは2007です。
試せるのが明日になりますが、appactivate試してみます。

214:デフォルトの名無しさん (スッップ Sdbf-Yl52)
17/07/10 20:52:31.16 93pFc0tnd.net
>>206
やっぱりそうなるか
でもなんでできないんだろうインスタンスとして実体化されてないから?
そんなことないよな

215:デフォルトの名無しさん (ワッチョイ 9791-9DAm)
17/07/10 21:00:26.90 N/fNiVFC0.net
>>211
コンパイル時点で決まってないからかな~

216:208 (ブーイモ MMdb-MhHl)
17/07/11 12:39:40.24 fzHCV1ljM.net
>>209
AppActivateもApplication.Visible=Trueでもいけました!
ちなみに以下のも試しましたが全部ダメでした。
ActiveWindow.Activate
ActiveWorkBook.Activate
ActivateSheet.Activate
2010以降だとWIN32APIとかでシートのマウスクリックを挟まないとダメかもですね。

217:デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
17/07/11 19:59:21.82 L+/Hncu30.net
>>213
良かったね
2007と2010でそんなとこに差があるとは驚いた

218:デフォルトの名無しさん (ワッチョイ 9f6f-rvkC)
17/07/12 19:38:42.24 qkF1IqO80.net
Sh As Object
Sh

219:デフォルトの名無しさん (ワッチョイ 9f6f-rvkC)
17/07/12 19:41:14.38 qkF1IqO80.net
↑誤送信すまん。
Sh As Object
Sh As Worksheet
どちらでも動くのは分かる。
Objectにするのって、
どんな値が入るかわからないから、
Variantでいいやって考えるのと同じ?

220:デフォルトの名無しさん (ワッチョイ bf6d-KuRC)
17/07/12 19:46:47.71 xxYqMu/90.net
どんな値が入るかわからないコードってどんなコード?
デバッグ用にエラーで分岐させた先とか?

221:デフォルトの名無しさん (ワッチョイ 778b-utq/)
17/07/12 19:50:58.17 vG3FHDEt0.net
つっこむならせめて値と型の違いぐらい分かっていて欲しかったなあ

222:デフォルトの名無しさん (ワッチョイ 9723-zf8i)
17/07/12 19:53:10.98 +y58Cois0.net
>>217
variantさんディスってるの?

223:デフォルトの名無しさん (ワッチョイ bf6d-pHDl)
17/07/12 20:00:38.68 xxYqMu/90.net
>>218
普通にすまん
>>219
あってもなくても一緒では?
variantを書くのは「どんな型が入るか分からない」と明示する以外に利点があるのだろうか

224:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/12 20:10:18.44 agdmn3RR0.net
NewSheetイベントの引数の場合、Shには
「Worksheet オブジェクトまたは Chart オブジェクトが渡されます」
と書いてあるので
どっちが渡されてもいいようにObjectなのでしょう

225:デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
17/07/12 21:14:58.86 IZp09kNA0.net
俺の書くVBAはVariantばっかりだけど問題ないよね?

226:デフォルトの名無しさん (ワキゲー MMdf-R1hf)
17/07/12 21:19:09.13 Nu9oIAfCM.net
個人利用である限りはね

227:デフォルトの名無しさん (ワッチョイ 976f-KuRC)
17/07/12 21:27:49.15 M2bsHFCW0.net
書籍にさえ糞みたいなコードが平然と書かれてるVBA
どんなコードだってヘーキヘーキ

228:デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
17/07/12 21:28:35.71 xxYqMu/90.net
そもそも宣言しなくても特に問題はない
vbaの型なんてやわらかすぎてあってないようなもん、死にはせん

229:デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
17/07/12 21:34:45.69 IZp09kNA0.net
>>223
もちろんさ!
ちょっと単体テストすりゃ全然平気!
唯一気をつけるのはNULLが来た時の扱いだけど、「NULLがあり得る」場合は結局避けられない問題だし

230:デフォルトの名無しさん (ワキゲー MMdf-R1hf)
17/07/12 21:40:21.42 Nu9oIAfCM.net
ただこーゆー所でVariantプログラムって言うとなんやかんやめんどくさいので胸の内に秘めとくことをオススメする

231:デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
17/07/12 21:47:21.99 IZp09kNA0.net
俺がそのVariantを全部なくしてやるよ!
 ↓

232:デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
17/07/12 21:48:46.29 xxYqMu/90.net
NULLじゃなくてnothingでは

233:デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
17/07/12 21:54:45.14 IZp09kNA0.net
>>229
まあNothingが来れば気を付けなきゃいけないだろうけど、NULLはDBから読んだデータソースに含まれている場合が多いから。

234:デフォルトの名無しさん (ワッチョイ 778b-utq/)
17/07/12 21:55:54.59 vG3FHDEt0.net
She As Object
Set She = New LoveDoll
She.DressUp(MaidCostume)
She.Attach(SilliconVagina)
I.Fuck(She)
I.FinishAlone()
She.Detach(SilliconVagina)
I.Wash(SilliconVagina)

235:デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
17/07/12 22:01:13.24 IZp09kNA0.net
5行目にSet her = She があればよかった

236:デフォルトの名無しさん (アウアウウー Sa5b-pw7F)
17/07/12 22:40:32.03 ybKMfalIa.net
VBEのインテリセンスを止める方法教えてください

237:デフォルトの名無しさん (アークセー Sx39-y19a)
17/07/13 06:37:01.82 zrnYEEn3x.net
NewSheetイベントの引数ShがObject型なのは、WorkSheetクラスとChartObjectクラスの両方でNewSheetイベントの呼び出しが定義されていて、実行時にしかShの型が決まらないからだと思うが
Workbook.Sheets(Index)の戻り値がObject型なのと一緒

238:デフォルトの名無しさん (アウアウエー Sa66-PUpa)
17/07/13 12:57:05.14 vRW6wkrFa.net
variantとかobject形はコンパイルエラーで止めてくれないからめん


239:どい 今ちょうど使いたい場面出てきてるんだが二の足踏んでる



240:デフォルトの名無しさん (ワッチョイ 6e1b-MRQN)
17/07/13 13:12:36.23 9SrccZi40.net
指定日(A)から現時点(B)までの経過時間をミリ秒で取得したい場合、
どのようにしたら上手く取れるでしょうか?
VB.NETの時はGetTimeMillisecondsがあったので、(B-A).GetTimeMillisecondsで取得出来たんですが。

241:デフォルトの名無しさん (ワッチョイ 1d54-pdrj)
17/07/13 13:25:10.65 T6Wx4mwg0.net
APIのGetTickCountを使う

242:デフォルトの名無しさん (ワッチョイ 6e1b-MRQN)
17/07/13 13:36:43.69 9SrccZi40.net
>>237
ありがとうございます。
GetTickCountも試してはみたんですが、システム稼働してからの時間だからか
自分では上手く取得できませんでした。
「指定日」(今回やりたいのは1970/1/1)からの経過時間をミリ秒取得するには
どのようにしたら良いでしょうか?

243:デフォルトの名無しさん (アウアウエー Sa66-PUpa)
17/07/13 14:33:52.00 hn5wvxLda.net
>>236
doubleに変換して計算してまた変換するとか

244:デフォルトの名無しさん (アークセー Sx5f-I8+U)
17/07/13 17:11:00.53 mgpP2Dmux.net
>>238
ミリ秒に換算しろ

245:デフォルトの名無しさん (ワッチョイ 006f-z+eH)
17/07/13 18:03:16.52 etRke/LM0.net
>>238
どうせそんな長いスパンならミリ秒はなんちゃってでいいんでしょ
Application.WorksheetFunction.RoundDown((Date - CDate("1970/1/1")) * 86400000 + Timer * 1000, 0)

246:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/13 20:31:54.44 kGwztgTZ0.net
>>236
timediff()関数だかdifftime()があったはず

247:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/13 20:34:22.33 kGwztgTZ0.net
datediff()だった
ただ秒単位が最小だった

248:デフォルトの名無しさん (ドコグロ MM36-OTuW)
17/07/13 21:05:07.35 WT5N9OT5M.net
Win32API の GetSystemTime( ) を呼び出して後は頑張って差を計算するなりすればいいだけでしょ

249:デフォルトの名無しさん (ワッチョイ 0a23-z+eH)
17/07/13 21:30:25.15 kQSmD3CQ0.net
そもそもソースがクソ精度のシステム時刻だからmsecなんてあてにならない気がする
直前にNTPで同期をとるとか?

250:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/13 21:37:03.54 kGwztgTZ0.net
指定日から当日までをdatediffの秒単位で取得して
当日からその時刻までをmsで取得して
足し合わせればいいんじゃね

251:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/13 21:47:59.63 OJpyM90P0.net
ミリ秒の精度が求められる操作をVBAでって嫌だなぁw

252:デフォルトの名無しさん (ワッチョイ 006f-z+eH)
17/07/13 22:44:18.16 etRke/LM0.net
作成するファイルやデータの一意な命名、識別とかに使うんじゃないの
だいたいでいいと思うわ

253:デフォルトの名無しさん (ワッチョイ aa11-OTuW)
17/07/14 06:02:22.03 bYrN3J/p0.net
要件推理大会は終わった?

254:デフォルトの名無しさん (JP 0H32-v2r+)
17/07/14 10:03:16.31 ak+4FQ9QH.net
要件って喪前らは横浜のシューマイ屋さんか!!!!

(´・ω・`)b

255:デフォルトの名無しさん (ワッチョイ 0a23-z+eH)
17/07/14 10:25:11.37 P3iXCzVv0.net
Range("250").ClearContents

256:デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
17/07/14 22:15:23.51 ont4yiQP0.net
!!!?
その手があったか!!
今まで、真面目に名前を付けることしか考えなかったわ。
Dim Sh As Worksheet
Set Sh = Thisworkbook.Worksheets("(´・ω・`)b")
こんなのもありだな。

257:デフォルトの名無しさん (ワッチョイ c491-BaGs)
17/07/14 22:29:36.70 Ry5eHGcV0.net
そういやみなさん
その場限りの適当マクロじゃなくて
ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます?
自分はまずセルに名前をつけて
Const hoge = "セルにつけた名前"
Range(hoge).value = "うんこ"
みたいなことやってます
ちなみに、シート名でもこれやってるんですが‥
シート名やセル名が変わる可能性を前提にしたら
こういうアプローチになるとは思うんですけど
結局凄く無駄なことをやってる気がして…(結局変えることあんまないし)
特にセルの名前に関しては、どうせその文字列をConstのところにハードコードするなら
名前つけずに
Const hoge ="A1:B5"
でもええやんけとか思ってるんですが
行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり…

258:デフォルトの名無しさん (ワッチョイ e66d-TdFn)
17/07/14 22:44:26.51 YONW9HHx0.net
>>252
こういうのもあるよ
URLリンク(github.com)

259:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/14 23:03:04.97 QoWI5XEA0.net
>>253
セルに文字列で意味をつけて
その文字列を検索して特定する
そのセルからのオフセットを固定しておく
例えば列名とか行名とか

260:デフォルトの名無しさん (ワッチョイ 0a23-z+eH)
17/07/14 23:10:22.98 P3iXCzVv0.net
>>253
よくある表の列の増減対応する場合は
列挙体で列名を定義しておいて
Cellsで列名を参照させてる。
途中にぶっこんでも列挙体のほうをちょろっと書き換えればいい。
行にも対応させると、面倒かも。

261:デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
17/07/14 23:41:07.46 ont4yiQP0.net
>列の増減
会社のやつ、一切弄れないようにしたわwwwww
セルを保護するとかじゃなくて、
データの更新時に、全消しして再描画するのwwwwwwwwww
列挿入とかしても無駄ですよってwwwwwww

262:デフォルトの名無しさん (ワッチョイ e66d-qA4N)
17/07/15 00:03:43.14 fdp++JjU0.net
そういうの、このスレだと基本だと思う
・正規化したデータを引っ張ってくる
・ボタン押したらvbaで構築。シートすら削除して再作成
こんなんばっかだろ。誰もさわれなくて非難轟々だけど、どうかんがえてもこっちのほうが安全なんだよな

263:デフォルトの名無しさん (ワッチョイ e251-X5vM)
17/07/15 00:11:34.38 CxBosAMp0.net
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)

264:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/15 00:12:14.92 kt01pjYOM.net
学ぶ気のない人からとても怒られるやつ

265:デフォルトの名無しさん (スッップ Sd70-QKFr)
17/07/15 00:49:22.52 K6V0aa5ld.net
>>253
普通にやってるしシート名とかも定義する
あとは汎用的なクラスや関数いくつも作っておいて雛形エクセルにしてる

266:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/15 04:37:45.96 7LAckzVN0.net
>>256
コードをいじらないといけないじゃないか

267:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/15 04:53:42.10 7LAckzVN0.net
>>258
データの更新自分しか出来ないんじゃね
参照しか出来ないならwebシステムにすればいいんじゃね

268:デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
17/07/15 08:42:06.63 tWt2y1Te0.net
>参照しか出来ないならwebシステムにすればいいんじゃね
ヒント:権限

269:デフォルトの名無しさん (ワッチョイ aa11-OTuW)
17/07/15 09:43:36.21 jhhap/jh0.net
>>253
> ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます?
状況次第だけどよくアクセスするとか重要なセルは適当なところでまとめて変数に代入してる
Dim hoge As Range
Set hoge = Range("A1")
...
hoge.value = "うんこ"
> 行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり…
行とか列の挿入を想定するなら名前をつけてそれで参照する
ユーザーが作成するようなシートなら特定の文字列を検索して場所を特定するとかもやる

270:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/15 09:44:21.75 7LAckzVN0.net
>>264
自分に権限がないなら権限を持ってる人に許可貰えばいいだけじゃね?
なんの権限か不明だが

271:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/15 10:08:30.41 7LAckzVN0.net
>>258
批難がでるって事は不便な点とかがあるって事で
仮にそれが商品だとしたら売れない可能性があるってこと
競争相手がいたら使われなくなる商品

272:デフォルトの名無しさん (ドコグロ MM36-OTuW)
17/07/15 11:40:57.26 aW477mPhM.net
>>267
売れてるiPhoneのスレでも見てこいよ
売れない/使われないものをいちいち非難するほど人は暇じゃない

273:デフォルトの名無しさん (ササクッテロラ Sp72-+gV6)
17/07/15 11:48:46.46 CRqbHh/Cp.net
>>268
売れないなら批難は出ないと言う主張なら
批難轟々なら売れるって事だよな
じゃ売ってみればいいんじゃね?

274:デフォルトの名無しさん (ササクッテロラ Sp72-+gV6)
17/07/15 11:50:44.37 CRqbHh/Cp.net
>>268
それは代替品がある場合だ
その代替品に乗り換えれば済むから
社内とかの代替品がなければ嫌々でもそれを使うしかない

275:デフォルトの名無しさん (ドコグロ MM2e-OTuW)
17/07/15 12:33:52.46 hu77KrcYM.net
>>269-270
レスを分けて書く奴はもれなくバカの法則 w

276:デフォルトの名無しさん (ワッチョイ e66d-z+eH)
17/07/15 16:36:10.60 fdp++JjU0.net
>>271
それ面白いか?
別に面白くないけどなぁ

277:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/15 17:34:03.53 0urlci1o0.net
VBAのマクロって
・マクロ制作者本人の操作を補助する為のものであり、他人に使わせる事は想定されていない
・オフィス製品の操作を補助する為のものであり、アプリケーションの本来の振る舞いを超えた動作は想定されていない
・ユーザーフォームはマクロの操作を容易にする為のものであり、別のアプリケーションであるかの様に振る舞う事は想定されていない
なので想定されていないものを作ろうとしたら不便さを感じるのは当然
どんな言語もそうだけど、想定された使い方なら便利だし、そうでないなら不便だよ

278:デフォルトの名無しさん (ワッチョイ c491-BaGs)
17/07/15 17:40:17.3


279:4 ID:Id32lc0P0.net



280:デフォルトの名無しさん (ワッチョイ c491-BaGs)
17/07/15 17:47:17.89 Id32lc0P0.net
>>273
>他人に使わせる事は想定されていない
これは本当に思いますね
Accessなんかはフォームでの入出力が基本だし
各データの型も指定するから
出来ること出来ないことを設計者が細かく指定しやすいですが
Excelは書式や入力データを限定させようとすると
そのノウハウの習得のことも考えたら相当な時間がかかる気が…
以前「値のみの切り取り・コピーしかできない」ようにしようとして
えらい苦労しました

281:デフォルトの名無しさん (ワッチョイ 926f-MRQN)
17/07/15 20:37:21.43 VxLYhzBT0.net
所詮道具 しかし便利な道具 それをよりによってなんで使い辛くするのか 神経を疑うわ
改変、改ざん、変更がダメならそっちに注力すべきだろ
バックアップなりPDF出力なり変更者・変更ヶ所の記録なりなんなり
余計な仕事して会社の利益を浪費すんなよ

282:デフォルトの名無しさん (アウアウウー Sa08-6eVw)
17/07/15 20:57:08.80 4AnbxIb9a.net
Excel VBA一本で家族養って食っていけてる人いる?

283:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/15 21:01:14.05 +h55DWxyM.net
ねーよ

284:デフォルトの名無しさん (アウアウエー Sa66-PUpa)
17/07/15 21:06:42.25 DU1ghimfa.net
>>277
vbaしか扱わない仕事なんて無いよ
必ず何かのついで
vbaあると事務作業の確実性は上がるけどね

285:デフォルトの名無しさん (ワッチョイ 2623-KaH7)
17/07/16 05:14:50.82 QwczUPDI0.net
>>279
プログラマー志望でvbaの仕事しかやったことないんだが。

286:デフォルトの名無しさん (ワッチョイ d071-1CH6)
17/07/16 05:59:58.39 K064oJPl0.net
>>280
クルマで言えば「1車種しか運転できない」のと同じ
プログラマになろうなど論外

287:デフォルトの名無しさん (ワッチョイ 2623-KaH7)
17/07/16 06:33:45.85 QwczUPDI0.net
>>281
別の言語の方が得意なんですけどね。。
他言語のキャリアないから呼ばれない。

288:デフォルトの名無しさん (ドコグロ MM40-OTuW)
17/07/16 07:32:23.57 xeCnao79M.net
>>277
半年ぐらいならあるよ
社内システムの一部を担当しててVBAだけずっとやってた
もちろんそれに付随する仕様書とかマニュアル作りとかも含むけど

289:デフォルトの名無しさん (アウアウウー Sa08-6eVw)
17/07/16 16:35:01.30 u74giIrqa.net
自分は業界デビューがAccessVBAで、そのうちC/C++もやるようになった。
で、今PHPとかJavaとか知らなくて仕事減ってきてる。

290:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/16 16:40:12.30 /sDyct4MM.net
ならVB.NETを経由してjavaへ向かえばよい

291:デフォルトの名無しさん (ワッチョイ e66d-c7D+)
17/07/16 16:42:28.30 D4hbmADJ0.net
PHPは言語は楽ちんだけどネットワーク周りがキツイ
専サバならどうでもいいけどレンタルサーバーだと制限多くて何もできん

292:デフォルトの名無しさん (ワッチョイ ce11-PUpa)
17/07/16 17:31:35.42 TYIh6T1E0.net
>>280
vbaでシステム開発してんの?

293:デフォルトの名無しさん (バットンキン MM32-v2r+)
17/07/16 19:11:10.92 x6N2dGq3M.net
VBA4とかの時代はなぜかユーザー定義型のリファレンスをクラスモジュールに渡せなくて悩んだ覚えがあるけど最近は大丈夫なのねと

294:デフォルトの名無しさん (ドコグロ MM02-KaH7)
17/07/16 19:14:48.07 zK8m4MiwM.net
>>287
うん。
50万ぐらいのレコードを扱う、MySqlをバックエンドとしたC/S型のシステム作ったよ。
vbaは例外ハンドラが弱すぎて、自作スタックトレースみたいな仕組みを作ったりとか、バージョン管理大変だし、vbaでシステム開発は怖すぎてやりたくないっす。
初速はいいけど、規模が大きくなってくると生産性が著しく落ちるねー。

295:デフォルトの名無しさん (ワッチョイ ce11-PUpa)
17/07/16 21:17:30.80 TYIh6T1E0.net
>>289
クレイジーだな
VBAでやるの間違ってね

296:デフォルトの名無しさん (ワッチョイ aa11-OTuW)
17/07/16 21:52:55.66 ZbG5GhXO0.net
>>290
バックエンドがMySQLなら50万レコード程度は楽勝だろうしフロントエンドにExcel VBAはたいして珍しくないぞ

297:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 17:06:22.75 7pjXcMGRr.net
そもそも、VBA使いってエンジニアじゃないよね。
なので、エンジニア目線での会話はしないほうがいいよ。

298:デフォルトの名無しさん (オッペケ Srd7-OYLW)
17/07/17 18:01:49.57 eqSf35i7r.net
はぁ?

299:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 18:28:51.63 3BLwA/g5M.net
方言で喋るヤツは日本人じゃないよねみたいな言い回しは嫌い

300:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 19:25:12.99 7pjXcMGRr.net
エンジニア畑の出身ではないということ。
エンジニア畑を歩いてきた人はVBAなんかには染まらないよ。

301:デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
17/07/17 19:31:25.65 25jot5xr0.net
スネオみたいなやつだな。

302:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 19:34:15.32 3BLwA/g5M.net
じゃあ東京出身以外は日本人じゃないんだね
哀れな見識の狭さだな

303:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 19:41:09.32 7pjXcMGRr.net
東京出身で大阪に住んでる人は関西人じゃないし、大阪出身で東京に住んでる人は江戸っ子ではない。

304:デフォルトの名無しさん (ドコグロ MM40-OTuW)
17/07/17 20:03:54.32 8yOMdWeDM.net
他の言語をバリバリ使うエンジニアがVBA使うなんていくらでもあるだろ

305:デフォルトの名無しさん (アークセー Sx88-I8+U)
17/07/17 20:05:31.04 KYGC98nRx.net
ID:7pjXcMGRr
スゲー承認します

306:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 20:12:26.22 7pjXcMGRr.net
馬鹿の一つ覚えみたいに、なんでもかんでも変数に入れちゃうし、しかもいまだにハンガリアン記法だったりする。
エラー対策もバッチリですと言わんばかりにエラー処理が延々と続くコードを晒す。
ただでさえ冗長な言語なのに輪をかけて冗長なコードを書く。
誰もお前のコードなんかコピペしねーからコアな部分だけを簡潔にかけ、と言いたくなる。
VBAが書けるぐらいでエンジニアづらするな。

307:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 20:14:06.57 7pjXcMGRr.net
>>299
VBAメインという人はいないよね。

308:デフォルトの名無しさん (ワッチョイ e66d-z+eH)
17/07/17 20:19:25.98 ZwJXO/8Y0.net
vbaメインは事務職だろう

309:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 20:21:12.48 7pjXcMGRr.net
>>303
そうそう。エンジニアじゃないのよ。

310:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 20:22:42.87 3BLwA/g5M.net
>>302
あれ?
VBA使いはエンジニアじゃないんじゃなかったっけ

311:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 20:25:53.47 7pjXcMGRr.net
>>305
つまみ食いするエンジニアはいるでしょ。

312:デフォルトの名無しさん (ワッチョイ aa11-OTuW)
17/07/17 20:34:45.10 U2FIHXXv0.net
>>302
VBAメイン縛りなの?

313:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 20:37:52.24 3BLwA/g5M.net
お前の中ではVBAからプログラムに入り今は別言語メインってやつは存在しないんだね

314:デフォルトの名無しさん (ワッチョイ ef11-+gV6)
17/07/17 20:54:22.06 ZHV5JA270.net
エンジニアかどうかってプログラム言語に依存する概念だっけ?
実現手段なんかコロコロ変わるのに

315:デフォルトの名無しさん (ワッチョイ e66d-rON2)
17/07/17 20:56:09.78 ZwJXO/8Y0.net
vbaからhtml・phpに行ってなんか社内SEみたいなことやってるわ
割りと楽

316:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 21:13:30.47 7pjXcMGRr.net
>>307
うん、縛り。

>>308
多くのエンジニアの中で揉まれた経験があるかどうか、だよね。

>>310
ありがちだよね。「みたいなこと」止まり。
いわゆる「エンジニアもどき」ってやつw

317:デフォルトの名無しさん (ワッチョイ 12aa-z+eH)
17/07/17 21:14:47.84 K9hU24AK0.net
エンジニアは2ちゃんねるに来ないだろう

318:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 21:32:12.23 3BLwA/g5M.net
>>311
揉まれた経験からだと言う割にメイン言語で縛ってたりVBA出身は違うとか言ったり
主張は明確に頼む

319:デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
17/07/17 21:38:42.01 xDa7p7Qa0.net
ExcelVBAの挙動が謎すぎて困る
IF xx IS NOT NULL AND xx.value = 100
みたいので例外出たときは目を疑った
nullのときも両辺評価するって決まってるならまだしも
普段は何事もなく動いてるのに
急に気まぐれに両方評価するのやめーや…

320:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 21:39:52.50 7pjXcMGRr.net
>>313
君こそ何が言いたいのかよくわからないけど、
まぁ、コードは簡潔に、ということ。

321:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 21:45:47.60 3BLwA/g5M.net
>>315
俺の言いたいことは「方言で喋るヤツは日本人じゃないよねみたいな言い回しは嫌い」ってだけ
コードは簡潔にって所は同意見だな

322:デフォルトの名無しさん (ワッチョイ e66d-qA4N)
17/07/17 21:50:52.95 ZwJXO/8Y0.net
>>314
今更だろう
longな数値同士を文字列結合できるぐらいなんだし、何が起こっても驚かん
Sub foo()
Dim a As Long
Dim b As Long
a = 1
b = 2
Debug.Print a & "|" & b
End Sub

323:デフォルトの名無しさん (ワッチョイ e66d-SAgI)
17/07/17 21:51:23.92 ZwJXO/8Y0.net
ってかvbaって実は内部的に全部variantで処理してない?と思うことがたまによくある

324:デフォルトの名無しさん (ワッチョイ aa11-OTuW)
17/07/17 22:01:54.76 U2FIHXXv0.net
>>314
短絡評価が保証されてない言語で
> IF xx IS NOT NULL AND xx.value = 100
なんて書く奴の方が謎
NothingじゃなくてNULLなのも謎
あとNULLならIsNull( )じゃないのも謎

325:デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
17/07/17 22:05:39.05 xDa7p7Qa0.net
知らんがな!そんな詳しくない
環境制限されて使わざるをえずに使って
ちょっとカルチャーショック受けただけ

326:デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
17/07/17 22:09:42.75 xDa7p7Qa0.net
まえ2chでEXCELVBAが挙動アバウトだから使いたくないって言ったら
お前の頭がアバウトなだけでVBAはアバウトじゃないって返された
ほんとにアバウトやん

327:デフォルトの名無しさん (ワッチョイ 9e06-1CH6)
17/07/17 22:11:29.92 5wPRLPZU0.net
いつもながらの仲間内のどうでもいい戯言が続いているだけなんで、質問者の方は気になさらずにどうぞ~

328:デフォルトの名無しさん (ワッチョイ 12aa-z+eH)
17/07/17 22:13:55.47 K9hU24AK0.net
>>314
>「nullのときも」
Nullかどうか関係なく AND 演算子がつねに両辺評価だってだけよ

329:デフォルトの名無しさん (ワッチョイ 12aa-z+eH)
17/07/17 22:16:50.48 K9hU24AK0.net
>>320
ところでちょっと興味あるんだけど「環境制限」て何がNGなの?

330:デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
17/07/17 22:18:26.02 xDa7p7Qa0.net
うんそれならまだわかる、たぶんそんな気がしてきた
Nullのとき正常終了してるケースがあるように見えたんだ
たぶん見間違いだ

331:デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
17/07/17 22:19:24.38 xDa7p7Qa0.net
>>324
アドイン

332:デフォルトの名無しさん (ワッチョイ 968f-z+eH)
17/07/17 22:46:19.63 1pUgrDrQ0.net
>>326
だっふんだ

333:デフォルトの名無しさん (アウアウエー Sa66-PUpa)
17/07/17 23:33:07.69 2vYuRvlWa.net
まあ、VBAが言語としてクソなのは認めざるを得ないよな
最近javascriptつまみ食いしてるけど、これはこれで魔境とは言え進化してるしさ、常に

334:デフォルトの名無しさん (ブーイモ MMed-6ouG)
17/07/17 23:33:44.68 PT2PKaQfM.net
>>319
短絡評価が保証されてないというか無いものだと思ってたけど、短絡評価される状況ってあるの?
あるなら活用したいもんだけど。

335:デフォルトの名無しさん (スッップ Sd70-QKFr)
17/07/18 00:17:38.11 kpygt+jXd.net
nullの話出たから聞きたいんだけどnullとかnothingの判定を完結にやるいい方法ってないの?
やりたいのはnull,vbnull,nothing,emptyなどなど値が入ってない状態を検知したい
全部if elseifでやるのは汚すぎるからあまりやりたくない

336:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/18 00:18:33.82 sD2l3tVa0.net
>>330
全部調べる関数を作ればいいのでは?

337:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/18 00:19:09.03 zLdSm0oAM.net
判定メソッド作って呼ぶ

338:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/18 00:40:40.16 j/Xwl1qG0.net
If文を可能な限り避けるとなると
Function foo(hoge) As Boolean
Select Case VarType(hoge)
Case 0,1
...
Case 9
If hoge Is Nothing Then
End Select
End Function
みたいな書き方かな

339:デフォルトの名無しさん (アークセー Sxc1-y19a)
17/07/18 00:43:00.33 8EqWFNQax.net
データの値の状態を判定するならif elseif よりも
Select Case Expressionの方が無駄なく綺麗に書ける

340:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/18 06:17:21.84 StSxL3ktr.net
>>333
ていうか、このコードは何を返すの?

341:デフォルトの名無しさん (ドコグロ MMa8-OTuW)
17/07/18 06:18:50.83 qfl2YypxM.net
>>329
保証されてない ≒ 動作する場合があるかも知れないけど面倒だしどうでもいいから調べてない

342:デフォルトの名無しさん (ドコグロ MMa8-OTuW)
17/07/18 06:20:35.94 qfl2YypxM.net
>>335
「値が入ってない状態」かどうかだろ

343:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/18 06:30:18.74 StSxL3ktr.net
>>337
なるほど。
null判定は自分で関数作っちゃうのが早いよってことね。

344:デフォルトの名無しさん (アークセー Sx72-y19a)
17/07/18 07:14:01.44 9/pR+lH4x.net
>>333
コンパイルエラー出るコードでワロタ

345:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/18 07:42:58.67 StSxL3ktr.net
こんな感じかな。
Function IsNone(hoge) as Boolean
  Select case True
    Case IsNull(hoge)
      IsNone = True
    Case IsEmpty(hoge)
      IsNone = True     
    Case hoge is Nothing
      IsNone = True
    Case hoge = ""
      IsNone = True
    Case hoge = vbnullstring
      IsNone = True
    Case Else
      IsNone = False
  End Select
End Function


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch