◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

Excel VBA 質問スレ Part49©2ch.net YouTube動画>12本 ->画像>8枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1498410914/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ bb2e-8SzA)
2017/06/26(月) 02:15:14.60ID:T3ylemnb0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part48
http://mevius.2ch.net/test/read.cgi/tech/1494890685/

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2デフォルトの名無しさん (アウアウエー Sadf-hzVx)
2017/06/26(月) 05:44:32.43ID:SxRL95TLa
うんこ
3デフォルトの名無しさん (ワッチョイ bf6d-ZLad)
2017/06/26(月) 06:30:06.46ID:K3TbTzv30
>>1


>>前1000
御目
4デフォルトの名無しさん (アウアウエー Sadf-AGoN)
2017/06/26(月) 13:46:58.30ID:2dV2LE9Ka
おちるな!
5デフォルトの名無しさん (スッップ Sdbf-iOY8)
2017/06/26(月) 17:31:56.55ID:mUlZZrNcd
埋め
6デフォルトの名無しさん (スッップ Sdbf-iOY8)
2017/06/26(月) 19:50:29.41ID:mUlZZrNcd
Everything breaks.
7デフォルトの名無しさん (ワッチョイ d76d-ZLad)
2017/06/26(月) 22:30:10.16ID:9LdZXFFA0
地獄の社内SE
https://anond.hatelabo.jp/20170626005657

> 社内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)
2017/06/26(月) 22:46:39.40ID:sK3t30Mo0
>>7
ちょっとそうぞうしただけですっげーーーーーーーーーーーーーーーゲンナリした
うぇっっ
9デフォルトの名無しさん (ワッチョイ 9f6f-LvKX)
2017/06/26(月) 22:56:04.38ID:TlqSsAWd0
地獄とか書いてるけど、
全然地獄じゃないんだろうな。

強敵と戦う悟空みたいな感じで。
10デフォルトの名無しさん (ワッチョイ 970d-q+YL)
2017/06/26(月) 23:06:06.76ID:Wf2yMC4X0
VBAが仕事っていいじゃねーか
業務の合間にマクロ作ってるけエクセルが得意な人扱いしかされない
カラオケが上手いとか酒が強いとかと同じ扱いだよ俺もVBAだけやってたいな
11デフォルトの名無しさん (ワッチョイ 9faa-ZLad)
2017/06/26(月) 23:18:33.41ID:NfcBoQUW0
何か公開するとか解説記事を続けて書くとかしないと残るものがないよな
12デフォルトの名無しさん (ワッチョイ 9711-AGoN)
2017/06/27(火) 00:31:50.14ID:Ou4JxjyB0
>>7
ヤバすぎでしょ
13デフォルトの名無しさん (ワッチョイ bf23-+Ny0)
2017/06/27(火) 01:25:43.69ID:mSdvPxdC0
>>9
おれ、ああいうののメンテナンスする仕事したこと有るけど地獄だよ。
14デフォルトの名無しさん (ワッチョイ d723-vKbm)
2017/06/27(火) 05:39:28.87ID:RyWS1Zia0
そこまでわかってるなら直すだけじゃん
15デフォルトの名無しさん (ワッチョイ 178f-ZLad)
2017/06/27(火) 12:11:28.10ID:VIhV6lAx0
inputとoutputがわかってんなら作り直したほうが…
16デフォルトの名無しさん (アウアウエー Sadf-AGoN)
2017/06/27(火) 13:08:41.86ID:NeDeRylha
どう考えてもイチから作り直すべきだが、それを現場がどう理解してるかだわ
セルに値が入ってないと管理できない!とかありそう
17デフォルトの名無しさん (ワッチョイ 9711-H8Dq)
2017/06/27(火) 20:49:18.00ID:s+Xomzrw0
質問失礼します。
ある一つのセルに、氏名コメント改行文字が5人分入っていて、選択するとformにテキストボックスが5人分用意されている所に、それぞれの氏名に合わせて入る様になっています。

やりたい事は、formのテキストボックスに作業者が入力したのの更新履歴を付けたいのです。
作業者は自分の氏名のテキストボックスに入力することになっています。

コマンドボタンをクリックしたタイミングで、どのテキストボックスが最後に変更されたのか取得できる方法が有りましたら教えてください。
18デフォルトの名無しさん (ワッチョイ 9f11-NIhq)
2017/06/28(水) 01:46:45.72ID:YSCBV96g0
>>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)
2017/06/28(水) 01:49:22.55ID:YSCBV96g0
>>17
追伸
「vba フォーム イベント」でググると色々とできることの幅が広がると思う。
20デフォルトの名無しさん (ワッチョイ 37e4-nLBY)
2017/06/28(水) 03:46:14.99ID:2pXrvXuM0
しばらく前に騒ぎになったランサムウェアってVBAマクロなのか
マクロウイルスって今でもあるんだな
21デフォルトの名無しさん (ワッチョイ 9711-H8Dq)
2017/06/28(水) 06:18:19.57ID:tYXWZB4k0
>>19
ご回答ありがとうございます。
今回の件はAfterUpdateで対応出来ました。
今後の為にお聞きしたいのですが、例えばテキストボックスが100個とかあった場合、VBのコントロール配列の様に一つのプロシージャで100個のテキストボックスのAfterUpdateに対応することは出来ませんか?

よろしくお願いします。
22デフォルトの名無しさん (ブーイモ MMcf-xRMs)
2017/06/28(水) 12:49:44.66ID:zWYciN7lM
>>21
「vba フォーム イベント withevents」とかでググれば、クラスモジュールを使ってイベント付きコントロールを配列またはコレクション化する方法が出てくる。

フォームの履歴管理には、クラス変数にフォームへの参照と、配列のインデックスまたはコレクションのキーなんかを渡して処理すればたぶんOK。
23デフォルトの名無しさん (ワッチョイ 9711-H8Dq)
2017/06/28(水) 22:25:33.70ID:tYXWZB4k0
>>22
ありがとうございます。
witheventsを使用してテキストボックスのチェンジイベントをひとまとめに出来ました。
afterupdateをまとめれるともっと良かったのですが、それは無理そうなのでこれで満足です。
本当にありがとうございます!
24デフォルトの名無しさん (ワッチョイ f7e4-d3en)
2017/06/28(水) 23:11:40.00ID:E86Fbm8W0
100という10進数をDo loop を使って2進数に変換させるにはどのようにすればよいのでしょうか?
イメージとしては、100を2ずつ割っていってそこで出たそれぞれの余りの数をセルA1に表示させたいです。
よろしくお願い致します。
25デフォルトの名無しさん (ワキゲー MMdf-Jbg4)
2017/06/28(水) 23:24:22.72ID:DPzzKFKPM
>>24
それでいいと思います
26デフォルトの名無しさん (スプッッ Sd62-qZPv)
2017/06/29(木) 00:00:46.01ID:xnkaqZb4d
>>25
それが出来ないです…
27デフォルトの名無しさん (ワッチョイ 4211-nP2k)
2017/06/29(木) 00:02:23.49ID:+TVRrlUj0
>>24
Do~Loop縛りなの?
worksheetfunction,dex2binを使えば楽ちんだけど。
28デフォルトの名無しさん (ワッチョイ 4211-nP2k)
2017/06/29(木) 00:03:15.79ID:+TVRrlUj0
間違えた。DEC2BINでした。
29デフォルトの名無しさん (ワッチョイ c98f-wjSU)
2017/06/29(木) 02:18:27.81ID:m+1z5FeZ0
セルA1を毎回上書きしてるとか

まぁこの手の奴はぐぐれば腐るほどでてくるけどな
30デフォルトの名無しさん (ワッチョイ c206-nP2k)
2017/06/29(木) 10:46:30.06ID:eyQ8k34N0
セルA1を瞬時に上書きしていって、それで何をしたいんだか?
最終的な目標は何なのかワカンネ w
31デフォルトの名無しさん (ワキゲー MM8a-I/sj)
2017/06/29(木) 12:17:53.07ID:JWTkSooHM
1100100を出力したいんだろ
32デフォルトの名無しさん (ワキゲー MM8a-I/sj)
2017/06/29(木) 12:28:02.00ID:JWTkSooHM
曖昧だけど設計まであるのにできてないのなら今どんなコードを書いてるのか提示して質問してほしいなぁ

いっそのこと「この仕様を満たすコードをください!」と言ってくれてもいいけど
33デフォルトの名無しさん (JP 0H92-9Mth)
2017/06/29(木) 16:10:07.03ID:YLVns9yBH
はい、作ったよ
仕様満たしてるかどうかはあんたたちで
みっちり見てね
バグ見つけたら教えてね


で仕様齟齬をあぶり出してもらわないと
仕様を具体的に言わないクライアント(身内だけど)とは付き合えない
34デフォルトの名無しさん (JP 0H16-CicO)
2017/06/29(木) 16:13:40.02ID:ye6KcLeHH
>>33
作る前に要件定義すればいいのに
35デフォルトの名無しさん (JP 0H92-9Mth)
2017/06/29(木) 17:05:28.77ID:YLVns9yBH
>>34
作ったモノ触らないと気がすまない連中なんだよ
もちろん作る前に要求仕様は聞くけど
後からチマチマと何か言ってくる
36デフォルトの名無しさん (JP 0H16-CicO)
2017/06/29(木) 17:16:17.14ID:ye6KcLeHH
>>35
面倒でも文書化して読んでもらうのがいいよ
読んで始めて、自分が何を欲しているか気づく場合もあるし
後は、プロトタイプかな

全部できて「これ、全然違うし」とか言われるリスクあるなら、そういうことやってみたらいいと思う
37デフォルトの名無しさん (ドコグロ MMe1-zH8r)
2017/06/29(木) 19:36:46.27ID:tZRd6cgNM
>>36
そう言う連中は要件定義書なんて読まんよ
38デフォルトの名無しさん (ワッチョイ c206-nP2k)
2017/06/29(木) 20:02:23.80ID:eyQ8k34N0
このスレの人間って質問者置いてけぼりであーだこーだ言うのが多いけど、一番ムカつくのは、
肝心の質問者が自分のやりたい事はこういうことだって言わないこと。

少しは自分の質問に責任くらい持ちやがれ
39デフォルトの名無しさん (ワッチョイ c66f-WwN4)
2017/06/29(木) 20:20:17.81ID:XN0IVm4b0
こういった輩が多いから双方の軋轢が絶えないんだろな
先方はまったくの門外漢だ て前提で仕事を引き受けられない
相手も自分と同レベルだと信じて疑わない もしくは少し下ぐらい

初めて住宅を新築する顧客が、いきなり詳細設計図渡されて理解できるか?
ソッチで仕様書と図面引いてください って言ってるのと同様だぞ?
引き受けるからにはその仕事を請け負う責任も勿論だが
これから実施する作業の概要・概略を相手に理解してもらうテクニックだって
必要だろ  それを持ち合わせないならサンプル品なり試作品なり作ってでも
相手と同じレベルで進捗を図るのが普通じゃ無いのか?

こっちはざっくり動きや結果を見越せるけれど、相手にもそれを要求するのは
傲慢でしかないんだが
いわんや、相手の業種・業態に依ってはコチラ側が思いもしないような入力・
操作が要求されるケースだってままある

仕様も要件も書き出せますよ なんてぇ企業相手ならおまえら不要だろ
社内で事足りるわ
も少し謙虚に成れんのか 会議だ仕様だ要件だなんてぇことに無駄な時間を
費やすぐらいなら、とっとと試作して「こうですか?」で何歩も進むだろ

いやすまん なんでもない
40デフォルトの名無しさん (ワッチョイ c206-nP2k)
2017/06/29(木) 21:03:34.33ID:eyQ8k34N0
ここの人間は質問者から金貰ってるわけでもなんでもねーわ
41デフォルトの名無しさん (ワキゲー MM8a-I/sj)
2017/06/29(木) 21:07:43.56ID:JWTkSooHM
>>39
言いたいことはわかる
だが発言のベースが「やったけどダメだった!答えを教えろ!ダメだったモノは見せない!」じゃあんまりだと思う
42デフォルトの名無しさん (オイコラミネオ MMd6-BlaP)
2017/06/29(木) 21:21:50.99ID:pDUcXkTQM
コミュ障同志でケンカすんな
43デフォルトの名無しさん (ワッチョイ 6d2e-mQuD)
2017/06/29(木) 22:02:03.85ID:irMBslcI0
最近、趣味で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/)
2017/06/29(木) 22:23:02.61ID:InemyE5a0
>>43
splitしたのがうまく行ってないと思う
ステップイン で実行しながら
ウォッチ式 を見ると変数の中身が分かり安いよ

そのテキストを上げてもらえればこっちでも確認する
45デフォルトの名無しさん (ワッチョイ 4211-nP2k)
2017/06/29(木) 22:33:09.86ID:+TVRrlUj0
>>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)
2017/06/29(木) 22:47:04.00ID:CQo0iGok0
>>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次元配列じゃなくて配列の配列になるけど、むしろこっちの方があとで楽だと思う。
4743 (ワッチョイ 6d2e-mQuD)
2017/06/29(木) 23:32:28.05ID:irMBslcI0
>>44-46
早々に回答ください、どうもありがとうございます。

いろいろ回答を頂いておきながら、大変申し訳ないのですが、
38行目のデータをよく見たところ、TAB区切りではなく、ここだけスペースが入っていました
(他は、各行に2個の要素があったのですが、ここだけ要素が1個でした)
そして、これを修正したら、エラーなく実行できました。
お手数をおかけし、申し訳ありませんでした。

おっしゃる通り、j のループは不要ですね。(いろいろ修正していて、j を使わなくなったようです)

> だとTextDataの最終行のデータが配列に格納されないけど問題ないか?
いえ、ちゃんと最終行まで格納出来てました
(UBound()は要素数を表しているように思います)

>  ReDim sqrDim(LBound(tmpDim), UBound(tmpDim))
ReDim は使ったことがないので、また調べてみます

以上、ありがとうございました。
4843 (ワッチョイ 6d2e-mQuD)
2017/06/29(木) 23:41:18.00ID:irMBslcI0
>>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)
2017/06/30(金) 00:06:21.55ID:pQmgso2J0
>>47
> (UBound()は要素数を表しているように思います)

一応言っておくと、これは間違い。
UBound(tmpDim) は配列tmpDimのインデックスの最大値を返す。
TextDataが500行(vbLfが499個)だとしたら、tmpDimのインデックスは(0 to 499)になるから、UBound(tmpDim) は499を返す。
このコードのsqrDim(500)が全部埋まってるのであれば、TextDataは501行あるはず。
まあ結果がOKならいいんだけどね。
50デフォルトの名無しさん (ワッチョイ 4211-nP2k)
2017/06/30(金) 00:09:11.22ID:pQmgso2J0
失礼、>>49に間違い。
sqrDim(500) だとsqrDimの要素数は501だから、全部埋まってるの場合のTextDataの行数は502行になるはず。
5143 (ワッチョイ 6d2e-mQuD)
2017/06/30(金) 00:48:26.80ID:K3G7Sb4z0
>>49-50
> 一応言っておくと、これは間違い。
> UBound(tmpDim) は配列tmpDimのインデックスの最大値を返す。
申し訳ないです。
おっしゃる通り、ググってみるとそのように書いてました。
なお、TextDataは実際には400行前後のため、偶然上手く動いているように見えてたのですね
(実際は、400~499までループが回っており、タチの悪いバグになるところでした、感謝です)

前にC言語を少しやっていたので、同じ扱いだと思っていましたが違ってたんですね
わざわざありがとうございます。
52デフォルトの名無しさん (ワッチョイ 42aa-wjSU)
2017/06/30(金) 00:56:40.46ID:6tFD7y9X0
>>51
そう
[LBound, UBound) じゃなくて [LBound, UBound] で回さなきゃダメ
53デフォルトの名無しさん (JP 0H92-9Mth)
2017/06/30(金) 10:48:30.68ID:cwrb3MSvH
ここの強者はExcelVBAエキスパートの資格持ってるの?
簡単そうだから取ろうかなと思ってる
54デフォルトの名無しさん (JP 0H16-CicO)
2017/06/30(金) 10:58:10.76ID:vRopsyNtH
>>53
取ればいいんじゃないの?
55デフォルトの名無しさん (ワッチョイ 5d73-BlaP)
2017/06/30(金) 11:59:14.93ID:p88B6ZFT0
そんなもんMOS以下の価値しかないと思うが…
56デフォルトの名無しさん (ワッチョイ 6d3d-nP2k)
2017/06/30(金) 17:12:37.88ID:cZqMSATW0
コンピュータ関連も色んな資格あるけど、ああいう資格を基準にして採用している所ってどれだけあるんだろ。
57デフォルトの名無しさん (ワッチョイ 066d-wjSU)
2017/06/30(金) 20:10:03.92ID:UW7c2V+i0
基準にはしないかな
あーできるんですねって程度。どちらにしても実地試験は受けてもらう
58デフォルトの名無しさん (ワッチョイ c26f-CicO)
2017/06/30(金) 23:09:21.97ID:+ePBm/Xa0
俺、プログラムは作れるけど、試験は落ちそうだな。

DimとかRowとか、短い文字は打てるんだけど、
長いのは、普段コピペしてるから、打てない。

最近、やっとColumnsを間違えずに打てるようになったわ。

それまでは、Corums? ん? Colmns? え? Culomus? 違う?
Colums? わかんね。 もう諦めてコピペしよう、みたいな感じ。
59デフォルトの名無しさん (ワッチョイ 066d-dnIi)
2017/06/30(金) 23:13:28.48ID:UW7c2V+i0
プログラムの実技試験で暗記力が必要なのはそろそろどうかとは思う
60デフォルトの名無しさん (ワッチョイ 2e8f-wjSU)
2017/07/01(土) 00:25:54.92ID:ozDMgMeF0
10年選手だけど
フィボナッチとかハノイの塔とかソラで出できないぞ俺
61デフォルトの名無しさん (ワッチョイ 066d-B6M/)
2017/07/01(土) 00:29:13.54ID:QYfDEdV/0
それは数学の知識の問題だと思うので、別にできなくてもいいと思う。多分一生役に立たない
でも最小二乗法とか漸近線、偏差値など、統計学的な知識はあったほうが良いと思う
62デフォルトの名無しさん (ワッチョイ 4623-hx6n)
2017/07/01(土) 04:46:24.33ID:PtoY4rVn0
>>53
昔、某掲示板で質問した人に話の内容から初心者として扱ったらその資格持ってるとのことでびっくりしたことがある。

どんな資格でもそうだけど、そういうもんなんでしょう。
そうしないと受かる奴いなくなっちゃう。
63デフォルトの名無しさん (ワッチョイ 4623-hx6n)
2017/07/01(土) 04:52:54.03ID:PtoY4rVn0
>>60
そんな問題が実際の案件に出てきた時に最適なコードが書ければ良いでしょ。
それにその程度の話ってググレば出てくるでしょ。

そんなのは何かあったよなと思うことが出来てググレればOK。
それよりも上手いやり方に気付かずにクソコード書く奴は多い。
64デフォルトの名無しさん (オッペケ Sr71-UM0m)
2017/07/01(土) 08:01:59.81ID:JGSuKZu6r
>>63
自分のクソは棚上げかクソw
65デフォルトの名無しさん (ワッチョイ c123-BlaP)
2017/07/01(土) 08:05:36.28ID:3teBbQmJ0
>>64
お前は試験も仕事も両方苦手みたいだな
66デフォルトの名無しさん (ワッチョイ 4211-zH8r)
2017/07/01(土) 08:23:17.10ID:qXTa/p8N0
>>57
実地試験ってどんなことやるの?
67デフォルトの名無しさん (ワッチョイ 066d-wjSU)
2017/07/01(土) 08:38:38.91ID:QYfDEdV/0
>>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)
2017/07/01(土) 08:58:05.68ID:qXTa/p8N0
>>67
関数?
VBA の試験なのに?
69デフォルトの名無しさん (ワッチョイ 066d-wjSU)
2017/07/01(土) 08:59:25.55ID:QYfDEdV/0
>>68
あぁすまん、ここvbaスレか。Excelスレと思ってた。忘れてくれ
70デフォルトの名無しさん (ワッチョイ b169-nP2k)
2017/07/01(土) 10:42:47.44ID:r7UjQGgF0
エクセルのある部分をリストボックスにしたいのですが、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
71デフォルトの名無しさん (ワッチョイ c26f-CicO)
2017/07/01(土) 11:20:29.10ID:PX/A+v/i0
VBAの試験って、やっぱ何らかの制限付きなんだろうか。
制限しないと、ソートにSQLとか、Worksheetfunctionとか、
Cells(1,1).Value="計算式"とか、正解だけど、試験の趣旨としてどうなの?
という答えが沢山出来てしまう。
72デフォルトの名無しさん (ワッチョイ 4211-nP2k)
2017/07/01(土) 11:27:20.68ID:+dYABl5A0
>>70
・RowPNの中身が全て""またはEmptyになっていないか。
 Dubug.Printまたはローカルウィンドウでの確認を推奨する。
・リストボックスと言っているが変数はUF6ComboBox1で合っているか。
・RowPNの要素が(0 To 166)ないし(1 To 167)だとDoループがi=168までカウントするのでインデックスエラーになる。
 For文の方が無難そうに思えるのと、ここでOn Error Resume Nextはどうかと感じる。
73デフォルトの名無しさん (ワッチョイ 0623-wjSU)
2017/07/01(土) 11:30:18.64ID:5ubPuGy00
>>70
セルから値をとってるならこれでいいと思われ

Dim i As Long

For i = 1 To 168

 If Cells(i, 1) <> "" Then

  ComboBox1.AddItem Cells(i, 1)

 End If

Next
74デフォルトの名無しさん (ワッチョイ 4211-nP2k)
2017/07/01(土) 11:30:59.20ID:+dYABl5A0
>>72 3行目間違い。。
? Dubug.Print ○ Debug.Print
75デフォルトの名無しさん (ワッチョイ 4211-nP2k)
2017/07/01(土) 11:45:10.97ID:+dYABl5A0
>>71
ググればすぐわかる。
なんか1日対策勉強したら余裕そう。
76デフォルトの名無しさん (ワッチョイ b169-nP2k)
2017/07/01(土) 11:48:18.71ID:r7UjQGgF0
>>72 >>73 ありがとうございます。 値は入ってるのは確認しました。FOR文も空白ですね・・・。
シート使っているので、そこに1エリア儲けて、空白除いて再整列させて、ROWSOURCEで設定してみます。
77デフォルトの名無しさん (ワッチョイ c26f-CicO)
2017/07/01(土) 12:12:06.78ID:PX/A+v/i0
>>75
いきなりサンプル問題で躓いたwwwwwwww
セルの範囲指定で「"A1:B1"」以外に「"A1","B1"」も使えるとか知らんわwwwww
78デフォルトの名無しさん (ワッチョイ 0623-wjSU)
2017/07/01(土) 12:14:29.98ID:5ubPuGy00
>>76
その方法で納得ならいいですが

配列に入っているなら
On Error Resume Nextで
コントロールを参照できないのでエラーしているのを
すっ飛ばしているのではなかろうか。
つまり>>72が言っているようにUF6ComboBox1は存在しないのでは。
On Error~をコメントアウトしてみてはどうか。

と思う。
79デフォルトの名無しさん (ワッチョイ b169-nP2k)
2017/07/01(土) 12:28:18.39ID:r7UjQGgF0
>>78 オブジェクト名は間違うと動かなくなるので、いつもコピペしてるんですよ。
とりあえずシート使って逃げて、rowsourceでうまいこと動きました。
80デフォルトの名無しさん (ササクッテロラ Sp71-THY3)
2017/07/01(土) 14:17:52.99ID:zDfIbROqp
>>61
数学の知識というより再帰関数とかのプログラム技術の問題
81デフォルトの名無しさん (ワッチョイ c179-9Mth)
2017/07/01(土) 23:37:04.61ID:AhlbWWig0
こんばんわ、
シティーボーイズやってました、再帰しげるです
82デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
2017/07/02(日) 02:18:34.32ID:mbMXyeDF0
こんばんわ、
膣に挿入したら動きません、きたろうです
83デフォルトの名無しさん (ワッチョイ b169-nP2k)
2017/07/02(日) 05:10:18.40ID:7bfaC3yX0
突然 なんだ!
84デフォルトの名無しさん (アウアウウー Sa25-k1q/)
2017/07/03(月) 17:11:55.95ID:3aAVlqxCa
以下のプログラムで「該当するセルが見つかりません」となってしまいます。
該当するセル範囲のセルはすべて空白です。
期待する動作は、「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です。
8584 (アウアウウー Sa25-k1q/)
2017/07/03(月) 17:42:48.19ID:3aAVlqxCa
Excelのバグのような気がしてきました。
86デフォルトの名無しさん (ブーイモ MMed-tH5o)
2017/07/03(月) 18:37:30.90ID:C0KljlGTM
>>84
2007だけど、ActiveSheet.UsedRangeの範囲外のセルだとエラーになるっぽい。
87デフォルトの名無しさん (ワッチョイ c206-nP2k)
2017/07/03(月) 20:07:31.53ID:Gbz1GVYR0
ここの板で質問するレベルでExcelになすりつけるのは100000年ほど早い
まぁそう言いたくなるときもあるんだがw
88デフォルトの名無しさん (ワッチョイ c123-BlaP)
2017/07/03(月) 20:26:22.35ID:NJa6/A120
それ範囲指定できるんだっけ?
89デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
2017/07/03(月) 20:33:45.35ID:S8hpBEzs0
例えば、
そのセルの値が0より大きければセルA1をコピーし、そのセルに書式を貼り付け、
そのセルの値が0より小さければセルA2のコピーし、そのセルに書式を貼り付ける。

この程度の処理を数百のセルに行うのに結構な時間がかかる。
短時間で完了させるにはどうしたらいいんでしょうか?
ある程度のセル範囲ごとにまとめて書式貼り付けすればいいんでしょうか?
90デフォルトの名無しさん (ワキゲー MM8a-I/sj)
2017/07/03(月) 20:38:08.97ID:MkRtof65M
>>89
正確な日本語でよろしく
91デフォルトの名無しさん (ワッチョイ 65c1-ZBdv)
2017/07/03(月) 20:39:25.48ID:u6VhpuAl0
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 と全く別の数字になってしまいます
この理由がどうしてなのかを教えてください
92デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
2017/07/03(月) 20:39:42.65ID:c364q6zP0
>>89
性格悪い日本語でよろしく
93デフォルトの名無しさん (ワキゲー MM8a-I/sj)
2017/07/03(月) 20:45:47.19ID:MkRtof65M
>>91
まずはおめでとう!

質問についての回答は単純に逆転してるだけだよ
1100100となるところが0010011となってしまいそのまま表示させたら頭の0が消えたって感じ
94デフォルトの名無しさん (ワキゲー MM8a-I/sj)
2017/07/03(月) 20:54:20.38ID:MkRtof65M
>>89
あー読み取れた
VBA使うまでもなく条件付書式使えば終わり
95デフォルトの名無しさん (ワッチョイ 4211-nP2k)
2017/07/03(月) 21:15:28.35ID:TQ7WGTgT0
>>89
多分これでOK

Application.ScreenUpdating = False
処理
Application.ScreenUpdating = True
96デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
2017/07/03(月) 21:15:43.91ID:S8hpBEzs0
>>89です
>>90>>92>>94
わかりにくかったですか、すいません。かなり酔ってます。

一日200行ぐらい増えるブックがあります。列数は50ぐらいです。
一ヶ月で6000行ぐらいでしょうか。あらかじめ条件付き書式を設定していましたが、
なんかブックを開くときに重くて、きっと条件付き書式が原因だろうと思い、
条件付き書式ではなく、VBAで各セルの値に応じて書式を固定しようと思ったわけです
でも、そのVBAが時間がかかって困ってるわけです。
書式のコピペって時間かかるんですね。
もっと書式のコピペを早くできる方法はないのかなって思ったわけですわ。
97デフォルトの名無しさん (ワッチョイ 1911-Znx3)
2017/07/03(月) 21:28:10.61ID:3g7k10jb0
>>96
書式コピペするんじゃなくて、直接指定したらまだ速くなると思うよ
クリップボードを介する処理はとても時間がかかる
98デフォルトの名無しさん (ワキゲー MM8a-I/sj)
2017/07/03(月) 21:40:24.58ID:MkRtof65M
>>96
こんな単純な条件ひとつだけで重くなるわけがない
問題は別にあるよ
99デフォルトの名無しさん (ワッチョイ 066d-5V5Y)
2017/07/03(月) 21:49:40.34ID:wrAlhZZL0
>>96
条件付き書式が断片化してない?断片化ってのは勝手に作った言葉だけど・・・
例えば、A:Aに条件付き書式(=a1=1)を設定して、10行目を切り取って11行目に挿入したりすると
条件=A1=1
=$A$1:$A$10,$A$12:$A$1048576

条件=A11=1
=$A$11

のように分割される
一度条件付き書式の書式ルールの管理、「このワークシート」を見てみたほうがいいかも
100デフォルトの名無しさん (ブーイモ MMed-DhWx)
2017/07/03(月) 21:55:55.71ID:We00lT8WM
そのセルにちゃんとワークシート名付けてる?
101デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
2017/07/03(月) 22:20:14.51ID:S8hpBEzs0
>>97
明日試してみます。
>>98
そうですか。試行錯誤してみます・・・
>>99
レスの内容が難しいです。えっと、ちょっと考えさせてください。
>>100
つけてるはずです。
102デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
2017/07/03(月) 22:23:39.09ID:S8hpBEzs0
今のコードはこんな感じです。

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
103デフォルトの名無しさん (ワッチョイ c26f-CicO)
2017/07/03(月) 22:28:05.66ID:9w7qW4Z10
>>96
>なんかブックを開くときに重くて

例えば、知らない間に、図形が1万個くらいに増殖しているとか。
いや、マジで。
104デフォルトの名無しさん (ワッチョイ c123-BlaP)
2017/07/03(月) 22:41:18.92ID:NJa6/A120
なんでいちいちdoeventsしてんの?
105デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
2017/07/03(月) 22:43:07.60ID:c364q6zP0
あ~万個増殖ね~ありがちだわ~
106デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
2017/07/03(月) 22:46:45.91ID:S8hpBEzs0
>>104
あー、DoEventsuはマクロ実行終わるまで時間かかるんでEscでマクロ止めてた時の名残です。
今は必要ありません。消し忘れてました。
107デフォルトの名無しさん (ワッチョイ 65c1-ZBdv)
2017/07/03(月) 23:22:39.55ID:u6VhpuAl0
>>91
すみません…
まだ勉強し始めたばかりで何故入れ替えただけで逆に表示されるのかが分かりません
理由を教えて下さりますと幸いです
108デフォルトの名無しさん (ワッチョイ c123-BlaP)
2017/07/03(月) 23:23:15.28ID:NJa6/A120
ん~
まずはループが最終的に何回転してるのか見てみた方が良さそう

自分ならまず新しいファイルにコードをコピペしてゴミ掃除するが
109デフォルトの名無しさん (ワキゲー MM8a-I/sj)
2017/07/03(月) 23:58:29.09ID:MkRtof65M
>>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
110デフォルトの名無しさん (ワッチョイ 4211-nP2k)
2017/07/04(火) 00:10:14.68ID:pX4cRUUJ0
>>102
<0と>0をUnionでまとめてからコピペしたら速くなりそう。
ただUnionのセル数が増えすぎるとUnion自体が遅くなるみたいなので、1~数十行くらいで区切ったほうがいいかも?

まあ>>97のほうが速い気はするけど。
111デフォルトの名無しさん (ドコグロ MMa9-y/Rq)
2017/07/04(火) 05:36:03.11ID:JPw87neNM
これって今何行あるの?
何万行もあって列数50あれば大分重くなると思うけど
112デフォルトの名無しさん (ワッチョイ 0111-0bL8)
2017/07/04(火) 06:53:55.04ID:SZEZ7cdP0
6000回もselectとcopyしてりゃ遅くなるの当たり前
113デフォルトの名無しさん (オッペケ Sr71-nSMp)
2017/07/04(火) 08:12:48.47ID:n1qpisHfr
田のクラッカー
114デフォルトの名無しさん (アウアウエー Sa4a-Znx3)
2017/07/04(火) 10:15:18.62ID:hKxheJiwa
セレクトなくしたら2/3ぐらいにはなりそうだな
まあどう考えてもコピペはロスがでかい
指定する書式はマクロの記録か大抵ググりゃ出てくるから調べんさい
115デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
2017/07/04(火) 20:20:52.61ID:aFK9C0z90
>>89>>102です。

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

>>112 直接書式を設定したほうがよさそうですね
>>114 >>97を試してみます

みなさまありがとうございました。土日に試してみます。諸事情で今は試せないので。
117デフォルトの名無しさん (ワッチョイ 1911-Znx3)
2017/07/04(火) 23:04:48.45ID:n6RB6fUl0
>>116
頑張ってベターな方法探してね!
118デフォルトの名無しさん (ワッチョイ c179-9Mth)
2017/07/05(水) 00:29:10.07ID:VBidwpfq0
ベタな方法を探す?
119デフォルトの名無しさん (アウアウウー Sa25-k1q/)
2017/07/05(水) 10:23:55.19ID:jMcI5nQfa
ダブルクリックとシングルクリックを区別する処理を考えましたがあまり
美しくないです。もっとスマートな方法はありますか?
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
120デフォルトの名無しさん (アウアウエー Sa4a-Znx3)
2017/07/05(水) 11:03:35.66ID:bK7Vkfgva
>>119
vba クラス コントロール イベント
とかでググれば
121デフォルトの名無しさん (JP 0H16-CicO)
2017/07/05(水) 13:18:10.58ID:r0cXYB/2H
>>119
内容と全然関係ないけど、全角スペースでインデントすれば削除されないよ
122デフォルトの名無しさん (アウアウウー Sa25-k1q/)
2017/07/05(水) 16:49:43.67ID:F7dOY4NYa
>>120
ありがとうございます。質問そのものについてはタイマー張ることで実現
できることがわかりました。
また、イベントハンドラをまとめる方法もついでに知ったので助かりました!
>>121
次からそうします。ありがとうございます。
123デフォルトの名無しさん (ワッチョイ c26f-CicO)
2017/07/05(水) 22:43:43.51ID:kJzSrAyN0
セルの値を配列に入れる時、
セルが1つだけだと、一次元配列になっちゃうってひどくね。
124デフォルトの名無しさん (ワッチョイ 066d-Opov)
2017/07/05(水) 22:47:37.84ID:VdD8AIen0
次元数が変化するとめんどくさい時は、常に同じ次元数になるようにfunctionを噛ませる
125デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
2017/07/05(水) 22:49:15.43ID:odMt6Ynp0
セルが2つだと二次元配列になっちゃうよ
126デフォルトの名無しさん (アウアウウー Sa25-k1q/)
2017/07/05(水) 23:46:14.85ID:F7dOY4NYa
DAOとADOの使い分けを教えて!
127デフォルトの名無しさん (ワッチョイ f73d-1B52)
2017/07/06(木) 00:36:18.68ID:in8T4yu80
使い分けというかADOはDAOに比べて何かと便利だからADOだけ使えばいいんじゃないかな。
AccessだとデフォがDAOなんで使う事も多いけどエクセルで使うときのメリットは特に思い浮かばない。
128デフォルトの名無しさん (アウアウウー Sa5b-pw7F)
2017/07/06(木) 00:50:14.75ID:J3gAfYSVa
>>127
回答ありがとう。今はMySQLに接続しようとしているのでADOを選びます。
まだVBA始めて4日目なのでわからないことばかりですが
129デフォルトの名無しさん (ブーイモ MMfb-MhHl)
2017/07/06(木) 02:37:48.69ID:2ggUG7GkM
>>123
Resizeで1行追加して、配列を1行減らせばいいんじゃないかと思った。
130デフォルトの名無しさん (ワッチョイ d72b-KuRC)
2017/07/07(金) 06:50:33.44ID:k9X/9vlT0
すいません
パソコンのエクセル2016で作ったVBAをスマホで動かすことはできますか?
スマホでVBAの作成編集は無理のようなので
131デフォルトの名無しさん (スプッッ Sd3f-nGAm)
2017/07/07(金) 07:44:52.11ID:6QLBDLc9d
>>130
むしろ教えてもらいたい
132デフォルトの名無しさん (ワッチョイ 7773-zf8i)
2017/07/07(金) 08:54:05.14ID:KQxBqvcO0
関数でがんばれ
133デフォルトの名無しさん (ワッチョイ bf23-M/n7)
2017/07/07(金) 21:24:02.96ID:IxSbuhab0
>>130
基本的に無理じゃね。
スマホ側OfficeがVBAサポ―トしてないと。
その上でWin32API使用してたら、更に無理だし。
134デフォルトの名無しさん (スプッッ Sdbf-kebf)
2017/07/07(金) 21:25:43.56ID:t0FXhP6Gd
ノートでも画面狭く感じるのにスマホでなんてストイック過ぎる
135デフォルトの名無しさん (ワッチョイ ff8f-KuRC)
2017/07/07(金) 22:19:46.83ID:02peKi+J0
アリエッティだから…
136デフォルトの名無しさん (ワッチョイ 778b-QU0D)
2017/07/07(金) 23:07:11.35ID:tdv0VtnU0
ネゴシックスだから…
137デフォルトの名無しさん (ワッチョイ 97ea-okny)
2017/07/07(金) 23:13:49.66ID:q3zfwuJv0
vbaってエクセル用の言語?
他にも使えるの?
138デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
2017/07/07(金) 23:24:32.16ID:IHJ5BTGs0
アクセスやワードでも使えるよ
アクセスvbaはたまによく使う。SQL覚えたほうがいいけど
ワードはワード自体使わん
139デフォルトの名無しさん (ワッチョイ d701-LW04)
2017/07/07(金) 23:41:29.01ID:cLxiai6C0
初歩的な質問で、すみません。

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
140デフォルトの名無しさん (ワッチョイ ff8f-KuRC)
2017/07/07(金) 23:52:29.75ID:02peKi+J0
関数 percent(num) で呼び出しもとで
引数 numに Range("a1") をセット(厳密には違うか)してるから


って釣りだよな
141デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
2017/07/07(金) 23:55:59.29ID:IHJ5BTGs0
>>139
残念ながらかなり根本的な事がわかっていない

function~はユーザー定義関数っつって、処理をひとまとめにしたもの

numってのは変数名。これは自分で決めるもので、
「num」でも「namu」でも「ナンバー」でもなんでもいい。
「sub」「if」みたいな単語は予約語と言ってそれらは使えないんだけど、まぁ何となく分かるだろう

毎回'こう書くのがめんどくさいから
Range("b1") = Range("a1") / 100 & "%"
'functionを定義して、使い回しできるようにしているだけの話
Range("b1") = percent(Range("a1"))

function作るのめんどくさくね?
と思ったかもしれないけど、それは何もわかっていないだけ
素直にこういうもんだと覚えてくれ
142デフォルトの名無しさん (ワッチョイ d701-LW04)
2017/07/07(金) 23:57:08.34ID:cLxiai6C0
すみません。意味が分かりました。
143デフォルトの名無しさん (ワッチョイ 9f06-1B52)
2017/07/07(金) 23:58:31.41ID:J/by2x1N0
>num以外に自動認識されるような用語


自動認識されるような用語って何?初めて聞いた
144デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
2017/07/08(土) 00:00:19.52ID:lNWyFXj50
>>142
良かった、頑張ってねぇ~
145デフォルトの名無しさん (ワッチョイ ff8f-KuRC)
2017/07/08(土) 00:06:47.50ID:13H3LMpq0
>>143
AレジスタとかBレジスタとかと想像してみる

>>142 ほ、ほんとに初心者だったのかスマン
146デフォルトの名無しさん (ワッチョイ f791-nB+A)
2017/07/08(土) 00:07:48.82ID:ieaMtMqy0
>>143
多分だが、引数を理解できてなくて
numに勝手にマッピングされてる、みたいに思ったんじゃないか
なんか勉強の順番おかしいんじゃない?
もっと前のフェーズでの学習が抜け落ちたまま次進んでる気がする
147デフォルトの名無しさん (ワッチョイ 9f06-1B52)
2017/07/08(土) 00:09:10.26ID:pa5RQPEd0
>>145
いやいや、いきなりアセンブラは無いだろとw
148デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
2017/07/08(土) 00:11:00.51ID:lNWyFXj50
>>146
俺もそう感じた
ただ学習の本やサイトも「おまじない」とかアホなことぬかすからわけがわからなくなるんだと思う
149デフォルトの名無しさん (スプッッ Sdbf-kebf)
2017/07/08(土) 01:17:01.28ID:5hrqvRHFd
俺何年もVBAつかってるけどオプションイクスプリシットとか読めないわ書けるけど
ただのおまじないだしないいよな別に
150デフォルトの名無しさん (ワッチョイ 97ea-okny)
2017/07/08(土) 04:13:51.39ID:4CWa99QQ0
Private Sub Worksheet_Calculate()


If Worksheets("sheet1").Cells(3, 20) > 4000 Then

Worksheets("sheet1").Range("V4:AP4").Insert

End If


end sub

インサートがめっちゃ繰り返される。どうして?
151デフォルトの名無しさん (ワッチョイ bf23-KuRC)
2017/07/08(土) 08:57:15.58ID:YOB7IyKs0
>>150
ifが永遠にtrueになるからではないか
セル挿入→再計算→ifがtrue→セル挿入→再計算→ifが(略
Worksheets("sheet1").Cells(3, 20) がいつ4000以上になるのか
本当になるのかチェック
152デフォルトの名無しさん (ワッチョイ bf6d-KuRC)
2017/07/08(土) 09:26:58.00ID:lNWyFXj50
>>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
153デフォルトの名無しさん (ワッチョイ 97ea-okny)
2017/07/08(土) 13:34:02.80ID:4CWa99QQ0
>>151,>>152
的確な指示ありがとう!!(笑)
すごいなここの人は
154デフォルトの名無しさん (ワッチョイ b7e3-jTKI)
2017/07/08(土) 16:53:25.86ID:Z/1cPHhj0
>>149
別にいいよ、モジュールの一番上にそれを書くのを忘れなければ
155デフォルトの名無しさん (スプッッ Sd3f-kebf)
2017/07/08(土) 17:53:16.70ID:lfjWBFMWd
モジュールの一番上に書くのは153でしょ

'2ちゃんねるの神様に教えてもらったコードです
'神様ありがとうございます
Option Explicit
Sub foo()
156デフォルトの名無しさん (ワッチョイ ffb9-wcci)
2017/07/09(日) 00:06:53.03ID:8a4WwF270
こんばんは。
困ってます。

先日作成したマクロが動かなくなりました。
作成した日は動きました。
(特定のフォルダをコピーしてリネームするだけの動きです。)
プログラムを手動で実行したときは問題なく動くので、
プログラムの問題ではなさそうなのですが。

エクセルのセキュリティは、「警告を表示してすべてのマクロを無効にする」
にしています。
エクセルの再起動・PC再起動は試しましたが、だめでした。

C:\...Local\Temp\Excel8.0のMSForms.exdも消してみたりしましたがダメでした。

原因は何でしょうか・・・?
157デフォルトの名無しさん (ワッチョイ ffb9-wcci)
2017/07/09(日) 00:08:43.90ID:8a4WwF270
スペック全然書いてなかった。

Windows8.1
Excel2013 です。
158デフォルトの名無しさん (ワッチョイ ffb9-wcci)
2017/07/09(日) 00:14:34.37ID:8a4WwF270
すみません。
書き込んですぐに自己解決しました。

コマンドボタンのオブジェクト名が違ってた・・・。
159デフォルトの名無しさん (ワッチョイ bf23-SyLM)
2017/07/09(日) 03:04:28.53ID:EKrowZUC0
>>158
良いんだけどさ、最低限デバッグ出来るようになってくれ。
160デフォルトの名無しさん (ドコグロ MMbf-d65a)
2017/07/09(日) 10:34:39.10ID:ouwdb2hLM
まあ、解決したことを書いてくれたのはよかった
161デフォルトの名無しさん (ワッチョイ 9f4e-cnUH)
2017/07/09(日) 12:02:55.24ID:P74F/v7B0
デバッグ始めにtypoを疑って問題ないと確認して、
さんざん調べてやっぱりtypoの時の脱力感
162デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
2017/07/09(日) 12:34:26.09ID:XJb9KLmK0
optionexplititをつけよう(typo)
163デフォルトの名無しさん (ドコグロ MMdf-d65a)
2017/07/09(日) 13:33:12.66ID:Uu/MlKNRM
>>161
他人のtypoはすぐにわかるのになぜかわからない自分のtypo
164デフォルトの名無しさん (アウアウカー Sa2b-nSBM)
2017/07/09(日) 19:05:53.04ID:WoCQL3Mea
初心者的な内容ですいません。
よければ教えてください。

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
165デフォルトの名無しさん (ワッチョイ 9f6f-rvkC)
2017/07/09(日) 19:17:48.71ID:IxMSo5tD0
Sh As Objectって何だよ。
Sh As Worksheetじゃないのか。
問題に突っ込んでもしょうがないけど。
166デフォルトの名無しさん (アウアウカー Sa2b-nSBM)
2017/07/09(日) 19:25:01.06ID:WoCQL3Mea
スタンダード公式ページの模擬問題3に書いてありました。

問題がおかしいのでしょうか?
167デフォルトの名無しさん (ワッチョイ bf23-KuRC)
2017/07/09(日) 19:29:29.32ID:e2g8wwYr0
>>164
新しくできたシートが引数Shで渡されている。
(ByVal Sh As Object)の部分。
Workbook_NewSheetのイベントプロシージャの仕様。
たいてい、どのイベントプロシージャも自分自身の参照を引数で渡されている。
ので、この場合、新しくできたシート自身を操作したければ
引数で渡ってきているShを操作すればよい。
168デフォルトの名無しさん (ワッチョイ 9743-ClOc)
2017/07/09(日) 19:33:19.71ID:aVb+3v1/0
挿入された新規シートが必ずActiveSheetだとは限らないんじゃない?
イベントプロシージャに新規シートが引数として渡されるのだから、それを使うのが確実

ちなみに問題が As Object なのは間違ってない
https://msdn.microsoft.com/ja-jp/library/office/ff821246.aspx?f=255&;MSPPError=-2147217396
169デフォルトの名無しさん (アウアウカー Sa2b-nSBM)
2017/07/09(日) 19:35:24.63ID:WoCQL3Mea
こういう仕様があったんですね‼

ありがとうございます。
スタンダード合格出来るよう頑張ります。
170デフォルトの名無しさん (ワッチョイ bf6d-gkD3)
2017/07/09(日) 19:42:48.30ID:XJb9KLmK0
worksheetでもいいだろ、と思ったらエラーになった
確かにobjectであって、worksheetではない
Excel VBA 質問スレ Part49©2ch.net	YouTube動画>12本 ->画像>8枚
ってかこれ、一体なんなんだ?参照だろうけど、中身が全くないobjectが渡されてる。意味がわからない
171デフォルトの名無しさん (ワッチョイ bf6d-gkD3)
2017/07/09(日) 19:44:44.18ID:XJb9KLmK0
ウォッチ式では
sh.name
はウォッチ式が不正です

イミディエイトウィンドウでは
?sh.name
Sheet4
とシート名が返ってくる

なんだこりゃ??
172デフォルトの名無しさん (アウアウカー Sa2b-M/n7)
2017/07/09(日) 19:56:26.06ID:B1MJdm2Aa
>>171
ウォッチ式にsh.nameが指定されてる?
shじゃ無くて?
173デフォルトの名無しさん (ワッチョイ bf23-KuRC)
2017/07/09(日) 20:10:27.05ID:e2g8wwYr0
ためしに別の変数にShを突っ込んでみたら
中身が見られるようになった。

どっかで、オブジェクト変数は利用されるまで中身が入らないよ
みたいな話を聞いたような・・・。
174デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
2017/07/09(日) 20:17:33.00ID:XJb9KLmK0
>>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

Excel VBA 質問スレ Part49©2ch.net	YouTube動画>12本 ->画像>8枚

>>173
プロパティ(sh.name)を呼び出してみた後の状態
(メッセージボックスにはsheeet6と正常に表示された)
やっぱりダメだった。
Excel VBA 質問スレ Part49©2ch.net	YouTube動画>12本 ->画像>8枚

なんらかの理由でウォッチ式が正常に機能してないだけならいいけど、正常な状態でこれだとどういう状況なんだろう
175デフォルトの名無しさん (ワッチョイ bf23-KuRC)
2017/07/09(日) 20:42:05.40ID:e2g8wwYr0
>>174
Dim sheet as Worksheet
Set sheet = Sh

これをmsgboxの前に追加すると全部の変数がウォッチで見られると思う。

ググってみたらNewで作ったオブジェクトは初めて利用するまで空ですよ
らしいので、新シートのオブジェクトは内部的にNewで作成している?
Sh.nameが引けるのは何ででしょう?
176デフォルトの名無しさん (スップ Sdbf-Yl52)
2017/07/09(日) 20:43:00.97ID:vBmV/XSmd
それよりも改行しないコードかく人は何を考えてコード書いてるのか気になる
177デフォルトの名無しさん (ワッチョイ 9791-9DAm)
2017/07/09(日) 20:43:34.76ID:BT4+59vh0
>>174
objectで受け取ってるからshのままでは何のクラスなのかわからないからどんなプロパティがあるかわからない

Nameプロパティを指定したら
Nameプロパティを持っているクラスとして解釈して
Nameプロパティの位置を文字列として表示しただけ

worksheetクラスのデフォルトプロパティがNameだからかな

countプロパティとかとして解釈させたら想定外の値になると予想
178デフォルトの名無しさん (ワッチョイ bf23-KuRC)
2017/07/09(日) 20:46:50.81ID:e2g8wwYr0
>>177
VBAマスター現る。
なっとく。
179デフォルトの名無しさん (ワッチョイ 9791-9DAm)
2017/07/09(日) 20:49:10.77ID:BT4+59vh0
>>178
VBAだけじゃなくて他のプログラミング言語C言語とかと共通の考え方

メモリ確保とかキャストとか
180デフォルトの名無しさん (ワッチョイ 9791-9DAm)
2017/07/09(日) 20:54:20.52ID:BT4+59vh0
>>164
1が実行されるまでの間にactivesheetが変わるかもしれないからactivesheetでは不正解だと思う

出来るだけactivesheetを使わない方が想定外の動作にならないと思う
181デフォルトの名無しさん (ワッチョイ 778b-utq/)
2017/07/09(日) 20:55:59.71ID:oI2zN/et0
てかお前らそんなに一か八かでactivesheet使ってんのかよw
182デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
2017/07/09(日) 21:19:51.98ID:XJb9KLmK0
これが通るけど、ウォッチ式には現れない
多分ウォッチ式の不具合だと思う
そう考えないと気持ち悪くて仕方ないし疲れてきた・・・

Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Calculate
MsgBox Sh.Index
End Sub

Excel VBA 質問スレ Part49©2ch.net	YouTube動画>12本 ->画像>8枚

>>175
sheetでもShでも見れるようになりました
Shの参照をコピーしたのでインスタンスが生成されたのかな

>>177
indexプロパティでも通りましたし
Sh.Calculateメソッドでも通りました

>>181
使ってないよ。sheetの指定はsetした変数を使ってる
昔はactive~やselect~を使ってたけどね
183デフォルトの名無しさん (ワッチョイ 9791-9DAm)
2017/07/09(日) 21:38:18.71ID:BT4+59vh0
>>182
worksheetクラスではないクラスのプロパティを指定したらどうなると予想する?

例えばRangeクラスのプロパティとか

もしかしたらサイズとかを見ていてサイズが異なる場合はキャスト出来ないかもしれないど

メモリ領域には値が格納されているけどそれをどう解釈するかはクラスが決まらないと特定できない
184デフォルトの名無しさん (ワッチョイ bf6d-U373)
2017/07/09(日) 21:45:51.77ID:XJb9KLmK0
>>183
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Debug.Print Sh.Range("a1").Address
End Sub

$A$1
が返ってきたわ

Excel VBA 質問スレ Part49©2ch.net	YouTube動画>12本 ->画像>8枚
185デフォルトの名無しさん (ワッチョイ bf6d-U373)
2017/07/09(日) 21:47:17.93ID:XJb9KLmK0
写ってないけどウォッチ式のshのプロパティは不明なままね
ウォッチ式がおかしい以外考えにくい
186デフォルトの名無しさん (ワッチョイ bf23-KuRC)
2017/07/09(日) 22:03:56.91ID:e2g8wwYr0
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はあったんで通る。
187デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
2017/07/09(日) 22:23:32.11ID:XJb9KLmK0
>>186
それはrange指定してないっす・・・

Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Cells(1, 1).Value = "aaa"
End Sub

で通ったよ
188デフォルトの名無しさん (ワッチョイ 9791-Razr)
2017/07/09(日) 22:31:30.92ID:BT4+59vh0
>>184
Debug.Print Sh.Range("a1").Address
ではなくて
Debug.print sh.address
だったらどうなるかって意図だったけど
ためしたら実行時エラーになる
これはtypename(Sh)を表示したらわかるけど
Shという変数自体にクラス(型)に関する情報を持っているから
無理矢理Rangeクラスのプロパティを表示させようとするとエラーになる

dim rng as Range
set rng = Sh
とかやっても実行時エラーになる
文法的にはエラーじゃないからコンパイルは通る

VBAが型チェックしてバグにならないようにしていると思う
他の言語だとこれができるものもある
189デフォルトの名無しさん (ワッチョイ 9791-Razr)
2017/07/09(日) 22:35:23.27ID:BT4+59vh0
>>187

ShがWorksheetクラスだっていうのが判ってるからRangeを指定するってわかるけど
Objectクラスだったら何のプロパティを持っているかわからなくない?

Objectクラスはすべてのクラスのスーパークラスだから何でも参照できる
Sh as Objectと宣言されているShが実態はRangeクラスである場合もある
その場合は、Sh.Value = "a"でも実行時エラーにはならない
190デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
2017/07/09(日) 22:50:14.83ID:XJb9KLmK0
>>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
191デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
2017/07/09(日) 22:58:28.17ID:XJb9KLmK0
しかし>>175がどうしてもわかりません

object型をobject型に渡してもプロパティは分からない、それは分かります
Excel VBA 質問スレ Part49©2ch.net	YouTube動画>12本 ->画像>8枚

object型をworksheet型に渡すと、ウォッチ式で見れるようになる、それがわからない
Excel VBA 質問スレ Part49©2ch.net	YouTube動画>12本 ->画像>8枚
全部のプロパティ・メソッド見たら全部一致してたからworksheetとしてコピーしますね~ということ?
192デフォルトの名無しさん (ワッチョイ 9791-Razr)
2017/07/09(日) 23:03:28.23ID:BT4+59vh0
>>190
Set sheet = Sh
を実行した時点で、Sh = sheet = Worksheetクラスのオブジェクトと特定可能
なのでworksheetクラスのデフォルトプロパティを表示しているのではないか

ウォッチ式にsheet変数も追加すると、そのタイミングで
Shの他のプロパティも見えるようになった
193デフォルトの名無しさん (ワッチョイ bf23-KuRC)
2017/07/09(日) 23:06:31.26ID:e2g8wwYr0
>>191
型キャストで
Shがワークシートだと判明したので
Shとsheetは同じ物なので
両方のプロパティが同じで表示されるのではと思うが。
詳しくはマスターにまかせる。

と思ったらもう回答されていた。

すごい勉強になった。
194デフォルトの名無しさん (ワッチョイ 9791-Razr)
2017/07/09(日) 23:09:27.92ID:BT4+59vh0
>>191
ウォッチ式の表示更新タイミングはその内容が特定されたときに
即座に表示更新されるとは限らない
つまり表示更新されるよりもずっと前に表示すべき内容が特定されていた可能性もある
195デフォルトの名無しさん (アウアウエー Sadf-thUc)
2017/07/10(月) 09:22:58.03ID:HOfsyLJOa
activesheet使うのはworksheets.copy使うときぐらいだな
真面目に作るときは書式とか直で指定するように頑張るけど
196デフォルトの名無しさん (ワッチョイ 7773-zf8i)
2017/07/10(月) 12:08:47.45ID:G+8qCprO0
レコードセットをそのままシートに張り付けると、元の型を継承して数字のみのカラムも文字列として貼られるんだけど、さすがにどうしようもない?
197デフォルトの名無しさん (スップ Sd3f-nGAm)
2017/07/10(月) 12:39:11.04ID:okOc14zTd
>>196
あとで一括して和0すりゃいいじゃん
198デフォルトの名無しさん (ササクッテロロ Spcb-9DAm)
2017/07/10(月) 12:47:22.77ID:8dcdQUy6p
>>197
和は加算の結果を表す言葉
0を加算とか足す0じゃないと意味が違ってくる

因みにレコードセットの型はcolumnの最初の7行分のデータから推測されるとかだったと思うから
目的の型になるようにソートすればいいかも
199デフォルトの名無しさん (ドコグロ MM2b-jxDt)
2017/07/10(月) 13:37:23.50ID:WkincIndM
関数の引数にbyval ws as Worksheetってやるとどうなるの?

worksheetに対しては、byrefしか使ったことない
200デフォルトの名無しさん (ワンミングク MM7f-jTKI)
2017/07/10(月) 14:25:22.38ID:/gGZBLtxM
オブジェクト型はbyval渡し出来ないんじゃなかったっけ?
201デフォルトの名無しさん (スップ Sd3f-nGAm)
2017/07/10(月) 14:36:15.11ID:okOc14zTd
>>198
なるほどそうだぬ
「ゼロを一括して加算(D)すりゃいい」と言い直させてもらう

もともと具体的に書かず曖昧な表現を目指していた
202デフォルトの名無しさん (スップ Sd3f-nGAm)
2017/07/10(月) 14:38:53.50ID:okOc14zTd
>>200
できるよ。
メソッド呼び出しもそのオブジェクトに対するものとなる。
違いが出るのは代入(=)演算の意味だけだと思う。
203デフォルトの名無しさん (ブーイモ MMbf-MhHl)
2017/07/10(月) 15:15:06.40ID:UwxUnls6M
>>199
たぶんプロシージャ内の set ws=hoge が引数に反映されるかされないかが変わってくる
204デフォルトの名無しさん (ドコグロ MMdf-jxDt)
2017/07/10(月) 16:10:50.58ID:1UBLPYX0M
>>203
ありがとうございます。
時間あるときに試してみます!
205デフォルトの名無しさん (スッップ Sdbf-Yl52)
2017/07/10(月) 17:19:20.24ID:1LvSwn3ad
thisworkbookをoptionalな引数のデフォルト値にしたいんだけどできない
何かいい方法知りませんか
206デフォルトの名無しさん (スップ Sd3f-nGAm)
2017/07/10(月) 18:34:12.31ID:okOc14zTd
>>205
確認せずに答えるけど、できないならOptionalのデフォルト値をNothingにして、
モジュール内で判断・分岐する

If a Is Nothing Then Set a = ActiveWorkBook
とか
207デフォルトの名無しさん (ワッチョイ bf6d-KuRC)
2017/07/10(月) 18:40:40.88ID:9dSXLq4x0
デフォルト値は定数式で、って言われるな

デフォルト値を文字列にして"thisworkbook"、evalで…とか考えたけど2013持ってないから試せない
そこまでしても読みにくくなるだけなので、素直に>>206みたいに条件分岐させたほうが良いと思う
208デフォルトの名無しさん (ブーイモ MMdb-MhHl)
2017/07/10(月) 19:04:18.69ID:fjsjDBbbM
質問です。
ユーザーフォームをShowModal=Falseで表示しており、フォームを表示したまま、フォーカスをフォームからセルに移動することは可能でしょうか?
cells(1,1).select や application.goto cells(1,1) ではフォーカスがフォームから動きませんでした。
209デフォルトの名無しさん (ワッチョイ bf6d-gkD3)
2017/07/10(月) 19:17:57.83ID:9dSXLq4x0
>>208
昔やったことあるなぁ
と思って試したら、仕様変更でできなくなってるっぽい
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=44929;id=excel
2010は無理だった
210208 (ブーイモ MMdb-MhHl)
2017/07/10(月) 19:26:18.02ID:fjsjDBbbM
>>209
回答ありがとうございます。
後出しで申し訳ないですがバージョンは2007です。
試せるのが明日になりますが、appactivate試してみます。
211デフォルトの名無しさん (スッップ Sdbf-Yl52)
2017/07/10(月) 20:52:31.16ID:93pFc0tnd
>>206
やっぱりそうなるか
でもなんでできないんだろうインスタンスとして実体化されてないから?
そんなことないよな
212デフォルトの名無しさん (ワッチョイ 9791-9DAm)
2017/07/10(月) 21:00:26.90ID:N/fNiVFC0
>>211
コンパイル時点で決まってないからかな~
213208 (ブーイモ MMdb-MhHl)
2017/07/11(火) 12:39:40.24ID:fzHCV1ljM
>>209
AppActivateもApplication.Visible=Trueでもいけました!
ちなみに以下のも試しましたが全部ダメでした。
ActiveWindow.Activate
ActiveWorkBook.Activate
ActivateSheet.Activate

2010以降だとWIN32APIとかでシートのマウスクリックを挟まないとダメかもですね。
214デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
2017/07/11(火) 19:59:21.82ID:L+/Hncu30
>>213
良かったね
2007と2010でそんなとこに差があるとは驚いた
215デフォルトの名無しさん (ワッチョイ 9f6f-rvkC)
2017/07/12(水) 19:38:42.24ID:qkF1IqO80
Sh As Object
Sh
216デフォルトの名無しさん (ワッチョイ 9f6f-rvkC)
2017/07/12(水) 19:41:14.38ID:qkF1IqO80
↑誤送信すまん。

Sh As Object
Sh As Worksheet

どちらでも動くのは分かる。
Objectにするのって、
どんな値が入るかわからないから、
Variantでいいやって考えるのと同じ?
217デフォルトの名無しさん (ワッチョイ bf6d-KuRC)
2017/07/12(水) 19:46:47.71ID:xxYqMu/90
どんな値が入るかわからないコードってどんなコード?
デバッグ用にエラーで分岐させた先とか?
218デフォルトの名無しさん (ワッチョイ 778b-utq/)
2017/07/12(水) 19:50:58.17ID:vG3FHDEt0
つっこむならせめて値と型の違いぐらい分かっていて欲しかったなあ
219デフォルトの名無しさん (ワッチョイ 9723-zf8i)
2017/07/12(水) 19:53:10.98ID:+y58Cois0
>>217
variantさんディスってるの?
220デフォルトの名無しさん (ワッチョイ bf6d-pHDl)
2017/07/12(水) 20:00:38.68ID:xxYqMu/90
>>218
普通にすまん

>>219
あってもなくても一緒では?
variantを書くのは「どんな型が入るか分からない」と明示する以外に利点があるのだろうか
221デフォルトの名無しさん (ワッチョイ bf23-KuRC)
2017/07/12(水) 20:10:18.44ID:agdmn3RR0
NewSheetイベントの引数の場合、Shには
「Worksheet オブジェクトまたは Chart オブジェクトが渡されます」
と書いてあるので
どっちが渡されてもいいようにObjectなのでしょう
222デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
2017/07/12(水) 21:14:58.86ID:IZp09kNA0
俺の書くVBAはVariantばっかりだけど問題ないよね?
223デフォルトの名無しさん (ワキゲー MMdf-R1hf)
2017/07/12(水) 21:19:09.13ID:Nu9oIAfCM
個人利用である限りはね
224デフォルトの名無しさん (ワッチョイ 976f-KuRC)
2017/07/12(水) 21:27:49.15ID:M2bsHFCW0
書籍にさえ糞みたいなコードが平然と書かれてるVBA
どんなコードだってヘーキヘーキ
225デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
2017/07/12(水) 21:28:35.71ID:xxYqMu/90
そもそも宣言しなくても特に問題はない
vbaの型なんてやわらかすぎてあってないようなもん、死にはせん
226デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
2017/07/12(水) 21:34:45.69ID:IZp09kNA0
>>223
もちろんさ!
ちょっと単体テストすりゃ全然平気!

唯一気をつけるのはNULLが来た時の扱いだけど、「NULLがあり得る」場合は結局避けられない問題だし
227デフォルトの名無しさん (ワキゲー MMdf-R1hf)
2017/07/12(水) 21:40:21.42ID:Nu9oIAfCM
ただこーゆー所でVariantプログラムって言うとなんやかんやめんどくさいので胸の内に秘めとくことをオススメする
228デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
2017/07/12(水) 21:47:21.99ID:IZp09kNA0
俺がそのVariantを全部なくしてやるよ!
 ↓
229デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
2017/07/12(水) 21:48:46.29ID:xxYqMu/90
NULLじゃなくてnothingでは
230デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
2017/07/12(水) 21:54:45.14ID:IZp09kNA0
>>229
まあNothingが来れば気を付けなきゃいけないだろうけど、NULLはDBから読んだデータソースに含まれている場合が多いから。
231デフォルトの名無しさん (ワッチョイ 778b-utq/)
2017/07/12(水) 21:55:54.59ID:vG3FHDEt0
She As Object
Set She = New LoveDoll
She.DressUp(MaidCostume)
She.Attach(SilliconVagina)
I.Fuck(She)
I.FinishAlone()
She.Detach(SilliconVagina)
I.Wash(SilliconVagina)
232デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
2017/07/12(水) 22:01:13.24ID:IZp09kNA0
5行目にSet her = She があればよかった
233デフォルトの名無しさん (アウアウウー Sa5b-pw7F)
2017/07/12(水) 22:40:32.03ID:ybKMfalIa
VBEのインテリセンスを止める方法教えてください
234デフォルトの名無しさん (アークセー Sx39-y19a)
2017/07/13(木) 06:37:01.82ID:zrnYEEn3x
NewSheetイベントの引数ShがObject型なのは、WorkSheetクラスとChartObjectクラスの両方でNewSheetイベントの呼び出しが定義されていて、実行時にしかShの型が決まらないからだと思うが
Workbook.Sheets(Index)の戻り値がObject型なのと一緒
235デフォルトの名無しさん (アウアウエー Sa66-PUpa)
2017/07/13(木) 12:57:05.14ID:vRW6wkrFa
variantとかobject形はコンパイルエラーで止めてくれないからめんどい
今ちょうど使いたい場面出てきてるんだが二の足踏んでる
236デフォルトの名無しさん (ワッチョイ 6e1b-MRQN)
2017/07/13(木) 13:12:36.23ID:9SrccZi40
指定日(A)から現時点(B)までの経過時間をミリ秒で取得したい場合、
どのようにしたら上手く取れるでしょうか?
VB.NETの時はGetTimeMillisecondsがあったので、(B-A).GetTimeMillisecondsで取得出来たんですが。
237デフォルトの名無しさん (ワッチョイ 1d54-pdrj)
2017/07/13(木) 13:25:10.65ID:T6Wx4mwg0
APIのGetTickCountを使う
238デフォルトの名無しさん (ワッチョイ 6e1b-MRQN)
2017/07/13(木) 13:36:43.69ID:9SrccZi40
>>237
ありがとうございます。
GetTickCountも試してはみたんですが、システム稼働してからの時間だからか
自分では上手く取得できませんでした。
「指定日」(今回やりたいのは1970/1/1)からの経過時間をミリ秒取得するには
どのようにしたら良いでしょうか?
239デフォルトの名無しさん (アウアウエー Sa66-PUpa)
2017/07/13(木) 14:33:52.00ID:hn5wvxLda
>>236
doubleに変換して計算してまた変換するとか
240デフォルトの名無しさん (アークセー Sx5f-I8+U)
2017/07/13(木) 17:11:00.53ID:mgpP2Dmux
>>238
ミリ秒に換算しろ
241デフォルトの名無しさん (ワッチョイ 006f-z+eH)
2017/07/13(木) 18:03:16.52ID:etRke/LM0
>>238
どうせそんな長いスパンならミリ秒はなんちゃってでいいんでしょ

Application.WorksheetFunction.RoundDown((Date - CDate("1970/1/1")) * 86400000 + Timer * 1000, 0)
242デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/13(木) 20:31:54.44ID:kGwztgTZ0
>>236
timediff()関数だかdifftime()があったはず
243デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/13(木) 20:34:22.33ID:kGwztgTZ0
datediff()だった
ただ秒単位が最小だった
244デフォルトの名無しさん (ドコグロ MM36-OTuW)
2017/07/13(木) 21:05:07.35ID:WT5N9OT5M
Win32API の GetSystemTime( ) を呼び出して後は頑張って差を計算するなりすればいいだけでしょ
245デフォルトの名無しさん (ワッチョイ 0a23-z+eH)
2017/07/13(木) 21:30:25.15ID:kQSmD3CQ0
そもそもソースがクソ精度のシステム時刻だからmsecなんてあてにならない気がする
直前にNTPで同期をとるとか?
246デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/13(木) 21:37:03.54ID:kGwztgTZ0
指定日から当日までをdatediffの秒単位で取得して
当日からその時刻までをmsで取得して
足し合わせればいいんじゃね
247デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/13(木) 21:47:59.63ID:OJpyM90P0
ミリ秒の精度が求められる操作をVBAでって嫌だなぁw
248デフォルトの名無しさん (ワッチョイ 006f-z+eH)
2017/07/13(木) 22:44:18.16ID:etRke/LM0
作成するファイルやデータの一意な命名、識別とかに使うんじゃないの
だいたいでいいと思うわ
249デフォルトの名無しさん (ワッチョイ aa11-OTuW)
2017/07/14(金) 06:02:22.03ID:bYrN3J/p0
要件推理大会は終わった?
250デフォルトの名無しさん (JP 0H32-v2r+)
2017/07/14(金) 10:03:16.31ID:ak+4FQ9QH
要件って喪前らは横浜のシューマイ屋さんか!!!!


(´・ω・`)b
251デフォルトの名無しさん (ワッチョイ 0a23-z+eH)
2017/07/14(金) 10:25:11.37ID:P3iXCzVv0
Range("250").ClearContents
252デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
2017/07/14(金) 22:15:23.51ID:ont4yiQP0
!!!?

その手があったか!!
今まで、真面目に名前を付けることしか考えなかったわ。

Dim Sh As Worksheet
Set Sh = Thisworkbook.Worksheets("(´・ω・`)b")

こんなのもありだな。
253デフォルトの名無しさん (ワッチョイ c491-BaGs)
2017/07/14(金) 22:29:36.70ID:Ry5eHGcV0
そういやみなさん
その場限りの適当マクロじゃなくて
ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます?

自分はまずセルに名前をつけて
Const hoge = "セルにつけた名前"
Range(hoge).value = "うんこ"

みたいなことやってます
ちなみに、シート名でもこれやってるんですが‥

シート名やセル名が変わる可能性を前提にしたら
こういうアプローチになるとは思うんですけど
結局凄く無駄なことをやってる気がして…(結局変えることあんまないし)

特にセルの名前に関しては、どうせその文字列をConstのところにハードコードするなら
名前つけずに
Const hoge ="A1:B5"
でもええやんけとか思ってるんですが
行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり…
254デフォルトの名無しさん (ワッチョイ e66d-TdFn)
2017/07/14(金) 22:44:26.51ID:YONW9HHx0
>>252
こういうのもあるよ
https://github.com/masarakki/nyaruko_lang
255デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/14(金) 23:03:04.97ID:QoWI5XEA0
>>253
セルに文字列で意味をつけて
その文字列を検索して特定する
そのセルからのオフセットを固定しておく

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

行にも対応させると、面倒かも。
257デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
2017/07/14(金) 23:41:07.46ID:ont4yiQP0
>列の増減

会社のやつ、一切弄れないようにしたわwwwww
セルを保護するとかじゃなくて、
データの更新時に、全消しして再描画するのwwwwwwwwww
列挿入とかしても無駄ですよってwwwwwww
258デフォルトの名無しさん (ワッチョイ e66d-qA4N)
2017/07/15(土) 00:03:43.14ID:fdp++JjU0
そういうの、このスレだと基本だと思う
・正規化したデータを引っ張ってくる
・ボタン押したらvbaで構築。シートすら削除して再作成
こんなんばっかだろ。誰もさわれなくて非難轟々だけど、どうかんがえてもこっちのほうが安全なんだよな
259デフォルトの名無しさん (ワッチョイ e251-X5vM)
2017/07/15(土) 00:11:34.38ID:CxBosAMp0

@YouTube



@YouTube



@YouTube



@YouTube

260デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/15(土) 00:12:14.92ID:kt01pjYOM
学ぶ気のない人からとても怒られるやつ
261デフォルトの名無しさん (スッップ Sd70-QKFr)
2017/07/15(土) 00:49:22.52ID:K6V0aa5ld
>>253
普通にやってるしシート名とかも定義する
あとは汎用的なクラスや関数いくつも作っておいて雛形エクセルにしてる
262デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/15(土) 04:37:45.96ID:7LAckzVN0
>>256
コードをいじらないといけないじゃないか
263デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/15(土) 04:53:42.10ID:7LAckzVN0
>>258
データの更新自分しか出来ないんじゃね

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

ヒント:権限
265デフォルトの名無しさん (ワッチョイ aa11-OTuW)
2017/07/15(土) 09:43:36.21ID:jhhap/jh0
>>253
> ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます?
状況次第だけどよくアクセスするとか重要なセルは適当なところでまとめて変数に代入してる
Dim hoge As Range
Set hoge = Range("A1")
...
hoge.value = "うんこ"

> 行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり…
行とか列の挿入を想定するなら名前をつけてそれで参照する
ユーザーが作成するようなシートなら特定の文字列を検索して場所を特定するとかもやる
266デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/15(土) 09:44:21.75ID:7LAckzVN0
>>264
自分に権限がないなら権限を持ってる人に許可貰えばいいだけじゃね?

なんの権限か不明だが
267デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/15(土) 10:08:30.41ID:7LAckzVN0
>>258
批難がでるって事は不便な点とかがあるって事で
仮にそれが商品だとしたら売れない可能性があるってこと

競争相手がいたら使われなくなる商品
268デフォルトの名無しさん (ドコグロ MM36-OTuW)
2017/07/15(土) 11:40:57.26ID:aW477mPhM
>>267
売れてるiPhoneのスレでも見てこいよ
売れない/使われないものをいちいち非難するほど人は暇じゃない
269デフォルトの名無しさん (ササクッテロラ Sp72-+gV6)
2017/07/15(土) 11:48:46.46ID:CRqbHh/Cp
>>268
売れないなら批難は出ないと言う主張なら
批難轟々なら売れるって事だよな

じゃ売ってみればいいんじゃね?
270デフォルトの名無しさん (ササクッテロラ Sp72-+gV6)
2017/07/15(土) 11:50:44.37ID:CRqbHh/Cp
>>268
それは代替品がある場合だ
その代替品に乗り換えれば済むから

社内とかの代替品がなければ嫌々でもそれを使うしかない
271デフォルトの名無しさん (ドコグロ MM2e-OTuW)
2017/07/15(土) 12:33:52.46ID:hu77KrcYM
>>269-270
レスを分けて書く奴はもれなくバカの法則 w
272デフォルトの名無しさん (ワッチョイ e66d-z+eH)
2017/07/15(土) 16:36:10.60ID:fdp++JjU0
>>271
それ面白いか?
別に面白くないけどなぁ
273デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/15(土) 17:34:03.53ID:0urlci1o0
VBAのマクロって

・マクロ制作者本人の操作を補助する為のものであり、他人に使わせる事は想定されていない
・オフィス製品の操作を補助する為のものであり、アプリケーションの本来の振る舞いを超えた動作は想定されていない
・ユーザーフォームはマクロの操作を容易にする為のものであり、別のアプリケーションであるかの様に振る舞う事は想定されていない

なので想定されていないものを作ろうとしたら不便さを感じるのは当然
どんな言語もそうだけど、想定された使い方なら便利だし、そうでないなら不便だよ
274デフォルトの名無しさん (ワッチョイ c491-BaGs)
2017/07/15(土) 17:40:17.34ID:Id32lc0P0
>>255
なるほど
例えば
○年○月 の○のセルを指定する際に
「年」のセルを探してOffset(0,-1)する、みたいな感じですかね
自分はこれも名前つけて管理してましたが
セルが1つの場合はそれで良さそうですね
ただ、全く同じ内容のセルが検索範囲にないことが保証された運用にしないとバグりそうなのでちょっと怖いかも


>>256
表に対してレコードセットみたいなアクセスをしたい場合に
つい最近その方法を知って目からウロコでした
とにかくインテリセンスを効かせたい派なので・・
http://thom.hateblo.jp/entry/2015/12/17/000132
こういうことですよね

行方向に関しては、列のように各行に別々の意味を持たせるような使い方はしたことないので
問題ありませんね

>>261
自分は簡単なSQLを作る(ANDとかORで結合するだけ)に特化したStringBuilderみたいなのだけ使ってますね

>>265
やっぱ可変範囲のこと考えると名前つけるのは意味ありますよね
275デフォルトの名無しさん (ワッチョイ c491-BaGs)
2017/07/15(土) 17:47:17.89ID:Id32lc0P0
>>273
>他人に使わせる事は想定されていない
これは本当に思いますね
Accessなんかはフォームでの入出力が基本だし
各データの型も指定するから
出来ること出来ないことを設計者が細かく指定しやすいですが
Excelは書式や入力データを限定させようとすると
そのノウハウの習得のことも考えたら相当な時間がかかる気が…

以前「値のみの切り取り・コピーしかできない」ようにしようとして
えらい苦労しました
276デフォルトの名無しさん (ワッチョイ 926f-MRQN)
2017/07/15(土) 20:37:21.43ID:VxLYhzBT0
所詮道具 しかし便利な道具 それをよりによってなんで使い辛くするのか 神経を疑うわ
改変、改ざん、変更がダメならそっちに注力すべきだろ
バックアップなりPDF出力なり変更者・変更ヶ所の記録なりなんなり
余計な仕事して会社の利益を浪費すんなよ
277デフォルトの名無しさん (アウアウウー Sa08-6eVw)
2017/07/15(土) 20:57:08.80ID:4AnbxIb9a
Excel VBA一本で家族養って食っていけてる人いる?
278デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/15(土) 21:01:14.05ID:+h55DWxyM
ねーよ
279デフォルトの名無しさん (アウアウエー Sa66-PUpa)
2017/07/15(土) 21:06:42.25ID:DU1ghimfa
>>277
vbaしか扱わない仕事なんて無いよ
必ず何かのついで
vbaあると事務作業の確実性は上がるけどね
280デフォルトの名無しさん (ワッチョイ 2623-KaH7)
2017/07/16(日) 05:14:50.82ID:QwczUPDI0
>>279
プログラマー志望でvbaの仕事しかやったことないんだが。
281デフォルトの名無しさん (ワッチョイ d071-1CH6)
2017/07/16(日) 05:59:58.39ID:K064oJPl0
>>280
クルマで言えば「1車種しか運転できない」のと同じ
プログラマになろうなど論外
282デフォルトの名無しさん (ワッチョイ 2623-KaH7)
2017/07/16(日) 06:33:45.85ID:QwczUPDI0
>>281
別の言語の方が得意なんですけどね。。
他言語のキャリアないから呼ばれない。
283デフォルトの名無しさん (ドコグロ MM40-OTuW)
2017/07/16(日) 07:32:23.57ID:xeCnao79M
>>277
半年ぐらいならあるよ
社内システムの一部を担当しててVBAだけずっとやってた
もちろんそれに付随する仕様書とかマニュアル作りとかも含むけど
284デフォルトの名無しさん (アウアウウー Sa08-6eVw)
2017/07/16(日) 16:35:01.30ID:u74giIrqa
自分は業界デビューがAccessVBAで、そのうちC/C++もやるようになった。
で、今PHPとかJavaとか知らなくて仕事減ってきてる。
285デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/16(日) 16:40:12.30ID:/sDyct4MM
ならVB.NETを経由してjavaへ向かえばよい
286デフォルトの名無しさん (ワッチョイ e66d-c7D+)
2017/07/16(日) 16:42:28.30ID:D4hbmADJ0
PHPは言語は楽ちんだけどネットワーク周りがキツイ
専サバならどうでもいいけどレンタルサーバーだと制限多くて何もできん
287デフォルトの名無しさん (ワッチョイ ce11-PUpa)
2017/07/16(日) 17:31:35.42ID:TYIh6T1E0
>>280
vbaでシステム開発してんの?
288デフォルトの名無しさん (バットンキン MM32-v2r+)
2017/07/16(日) 19:11:10.92ID:x6N2dGq3M
VBA4とかの時代はなぜかユーザー定義型のリファレンスをクラスモジュールに渡せなくて悩んだ覚えがあるけど最近は大丈夫なのねと
289デフォルトの名無しさん (ドコグロ MM02-KaH7)
2017/07/16(日) 19:14:48.07ID:zK8m4MiwM
>>287
うん。
50万ぐらいのレコードを扱う、MySqlをバックエンドとしたC/S型のシステム作ったよ。

vbaは例外ハンドラが弱すぎて、自作スタックトレースみたいな仕組みを作ったりとか、バージョン管理大変だし、vbaでシステム開発は怖すぎてやりたくないっす。

初速はいいけど、規模が大きくなってくると生産性が著しく落ちるねー。
290デフォルトの名無しさん (ワッチョイ ce11-PUpa)
2017/07/16(日) 21:17:30.80ID:TYIh6T1E0
>>289
クレイジーだな
VBAでやるの間違ってね
291デフォルトの名無しさん (ワッチョイ aa11-OTuW)
2017/07/16(日) 21:52:55.66ID:ZbG5GhXO0
>>290
バックエンドがMySQLなら50万レコード程度は楽勝だろうしフロントエンドにExcel VBAはたいして珍しくないぞ
292デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/17(月) 17:06:22.75ID:7pjXcMGRr
そもそも、VBA使いってエンジニアじゃないよね。

なので、エンジニア目線での会話はしないほうがいいよ。
293デフォルトの名無しさん (オッペケ Srd7-OYLW)
2017/07/17(月) 18:01:49.57ID:eqSf35i7r
はぁ?
294デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/17(月) 18:28:51.63ID:3BLwA/g5M
方言で喋るヤツは日本人じゃないよねみたいな言い回しは嫌い
295デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/17(月) 19:25:12.99ID:7pjXcMGRr
エンジニア畑の出身ではないということ。

エンジニア畑を歩いてきた人はVBAなんかには染まらないよ。
296デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
2017/07/17(月) 19:31:25.65ID:25jot5xr0
スネオみたいなやつだな。
297デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/17(月) 19:34:15.32ID:3BLwA/g5M
じゃあ東京出身以外は日本人じゃないんだね

哀れな見識の狭さだな
298デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/17(月) 19:41:09.32ID:7pjXcMGRr
東京出身で大阪に住んでる人は関西人じゃないし、大阪出身で東京に住んでる人は江戸っ子ではない。
299デフォルトの名無しさん (ドコグロ MM40-OTuW)
2017/07/17(月) 20:03:54.32ID:8yOMdWeDM
他の言語をバリバリ使うエンジニアがVBA使うなんていくらでもあるだろ
300デフォルトの名無しさん (アークセー Sx88-I8+U)
2017/07/17(月) 20:05:31.04ID:KYGC98nRx
ID:7pjXcMGRr
スゲー承認します
301デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/17(月) 20:12:26.22ID:7pjXcMGRr
馬鹿の一つ覚えみたいに、なんでもかんでも変数に入れちゃうし、しかもいまだにハンガリアン記法だったりする。
エラー対策もバッチリですと言わんばかりにエラー処理が延々と続くコードを晒す。
ただでさえ冗長な言語なのに輪をかけて冗長なコードを書く。
誰もお前のコードなんかコピペしねーからコアな部分だけを簡潔にかけ、と言いたくなる。
VBAが書けるぐらいでエンジニアづらするな。
302デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/17(月) 20:14:06.57ID:7pjXcMGRr
>>299
VBAメインという人はいないよね。
303デフォルトの名無しさん (ワッチョイ e66d-z+eH)
2017/07/17(月) 20:19:25.98ID:ZwJXO/8Y0
vbaメインは事務職だろう
304デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/17(月) 20:21:12.48ID:7pjXcMGRr
>>303
そうそう。エンジニアじゃないのよ。
305デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/17(月) 20:22:42.87ID:3BLwA/g5M
>>302
あれ?
VBA使いはエンジニアじゃないんじゃなかったっけ
306デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/17(月) 20:25:53.47ID:7pjXcMGRr
>>305
つまみ食いするエンジニアはいるでしょ。
307デフォルトの名無しさん (ワッチョイ aa11-OTuW)
2017/07/17(月) 20:34:45.10ID:U2FIHXXv0
>>302
VBAメイン縛りなの?
308デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/17(月) 20:37:52.24ID:3BLwA/g5M
お前の中ではVBAからプログラムに入り今は別言語メインってやつは存在しないんだね
309デフォルトの名無しさん (ワッチョイ ef11-+gV6)
2017/07/17(月) 20:54:22.06ID:ZHV5JA270
エンジニアかどうかってプログラム言語に依存する概念だっけ?
実現手段なんかコロコロ変わるのに
310デフォルトの名無しさん (ワッチョイ e66d-rON2)
2017/07/17(月) 20:56:09.78ID:ZwJXO/8Y0
vbaからhtml・phpに行ってなんか社内SEみたいなことやってるわ
割りと楽
311デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/17(月) 21:13:30.47ID:7pjXcMGRr
>>307
うん、縛り。


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


>>310
ありがちだよね。「みたいなこと」止まり。
いわゆる「エンジニアもどき」ってやつw
312デフォルトの名無しさん (ワッチョイ 12aa-z+eH)
2017/07/17(月) 21:14:47.84ID:K9hU24AK0
エンジニアは2ちゃんねるに来ないだろう
313デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/17(月) 21:32:12.23ID:3BLwA/g5M
>>311
揉まれた経験からだと言う割にメイン言語で縛ってたりVBA出身は違うとか言ったり

主張は明確に頼む
314デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
2017/07/17(月) 21:38:42.01ID:xDa7p7Qa0
ExcelVBAの挙動が謎すぎて困る
IF xx IS NOT NULL AND xx.value = 100
みたいので例外出たときは目を疑った

nullのときも両辺評価するって決まってるならまだしも
普段は何事もなく動いてるのに
急に気まぐれに両方評価するのやめーや…
315デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/17(月) 21:39:52.50ID:7pjXcMGRr
>>313
君こそ何が言いたいのかよくわからないけど、
まぁ、コードは簡潔に、ということ。
316デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/17(月) 21:45:47.60ID:3BLwA/g5M
>>315
俺の言いたいことは「方言で喋るヤツは日本人じゃないよねみたいな言い回しは嫌い」ってだけ

コードは簡潔にって所は同意見だな
317デフォルトの名無しさん (ワッチョイ e66d-qA4N)
2017/07/17(月) 21:50:52.95ID:ZwJXO/8Y0
>>314
今更だろう
longな数値同士を文字列結合できるぐらいなんだし、何が起こっても驚かん

Sub foo()
Dim a As Long
Dim b As Long
a = 1
b = 2
Debug.Print a & "|" & b
End Sub
318デフォルトの名無しさん (ワッチョイ e66d-SAgI)
2017/07/17(月) 21:51:23.92ID:ZwJXO/8Y0
ってかvbaって実は内部的に全部variantで処理してない?と思うことがたまによくある
319デフォルトの名無しさん (ワッチョイ aa11-OTuW)
2017/07/17(月) 22:01:54.76ID:U2FIHXXv0
>>314
短絡評価が保証されてない言語で
> IF xx IS NOT NULL AND xx.value = 100
なんて書く奴の方が謎
NothingじゃなくてNULLなのも謎
あとNULLならIsNull( )じゃないのも謎
320デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
2017/07/17(月) 22:05:39.05ID:xDa7p7Qa0
知らんがな!そんな詳しくない

環境制限されて使わざるをえずに使って
ちょっとカルチャーショック受けただけ
321デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
2017/07/17(月) 22:09:42.75ID:xDa7p7Qa0
まえ2chでEXCELVBAが挙動アバウトだから使いたくないって言ったら
お前の頭がアバウトなだけでVBAはアバウトじゃないって返された

ほんとにアバウトやん
322デフォルトの名無しさん (ワッチョイ 9e06-1CH6)
2017/07/17(月) 22:11:29.92ID:5wPRLPZU0
いつもながらの仲間内のどうでもいい戯言が続いているだけなんで、質問者の方は気になさらずにどうぞ~
323デフォルトの名無しさん (ワッチョイ 12aa-z+eH)
2017/07/17(月) 22:13:55.47ID:K9hU24AK0
>>314
>「nullのときも」
Nullかどうか関係なく AND 演算子がつねに両辺評価だってだけよ
324デフォルトの名無しさん (ワッチョイ 12aa-z+eH)
2017/07/17(月) 22:16:50.48ID:K9hU24AK0
>>320
ところでちょっと興味あるんだけど「環境制限」て何がNGなの?
325デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
2017/07/17(月) 22:18:26.02ID:xDa7p7Qa0
うんそれならまだわかる、たぶんそんな気がしてきた

Nullのとき正常終了してるケースがあるように見えたんだ
たぶん見間違いだ
326デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
2017/07/17(月) 22:19:24.38ID:xDa7p7Qa0
>>324
アドイン
327デフォルトの名無しさん (ワッチョイ 968f-z+eH)
2017/07/17(月) 22:46:19.63ID:1pUgrDrQ0
>>326
だっふんだ
328デフォルトの名無しさん (アウアウエー Sa66-PUpa)
2017/07/17(月) 23:33:07.69ID:2vYuRvlWa
まあ、VBAが言語としてクソなのは認めざるを得ないよな
最近javascriptつまみ食いしてるけど、これはこれで魔境とは言え進化してるしさ、常に
329デフォルトの名無しさん (ブーイモ MMed-6ouG)
2017/07/17(月) 23:33:44.68ID:PT2PKaQfM
>>319
短絡評価が保証されてないというか無いものだと思ってたけど、短絡評価される状況ってあるの?
あるなら活用したいもんだけど。
330デフォルトの名無しさん (スッップ Sd70-QKFr)
2017/07/18(火) 00:17:38.11ID:kpygt+jXd
nullの話出たから聞きたいんだけどnullとかnothingの判定を完結にやるいい方法ってないの?
やりたいのはnull,vbnull,nothing,emptyなどなど値が入ってない状態を検知したい

全部if elseifでやるのは汚すぎるからあまりやりたくない
331デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/18(火) 00:18:33.82ID:sD2l3tVa0
>>330
全部調べる関数を作ればいいのでは?
332デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/18(火) 00:19:09.03ID:zLdSm0oAM
判定メソッド作って呼ぶ
333デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/18(火) 00:40:40.16ID:j/Xwl1qG0
If文を可能な限り避けるとなると

Function foo(hoge) As Boolean
Select Case VarType(hoge)
Case 0,1
...
Case 9
If hoge Is Nothing Then
End Select
End Function

みたいな書き方かな
334デフォルトの名無しさん (アークセー Sxc1-y19a)
2017/07/18(火) 00:43:00.33ID:8EqWFNQax
データの値の状態を判定するならif elseif よりも
Select Case Expressionの方が無駄なく綺麗に書ける
335デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/18(火) 06:17:21.84ID:StSxL3ktr
>>333
ていうか、このコードは何を返すの?
336デフォルトの名無しさん (ドコグロ MMa8-OTuW)
2017/07/18(火) 06:18:50.83ID:qfl2YypxM
>>329
保証されてない ≒ 動作する場合があるかも知れないけど面倒だしどうでもいいから調べてない
337デフォルトの名無しさん (ドコグロ MMa8-OTuW)
2017/07/18(火) 06:20:35.94ID:qfl2YypxM
>>335
「値が入ってない状態」かどうかだろ
338デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/18(火) 06:30:18.74ID:StSxL3ktr
>>337
なるほど。
null判定は自分で関数作っちゃうのが早いよってことね。
339デフォルトの名無しさん (アークセー Sx72-y19a)
2017/07/18(火) 07:14:01.44ID:9/pR+lH4x
>>333
コンパイルエラー出るコードでワロタ
340デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/18(火) 07:42:58.67ID:StSxL3ktr
こんな感じかな。

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
341デフォルトの名無しさん (オイコラミネオ MMb6-hcOc)
2017/07/18(火) 08:48:10.34ID:XjshxdE9M
なんでこんな初心者用のスレでVBAはゴミだのカスだのドヤ顔でほざいてるの?
どうせ普段は別の言語で仕事してる奴が、ちょっと頼まれたVBAが解らなくてファビョってるんだろ?w
342デフォルトの名無しさん (ワッチョイ e66d-z+eH)
2017/07/18(火) 08:49:43.17ID:adssaMMv0
ファビョるって何?
343デフォルトの名無しさん (ワッチョイ 622e-S4qQ)
2017/07/18(火) 10:01:29.10ID:gw3uuz5O0
先ずはググればいいんでないかな
344デフォルトの名無しさん (スップ Sd02-y/ao)
2017/07/18(火) 11:27:07.20ID:LmZYlO3Ud
>>341
その状況なら確かに愚痴りたくなるだろうね
345デフォルトの名無しさん (オッペケ Sr39-nv+z)
2017/07/18(火) 12:19:29.42ID:1XJz7Xgqr
どうせ自称VBAに詳しいクズと自称メインは他言語のクズしかいないんだから仲良くしろよ
346デフォルトの名無しさん (ワッチョイ ce11-PUpa)
2017/07/18(火) 18:53:43.35ID:QCvagJCl0
>>341
他の言語出来るやつなら自分で調べられるし聞き方も賢くできると思うぞ
347デフォルトの名無しさん (ワッチョイ e66d-z+eH)
2017/07/18(火) 18:57:17.26ID:adssaMMv0
>>341
vbaで仕事は暇になるも、ひたすらすることがない。
コミュニケーション能力のほうが大事と気づくのに、そう時間はかからなかった

コミュ力も高まる言語、それがvba
348デフォルトの名無しさん (ワッチョイ 974b-+vhE)
2017/07/18(火) 19:02:27.52ID:FECT5IdT0
>>340
横からですが、借りてってもいいですか?
349デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/18(火) 20:30:12.85ID:StSxL3ktr
>>348
もちろん自由に使えばいいけど、スマホで書いてるのでPCテストしてない。自己責任でよろしく。

読み返したら、Is Nothing のところは明らかにエラーになると思うので、こんな感じのほうがいいかも。(PCテストしてないので自信はない。あしからず)

Function IsNone(hoge) as Boolean
  If IsObject(hoge) Then
    If hoge Is Nothing Then IsNone = True
  End If
  Select case True
    Case IsNull(hoge)
      IsNone = True
    Case IsEmpty(hoge)
      IsNone = True
    Case hoge = ""
      IsNone = True
    Case hoge = vbnullstring
      IsNone = True
    Case Else
      IsNone = False
  End Select
End Function

なんか美しくないね。
ま、好きなように書き換えて。
350デフォルトの名無しさん (ワッチョイ 974b-+vhE)
2017/07/18(火) 21:03:49.93ID:FECT5IdT0
>>349
ありがとうございます。
エラーの度に色々悩んでたもので。
この辺を美しく書けるのが理想ですが、なかなか難しい。
351デフォルトの名無しさん (ワッチョイ e66d-lquy)
2017/07/18(火) 21:10:08.24ID:adssaMMv0
僕は唱える 魔法の言葉 on error resume next
みんなで歌おう 魔法の言葉 on error resume next
352デフォルトの名無しさん (ワッチョイ 974b-+vhE)
2017/07/18(火) 21:12:18.15ID:FECT5IdT0
>>349
objectを掴めてないときのemptyとか、開放できないときのオートメーションエラーとかに悩まされて、ある程度解決してたんですが、これで最終解脱できそうな予感。
ありがたや。
353デフォルトの名無しさん (ワッチョイ 6fea-N0vF)
2017/07/18(火) 21:59:56.82ID:jNcdEVA90
ExcelからOutlookを起動し、予定表から会議依頼を作成するマクロを作成しています
あらかた思っていたものは作れたのですが、自分の予定表ではなく共有の予定表に保存する場合のコードがさっぱり分かりません
共有の予定表での作成方法をご教示頂けますでしょうか
354デフォルトの名無しさん (アークセー Sx39-y19a)
2017/07/18(火) 23:28:16.64ID:PXBpilE0x
>>349
IsObject(Expression)の判定をしてるIfブロックの終了間際にExit Function入れないとダメなんじゃね?
355デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/19(水) 00:59:23.29ID:r34rJ2pSr
>>354
おっしゃるとおり。
あるいは、Select以下をElseでつなげるか。

でも美しくないので書き換えてみた。
結構いいんじゃね?(軽くテスト済み)

結局、>>333 が最適解だったわけね。
なかなかの実力者とみた。

Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty, vbNull
      IsNone = True
    Case vbObject
      If hoge Is Nothing Then IsNone = True
    Case vbString
      If hoge = vbNullString Or hoge = "" Then IsNone = True
    Case Else
      IsNone = False
  End Select
End Function
356デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/19(水) 02:45:10.33ID:3ENxF81t0
>>355
isNoneが未定になるパスがあるんじゃね
357デフォルトの名無しさん (ワッチョイ e211-1CH6)
2017/07/19(水) 03:16:22.21ID:QlVhZGqo0
値とかオブジェクトが普通に入っている場合がすっぽり抜けてるんですがそれは
358デフォルトの名無しさん (ワッチョイ 974b-+vhE)
2017/07/19(水) 05:14:51.84ID:uwa7S77b0
>>355
Sub buf()
On Error Resume Next
For i = 1 to n
Set MyObj = SPAM
If Err then
If not IsNone(SPAM) then Brake
Else
Goto Continue
End if
Else
ここで処理。
Continue:
Err.clear
Set MyObj = Nothing
End if
Next
End sub

みたいな使い方を考えたんですが、全然美しくない・・・
どうすれば良いでしょうか。
359デフォルトの名無しさん (スップ Sd02-y/ao)
2017/07/19(水) 07:05:15.04ID:n0rSSeVEd
空の配列チェックも必要だと思うな
360デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/19(水) 08:00:32.56ID:r34rJ2pSr
>>357
IsNoneの初期値をFalseにすればいいんじゃね?
361デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/19(水) 08:37:45.43ID:pHR1WedN0
As Booleanで指定した場合はデフォルトがFalseだからTrueになる条件だけ書いていけばいい。
362357 (ブーイモ MM5e-Xf9t)
2017/07/19(水) 09:22:45.29ID:hbRH2SWGM
ああなるほど、初期化って頭が全くなかった。サンクスです。
363デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/19(水) 11:14:00.22ID:r34rJ2pSr
>>359
Case vbarray を加えればいいだけじゃね?

…って思ったら、配列の空判定は結構やっかいかも。

配列判定いる?
364デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/19(水) 12:01:18.52ID:pHR1WedN0
どういうものを実装するかにもよるけど経験から言うと配列の判定は別の方がいい。
アプローチの仕方が違うから、変数単体で認識させていたものを配列突っ込める様にした時なんかにバグの温床になる。
365デフォルトの名無しさん (スップ Sd02-y/ao)
2017/07/19(水) 12:23:01.26ID:n0rSSeVEd
>>364
もちろん目的によるけどね。
個人的には空の文字列は正常側だと思うし
366デフォルトの名無しさん (スップ Sd02-y/ao)
2017/07/19(水) 12:24:14.19ID:n0rSSeVEd
あと空の配列チェックはIsMissingと同等
367デフォルトの名無しさん (オッペケ Sr5f-nv+z)
2017/07/19(水) 12:28:40.18ID:oLf4rjVBr
variant型は脊髄反射で否定するくせにvariantみたいなヤリマン関数が大好きなお前らってw
368デフォルトの名無しさん (ワキゲー MM6e-FZLt)
2017/07/19(水) 12:36:53.61ID:kmkgyzX6M
variantのみを使うor絶対variantは使わない
みたいな論争は見たこと無いな
369デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/19(水) 14:51:31.77ID:pHR1WedN0
前スレかその前かの最後の方でVariant型絶対使わないマン出てきていた様な気がするけど。

そういう信条自体は別に良いんだけど、Variant型使えば解決出来る事を信条のせいで解決出来ず、
その結果として「VBAは欠陥」って言い出す変な人はこのスレでよく見かける。
370デフォルトの名無しさん (ワッチョイ ad73-hcOc)
2017/07/19(水) 15:28:03.09ID:GaPiK1nh0
便利な道具を使いこなせないドンくさい奴ってことだよ
371デフォルトの名無しさん (スッップ Sd70-N0vF)
2017/07/19(水) 18:00:12.50ID:3A2F1Rqpd
すいません、353ですが自決しましたのでスルーで結構です
コピペだけでなく内容も理解できるようもっと勉強します
372デフォルトの名無しさん (スップ Sd02-y/ao)
2017/07/19(水) 18:04:33.44ID:n0rSSeVEd
自決
373デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/19(水) 18:31:39.20ID:r34rJ2pSr
>>364-365
配列は要素数の空判定でお茶を濁そう。

これ以上のブラッシュアップは断念。
コードとしてはそこそこ美しいと思う。

Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty
      IsNone = True
    Case vbNull
      IsNone = True
    Case vbObject
      If hoge Is Nothing Then IsNone = True
    Case vbString
      If hoge = vbNullString Or hoge = "" Then IsNone = True
    Case vbArray + vbVariant
      If Ubound(hoge) = -1 Then IsNone = False
  End Select
End Function
374デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/19(水) 18:35:56.55ID:r34rJ2pSr
訂正。最後、Trueだった。。(^_^;)

Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty
      IsNone = True
    Case vbNull
      IsNone = True
    Case vbObject
      If hoge Is Nothing Then IsNone = True
    Case vbString
      If hoge = vbNullString Or hoge = "" Then IsNone = True
    Case vbArray + vbVariant
      If Ubound(hoge) = -1 Then IsNone = True
  End Select
End Function
375デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/19(水) 18:47:58.49ID:pHR1WedN0
>>373
Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty,vbNull
      IsNone = True
    Case vbObject
      If hoge Is Nothing Then IsNone = True
    Case vbString
      If Len(Trim(hoge)) = 0 Then IsNone = True
    Case Is >= vbArray
      IsNone = True
  End Select
End Function

ArrayはVariant型以外の場合もあるから、この方がいい。
376デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/19(水) 19:22:16.26ID:r34rJ2pSr
>>375
おおー、まだブラッシュアップできたか。
素晴らしい。

それなりに使える関数になったかもね。
377デフォルトの名無しさん (ワッチョイ 974b-+vhE)
2017/07/19(水) 19:26:12.74ID:uwa7S77b0
素晴らしい。
378デフォルトの名無しさん (ワッチョイ e66d-z+eH)
2017/07/19(水) 19:29:01.56ID:+D5BELFr0
配列と型のチェックを同時にする時はとりあえず一次元配列に直せば楽ってばっちゃが言ってた
379デフォルトの名無しさん (スップ Sd02-QKFr)
2017/07/19(水) 20:01:06.21ID:bbPNdV8fd
書いてから気づいたけどvbnullは型ではなくてただの列挙体なので判定しなくてもいいよな

あと““はなんかダサいからvbnullstring使うのがいいかも
380デフォルトの名無しさん (スップ Sd02-y/ao)
2017/07/19(水) 20:04:24.02ID:n0rSSeVEd
判定としては UBound < LBound にしなくちゃね
381デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/19(水) 20:16:48.04ID:r34rJ2pSr
>>379
たとえば、InputBoxでキャンセルを押すとvbnullstringが返る。
何も入力せずにOKを押すと "" が返る。

つまり、vbnullstringと "" は別物なのでそれぞれに判定する必要がある。
382デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/19(水) 20:20:16.17ID:r34rJ2pSr
>>380
たしかにそのほうがきれいだね。

いや、いろいろ出てくるもんだなぁw

美しいコード書きへの道のりは遠い…
383デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/19(水) 20:20:56.04ID:pHR1WedN0
>>379
vbNullStringと""は判定としては別なので、片方だけにすると抜けが起きる。
384デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/19(水) 20:28:12.28ID:pHR1WedN0
>>382
うろ覚えだけどVarTypeでvbArrayとして返ってきた場合でもUboundするとエラーになるケースがあったはずなので、
Uboundを使う場合は別関数でOn Error Gotoで飛ばせるようにしておきたい。

Function SafeUBound(hoge, Optional div As Long) As Long
On Error GoTo fin
If div = 0 Then div = 1
SafeUBound = -1
SafeUBound = UBound(hoge, div)
fin:
End Function

Function SafeLBound(hoge, Optional div As Long) As Long
On Error GoTo fin
If div = 0 Then div = 1
SafeLBound = 0
SafeLBound = LBound(hoge, div)
fin:
End Function

と置いてSafeUbound < SafeLBoundで判定したい。
385デフォルトの名無しさん (オッペケ Srd7-Ucbr)
2017/07/19(水) 20:38:22.51ID:r34rJ2pSr
一応簡単なテストコード的な…

hoge = Range("A1").Value: Debug.Print IsNone(hoge) & ":" & VarType(hoge)
hoge = InputBox("値を入力してください。"): Debug.Print IsNone(hoge) & ":" & VarType(hoge)
Set hoge = Sheets(1): Debug.Print IsNone(hoge) & ":" & VarType(hoge)
Set hoge = Nothing: Debug.Print IsNone(hoge) & ":" & VarType(hoge)
Set hoge = CreateObject("InternetExplorer.Application"): Debug.Print IsNone(hoge) & ":" & VarType(hoge)
hoge.Quit
Set hoge = Nothing: Debug.Print IsNone(hoge) & ":" & VarType(hoge)
hoge = Array(): Debug.Print IsNone(hoge) & ":" & VarType(hoge)
386デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
2017/07/19(水) 21:08:04.97ID:WMMf4PqS0
エクセルでLISTAGGに相当するものは何ですか?

ソートしてForで上下比較して足してけとか言わないでください。
387デフォルトの名無しさん (アークセー Sx88-I8+U)
2017/07/19(水) 21:53:52.63ID:UJWjDrSmx
>>371
成仏しなされ
388デフォルトの名無しさん (ドコグロ MM36-OTuW)
2017/07/19(水) 22:03:31.20ID:54vs2xq7M
>>373
> 配列は要素数の空判定でお茶を濁そう。
それが簡単にできれば>>363とかがわざわざレスせんよ

>>375
> ArrayはVariant型以外の場合もあるから、この方がいい。
アホか、ビットマスクなんだから And VbArray で判断しろよ
389デフォルトの名無しさん (イモイモ Se3a-S4qQ)
2017/07/19(水) 22:03:54.68ID:uC8D1QH+e
vbNullString を厳密に判定する場合、StrPtr()使わないと判定できないと思ふ

If StrPtr(vbNullString) = 0 Then ’~ Null Pointer
390デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/19(水) 22:36:12.42ID:pHR1WedN0
>>388
Select文だとAnd vbArrayって使えないと思うんだけど、例文出してくれる?
391デフォルトの名無しさん (ワッチョイ f191-+gV6)
2017/07/19(水) 23:08:15.46ID:3ENxF81t0
>>386
無い
作れば?
392デフォルトの名無しさん (ドコグロ MM36-OTuW)
2017/07/19(水) 23:33:45.07ID:54vs2xq7M
>>390
ひょっとして応用力ないとか?
Selectにこだわる必要ないし
どうしてもやりたきゃ
Select Case True
Case (VarType(hoge) And VbArray) <> 0
...
でいいだろ
393デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
2017/07/19(水) 23:39:04.83ID:pHR1WedN0
>>392
ああ、やっぱりそういう方法しかないのね。

元々がIf文を可能な限り使わないというところから出発しているし、
それだとIf Else使った方が処理も速いしSelect文で読みやすくするっていう利点も潰してるんだよな。
394デフォルトの名無しさん (ワッチョイ 47e4-trcG)
2017/07/20(木) 01:20:53.05ID:CiXoybJd0
>>381,383
たしかにvbNullStringと""は別物なんだが
vbNullString=""の比較はTrue返すはず
単に空チェックだけなら""とだけ比較しとけば良いんじゃね
395デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 01:36:37.21ID:IzREkzShr
やはり、配列の空判定は別関数にしたほうが良さそうだね。

Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty, vbNull
      IsNone = True
    Case vbObject
      If hoge Is Nothing Then IsNone = True
    Case vbString
      If Len(Trim(hoge)) = 0 Then IsNone = True
    Case Is >= vbArray
      If ArrayEmpty(hoge) Then IsNone = True
  End Select
End Function

Function ArrayEmpty(hoge) As Boolean
  美しいコード
End Function
396デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 01:50:57.43ID:IzREkzShr
>>384を使って、

Function ArrayEmpty(hoge) As Boolean
  If SafeUbound < SafeLBound Then ArrayEmpty = True
End Function

Function SafeUBound(hoge, Optional div As Long) As Long
On Error GoTo fin
If div = 0 Then div = 1
SafeUBound = -1
SafeUBound = UBound(hoge, div)
fin:
End Function

Function SafeLBound(hoge, Optional div As Long) As Long
On Error GoTo fin
If div = 0 Then div = 1
SafeLBound = 0
SafeLBound = LBound(hoge, div)
fin:
End Function

う~~ん、、、いまいち美しくない…orz
397デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 02:11:18.92ID:IzREkzShr
>>394
> 単に空チェックだけなら

Len(Trim(hoge)) = 0

で事足りてるような気はする。

イミディエイトウィンドウでテストしてみて。

? Len(Trim(InputBox("値を入力してね"))) = 0

[OK][キャンセル]どちらでも True が返る。
398デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/20(木) 02:46:26.38ID:2lo8GEfG0
>>396
Function RBound(hoge, Optional div As Long) As Long
On Error Resume Next
If div = 0 Then div = 1
RBound = UBound(hoge, div) - LBound(hoge, div) + 1
End Function

あくまで配列要素数があるかどうかだけ判断したいなら、こういう関数でもいいと思うけど。
399デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 07:38:01.83ID:IzREkzShr
>>398
おおー、だいぶスッキリしたね。

ひとつ残念なのは、引数の次元指定が美しくないんだよなー。

つか、1次元の要素が空の配列なんて使う?
1次元が空かどうかだけ判定すればいいんじゃね?
400デフォルトの名無しさん (スッップ Sdff-AsiQ)
2017/07/20(木) 08:01:18.50ID:fTGUueKRd
関係ないけど配列の次元を求めるWin32APIがあるのに、いつまでたってもVBAから使えないのは何なの?
401デフォルトの名無しさん (ブーイモ MM8b-yxn4)
2017/07/20(木) 08:08:10.03ID:izganQUxM
>>399
Optionalをわかってないのは美しい美しくないとか言う以前の問題。
402デフォルトの名無しさん (ワッチョイ c773-XR5Y)
2017/07/20(木) 08:34:30.46ID:fh0pKX4k0
その理屈だと、大抵の事はC++で出来るから他の言語は不要ということになるな
403デフォルトの名無しさん (スッップ Sdff-AsiQ)
2017/07/20(木) 09:48:29.70ID:fTGUueKRd
>>402
VBAから使えるようになればC++の必要性が減る、と解釈するのが自然だと思うけどな?
404デフォルトの名無しさん (ドコグロ MMfb-efHF)
2017/07/20(木) 12:39:43.62ID:qV+ymKYWM
>>393
速いとか読み易いの前に正しいコードを書きましょう
って話
動けばOkでいいじゃんと言うなら返す言葉はないけど
405デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 12:51:59.09ID:IzREkzShr
>>401
optionalはわかるよ。

仮に引数指定するとして、どの時点で指定するのかな、って。
406デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 12:55:10.23ID:IzREkzShr
>>404
つか、正しくないコードは動かないでしょ。
407デフォルトの名無しさん (スッップ Sdff-AsiQ)
2017/07/20(木) 13:34:31.13ID:fTGUueKRd
>>398のは
配列要素数があるかどうか「だけ」判断するというのとOptional引数で
次元を指定させる点がちぐはぐなんだよね。
408デフォルトの名無しさん (スッップ Sdff-AsiQ)
2017/07/20(木) 13:40:13.76ID:fTGUueKRd
それとも手持ちの関数をまんまコピペしたのかな?
409デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 18:17:53.32ID:IzREkzShr
ま、配列の空判定関数は各自で書くということでこの話題は完結かな。

ちなみに俺は、

Function ArrayEmpty(hoge) As Boolean
  On Error Resume Next
If UBound(hoge) - LBound(hoge) < 0 Then ArrayEmpty = True
End Function

って感じ。

空判定関数を書くというだけの話題だったけど、いろいろ勉強になったね。

おつかれさまー。ノシ
410デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 18:32:35.34ID:IzREkzShr
3行目は

If UBound(hoge) < LBound(hoge) Then ArrayEmpty = True

のほうが美しいな。
411デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/20(木) 18:53:02.67ID:2lo8GEfG0
そしたら

ArrayEmpty = UBound(hoge) < LBound(hoge)

でもいける。
412デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 18:56:56.64ID:IzREkzShr
>>411
素晴らしい!!

頭が柔らかくて羨ましいよ。
413デフォルトの名無しさん (スップ Sd7f-dGk5)
2017/07/20(木) 19:42:53.19ID:0IwNCiVxd
完成した関数テンプレにのこしておいてよ
vbaの良質なコードはすごく希少だし
414デフォルトの名無しさん (ドコグロ MMfb-efHF)
2017/07/20(木) 19:58:58.45ID:qV+ymKYWM
>>406
たまたま動いてるだけのコードも正しいと言い張るの?
415デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 20:06:31.90ID:IzREkzShr
>>414
つか、いったい何が悔しかったの?
君ほどの実力者が。
416デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/20(木) 20:27:30.52ID:IzREkzShr
>>413
どこに残せばいいの?

完成品はこれでいいかな。

Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty, vbNull
      IsNone = True
    Case vbObject
      IsNone = hoge Is Nothing
    Case vbString
      IsNone = Len(Trim(hoge)) = 0
    Case Is >= vbArray
      On Error Resume Next
      IsNone = UBound(hoge) < LBound(hoge)
  End Select
End Function

簡潔で美しいね。みんなの力の結晶だ。
417デフォルトの名無しさん (ワッチョイ df06-pqVL)
2017/07/20(木) 22:00:04.12ID:4n7T5v3d0
>関数テンプレにのこしておいてよ

どこにあんだよ、そんなの
ここで知った人間で保存しておきたいって奴が保存しておけば良いだろ
418デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/20(木) 23:07:38.62ID:2lo8GEfG0
スレッドのテンプレに残しておいてほしいって事なんじゃないの。
でも残し始めたら際限無くなるし、コピペで済ませずに理論と意図を理解して同じものを一から書けるようになってほしいなぁ。
419デフォルトの名無しさん (ワッチョイ df11-efHF)
2017/07/21(金) 05:39:07.68ID:qElIELIq0
>>415
えっ?
なにか悔しいことでもあったの? w
420デフォルトの名無しさん (オッペケ Sr1b-8ndb)
2017/07/21(金) 12:22:10.00ID:vdvVccQ6r
こんなコードテンプレに残したらますます初心者が初心者を惑わすスレに拍車がかかるなw
本当に仕事でエクセルマクロを必要としてる人には迷惑かけんなよw
421デフォルトの名無しさん (アウーイモ MM6b-Z4r9)
2017/07/21(金) 12:42:41.45ID:omOOvC2LM
残せというやつがwikiでも立てて残していきなよ
422デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/21(金) 14:22:43.43ID:WPcJx8Myr
> 初心者が初心者を惑わすスレ

言い得て妙だww

いいんだよ、それで。
VBA使いはエンジニアじゃないから。
423デフォルトの名無しさん (アークセー Sx1b-fDNv)
2017/07/21(金) 14:37:29.87ID:Rk0p0Likx
>>422
さーせん
lsi engっす
424デフォルトの名無しさん (ワキゲー MM9f-rceg)
2017/07/21(金) 14:46:06.01ID:+UMDimrcM
>>422
まだVBA使い≠エンジニアとか言ってるの?
エンジニアでもVBA使いは居るってのに
425デフォルトの名無しさん (オイコラミネオ MM4f-XR5Y)
2017/07/21(金) 15:00:26.78ID:rDxvAnQTM
低スキルにありがちな下らないレッテル張り
426デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/21(金) 15:28:32.09ID:4zV211iR0
どの言語の質問スレも初心者が初心者を惑わすスレ化してるのが悲しい。
「よくある質問と回答」レベルなら問題ないんだけど、ちょっと突っ込んだ質問になるととたんに雲行きが怪しくなる。

ある程度の実力を身につけたら2chじゃなくてちゃんとしたコミュニティか何かに参加するべきなんだろうけど、
だいたい見つからないし、見つけても2chほど気軽に質問投げられるような場所じゃなかったりするんだよな。
427デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/21(金) 17:53:53.00ID:WPcJx8Myr
>>426
知恵袋とか、もっと酷いよ。
428デフォルトの名無しさん (ドコグロ MM9f-efHF)
2017/07/21(金) 19:35:15.46ID:tSBq1lkVM
>>426
ネットの情報なんだから裏を取ればいいだけ
今時書いてあるキーワードでググれば調べるのもそんなに苦労しないしな
惑わされるより過疎化してまともな回答が少なくなってる方が問題だわ
429デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/21(金) 19:48:27.62ID:xN3mSVPqr
>>424
エンジニアでもVBA使いは居るけど、
VBA使いになりたいエンジニアはいない。
430デフォルトの名無しさん (ワッチョイ e711-MZAo)
2017/07/21(金) 19:55:14.10ID:BM2lcFDS0
>>429
これな
いやいやだわ
javascriptのほうが楽しいし
431デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/21(金) 19:56:51.84ID:xN3mSVPqr
>>430
JavaScriptのほうが楽しい理由は?
432デフォルトの名無しさん (ワッチョイ bf6d-Brs8)
2017/07/21(金) 19:57:13.96ID:/kK1+YO60
>javascript
お、おう
433デフォルトの名無しさん (ワッチョイ bf23-FdGq)
2017/07/21(金) 20:01:12.83ID:cakM1ik60
javascriptってvbaの次に底辺やんwww
434デフォルトの名無しさん (ワッチョイ a779-ijYd)
2017/07/21(金) 20:05:21.15ID:ZXE38ZHX0
そりゃていへん(大変)だ


(´・ω・`)b
435デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/21(金) 20:10:04.71ID:xN3mSVPqr
>>433
使ったことある人が多い言語って底辺扱いされやすいよね。

おそらく、C や Java の比じゃないと思うよ。>VBA

でも、Java は使う人が多くなりつつあるから、底辺扱いされるのは時間の問題かもね。
436デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/21(金) 20:58:10.67ID:4zV211iR0
新興の言語って利用者全員が似たような習熟度だから意思疎通が図りやすいし、
どんなにクソみたいなコード書いても判断材料が無くて効率的なコードって言ってもらえるからな。
437デフォルトの名無しさん (ワッチョイ 674f-ygJY)
2017/07/21(金) 21:00:52.93ID:Byrlump20
>>369
欠陥なんじゃなくて、馬鹿ほどvariantを使う法則なだけ
438デフォルトの名無しさん (スプッッ Sd7f-AsiQ)
2017/07/21(金) 21:04:33.39ID:mLcSl7GWd
何の話だっけ?
439デフォルトの名無しさん (ワッチョイ bf6d-p/Ft)
2017/07/21(金) 21:21:32.57ID:/kK1+YO60
西中島南方北口の話
440デフォルトの名無しさん (ワッチョイ df6f-QK4i)
2017/07/21(金) 21:54:13.22ID:xestLY0Q0
長い間SQL触ってたので、
SelectがVBAにもあったのを完全に忘れていた、という話。
441デフォルトの名無しさん (ワッチョイ bf6d-p/Ft)
2017/07/21(金) 21:57:47.01ID:/kK1+YO60
複数の言語を使うとselectとswitchは妙に間違える
俺だけかねー?
442デフォルトの名無しさん (スプッッ Sd7f-AsiQ)
2017/07/21(金) 22:03:49.06ID:mLcSl7GWd
>>441
わかる
443デフォルトの名無しさん (ワッチョイ bf23-E/h9)
2017/07/21(金) 22:16:02.62ID:gUUF92OH0
JavascriptにおけるjQuery的な
VBAのクラスってどっかにないのかな

Set class = New class
class.lastRowAdd(Range("a1"),array)
ってやったら最終行に配列の内容をぶっ込んでくれる
とか
よくある操作をパラメーター渡せばやってくれるような
444デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/21(金) 22:20:47.57ID:zOHs/jgU0
>>443
それって結果は何になるの?
445デフォルトの名無しさん (ワッチョイ bf23-E/h9)
2017/07/21(金) 22:30:00.89ID:gUUF92OH0
>>444
このコードは妄想クラスメソッドなのでエラーになるけど
もし、いろんな汎用処理を詰め込んだクラスなりを
誰か作ってたら欲しいなーと思いましたとさ、という話
446デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/21(金) 23:32:25.33ID:zOHs/jgU0
>>445
そうじゃなくて1次元配列が出来上がるとか2次元配列が出来上がるとか
もちょっと具体的に
あと第二引数はなんだ?
447デフォルトの名無しさん (ワッチョイ bf6d-p/Ft)
2017/07/21(金) 23:36:11.83ID:/kK1+YO60
そこまで引っ張る話題でもなくね?と思うけど確かにどうしたいのかわからんのもあってちょっと聞きたくもあり
448デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/21(金) 23:41:52.51ID:4zV211iR0
見た目からするとSQLで解決しそうな感じがする。
449デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/22(土) 00:08:10.36ID:AfU+LLGPr
科学計算が爆速でできるVBAのフレームワークができれば、VBAの価値は一気に上がる。
450デフォルトの名無しさん (ワッチョイ bf23-E/h9)
2017/07/22(土) 00:08:20.61ID:6zQAY8zL0
データベースな表で
第一引数のセルから下に見ていって一番下に
第二引数の配列をズドンと書き込む
という想定

たしかにそこまで引っ張るネタでもないです
451デフォルトの名無しさん (ワッチョイ c78b-8ndb)
2017/07/22(土) 00:10:10.03ID:uAFmR2/H0
そんな事言わずにもう少しひっぱろうぜ
452デフォルトの名無しさん (ワッチョイ a723-XR5Y)
2017/07/22(土) 07:42:45.82ID:SunxEu+00
>>450
ネタで言ってるなら申し訳ないが、それその通りに書くだけで良くね?
453デフォルトの名無しさん (ワッチョイ df11-pqVL)
2017/07/22(土) 10:25:51.44ID:8D42j0aL0
>>452
そういう話ではない。

まあでもVBA用の色んな処理の検索はしてきたけど、アドイン化されてるものは全然見かけないなあ。
汎用的な機能を詰め込んだアドインってこれくらい?
http://software.opensquare.net/relaxtools/
>>443の求めるものとは違うんだろうけど。

結局は自作クラスってことになりそう。
454デフォルトの名無しさん (ワッチョイ df06-pqVL)
2017/07/22(土) 10:32:33.05ID://x1WvHm0
>>451
お前の下らん雑談ネタのためにこのスレが有るわけじゃないんだyo
455デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
2017/07/22(土) 10:39:13.62ID:kiQvn5e/0
あぁarrayは横向きの配列ってことか、なるほど
VBAで汎用ライブラリ作るとしたらどんな名前になるだろう
tyっと作ってみたくもあるな
456デフォルトの名無しさん (スプッッ Sd7f-AsiQ)
2017/07/22(土) 10:51:06.27ID:c13VlgOtd
ブログ検索すれば色々出てくるから好きなのを使う。
製品的なやつが欲しいなら知らん
457デフォルトの名無しさん (スップ Sdff-dGk5)
2017/07/22(土) 12:11:05.98ID:I23HDuqEd
完成した関数テンプレにのこしておいてよ
vbaの良質なコードはすごく希少だしアドインってメンテナンス大変じゃないか?
用途としてはいろんな人に使わせる用だと思うんだけど誰かが使ってる最中に変更できないじゃん
やたらにバージョン上げると某ライブラリみたいな顛末になるし
458デフォルトの名無しさん (ワッチョイ 4754-ZLoG)
2017/07/22(土) 12:15:52.49ID:1BwCflG80
じゃあコピーしたもん編集して誰もいないときに上書きすればいいじゃん
459デフォルトの名無しさん (ワッチョイ bf6d-rftu)
2017/07/22(土) 12:17:43.62ID:kiQvn5e/0
テンプレなんかに残すと肥大化して仕方ない
460デフォルトの名無しさん (ワッチョイ e711-MZAo)
2017/07/22(土) 12:26:21.19ID:DjK3yBdG0
>>431
新しい昨日が追加されるところ
まだクソなのはクソだけどvbaは一切進歩せんからなあ
461デフォルトの名無しさん (ワッチョイ bf6d-/bFE)
2017/07/22(土) 12:38:20.99ID:kiQvn5e/0
新しい昨日って言葉が心に刺さった
462デフォルトの名無しさん (スプッッ Sd7f-AsiQ)
2017/07/22(土) 13:17:27.76ID:c13VlgOtd
某ライブラリの悪口はやめろ
463デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/22(土) 17:08:46.19ID:AfU+LLGPr
>>460
> vbaは一切進歩せんからなあ

エンジニアのための言語じゃないからね。

Dim だの Set だの If Then だの、
うんざりするのはしょうがないとしても、

objFSO

なんていう変数を見た日にゃ、
ぶっ殺したくなるね。
464デフォルトの名無しさん (ワッチョイ e711-MZAo)
2017/07/22(土) 18:29:44.93ID:DjK3yBdG0
>>463
継承もサポートしてないしね
だから初心者の入口としても不向き
マイクロソフト的にもお荷物だろうな
はよ.net framework対応してほしいわね
465デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/22(土) 18:50:19.82ID:WdXeAKAr0
そもそも継承が必要になるほどの大規模な開発をVBAでやる事自体が間違い定期。
466デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/22(土) 19:09:15.96ID:mlphh3ze0
いまさら継承はいらないよ
467デフォルトの名無しさん (ワッチョイ e711-MZAo)
2017/07/22(土) 19:22:53.47ID:DjK3yBdG0
まあ継承より配列周りの強化してほしいかな
わざわざ自分でコレクションもどき作ってるけどめんどいわ
468デフォルトの名無しさん (ワッチョイ df6f-QK4i)
2017/07/22(土) 21:16:12.56ID:yBUCBb6t0
初めてADOっての使ったけど、なんだこりゃ。

MSQueryと違って、列名が出ないじゃん。
いや、ヘッダのON・OFFで無理矢理出せるけど、
そうするとUnionした時に、レコードの途中に列名が出やがる。(列名扱いされないから?)
列名は、出力位置の上に、予め書いとかなきゃいけないの?
469デフォルトの名無しさん (アークセー Sx1b-SP9G)
2017/07/22(土) 21:48:53.95ID:juX4uYOOx
>>467
コレクションもどきって何?
配列もどきのコレクションとは違う何かかな?
470デフォルトの名無しさん (アークセー Sx1b-SP9G)
2017/07/22(土) 21:51:30.60ID:juX4uYOOx
フォームを作ってるとき、同種のパーツのオブジェクト配列が簡単に作れたら良いのにって思うわ
471デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/22(土) 22:39:49.33ID:WdXeAKAr0
>>470
For Each x In Userform.Controls
    Select Case Typename(x)
        Case "Label"
            ...
    End Select
Next

みたいなのじゃなくて?
472デフォルトの名無しさん (ワッチョイ a791-8s/R)
2017/07/22(土) 23:56:17.15ID:IXNocUxm0
>>468
列名も取れる
473デフォルトの名無しさん (アークセー Sx1b-SP9G)
2017/07/23(日) 01:19:51.07ID:Lr396bh+x
>>471
VBだとフォームパーツの型のオブジェクト変数として配列変数が宣言できる
何かと便利
474デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/23(日) 07:50:57.33ID:Ecz0kxoE0
>>470みたいな需要は確かにありそうだ。
さっそくオレ様ライブラリに取り入れよう。
475デフォルトの名無しさん (ワッチョイ e711-MZAo)
2017/07/23(日) 11:44:10.83ID:MDDS7K/i0
>>469
コレクションて値の出し入れできなかったりするじゃん?
値の追加、挿入、削除、入れ替え、ソートあたりメソッドにしたクラスだね
型は安全に出来ないけどなかなか便利
objectにも対応させたいけどやや面倒だから手を付けてない
476デフォルトの名無しさん (ワッチョイ df6f-QK4i)
2017/07/23(日) 22:46:54.50ID:EbUz/UVB0
>>472
Forで1つずつ取る方法しかなかったわ。
CopyFromRecordsetみたいに一撃弾平なのはないのね。
477デフォルトの名無しさん (アークセー Sx1b-SP9G)
2017/07/23(日) 23:32:34.17ID:O7lPo0j+x
>>475
コレクションもどきって表現はミスリーディングだな
コレクションの拡張クラスだそれは
アイテムのソートと入れ替えは便利そう
478デフォルトの名無しさん (ワッチョイ e711-MZAo)
2017/07/24(月) 02:14:49.51ID:mhaeOVx/0
>>477
for eachできないからコレクションもどきとした
中身はただの配列だし
479デフォルトの名無しさん (アークセー Sx1b-SP9G)
2017/07/24(月) 06:50:21.77ID:t6cPW3USx
>>478
コレクションをラップしてるんじゃなくて中身が配列なのか
確かにそれだとコレクションもどきだな
480デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
2017/07/24(月) 08:13:01.75ID:2edahxxPa
>>479
継承できればコレクションからゴニョゴニョした方がいいんだろうけど
どうでも良いけど値の入れ替えのメソッド名をRepracementにしてるんだけどなんかしっくりこないんだよね
なんかいいのないかな
481デフォルトの名無しさん (スッップ Sdff-AsiQ)
2017/07/24(月) 08:16:32.78ID:6zzYsskzd
そりゃ違和感あるだろな
482デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
2017/07/24(月) 08:53:04.80ID:2edahxxPa
>>481
入れ替えで辞書ツール突っ込んだらそれでてきたからしゃーない
483デフォルトの名無しさん (ワッチョイ bf23-E/h9)
2017/07/24(月) 09:00:24.88ID:vx6bYcmg0
配列の話題になってから調べて初めて知ったけど
ArrayListをVBAで使えるんだね
一通りメソッドもそろってるみたいだし、どうかな

実際に使ってみたわけではないけど
484デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
2017/07/24(月) 09:18:31.28ID:2edahxxPa
>>483
便利は便利だけど遅い
三桁四桁の配列なら大差無いだろうけどね
大抵はコレクションで事足りちゃうしね
485デフォルトの名無しさん (アウアウアー Sa4f-Z4r9)
2017/07/24(月) 13:58:09.64ID:n0AZ+pfTa
使い勝手はArrayListのほうが便利そうだね
まぁ確かに自分も使ったことないけど
486デフォルトの名無しさん (ワッチョイ df6f-QK4i)
2017/07/24(月) 21:11:53.14ID:nIPnkEuj0
ちゃんとしたやつがあるのかよwww
自作配列にArrayListって変数名付けたわwwww
487デフォルトの名無しさん (ワッチョイ 7faa-A43S)
2017/07/25(火) 15:00:10.14ID:1af6ROG50
VBAのArrayListって何よ?
488デフォルトの名無しさん (アウーイモ MM6b-Z4r9)
2017/07/25(火) 15:01:06.45ID:WO88e3uDM
.NETのライブラリが使えるて話なんじゃないの?
489デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
2017/07/25(火) 16:38:16.45ID:k4b2Lxa9a
.netライブラリの話で思い出したけどコンストラクタに引数渡せないのクソ不便だよな
渡せるようになれば使えるライブラリも増えそうだが
490デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
2017/07/25(火) 19:00:27.87ID:cmKKN7nU0
>コンストラクタに引数渡す場面ってある?
シートの名前ぐらいなら返り値の.nameを変えるけど、何とも思わん
491デフォルトの名無しさん (スッップ Sdff-AsiQ)
2017/07/25(火) 19:39:14.04ID:RB4NOmYpd
コンストラクタでしか初期化できない(他の初期化用メソッドを持たない)クラスがあれば困るけど、
そういうものって.Netにあるの?
492デフォルトの名無しさん (ワッチョイ bf6d-xeeJ)
2017/07/25(火) 20:05:49.03ID:cmKKN7nU0
>>491
const
vbaでconstが必要な用途が良くわからんけど
493デフォルトの名無しさん (ドコグロ MM9f-efHF)
2017/07/25(火) 20:19:25.50ID:KNlosRFTM
>>488
えっ、そんな機能いつ実装されたん?
494デフォルトの名無しさん (ドコグロ MM9f-efHF)
2017/07/25(火) 20:27:13.52ID:KNlosRFTM
>>491
VBA から使うとは思えないけど Exception の Message はコンストラクタでしか設定できないよ

そもそも>>489はそういう話じゃないような気がするけど
495デフォルトの名無しさん (ワッチョイ 4791-2faK)
2017/07/25(火) 22:08:51.03ID:8cBHpzox0
>>493
.netのクラス使えないのかな?って以前ググったときに
http://officetanaka.net/excel/vba/tips/tips98.htm
が引っかかって
えらい簡単に使えるんだなぁと思ったんだけど
思っただけで使ったことないし
細かいことも知らない…
ていうか、本当にいろいろ便利に使えるなら
ググるだけでバンバン情報引っかかっていいと思うんだけど
ArrayListのことくらいしか出てこんかった
496デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
2017/07/25(火) 22:30:18.63ID:k4b2Lxa9a
>>490
ブックをそのままラップしたクラスとか作りたいときにパス指定するためのメソッドわざわざ実装するのとかクソめんどくさいじゃん
結構引数指定したい場面あるよ
逆になんで引数渡せないのかという
497デフォルトの名無しさん (ワッチョイ bf6d-fQyQ)
2017/07/25(火) 22:39:21.79ID:cmKKN7nU0
>>496
そういうのは諦めた
エクセルに限らず、IEやら何もかもインスタンス作成してから、プロパティを変更している
言語仕様を嘆いても始まらん
498デフォルトの名無しさん (ワッチョイ 4791-2faK)
2017/07/25(火) 22:46:52.90ID:8cBHpzox0
話の流れで思い出したけど
これ使ったことある人いる?
マクロをC#で書けますよっていうやつ
http://mokumokucsharp.hateblo.jp/entry/2016/07/13/140602

Visual Studio Codeとかいうのもインストして
サンプルは動くんだけど
インテリセンスがうまく効かんくて使い方がよくわからない
499デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/25(火) 23:01:14.52ID:Vr2PvTdG0
それもそうだけどクラスを含むプロジェクトを参照しているモジュールからそのクラスのインスタンスを
直接Newで作れないのにも困ってる。
Create~系の関数を書いて置き場所に迷う場合が特に。
500デフォルトの名無しさん (ワッチョイ df6f-QK4i)
2017/07/25(火) 23:03:35.24ID:6CdgJbJQ0
仮にC#使いだったとしても、VBA覚えるわ。
VBAにある機能をどれくらいカバーしているのか。
99%以下ならイラネ。

ていうか、そもそもどういう仕様だろう。
C#で書いたのを、内部的にVBAに翻訳して標準モジュールに書き込むとかだったら笑う。
501デフォルトの名無しさん (ワッチョイ df6f-QK4i)
2017/07/25(火) 23:05:23.65ID:6CdgJbJQ0
よく見たら、
全てのVBAコードを生まれる前に消し去りたいとか、凄いこと書いてる。
何かに憑りつかれてはいませんか。
502デフォルトの名無しさん (ワッチョイ bf6d-fQyQ)
2017/07/25(火) 23:08:46.90ID:cmKKN7nU0
機能よりも言語仕様で
if()then
とかやっちゃう
503デフォルトの名無しさん (ワッチョイ bf6d-fQyQ)
2017/07/25(火) 23:09:23.62ID:cmKKN7nU0
しかもうまく動くから消すか消すまいかで悩む
504デフォルトの名無しさん (ワッチョイ a711-QK4i)
2017/07/25(火) 23:34:05.22ID:K76AsuLq0
重複した行を削除したいのですが、ググってみると
重複した下の行を削除するプログラムが殆どです。
上の行を消すプログラムはないでしょうか?
505デフォルトの名無しさん (ワッチョイ a711-QK4i)
2017/07/25(火) 23:46:50.72ID:K76AsuLq0
自己解決しました。
506デフォルトの名無しさん (ワッチョイ a76f-E/h9)
2017/07/26(水) 00:01:02.57ID:/aun+12z0
>>500
なんでこんな馬鹿なのに偉そうにできるんだろう
507デフォルトの名無しさん (ワッチョイ df6f-QK4i)
2017/07/26(水) 00:08:54.58ID:7P86XL9W0
>>506
だって、要は、VBA使いこなせないからC#でとか言ってるわけだろ。
VBAに心の底から辟易って、使う人の能力の問題を、何で言語のせいにしてるのか。
508デフォルトの名無しさん (ワッチョイ df11-pqVL)
2017/07/26(水) 00:11:51.48ID:U77Cst6m0
質問です。
Excel2007ですけど、複数のオートシェイプをグループ化せずに同時にカットできますか?
オートシェイプを選択してSelection.Cutメソッドを実行すると、なぜかセルがテカテカするのです。
ShapaRangeオブジェクトにはCutメソッドが無いみたいですし。
とりあえずSendKeys "^x"で対処してるけどなんだかなあ、という状況です。
509デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/26(水) 00:13:05.34ID:kYPrva630
RangeのUnion、初期値がNothingのときエラーになるのが残念だ
510デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/26(水) 00:13:33.72ID:kYPrva630
初期値つーか左辺
511デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/26(水) 00:21:08.24ID:o5MQIZHRr
Officeが入っていればどのPCでも動く、というVBAの最大の利点を犠牲にしてまでC#で書く意味はないね。
自己満以外の何ものでもない。
幸せになるのは自分だけ。
512デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/26(水) 00:30:16.20ID:kYPrva630
自分の仕事が楽になるならいいんじゃないか
共有するやつは別
513デフォルトの名無しさん (ワッチョイ bf1b-pqVL)
2017/07/26(水) 00:50:15.20ID:Fm0oLH560
VBAって基本、かならず自動でコンパイルされた上で実行されるんですか?
[デバッグ]-[コンパイル]ってやらずに実行するとえらく遅いんですが。
514デフォルトの名無しさん (アウアウカー Safb-7zDD)
2017/07/26(水) 03:26:24.46ID:KTzuPZaba
日本語変じゃね
515デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/26(水) 06:22:23.80ID:o5MQIZHRr
>>512
コード資産が共有できない(自分の中でも)、というプログラマにあるまじき行為。
516デフォルトの名無しさん (ドコグロ MMfb-efHF)
2017/07/26(水) 07:04:52.98ID:2BL9ZNyZM
>>495
> http://officetanaka.net/excel/vba/tips/tips98.htm
> が引っかかって
> えらい簡単に使えるんだなぁと思ったんだけど
これは知らなかったわ、教えてくれてありがとう

> ていうか、本当にいろいろ便利に使えるなら
> ググるだけでバンバン情報引っかかっていいと思うんだけど
> ArrayListのことくらいしか出てこんかった
ちょっとググったらCOM経由で動くみたいね(CreateObject で作成するんだから当たり前か)
http://qiita.com/mima_ita/items/efcd1a6ea86f09047984
517デフォルトの名無しさん (ドコグロ MMfb-efHF)
2017/07/26(水) 07:14:09.63ID:2BL9ZNyZM
>>498
これ使うぐらいならPowerShell使う
518デフォルトの名無しさん (スッップ Sdff-AsiQ)
2017/07/26(水) 07:36:03.65ID:o8wFJ9U0d
>>515
環境の問題なら、自分のなかでは使い続けられるんじゃね?
519デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
2017/07/26(水) 07:46:37.45ID:rbCQuCda0
>>511
中間言語があるんだよなぁ
520デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/26(水) 07:52:21.56ID:o5MQIZHRr
>>518
既存のVBAコードに、C#で書いたプロシージャを呼び出すコードを追加することはできないよね。

VBAで書いたWinのExcelマクロはMacのExcelでも使えるけど、C#で書いたらMacでは使えないよね。
521デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/26(水) 07:53:30.08ID:o5MQIZHRr
>>519
え? マジで? kwsk
522デフォルトの名無しさん (ワッチョイ 4791-2faK)
2017/07/26(水) 07:58:49.22ID:PoLK+oD40
VBAはもう言語仕様をアップデートするつもりはないんだろうけど
せめてIDEくらいはもうちょっと便利にして欲しい

>>516
つまり相互運用の登録がされているライブラリは使えるってことか
でもいちいち自分でdll作ってまでは使わないかなぁ…
523デフォルトの名無しさん (ワッチョイ c773-5QOx)
2017/07/26(水) 08:36:41.46ID:N2NJoKbw0
eclipseがVBA対応したらウケるね
524デフォルトの名無しさん (アークセー Sx1b-SP9G)
2017/07/26(水) 09:23:17.61ID:2KFV8mEox
>>508
コードや実行環境、ファイルサイズなどを見ないと何とも言えない
それから、セルがテカテカするとかいう感覚的な表現はなるべく避けるように
525デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/26(水) 09:40:24.60ID:19gyZHTT0
>>522
dllを作るってどういう状況で必要になるのかよく分からんよな。

別途用意する必要があるって事は他人に使わせるのに難があるし、
VSTO使えるならVSで他の言語使った方が早い場面が多いだろうし、
自作のdllが必要になるような処理をVBAに求める場面というのが想像出来ない。
526デフォルトの名無しさん (スッップ Sdff-AsiQ)
2017/07/26(水) 10:40:08.38ID:FItiZl47d
「Macだと」とか「プログラマとして」とかちょっとこのスレの想定ユーザーからはかけ離れてるんじゃないか?
527デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
2017/07/26(水) 10:40:27.92ID:nObVd20Fa
>>507
いや、vbaがクソ言語なのは避けようのない事実だろ
C♯erがわざわざ新しく覚える時間が無駄というのは分かるよ
オブジェクト指向にドップリしてたら使いにくいことこの上ないと思うし
528デフォルトの名無しさん (スッップ Sdff-AsiQ)
2017/07/26(水) 11:27:30.63ID:FItiZl47d
そんなにクソ言語だとは思えない
529デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/26(水) 11:43:09.73ID:19gyZHTT0
VBAをクソクソ言っている人たちはどういう立場なんだろうな。
クソだと思うなら近づかなければいいのに。

なんか他の言語でもメインで使い始めた途端にクソクソ言いそう。
530デフォルトの名無しさん (スッップ Sdff-AsiQ)
2017/07/26(水) 11:49:10.59ID:FItiZl47d
作ったものを他人と共有しようとすると限界が低い。でも自分一人ツールと割り切れば相当なことができる。
Officeソフトにそれ以上求めてもしょうがないでしょ。
531デフォルトの名無しさん (ワッチョイ c773-5QOx)
2017/07/26(水) 12:23:16.56ID:N2NJoKbw0
VBAは手軽さを重視してるんだから、高度な機能がないって意見は的外れなんだよ
532デフォルトの名無しさん (ドコグロ MM9f-efHF)
2017/07/26(水) 12:43:21.28ID:0/Y/FM4fM
>>529
ん?
アマチュアの人かな?
お仕事ならクソだろうが使わざる得ない状況なんていくらでもあると思うが
533デフォルトの名無しさん (ワキゲー MM9f-rceg)
2017/07/26(水) 12:47:32.19ID:aG45BvrzM
>>529
理解できない自分を正当化してるだけさ
534デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/26(水) 12:57:07.83ID:19gyZHTT0
>>532
VBA言語をクソって言っちゃうくらいなのにVBAでお仕事取っちゃうの?
もう少し仕事は選んだ方がいいんじゃないか。
535デフォルトの名無しさん (スップ Sdff-AsiQ)
2017/07/26(水) 13:05:35.40ID:ecs8OXuXd
そんなことだと底辺職業だと見なされるぞ
536デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/26(水) 13:36:33.55ID:o5MQIZHRr
>>526
うん、そういうこと。

ExcelマクロをC#で書くような人は、このスレの想定ユーザーからはかけ離れてるよね、ってこと。
537デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
2017/07/26(水) 13:40:18.49ID:nObVd20Fa
クソだけどofficeのマクロ言語はこれしかないから仕方なく使うしか無いだろ
プログラム言語としては時代遅れの化石なのはさすがに共通認識だと思ってたわ
現状くそなのもそうだし、これから先進化することも決してないこともクソ
あと、手軽さと高度な機能は別に共存できるでしょ
538デフォルトの名無しさん (スップ Sdff-AsiQ)
2017/07/26(水) 14:23:28.25ID:ecs8OXuXd
>>536
それは別にかけ離れてはいないだろ

Macだとかプロのプログラマはかけ離れている
539デフォルトの名無しさん (ワッチョイ a76f-E/h9)
2017/07/26(水) 14:25:46.34ID:/aun+12z0
プログラマとしてって言いだしたのって(オッペケ Sr1b-QbI6)だな
自演までして何がやりたいんだか・・・
540デフォルトの名無しさん (JP 0H4f-QK4i)
2017/07/26(水) 14:27:35.77ID:+1cN/gIlH
>>527
> オブジェクト指向にドップリしてたら使いにくいことこの上ないと思うし
俺は逆だと思うよ

オブジェクト指向をよく知ってたほうが、VBAを使いこなせる
・クラスモジュールを使いこなす
・いわゆる「インタフェース継承」を使いこなす
・WithEventsを使いこなす
大抵の奴は「クラスモジュールっていつ使うんですか」レベルだから
541デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
2017/07/26(水) 15:11:24.07ID:ZPUGQ/usa
>>540
俺の言いたいことを一ミリも汲んでくれてないなw
そりゃオブジェクト指向的なプログラミングを知ってれば非オブジェクト指向言語でも構造的に自然と書くようになる
それとこれとは別の話
機能がないからわざわざ自分で作らにゃいかんから不便だって話をしてる
542デフォルトの名無しさん (ワッチョイ df06-pqVL)
2017/07/26(水) 16:52:15.43ID:6VvQXdi20
この手の下らんやり取りはこれまでもあったし、これからもウンザリするほど続くんだろうなぁ┐(´д`)┌ヤレヤレ
543デフォルトの名無しさん (オッペケ Sr1b-QbI6)
2017/07/26(水) 18:04:37.55ID:o5MQIZHRr
>>539みたいに、自演自演て騒ぐ奴をしばしば見かけるけど、彼は何がしたいの?

つか、そもそもここは自演ができないスレなんだよね?

こういうのはスルーしたほうがよいのでしょうか。
544デフォルトの名無しさん (ササクッテロル Sp1b-8s/R)
2017/07/26(水) 18:16:40.16ID:VQAVDfi4p
>>541
オブジェクト指向と機能は別の概念だけどな
機能は言語がなんであっても追加出来るだろうし
オブジェクト指向は言語に関する概念だから
545デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/26(水) 18:30:45.45ID:19gyZHTT0
オブジェクト指向は設計に対する概念
546デフォルトの名無しさん (JP 0H4f-QK4i)
2017/07/26(水) 18:33:38.33ID:+1cN/gIlH
>>541
オブジェクト指向の一切を封じられてるから使いづらいというのなら、それはそうでもないってことさ
機能が足りないというんなら、先人が作ったライブラリでも探せば?
https://github.com/rubberduck203/VBEX とか
547デフォルトの名無しさん (ササクッテロル Sp1b-8s/R)
2017/07/26(水) 18:41:04.50ID:VQAVDfi4p
>>545
設計と言語両方じゃね?
548デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
2017/07/26(水) 19:21:44.23ID:rbCQuCda0
>>540
自作クラスってどういう時に使うの?
excelが思いっきりオブジェクトだから、それに対する手続き的な操作しかしないわ
549デフォルトの名無しさん (スップ Sdff-AsiQ)
2017/07/26(水) 19:28:41.05ID:ecs8OXuXd
>>548
状態を持ったモノを扱いたいときじゃね?
状態を持たないんだったら関数の組み合わせで表現するのは簡単だ。
550デフォルトの名無しさん (ドコグロ MM9f-efHF)
2017/07/26(水) 19:39:55.05ID:pjdGyN9QM
>>534
言語で仕事選べるとか無職の発送は素晴らしいな w
551デフォルトの名無しさん (ワッチョイ a791-8s/R)
2017/07/26(水) 19:42:18.93ID:W1HWCg900
>>549
状態を持つ⇒オブジェクトを使う
対偶は
オブジェクトを使わない⇒状態を持たない

対偶は必ず真とはいえなくない?
552デフォルトの名無しさん (ドコグロ MM9f-efHF)
2017/07/26(水) 19:45:32.31ID:pjdGyN9QM
>>548
ログクラスとか作ってたな
書き込むシートと書き込む行を別々に管理するのは嫌だったから
でも継承もできないしコンストラクタの引数も持てない状況ではあまり使いやすくならないし結局クラスはほとんど使わない
そもそも俺がずっと保守するわけにもいかんから
553デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/26(水) 19:45:44.80ID:19gyZHTT0
>>547
オブジェクト指向言語は「オブジェクト指向的な設計が可能な言語」の事だから、
言語によってオブジェクト指向が決まるわけではないし、言語に対する概念というと違うと思うなぁ。

>>550
募集要項に何の言語が出来るかとか普通書いてないか?
Javaで募集かけたけどC#での開発がメインですみたいなカオスな職場もあんまりないだろ。
554デフォルトの名無しさん (ワッチョイ e711-MZAo)
2017/07/26(水) 19:46:32.77ID:+NZ2Dbuu0
>>544
オブジェクト指向をサポートしてるかって話だよ
なんとなく分かるべ
>>546
ことさ、じゃなくてさ
俺はそういうところがクソだと言ってるの
クソはクソでも使わなきゃいから使うだけで
ライター、チャッカマン、バーナーが他所であるのにマッチでも火をおこせるしこれはこれで良いもんだぞって言ってるようなもん
555デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
2017/07/26(水) 19:52:11.21ID:rbCQuCda0
>>552
ログはfunctionだなぁ
コンストラクタ使えないと、わざわざNewしてクラス無いメソッド呼び出してって二度手間じゃね。
functionならいつでもどこでも一行で済む
556デフォルトの名無しさん (スップ Sdff-AsiQ)
2017/07/26(水) 19:53:00.06ID:ecs8OXuXd
>>551
⇒(ならば)とは言ってないけどな

まあ、オブジェクトを使わない⇒状態を持たせづらい(グローバル変数を使うはめになる)

あくまでVBAでの話だよ
557デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
2017/07/26(水) 19:53:37.44ID:rbCQuCda0
>>549
例えば、具体的にどういう時に使うの?
状態って言っても初期値とかExcelから拾ってくるから、それをわざわざclassにほーり込むのもなー
558デフォルトの名無しさん (ワッチョイ a791-8s/R)
2017/07/26(水) 19:56:29.43ID:W1HWCg900
>>553
オブジェクト指向言語は
オブジェクト指向設計したものを
そのまま実装し易い言語じゃないかな

言語の概念でもあると思うけどな

オブジェクト指向言語じゃなくても実装できるのは確かだけど
それならVBAでもオブジェクト指向設計を実装できるんじゃないかな
559デフォルトの名無しさん (スップ Sdff-AsiQ)
2017/07/26(水) 19:57:08.36ID:ecs8OXuXd
>>557
初期値より途中の経緯を記憶しておかないと次の計算ができないものとか?
「ワークシートに書き出す」じゃ再利用性に欠ける
560デフォルトの名無しさん (ワッチョイ bf6d-1kH5)
2017/07/26(水) 20:08:20.48ID:rbCQuCda0
>>559
だから具体的にどんなことをするんだよw
ゲームとかはナシでね

ちと思いつかない
561デフォルトの名無しさん (ワッチョイ a791-8s/R)
2017/07/26(水) 20:09:21.78ID:W1HWCg900
>>556
グローバル変数を使わなくても状態を表現できるんじゃね?

例えば再帰関数みたいに状態を引数にするとか
562デフォルトの名無しさん (ドコグロ MM9f-efHF)
2017/07/26(水) 20:11:22.90ID:pjdGyN9QM
>>553
> オブジェクト指向言語は「オブジェクト指向的な設計が可能な言語」の事だから
そんなことを言い出したらアセンブリ言語でもオブジェクト指向は可能だよ
そういう極端な話をしたい訳じゃないんだと思うよ

> >>550
> 募集要項に何の言語が出来るかとか普通書いてないか?
ああ、そういう働き方してるひとなのね
もっとでっかい案件レベルのつもりだったから話が噛み合わないのも無理ないな
563デフォルトの名無しさん (ドコグロ MM9f-efHF)
2017/07/26(水) 20:12:48.62ID:pjdGyN9QM
>>555
書き込み行はどうやって覚えてるの?
複数のログを扱うとか面倒じゃね?
564デフォルトの名無しさん (ドコグロ MM9f-efHF)
2017/07/26(水) 20:15:20.68ID:pjdGyN9QM
>>558
> それならVBAでもオブジェクト指向設計を実装できるんじゃないかな
関数ポインタがないから継承とか無理じゃね?
565デフォルトの名無しさん (ワッチョイ a791-8s/R)
2017/07/26(水) 20:15:48.34ID:W1HWCg900
状態を持つ必要がある入出力関係が
独立に多数ある場合は
クラスを使うと比較的実装が簡単になるのかな?
566デフォルトの名無しさん (ワッチョイ bf6d-1kH5)
2017/07/26(水) 20:17:56.75ID:rbCQuCda0
>>563
ログはlogシート一つ、3列

時間 / タイプ / 内容
7/26 20:00 log 作業開始
7/26 20:05 success 作業成功
7/26 20:07 error err.discriptionの内容
7/26 20:10 log 作業終了

で、書き込む時に毎回A列の最終行を取得し、そこに記録してる
覚える必要はないと思う
567デフォルトの名無しさん (ワッチョイ e711-MZAo)
2017/07/26(水) 20:24:18.05ID:+NZ2Dbuu0
表の検索とかsqlでやる人もいるんだろうけど自分としてはクラスにしちゃうのがしっくりくるわ
配列の操作もクラスにしてると楽
あと、似たような処理で操作する対象が違うメソッドなんかは同じ名前にしても問題ないところとかも地味に便利だよ
関数だと命名に困ることがよくある
568デフォルトの名無しさん (スップ Sdff-AsiQ)
2017/07/26(水) 20:30:27.76ID:ecs8OXuXd
>>560
さあ?いろいろあるでしょ
数値を放り込むとその度に回数をカウントアップし、最大値・最小値、合計、時刻を記録する、とか。
これくらいだったらワークシートでもできるけど、そういう対象が数多くなるとオブジェクト配列でやりたくなる。
どのワークシートのどこに?とか考える必要なくなるしエクセル以外のOfficeでも使えるし。
569デフォルトの名無しさん (ワッチョイ a791-8s/R)
2017/07/26(水) 20:51:20.79ID:W1HWCg900
>>564
一般的な形では難しいかもしれないけど
サブクラスに相当する関数から
スーパークラスに相当する関数を呼べばいいんじゃね?

逆にスーパークラスに相当する関数に
スイッチみたいな引数を付けて
サブクラスに相当する関数に分岐するとか
570デフォルトの名無しさん (ワッチョイ df6f-QK4i)
2017/07/26(水) 21:00:52.52ID:7P86XL9W0
>>567
SQLを使うのって速度的な理由。
自作クラスでSQL以上のスピードが出るなら、
みんなそうするわ。
571デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/26(水) 21:20:54.79ID:19gyZHTT0
>>558
VBAで出来ないと思っているならオブジェクト指向を何か勘違いしているからオブジェクト指向設計の本を読むといいよ。
他の言語みたいな書き方が出来ないだけで、VBAでもオブジェクト指向プログラミングは普通に出来るから。
572デフォルトの名無しさん (ワッチョイ e711-MZAo)
2017/07/26(水) 21:34:48.38ID:+NZ2Dbuu0
>>570
まあ、あんまり大きなデータは扱わんからな
別に検索する形式が決まってるなら内部的にsqlで値抜き出してもいいわけだし
データの塊をオブジェクトとして扱っちゃったほうが何かまとまり感あってしっくり来るって感じかな
573デフォルトの名無しさん (ワッチョイ e711-MZAo)
2017/07/26(水) 21:36:24.28ID:+NZ2Dbuu0
>>571
できるできないの話じゃないんだって
あとオーバーライドはちょっと厳しくないか
どうやって実装する?
574デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/26(水) 21:54:31.59ID:kYPrva630
>>564
AddressOf あるし使おうと思えば使える
575デフォルトの名無しさん (ワッチョイ 473d-pqVL)
2017/07/26(水) 22:02:04.56ID:19gyZHTT0
>>573
自身のメンバとして基底クラスを宣言して、基底クラスに自身を登録して、
基底クラスのメソッドを実行すると基底クラス側で自身の特定のメソッドが呼ばれるとかかな。
576デフォルトの名無しさん (ワッチョイ df11-efHF)
2017/07/26(水) 22:05:43.16ID:gz+R3HSW0
>>569
さすがにそれはないわ...
577デフォルトの名無しさん (ワッチョイ df11-efHF)
2017/07/26(水) 22:09:54.70ID:gz+R3HSW0
>>574
アドレス取るのはいいけどどうやって使うつもり?
578デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/26(水) 22:32:43.94ID:kYPrva630
>>577
ごめんVBAから直接には使えなかった
579デフォルトの名無しさん (ワッチョイ bf23-FdGq)
2017/07/26(水) 23:08:50.27ID:+wB1yzpw0
>>511
officeも何もなくてもc#書けるけど。
コンパイラ初めからあるから。
580デフォルトの名無しさん (ワッチョイ bf23-FdGq)
2017/07/26(水) 23:11:34.30ID:+wB1yzpw0
vbaでオブジェクト指向とか中級者がやることだな。
初心者よりタチ悪いこともある。
581デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
2017/07/26(水) 23:58:17.75ID:kYPrva630
上級者はなにするんだ?
582デフォルトの名無しさん (ワッチョイ db91-ntdb)
2017/07/27(木) 00:50:19.96ID:Gu8HEug70
>>576
なぜ?
で、どうするの?
583デフォルトの名無しさん (ワッチョイ db91-ntdb)
2017/07/27(木) 01:05:44.74ID:Gu8HEug70
>>571
VBAと言う言語にクラスとかオブジェクト指向の概念が入っている
つまりオブジェクト指向の概念は言語にもつながる
と言う主張

一方でオブジェクト指向は設計にのみ関わる概念と言う主張もある

オブジェクト指向の概念を取り入れた言語でオブジェクト指向設計したものを実現するのと
オブジェクト指向の概念がない言語で実現するのでは
生産性とかに差が生じるだろう
584デフォルトの名無しさん (ワッチョイ 2623-toSE)
2017/07/27(木) 01:36:25.07ID:Ddw23w1u0
>>581
上級者はvbaは大人しく手続き型的にやるよ。

オブジェクト指向しようとして、これできないかなーあれできないかなーとか悩むだけ無駄。
585デフォルトの名無しさん (ワッチョイ db91-ntdb)
2017/07/27(木) 01:54:44.40ID:Gu8HEug70
>>584
各シートの統計情報を取りたい時はどうする?
例えば、セルを更新した回数、最大値、最小値、平均値
を各シート毎に知りたい時

後から分散とか標準偏差とかも知りたくなったらどうする?
586(ワッチョイ 0fcf-GNib)
2017/07/27(木) 02:24:19.55ID:lqCZB24a0
Youtuberヒカルが月収を明らかに!!おはよう朝日です出演

@YouTube


第1回案件王ランキング!YouTuberで1番稼いでるのは誰だ!

@YouTube

;t=61s
ユーチューバーの儲けのカラクリを徹底検証!

@YouTube

;t=504s
【給料公開】チャンネル登録者4万人突破記念!YouTuberの月収公開!

@YouTube

;t=326s
誰も言わないなら俺がYouTuberのギャラ相場を教えます

@YouTube

;t=118s
YouTuberになりたいのは馬鹿じゃない!YouTuberになる方法

@YouTube



最高月収5000万円だとさ。年収じゃなくて「月収」な
おまえらもyoutubeに動画投稿したほうがいい
顔出したくないならラファエルみたいに仮面かぶればいい
手っ取り早く視聴数稼ぐには有名ユーチューバーへの物申す系動画がオススメ
587デフォルトの名無しさん (ワッチョイ 2623-toSE)
2017/07/27(木) 04:56:34.97ID:Ddw23w1u0
>>585
クラスやらユーザ定義型を作るね。
588デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/07/27(木) 05:41:33.30ID:8/6stQ5Xr
>>584
つ 上級者の定義
589デフォルトの名無しさん (ワッチョイ db91-ntdb)
2017/07/27(木) 06:25:09.17ID:Gu8HEug70
>>587
クラスってオブジェクト指向じゃないの?

上級者的に手続き型でやらないの?
590デフォルトの名無しさん (ドコグロ MM8a-gqKx)
2017/07/27(木) 06:47:24.74ID:P1js1uXhM
>>582
> なぜ?

> 逆にスーパークラスに相当する関数に
> スイッチみたいな引数を付けて
> サブクラスに相当する関数に分岐するとか
サブクラスを増やす度にスーパークラスに手を入れるつもりなの?
真顔で言ってるなら単なるアホだろ w

> で、どうするの?
無理じゃね?
って書いてあるんだが...
591デフォルトの名無しさん (ドコグロ MM8a-gqKx)
2017/07/27(木) 07:00:09.74ID:P1js1uXhM
>>585
> 各シートの統計情報を取りたい時はどうする?
要件次第

> 例えば、セルを更新した回数、最大値、最小値、平均値
> を各シート毎に知りたい時
更新回数以外は全セルなめて計算することもあるしイベント毎に合計、最大、最小を更新していくのもあるだろうな

> 後から分散とか標準偏差とかも知りたくなったらどうする?
そういう機能を実装するだけ
イベント以外はオブジェクト指向関係ないと思うぞ
592デフォルトの名無しさん (ワッチョイ db91-ntdb)
2017/07/27(木) 07:12:45.05ID:Gu8HEug70
>>590
でいちいち同じ処理をコピペするの?
593デフォルトの名無しさん (ワッチョイ db91-ntdb)
2017/07/27(木) 07:13:37.01ID:Gu8HEug70
>>591
生産性が違うんじゃね?
594デフォルトの名無しさん (ワッチョイ db91-ntdb)
2017/07/27(木) 07:15:00.43ID:Gu8HEug70
>>591
全セルなめるとか性能要件を満たせなくなる可能性が高いだろ
595デフォルトの名無しさん (ワッチョイ 666d-V1Wy)
2017/07/27(木) 07:17:39.18ID:mlaDFoVL0
>>594
それはその時に考えたほうが良いと思う
大体
> 例えば、セルを更新した回数、最大値、最小値、平均値
> を各シート毎に知りたい時
こんな状態がまずないw
596デフォルトの名無しさん (ワッチョイ db91-ntdb)
2017/07/27(木) 07:17:56.55ID:Gu8HEug70
>>590
サブクラスからスーパークラスを呼ぶ方は?
597デフォルトの名無しさん (ドコグロ MM8a-gqKx)
2017/07/27(木) 07:37:59.47ID:P1js1uXhM
>>592
どこからコピペが出てきたのか意味不明

>>593-594
だから「要件次第」って書いてあるんだが
最初に一度はなめないといけないから一回しか呼ばれないと言う要件ならその方が効率的だし

>>596
それになんの意味があるんだ?
マジでオブジェクト指向の基礎からやり直した方がいいレベルだぞ
598デフォルトの名無しさん (ワッチョイ 2623-toSE)
2017/07/27(木) 07:40:20.87ID:Ddw23w1u0
>>589
そうだよ。
データ構造だけ定義するんだよ。
599デフォルトの名無しさん (アウアウエー Sae2-kGGk)
2017/07/27(木) 08:16:42.60ID:LMuXn2N9a
>>575
結局それだと要らんもんまで呼び出したり不便なんだよ
やれんことはないけど不便
オーバーロードもやれんことはないけど実装がめんどくさい
使いたい場面は結構出てくると思うけどね
インターフェースもなんかスマートじゃないし
600デフォルトの名無しさん (ワッチョイ 1f73-cdfR)
2017/07/27(木) 08:50:43.35ID:f8l+azOG0
お前らスレタイ読んで他所へ行け
601デフォルトの名無しさん (ワッチョイ db5a-PZKh)
2017/07/27(木) 09:44:44.74ID:cQuO+1bD0
【IT】10代のネット環境「スマホのみ」が7割、「PCのみ」は25%にとどまる [無断転載禁止]©2ch.net
http://egg.2ch.net/test/read.cgi/bizplus/1500900491/
602デフォルトの名無しさん (スップ Sd8a-y7IM)
2017/07/27(木) 09:49:36.92ID:yI2DKD3yd
>>600
クラスモジュールがある以上、このスレの話題として守備範囲内
603デフォルトの名無しさん (JP 0H76-ZO1u)
2017/07/27(木) 10:22:34.31ID:ZNB0F0Q0H
>>554
> ライター、チャッカマン、バーナーが他所であるのにマッチでも火をおこせるしこれはこれで良いもんだぞって言ってるようなもん
マッチだけでも十分OOできる
それにWithEventsもあるしね
https://github.com/rubberduck203/VBEX のソース読んだか?以外といろいろできるぞ
604デフォルトの名無しさん (スップ Sd8a-y7IM)
2017/07/27(木) 10:40:17.72ID:yI2DKD3yd
>>603
これはあなたが作者さんなの?

興味深いが手っ取り早く知りたい
VBEX /testから読めばいいのかな?
605デフォルトの名無しさん (JP 0H76-ZO1u)
2017/07/27(木) 10:55:11.44ID:ZNB0F0Q0H
>>604
> これはあなたが作者さんなの?
いや、俺じゃないよ
コードサンプルとして読んでみたらってこと

あとこれとか
https://github.com/jpimbert/VBAToolKit/tree/master/Source/VbaUnit

OOの知識があって、いわゆる「インターフェース継承」を視野に入れれば、かなりのことができる
さらに、WithEventsを使えば双方向データバインディングなんかも実装できる
606デフォルトの名無しさん (ドコグロ MM22-toSE)
2017/07/27(木) 11:24:49.36ID:698/A489M
インタフェースなんかvbaで使うなボケ
607デフォルトの名無しさん (スップ Sd8a-y7IM)
2017/07/27(木) 11:56:09.26ID:yI2DKD3yd
>>605
うーん、、、
日本語のないかな?(ボソッ
608デフォルトの名無しさん (アークセー Sxb3-PRKf)
2017/07/27(木) 12:01:06.07ID:SAqwCo2Mx
>>606
ほーわーいー
609デフォルトの名無しさん (スップ Sd8a-y7IM)
2017/07/27(木) 12:17:23.37ID:yI2DKD3yd
チンリン山脈
610デフォルトの名無しさん (アウアウエー Sae2-kGGk)
2017/07/27(木) 13:24:05.39ID:LMuXn2N9a
>>603
いやだからさ
俺の言いたいこと伝わらないし理解する気無いよね
こっちはマッチしか無いから仕方なくマッチ使ってんの
不満だからって努力を放棄してるわけじゃないからな?
ただどう考えても手間だろ
そんだけの話
611デフォルトの名無しさん (JP 0H76-ZO1u)
2017/07/27(木) 14:02:53.37ID:ZNB0F0Q0H
>>610
君も俺の言いたいこと1ミリも理解しようとしてないから、お互い様だね
612デフォルトの名無しさん (ササクッテロル Spb3-ntdb)
2017/07/27(木) 14:43:39.94ID:DPiXNUUHp
>>597
意味がわからない?
学びなおした方が良いぞ
613デフォルトの名無しさん (ドコグロ MM8a-gqKx)
2017/07/27(木) 16:09:11.81ID:P1js1uXhM
>>612
> サブクラスに相当する関数から
> スーパークラスに相当する関数を呼べばいいんじゃね?
そこまで言うならなんの意味があるのか説明してみな
614デフォルトの名無しさん (ワッチョイ ea06-HJpE)
2017/07/27(木) 16:44:21.21ID:7xCZa4oD0
だからさぁお前らは雑談したいだけだろ?スレ立ててそこでやれっつーの
クソうぜぇ
615デフォルトの名無しさん (アウアウエー Sae2-kGGk)
2017/07/27(木) 16:44:34.77ID:uf/My/5wa
>>611
使い方によってはvbaだってoopできるよ!って言いたいんでしょ?
616デフォルトの名無しさん (JP 0H76-ZO1u)
2017/07/27(木) 17:00:44.58ID:ZNB0F0Q0H
>>615
さいしょから言ってるでしょ
> オブジェクト指向にドップリしてたら使いにくいことこの上ないと思う
なことないよ
617デフォルトの名無しさん (スップ Sd8a-y7IM)
2017/07/27(木) 17:11:23.71ID:yI2DKD3yd
使いたいときに便利な機能を自由につまみ食いできるのがいいライブラリだと思っているんだが、
オブジェクト指向のライブラリって少しおせっかいというか世界観を押し付けてくるところがある。
会員にならないと利用できないサービスみたいな感じ。
自分で作ったものを自分で利用する分には当然問題ないんだけどね。
VBAの言語機能の弱さを考えると、クラス間の関連のある体系的な使い方を実現するのは厳しいだろう。
618デフォルトの名無しさん (アウアウエー Sae2-kGGk)
2017/07/27(木) 17:44:10.44ID:uf/My/5wa
>>616
俺は工夫を強いられてる時点でうんちだと言っている
以上です
619デフォルトの名無しさん (JP 0H76-ZO1u)
2017/07/27(木) 17:59:09.25ID:ZNB0F0Q0H
経験不足だね
言語10個くらいマスターしてこい
620デフォルトの名無しさん (アウーイモ MM9f-k5Qo)
2017/07/27(木) 19:42:01.40ID:xCwJ4jCdM
某サイトを参考にメールを一括作成するVBAを書いています。
createitemfromtemplateの行で「実行時エラー13 型が一致しません」というエラーが出ます。
どうやらcreateitemfromtemplateがうまく機能していないようなのですが、解決方法を教えていただけませんでしょうか。
よろしくお願いいたします。
※「Microsoft Outlook 14.0 Object Library」の参照設定はONになっています。
-----------------------------------
Sub main()

Dim OL As New Outlook.Application
Dim M As MailItem

Dim MaxRow: MaxRow = Range("A1").End(xlDown).Row

For i = 2 To MaxRow
Set M = OL.createitemfromtemplate("D:\本文.msg")

M.To = Cells(i, 列.件名).Value
M.Subject = Cells(i, 列.件名).Value
M.Attachments.Add "D:\" & Cells(i, 列.添付ファイル).Value
M.HTMLBody = Replace(M.HTMLBody, "●●", Cells(i, 列.氏名).Value)
M.SaveAs "D:\" & Cells(i, 列.企業名).Value & "_" & Cells(i, 列.氏名).Value & ".msg"
Next

End Sub
-----------------------------------
621デフォルトの名無しさん (ワッチョイ 6623-V1Wy)
2017/07/27(木) 20:32:44.20ID:60P4ZjAM0
>>620
msdnのリファレンスをみると
Outlookテンプレート(.oft)を指定しろって書いてあるので
怒られているとおり、型がちがうのでしょう。

CreateItemメソッドを使えばいいんじゃないでしょうか。
622デフォルトの名無しさん (ワッチョイ 0fe4-Tef8)
2017/07/27(木) 21:59:25.00ID:aAe8+IMH0
オブジェクト指向がどうこうって語りたいなら

オブジェクト指向
って言葉と
オブジェクト指向言語
って言葉をちゃんと区別して発言して下さい
623620 (アウーイモ MM9f-k5Qo)
2017/07/27(木) 22:07:28.99ID:xCwJ4jCdM
>>621
返信ありがとうございます!!
すみません、CreateItemでも変わらずエラーでした・・。
ちなみに下記のように.oftを指定しても同じでした。
これは本当に不思議です・・・。

---------------------------------------
Sub test03()

Dim OL As New Outlook.Application
Dim M As MailItem
Set M = OL.CreateItemFromTemplate("D:\本文.oft")

M.To = "aaaa@bbb.co.jp"
M.SaveAs "D:\test03.msg"

End Sub
---------------------------------------
624デフォルトの名無しさん (ワッチョイ 6aaa-V1Wy)
2017/07/27(木) 22:19:54.50ID:eHKEweRs0
関西のお笑いと関西のお笑い芸人も区別して語るべきなのか?
625デフォルトの名無しさん (アークセー Sxb3-PRKf)
2017/07/27(木) 22:40:28.48ID:SAqwCo2Mx
>>624
そうよ
626デフォルトの名無しさん (ワッチョイ ea6f-ZO1u)
2017/07/27(木) 22:46:54.67ID:e65zqkX+0
俺予想だと、2023年くらいに.NETと統合されるので、大丈夫じゃないの。
627デフォルトの名無しさん (ワッチョイ 6623-V1Wy)
2017/07/27(木) 23:04:48.75ID:60P4ZjAM0
>>623
Sub test()

Dim ol As New Outlook.Application
Dim mi As MailItem
Set mi = ol.CreateItem(olMailItem)
mi.Display

End Sub

この最小構成でメール編集画面がでるかお試しを。
出なかったら参照設定が変なのかも。
Excelのバージョンが変わると勝手に参照設定のバージョンも
変わるという罠に引っかかったことがあるので。
実行時バインディングでやってみると言う手もあり。
628620 (アウーイモ MM9f-6wLz)
2017/07/27(木) 23:18:55.37ID:xCwJ4jCdM
>>627
最小構成でやってみると、やはり同じエラーでした!
これは、参照ができていないのですか??
629デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/07/27(木) 23:25:30.12ID:8/6stQ5Xr
'// 1行目の項目名が、A列から順に
'//[アドレス][件名][添付ファイルパス][本文]
'// のとき、

Dim dataSet
Dim lastRow As Long
Dim i As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row
dataSet = Range(Cells(2, 1), Cells(lastRow, 4)).Value

With CreateObject("Outlook.Application")
  .GetNamespace("MAPI").GetDefaultFolder(16).Display
  For i = 1 To lastRow - 1
    With .CreateItem(olMailItem)
      .To = dataSet(i, 1)
      .Subject = dataSet(i, 2)
      .Attachments.Add dataSet(i, 3)
      .Body = dataSet(i, 4)
      .Save
    End With
  Next i
End With
630デフォルトの名無しさん (ワッチョイ 6623-V1Wy)
2017/07/27(木) 23:27:06.45ID:60P4ZjAM0
>>628
よく考えたら、参照ならその前にエラーを吐きそう。
ためしに

Sub test()

Dim ol As Object
Set ol = CreateObject("Outlook.Application")
Dim mi As Object
Set mi = ol.CreateItem(olMailItem)
mi.Display

End Sub
これをOption Explicitを無効にして実行したら
どうなるでしょうか?

だめならOS再起動してみる。
どうにも理解不能なエラーがこれで直ったことがあるw。
631デフォルトの名無しさん (ワッチョイ 0fe4-Tef8)
2017/07/27(木) 23:56:32.00ID:aAe8+IMH0
>>628
まず、そのユーザーでOutlookはちゃんと動いてメールの送受信できるのか?
632620 (アウーイモ MM9f-6wLz)
2017/07/28(金) 00:24:24.58ID:EJW5hZGgM
>>630
試しましたが同じエラーでした。

>>631
問題なくできています。


みなさん、ご協力ありがとうございます。ご迷惑おかけしてすみません。
今気づいたのですが参照先が14.0でした。最新は15.0なんですよね?これが原因でしょうか?
633620 (アウアウアー Sab6-6wLz)
2017/07/28(金) 04:23:09.57ID:Kx1QSHwna
皆様ありがとうございました! 
理由はわかりませんが突然できるようになりました!
本当にご迷惑おかけしました!
634デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/07/28(金) 04:32:44.73ID:ccATQH/dr
>>632
ごめん。コード間違ってた。orz

参照設定をoffにし、↓のコードで試してみて。

'// olMailItemを直値(0)に変えた
Dim dataSet
Dim lastRow As Long
Dim i As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row
dataSet = Range(Cells(2, 1), Cells(lastRow, 4)).Value

With CreateObject("Outlook.Application")
  .GetNamespace("MAPI").GetDefaultFolder(16).Display
  For i = 1 To lastRow - 1
    With .CreateItem(0)
      .To = dataSet(i, 1)
      .Subject = dataSet(i, 2)
      .Attachments.Add dataSet(i, 3)
      .Body = dataSet(i, 4)
      .Save
    End With
  Next i
End With
635デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/07/28(金) 04:34:16.17ID:ccATQH/dr
一歩遅かったか…orz
636620 (アウアウアー Sab6-6wLz)
2017/07/28(金) 06:49:10.86ID:Kx1QSHwna
>>635
おはようございます!
ありがとうございます!
637デフォルトの名無しさん (ワッチョイ db11-AITk)
2017/07/28(金) 23:02:57.85ID:+oxMyCi10
win10
excel2016で
MSXML2.XMLHTTPを使って
responseTextでgoogle検索結果のページを取得しようとすると、
responseTextで返ってきたものが、今までwin7 excel2007などで返ってきたものと全然違うんですが、win7の時のように受け取る方法ってありませんか?

win7の時はhtmlそのものが返ってきてましたがwin10では最初の方が判読困難です。

やろうとしていることは、vbaでgoogle画像検索の結果の画像をセルに表示しようと思ってます。
638デフォルトの名無しさん (ワッチョイ 6aaa-V1Wy)
2017/07/30(日) 10:16:32.82ID:WZc9I6Vq0
そういえば responseBody しか使ったことないなあ
(adTypeBinary な ADODB オブジェクトに Write するために)
639デフォルトの名無しさん (ワッチョイ db11-AITk)
2017/07/30(日) 12:41:33.40ID:ND/Yhbfk0
すみません、いろいろ試してたんですが、google以外ではちゃんと同じようなものを受け取れてました。
googleでは環境によって返すものが違うのかもしれません。
その先はスレ違いになるので自分でいろいろやってみます。ありがとうございました。
640デフォルトの名無しさん (ワッチョイ 666d-fl5W)
2017/07/30(日) 15:24:50.24ID:LIjBkUDz0
api以外でgoogleの検索結果を取得しないほうがいい
すぐにアクセス禁止になる
641デフォルトの名無しさん (アウーイモ MM9f-GszO)
2017/08/02(水) 00:57:39.97ID:O3oN8G+MM
Function Name2Adr(str As String)
Dim Cts As Folder, Ct As ContactItem
Set Cts = CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)
Set Ct = Cts.Items.Find("[Email1DisplayName] = '" & str & "'")

If Ct Is Nothing Then Name2Adr = "不明" Else Name2Adr = Ct.Email1Address

Set Cts = Nothing: Set Ct = Nothing
End Function
↑ローカルのアドレス帳から表示名を検索しメアドを返す関数です。これはうまくいくのですが、
↓下のグローバルアドレス帳を検索するものがうまくいきません。エラーメッセージは「オブジェクトはこのプロパティまたはメソッドをサポートしていません」です。
どなたか解決法をご教示ください。よろしくお願いします。
Function gName2Adr(str As String)
Dim olApplication As Outlook.Application
Dim olNameSpace As Outlook.Namespace
Dim olAddressLists As Outlook.AddressLists
Dim olAddressList As Outlook.AddressList
Dim olAddressEntries As Outlook.AddressEntries

Set olApplication = New Outlook.Application
Set olNameSpace = olApplication.Session
Set olAddressLists = olNameSpace.AddressLists
Set olAddressList = olAddressLists.Item(2)
Set olAddressEntries = olAddressList.AddressEntries

Dim olAddressEntry As Outlook.AddressEntry
Set olAddressEntry = olAddressEntries.Items.Find("[Email1DisplayName] = '" & str & "'") '←この行でエラー
If olAddressEntry Is Nothing Then gName2Adr = "不明" Else gName2Adr = olAddressEntry.Email1Address
End Function
642デフォルトの名無しさん (アウアウカー Safb-IFL0)
2017/08/02(水) 02:57:39.31ID:9fnjiac4a
>>641
名前長いな
643デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/08/02(水) 06:22:21.40ID:Yub86NHXr
少々長くてもわかりやすい名前をつけるのが基本だからね。
ハンガリアンよりは全然いい。
644デフォルトの名無しさん (ワッチョイ 0f3d-HJpE)
2017/08/02(水) 06:31:28.66ID:SLRN4nNP0
少々長くても分かりやすい名前を付ける、それがハンガリアン記法

想像してるのはたぶんシステムハンガリアン記法
645デフォルトの名無しさん (ワキゲー MMa2-lmxC)
2017/08/02(水) 07:20:47.27ID:Mrcj6vwlM
変数はAddressなのにメソッド名はAdrで統一してないのは理由あるの?
646デフォルトの名無しさん (アークセー Sxb3-h9ZP)
2017/08/02(水) 07:40:08.64ID:ed9o3kBwx
変数名長いなぁ
olAppとかAdrListとかにすれば良いやん
647デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/08/02(水) 07:40:35.97ID:Yub86NHXr
>>644
単に「ハンガリアン」と言った場合は、システムハンガリアンの意味で用いられていることが多い。

ということでどうかひとつ。
648デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/08/02(水) 07:44:09.62ID:Yub86NHXr
>>646
むしろ関数名を

GetNameToAdddress

にしたほうがいいかも。
649デフォルトの名無しさん (ワッチョイ 666d-V1Wy)
2017/08/02(水) 07:44:43.49ID:boOv7Sns0
>>641
Dim Cts As Folder, Ct As ContactItem

ユーザー定義型が定義されてません
エラーが出た
650デフォルトの名無しさん (ドコグロ MM22-gqKx)
2017/08/02(水) 08:11:17.19ID:i5+f8wczM
>>649
参照設定してないだけじゃね?
651デフォルトの名無しさん (ワッチョイ 666d-F3YI)
2017/08/02(水) 08:56:23.68ID:boOv7Sns0
>>650
まぁそうだけど、どれ参照するのか探すのめんどい
開発用に、コンポーネント参照の全選択ほしいな。それともあるんかな?
652デフォルトの名無しさん (ワッチョイ ea2e-ZO1u)
2017/08/02(水) 09:10:48.85ID:Y/LidHA/0
>>650
649は店に来たお客さんのつもりのようだから、まともに相手する必要はないよ
653デフォルトの名無しさん (オイコラミネオ MMb6-cdfR)
2017/08/02(水) 11:50:02.54ID:a22879YUM
単なる自己満足なんだからそこまで突っ込むなよ
どうせ永遠に平行線なんだろ?
654デフォルトの名無しさん (ワキゲー MMa2-lmxC)
2017/08/02(水) 12:08:29.03ID:pZ2w6jYsM
>>648
メソッドの頭文字は小文字にしたいな
あとd多いのはなんか意図あるの?
655デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/08/02(水) 12:26:23.95ID:Yub86NHXr
>>654
ごめん、dはタイプミスだ。

メソッドの頭文字を小文字にするのは何流?
VBA流では大文字だよね。
656デフォルトの名無しさん (ワキゲー MMa2-lmxC)
2017/08/02(水) 12:33:57.68ID:x+1N4OhAM
>>655
言語関係なくただのキャメルケースだよ
657641 (オイコラミネオ MMb6-Cs75)
2017/08/02(水) 13:14:55.44ID:1uis+HfsM
みなさん、ご迷惑おかけしてすみません。
outlook vbaのスレに書くべき質問だったでしょうか、、

>>649
すみません、outlookのライブラリです。
よろしくお願いします。
658デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/08/02(水) 15:50:17.32ID:Yub86NHXr
>>656
いや、だからメソッドをキャメルケースにするのは何流なのかなと。
659デフォルトの名無しさん (アウアウエー Sae2-kGGk)
2017/08/02(水) 16:45:06.13ID:pmz5Ebvba
>>658
javascriptはキャメルだと思う
660641 (オイコラミネオ MMb6-Cs75)
2017/08/02(水) 16:56:06.29ID:uQ5PKG3iM
みなさん、ご迷惑おかけしてすみません。
outlook vbaのスレに書くべき質問だったでしょうか、、

>>649
すみません、outlookのライブラリです。
よろしくお願いします。
661デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/08/02(水) 18:07:23.96ID:Yub86NHXr
>>659
IDの最後がvbaだ。カコイイ

なるほど、メソッドキャメルはJS流だったのね。サンクス
662デフォルトの名無しさん (ドコグロ MM22-gqKx)
2017/08/02(水) 18:28:23.95ID:i5+f8wczM
>>660
Outlook VBA スレないからまあここでもいいと思うが仕事中に軽くググった範疇だといい方法が見つからん
> Set olAddressEntry = olAddressEntries.Items.Find("[Email1DisplayName] = '" & str & "'") '←この行でエラー
Items.Find( ) は Folder オブジェクトしか持ってないからここでエラーになるのは当然
グローバルアドレス帳(Global Address List)は GetGlobalAddressList( ) で取得できるし内容も入っているんだが取得したリストの GetContactsFolder( ) を呼び出しても Nothing しか返ってこない
何か設定が要るのか根本的に頓珍漢なのかさっぱりわからん
663デフォルトの名無しさん (オッペケ Srb3-ZCwv)
2017/08/02(水) 19:58:09.08ID:Yub86NHXr
ここでも聞いてみれば?

つ【VBAなんでも質問スレ Part2】
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
664620 (アウアウアー Sa83-zhMW)
2017/08/03(木) 06:23:52.11ID:y8hiM9O7a
>>662
ありがとうございます!勉強になります。

> グローバルアドレス帳(Global Address List)は GetGlobalAddressList( ) で取得できるし内容も入っているんだが

↑その内容というのは、debug.printで見ることはできますでしょうか??
665デフォルトの名無しさん (ワッチョイ 3b6d-dE0h)
2017/08/03(木) 07:51:33.57ID:T58VKPgl0
>>664
foo = bar.GetGlobalAddressList( )
をどこかに入れてfooをウォッチ式で見る
666デフォルトの名無しさん (ドコグロ MM4b-/F0N)
2017/08/03(木) 08:16:18.57ID:8PSWLe0hM
>>664
Set GlobalAddressList = Namespace.GlobalAddressList( )
Debug.Print GlobalAddressList.AddressEntries.Item(1).Name
とかすれば見れるよ
全件エクスポートするサンプルとかあるので見てみて
https://www.slipstick.com/developer/code-samples/export-exchange-gal-excel/
667デフォルトの名無しさん (オイコラミネオ MM4b-1llH)
2017/08/04(金) 13:47:28.51ID:2SBD/wKoM
バージョンが上がって日付時刻型の除算ができなくなりました。バリアント型にしても空になります。
対応方法はありませんでしょうか?
また、こういう仕様変更はどこで確認できますか?
668デフォルトの名無しさん (スプッッ Sdaf-pRZg)
2017/08/04(金) 19:09:28.11ID:HbiPV4wFd
>>667
Dateの除算てなんのためにやるんだっけ?
CLngとかしてからじゃダメなの?
669デフォルトの名無しさん (ワッチョイ 3b6d-dE0h)
2017/08/04(金) 19:49:21.85ID:EaU+sIDF0
日付じゃなくて時刻(時間)で除算したいのでは?
1950/1/1を2で割って1925/1/1…なんてことはしないだろう

>>667
office 更新プログラム等で検索
https://support.office.com/ja-jp/article/Office-%E6%9B%B4%E6%96%B0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0-a118ec61-f007-492f-bfa5-5a6f764d5471
670デフォルトの名無しさん (ワッチョイ cf11-1llH)
2017/08/04(金) 20:11:22.22ID:CfFJ59fY0
時刻ですね
671デフォルトの名無しさん (オッペケ Sr1f-bQt4)
2017/08/05(土) 08:53:42.25ID:3n3qQbM6r
>>667
エラーの出たコードを書いてみて。
あとバージョンも。2016?
672デフォルトの名無しさん (ワッチョイ a16f-/FH4)
2017/08/05(土) 09:48:36.05ID:7J5Re5fS0
2010でも時刻の割り算できたけど?
673デフォルトの名無しさん (オッペケ Sr1f-bQt4)
2017/08/05(土) 10:09:48.61ID:3n3qQbM6r
じゃあ、この話題はこれで終わりだな。
674デフォルトの名無しさん (ワッチョイ cf11-4x8g)
2017/08/05(土) 11:28:42.39ID:J2w+rLAY0
エラーコードは51
データ型が日付時刻の除算はエラーでる
675デフォルトの名無しさん (ワッチョイ 3b6d-rm2g)
2017/08/05(土) 12:58:50.71ID:kXEyZiX90
Sub foo()
bar = Date / 2
Debug.Print bar
End Sub

2010、win7だけどエラーでない
676デフォルトの名無しさん (ワッチョイ cf11-4x8g)
2017/08/05(土) 13:00:51.75ID:J2w+rLAY0
>>675
時刻同士で割って見て
677デフォルトの名無しさん (ワッチョイ 2b11-ysrI)
2017/08/05(土) 13:07:29.37ID:j7okUzoP0
ダブルにキャストしてから計算したら
ずれるのかな?
678デフォルトの名無しさん (ワッチョイ 3b6d-iBdB)
2017/08/05(土) 13:08:47.84ID:kXEyZiX90
>>676
Sub foo()
bar = Date / Date
Debug.Print bar
End Sub

普通に1になったけど
679デフォルトの名無しさん (ワッチョイ 8351-FJki)
2017/08/05(土) 13:35:11.02ID:1ncAb1Zc0

@YouTube

680デフォルトの名無しさん (オッペケ Sr1f-bQt4)
2017/08/05(土) 16:53:51.52ID:3n3qQbM6r
質問者からのエラーコードの提示がないので無駄な回答だな。
681デフォルトの名無しさん (ワッチョイ 036f-/FH4)
2017/08/05(土) 18:06:14.68ID:fC/MwjWZ0
時刻を時刻で割る意義は? どんな分野で必要と成るんだ? それは知りたい
682デフォルトの名無しさん (アウーイモ MMb3-7CC5)
2017/08/05(土) 18:54:05.96ID:UH683s5QM
バージョンが上がって…
とか言いながらバージョンを書かない馬鹿
指摘されても書かないという
683デフォルトの名無しさん (ワッチョイ ad91-j7Kr)
2017/08/05(土) 18:58:41.09ID:NpEI7ikB0
>>681
8時間の就業時間の間に25分掛かる作業を何回できるか見積るとか
684デフォルトの名無しさん (ワッチョイ 83ed-qC7T)
2017/08/05(土) 19:00:17.07ID:90gBDUFU0
しょうもない質問はほっとけばいいんじゃ?
それとも答えたくてウズウズしてる感じ?
685デフォルトの名無しさん (ワッチョイ 0b23-WlLB)
2017/08/05(土) 19:45:20.37ID:ze59kfDf0
>>683
無理くり理由をこじつけてもその程度だよな…ほんと何がしたいんだろうな
686デフォルトの名無しさん (アウーイモ MMb3-7CC5)
2017/08/05(土) 20:31:20.41ID:2UigV3EYM
質問するのにバージョンも書かない
ID変わってるのに名無しのまま
環境書けと言ってるのに無視
こんな処理する理由は?と聞かれても無視


こんな人間の生産物を現場で使う恐怖
687デフォルトの名無しさん (ワッチョイ 036f-/FH4)
2017/08/05(土) 20:47:12.34ID:fC/MwjWZ0
それは時刻で無くて時間だろ と
688デフォルトの名無しさん (オッペケ Sr1f-bQt4)
2017/08/05(土) 23:20:40.34ID:3n3qQbM6r
>>686
何のためにここで質問したのかわからないよね。

つか、俺たちが釣られただけ?
689デフォルトの名無しさん (ワッチョイ 0b06-gAma)
2017/08/05(土) 23:56:01.89ID:dqSa99my0
質問者が軌道修正のために必要な情報を提供しないってのはここではザラにあることだろ。
そんなのによく付き合ってられんなー
690デフォルトの名無しさん (ワッチョイ 03aa-dE0h)
2017/08/06(日) 00:12:38.56ID:7dbJmn2Z0
質問室じゃねえんだよ
691デフォルトの名無しさん (オッペケ Srd9-31he)
2017/08/06(日) 12:22:25.32ID:hXGNAkd3r
また教えたがりの無能が暴れとるのかw
692デフォルトの名無しさん (アウアウカー Sac9-6G5k)
2017/08/06(日) 16:09:44.69ID:wM27hiyIa
暴れているのはただの煽り
693デフォルトの名無しさん (オイコラミネオ MM4b-4x8g)
2017/08/07(月) 16:41:33.18ID:/LwpuoG3M
>>678
dim a as date
dim b as date
dim test as date

a = time
b = time
test = a / b

でエラー出た
694デフォルトの名無しさん (ワッチョイ 49ad-mf2b)
2017/08/07(月) 16:59:56.15ID:PHW4jpUx0
>>693
地域オプションで先頭が数字以外になるような書式だったとか?
695デフォルトの名無しさん (ワッチョイ 9be4-jyli)
2017/08/07(月) 19:35:32.88ID:9LTblBy60
>>693
環境書けよ
なんでエラー出たとか言うやつは環境書かないの

VBAの日付型は原則数値として扱えるはずので
日付型である事が原因でエラーが出るとは考えにくいけどなぁ

ちなみにエラー51のヘルプ(2007)には
>このエラーが Error ステートメントまたは Raise メソッドで生成されたものでなければ、Microsoft 製品テクニカル サポートに連絡して、メッセージが表示されたときの状況を知らせてください
ってあるから、ホントにエラー51出たならEXCELのバグの可能性もないではないな
696デフォルトの名無しさん (ワッチョイ 3b6d-VAa7)
2017/08/07(月) 20:09:27.70ID:PGc1T+jA0
excel2010 win7
エラーが起こるのは除算の分母側がdateだった時
longにキャストするか、variantで宣言していれば問題ない(もちろん宣言してない場合も問題ない)
バグくさい挙動だなぁ

Sub foo2()
Dim a As Time
Dim b As Time
Dim test As Date

a = Time
b = Time
test_long = (a * 1) / (b * 1) 'ok
test = a / (b * 1) 'ok
test = 1 / b 'error
test = (a * 1) / b 'error
test = a / b 'error
End Sub

Sub foo()
Dim a As Variant
Dim b As Variant
Dim test As Date

a = Time
b = Time
test = a / b 'ok
End Sub
697デフォルトの名無しさん (ワッチョイ ad91-3aaz)
2017/08/07(月) 20:36:42.78ID:5JtEoMJq0
Cdbl()で分母をDoubleにキャストすればいいだけじゃね?
698デフォルトの名無しさん (ワッチョイ 3b6d-VAa7)
2017/08/07(月) 20:39:22.17ID:PGc1T+jA0
>>697
まぁ解決法としてはそれでも何でもいいし、そもそもdateで除算って事をやらないんだけど
根本的な原因が分からないと、変なとこで悪影響受けそう
699デフォルトの名無しさん (ワッチョイ ad91-3aaz)
2017/08/07(月) 20:54:07.86ID:5JtEoMJq0
Time って
DateTime.Time プロパティのことだよな
Property Time As Variant
だからもともとVariant型

dim a As Time がエラーになるんだが
700デフォルトの名無しさん (ワッチョイ ad91-3aaz)
2017/08/07(月) 21:05:47.61ID:5JtEoMJq0
Date型はVBAのデータ型で"21:02:32"みたいな文字列なんじゃね?
だから計算するとエラーになる
分子にDate型を持ってきたときはDoubleに自動的にキャストされてると予想
701デフォルトの名無しさん (ワッチョイ 3b6d-9fgs)
2017/08/07(月) 21:13:12.34ID:PGc1T+jA0
>>699
ごめんなさい訂正前の送ってしまいました
定義部分は以下に変えてください

Sub foo2()
Dim a As date
Dim b As date
702デフォルトの名無しさん (ワッチョイ cf11-4x8g)
2017/08/07(月) 23:25:10.55ID:kmFs6vPH0
>>695
2007じゃエラーでないよ
703デフォルトの名無しさん (ワッチョイ 03aa-dE0h)
2017/08/07(月) 23:33:20.74ID:elxVZ6u90
データベースのDATETIME型の値がそのままVBAのDate型変数にマップできれば楽なのに、
1900年以前だとうまくいかないのが残念だ。
704デフォルトの名無しさん (ワッチョイ ad91-Mpnj)
2017/08/07(月) 23:39:54.26ID:5JtEoMJq0
>>702
2010とかだとエラーになる

分母にDate型を持ってくるときは
明示的にCdblでキャストすればエラーにならなくできる

MS側にバグレポートしたところで修正するかどうかはMS側次第
仕様変更したと言うかもしれない
705デフォルトの名無しさん (ワッチョイ 0b06-gAma)
2017/08/07(月) 23:59:58.12ID:HViBOnBI0
そろそろ日付時刻での除算の意味を教えて
706デフォルトの名無しさん (ワッチョイ 3b6d-EhRY)
2017/08/08(火) 00:39:23.26ID:sJaKEDtc0
>>705
>>683
全くない需要ってわけでもないと思う
707デフォルトの名無しさん (ワッチョイ 2b11-ysrI)
2017/08/08(火) 00:57:18.12ID:ZuuTozCK0
キャストしてできるんならなんの問題もないだろう
キャストできない理由があるんじゃないのか?
まさか発想になかったわけじゃないだろうし
708デフォルトの名無しさん (ワッチョイ 4f91-7CC5)
2017/08/08(火) 05:17:42.76ID:ttZKdV6P0
つーか質問者本人どこいったんじゃ
709デフォルトの名無しさん (オッペケ Sr1f-bQt4)
2017/08/08(火) 07:26:59.16ID:qEy0EStIr
>>693
つか、dateをdateで割った答えがdateっておかしくね?

たとえば、60分を15分で割ったら答えは「4分」ではないよね。

なので、

Dim test as Long

とすべき。
710デフォルトの名無しさん (ワッチョイ ad91-Mpnj)
2017/08/08(火) 07:52:46.37ID:4vV+Ffiu0
>>709
そこはエラーとは関係ない
debug.print a/b
でもエラーになる

意味的に間違いでも形式的文法的には正しい
711デフォルトの名無しさん (ワッチョイ 3b6d-dE0h)
2017/08/08(火) 07:57:39.53ID:sJaKEDtc0
これエラーにならん
Debug.Print 1 / Time

これはエラー
foo = time
Debug.Print 1 / foo

意味わかんねぇmsに聞くか
712デフォルトの名無しさん (オッペケ Sr1f-bQt4)
2017/08/08(火) 08:15:13.81ID:qEy0EStIr
>>711
型が関係してるとしか思えないんだけど…
713デフォルトの名無しさん (ドコグロ MMcf-/F0N)
2017/08/08(火) 08:17:59.56ID:7r69+AsTM
>>706
>>683は 時間÷時間 の話で 時刻÷時刻 じゃないだろ
時間を演算するならシリアル値に変換して演算すればいいだけ
日付時刻に対する加減算以外の演算なんて意味ない
714デフォルトの名無しさん (ササクッテロロ Spa9-Mpnj)
2017/08/08(火) 08:18:45.83ID:T3VkQlydp
>>711
TimeはDaterime.timeでvariantだからエラーにならないのはわかる

fooもvariant?それともDate型?
715デフォルトの名無しさん (ササクッテロロ Spa9-Mpnj)
2017/08/08(火) 08:21:04.55ID:T3VkQlydp
>>713
時刻を基準日時刻からの時間以外で定義できるんだっけ?
716デフォルトの名無しさん (ワッチョイ 3b6d-9Afs)
2017/08/08(火) 08:24:56.85ID:sJaKEDtc0
>>713
>日付時刻に対する加減算以外の演算なんて意味ない
除算も乗算も意味あるんだが、一体何を言ってるんだ
717デフォルトの名無しさん (ワッチョイ 57aa-/L7g)
2017/08/08(火) 08:24:58.32ID:Czpew14v0
今のとこ試した範囲では、2010で割る方の方がDate型だとエラー51だすな
バリアントだとVarType 7(vbDate)でも平気
どうにもバグくさい。だれかインシデント余ってるやつMSに聞いてくれ

>>711
だからエラーになるやつは環境かけよ
Win7 2010ではそれだけではエラーにならんぞ
どっかでfooをDateで宣言してんじゃねえのか
718デフォルトの名無しさん (ワッチョイ 57aa-/L7g)
2017/08/08(火) 08:31:46.30ID:Czpew14v0
>>713
VBAでは時間と時刻の型は区別されてないから、その議論に意味があるかは微妙だな
Date型を時刻ととらえるか基準時点からの時間ととらえるかの問題だろ

>>716
時間と時刻の違いわかってる?
一般的な会話での時間って言葉はほとんどが本来だと時刻の間違いだぞ
時刻の除算にどんな意味があるんだ?
719デフォルトの名無しさん (ブーイモ MMc1-wxFU)
2017/08/08(火) 12:35:05.88ID:l31z4HMeM
除算は1900/1/1からの経過日数の比
って認識で良いのかな
720デフォルトの名無しさん (ワッチョイ 0b06-gAma)
2017/08/08(火) 17:34:44.63ID:o2sPvDRf0
>時間の就業時間の間に25分掛かる作業を何回できるか見積るとか

(終了時間ー開始時間)を分単位に直して25で割るってことじゃないですか。
これは10000円を100円単位に分けたらいくつになる?ってのと同じ数量の問題だよね?

時刻の除算ってのは例えば
A = "2017/04/11 16:54:00"
B = "2017/08/15 10:45:48"

で A / B (Aは日付型でなくてもいいんだろうけど)ということでしょ?
これにどんな意味があるのよ
721デフォルトの名無しさん (スプッッ Sddb-6kmL)
2017/08/08(火) 18:14:01.43ID:Plhneb/rd
単純な操作のはずなのによくわからん

0. .xlmxファイルを(パス:\A)に作成しておく

1. フォルダ(パス:\B)内のすべてのCSVファイル(データは1列のみ)を、先ほど作成したファイルのSheet1の2列目から順次マージする

データを繋げるところで詰まるので助けてください
722デフォルトの名無しさん (ドコグロ MMcf-/F0N)
2017/08/08(火) 18:15:20.46ID:7r69+AsTM
>>715
日時が先か時間が先かは知らんが今の議論には関係ないと思う

>>716
どういう意味があるのか書いてからほざきない

>>718
言語で区別してないから使う人が意識しなきゃねって話
723デフォルトの名無しさん (ワッチョイ ad91-Mpnj)
2017/08/08(火) 19:18:53.44ID:4vV+Ffiu0
>>722
Date型で割るとエラーになると言う点と
あとどうでもいいんだが時刻で割ると言う点の
2つの論点が並行している

Dateで割る時はdoubleにキャストすればいいだけ
724デフォルトの名無しさん (ワッチョイ ad91-Mpnj)
2017/08/08(火) 19:20:53.27ID:4vV+Ffiu0
>>720
Bを1とした時にAを数値で表した値
どんな価値があるかはその時によるが
全く価値がないとも言い切れない
725デフォルトの名無しさん (オッペケ Sr1f-bQt4)
2017/08/08(火) 19:33:26.34ID:qEy0EStIr
>>721
君が書いたコードのどこが拙いのか検討しようぜ。

まずはコード書いて。
726デフォルトの名無しさん (ワッチョイ 5323-/FH4)
2017/08/08(火) 19:36:48.60ID:bHuYQqMY0
Excel総合に間違って投下してしまったので、こちらに再投稿します。

以下のマクロをボタンに登録し、印刷範囲をhtmで保存しようとしています。
しかし、このブックを一度上書き保存等しないと正常に動作しません。
見よう見まねでこうなったコードなのですが、どうすれば良いでしょうか?
アドバイスお願いします。

Sub SAVE()
'
' SAVE Macro
'
'
With ActiveWorkbook.PublishObjects.Add(xlSourcePrintArea, _
Range("AT1").Value & ".htm", "Sheet1", "", xlHtmlStatic _
, "", "")
.Publish (True)
.AutoRepublish = False
End With
ChDir "C:\Users\admin\Desktop"
End Sub
727デフォルトの名無しさん (ワッチョイ 1f6f-/FH4)
2017/08/08(火) 21:36:34.68ID:JRNVbyEr0
複数ステップのOLE DBの操作でエラーが発生しましたとか言われて、
adOpenKeyset, adLockOptimisticで対策したら、
今度はUpdateで怒られるんですが、どうにかなりまんせん?
728デフォルトの名無しさん (ワッチョイ ad91-Mpnj)
2017/08/08(火) 21:50:18.55ID:4vV+Ffiu0
>>727
エラーとカーソルタイプやロックタイプは関係あるの?
729デフォルトの名無しさん (ワッチョイ 1f6f-/FH4)
2017/08/08(火) 22:02:37.25ID:JRNVbyEr0
>>728
わからないんですが、
他にも、adUseServerでエラーになるので、
adUseClientに直すと、違うエラーが出たり、
何かを直すと違うエラーが出る、もぐら叩き状態です。
730デフォルトの名無しさん (ワッチョイ ad91-Mpnj)
2017/08/08(火) 22:06:10.50ID:4vV+Ffiu0
sqlのエラーならそこらへんは関係ないんじゃないの?
なんのエラーか知らんけど
731デフォルトの名無しさん (ワッチョイ 693d-gAma)
2017/08/08(火) 22:12:27.27ID:wQlpajLt0
DB操作はClose通らない処理を挟んでしまって二重にOpenするとかで苦労した事があるなぁ。
それが原因ならクラス作ってデストラクタにClose書いておけば忘れなくて便利。
732デフォルトの名無しさん (ワッチョイ 1311-/F0N)
2017/08/08(火) 23:58:40.83ID:cql1o/lA0
>>723
> Date型で割るとエラーになると言う点と
俺はそんなことは問題にしてない
意味のない演算ができてしまう言語なんて珍しくないし

> あとどうでもいいんだが時刻で割ると言う点の
どうでもいいなら放置しておけば?
733デフォルトの名無しさん (ワッチョイ a16f-/FH4)
2017/08/09(水) 09:22:17.50ID:Qcpwsibl0
>>726
保存先をパス付きで指定したらどうかな
chdirは自分のパスだろうし
734デフォルトの名無しさん (ワッチョイ 0b06-gAma)
2017/08/09(水) 10:44:54.73ID:F6AoeH710
>>727
こいつもそうだけど、ソースも示さずエラーが出ると言ってどんなエラーかも示さず


アホか
大方SQL単体でも失敗してんだろ
735デフォルトの名無しさん (バットンキン MMe3-crsy)
2017/08/09(水) 13:14:09.12ID:b9k/R7FPM
Sexel-VBA
736デフォルトの名無しさん (オッペケ Sr1f-bQt4)
2017/08/09(水) 13:28:47.67ID:MinGKowar
>>734
たぶん、『解答』が欲しいのではなく、『レス』が欲しいんだろうね。

つまり、雑談したいだけなんじゃね?
737デフォルトの名無しさん (ワッチョイ 5323-/FH4)
2017/08/09(水) 13:56:39.55ID:LTZc9U500
>>733
ありがとうございます。帰宅後、やってみます。
738デフォルトの名無しさん (バットンキン MMe3-crsy)
2017/08/09(水) 18:28:18.83ID:b9k/R7FPM
>>737
いいってことよ(´・ω・`)b
739デフォルトの名無しさん (ワッチョイ 0e6f-aEKd)
2017/08/10(木) 22:43:19.50ID:JdKfuZ5y0
>>734
一般的でなく、同じ目にあった経験者しか答えを知らなそうな内容なので・・。

ググって出てきた例が全滅なので、
多分、AccessではなくExcelでやってるのが原因だとは思うのですが。
740デフォルトの名無しさん (ワッチョイ 0e6f-aEKd)
2017/08/10(木) 23:14:30.24ID:JdKfuZ5y0
ちなみに、EOFがtrueじゃありませんとか、
IZAMが有効じゃありませんとか、
そんなやつです。
741デフォルトの名無しさん (ワッチョイ 1a06-KsLg)
2017/08/10(木) 23:22:56.42ID:VgLhJXRi0
>EOFがtrueじゃありません

俺もmysqlにアクセスするのを作ってる段階でそういうのを出すことはあるよ。けど、そういうのここで
チンタラチンタラ言っててもソースがない以上こちら側ではどうしようもないわけで。
742デフォルトの名無しさん (ワッチョイ 973d-KsLg)
2017/08/10(木) 23:45:49.59ID:SqJ4/4zg0
>>740
もしかしてEXCELで直接開いてるのにAccessと同じ文法のSQL使ってない?
ワイルドカードとか色々と違う点があるんで、もしかしたらSQLが失敗して空のレコード開いてるのかも。
743デフォルトの名無しさん (ワッチョイ 97e4-kh1+)
2017/08/11(金) 04:12:54.28ID:+mgolt3u0
そもそも何のDB(ドライバ)かすら書いてないし
どうやってレコードセット開いてupdateしたのか書いてないし
レスするだけ無駄な気がするぜ

>EOFがtrueじゃありません
そんなエラー見たことないな。EOFがFalseなら普通にデータ取れてるってことじゃねえの?
EOFがTrue前提の操作が浮かばんが、何しようとしたらそんなエラーになるんだよ

>IZAMが有効じゃありません
IZAMって何さ?ビジュアル系バンドメンバーかよ
744デフォルトの名無しさん (オッペケ Srbb-CFLX)
2017/08/11(金) 07:44:16.53ID:xHfWhpghr
>>743
> レスするだけ無駄な気がするぜ

いいんだよ、それで。雑談が目的なんだから。
答えを出す必要はない。


>> EOFがtrueじゃありません
> そんなエラー見たことないな。

ADOでレコードセットを操作していると、ときたま現れるエラー。
クエリ結果にレコードが1件もない場合とかに出たりする。
745デフォルトの名無しさん (ワッチョイ 0e4b-K+Tw)
2017/08/11(金) 11:24:22.86ID:dnJD889I0
初心者ですがご教授下さい
クラス内にTRが9ありそのうちの1~4を取得したいと思っています。
現在は1しか取得できません。どう書き換えればいいでしょうか?
Sub shisaku()
Dim objIE As InternetExplorer
Set objIE = CreateObject("Internetexplorer.Application") '
objIE.Visible = True '
objIE.navigate "http://www.aaa/aaa";
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document
Dim colTR, colTH, colTD, colImg As IHTMLElementCollection
Set colTR = htmlDoc.getElementsByClassName("first")
Dim el As IHTMLElement
For Each el In colTR
Set colTH = el.getElementsByTagName("th")
Set colTD = el.getElementsByTagName("td")
Debug.Print colTR(0).innerText
Next el
End Sub
746デフォルトの名無しさん (アウアウエー Sa52-nTDo)
2017/08/11(金) 11:47:54.41ID:H2cGDcz1a
>>745
なんでcolTRをclassnameで取得してんの?
747デフォルトの名無しさん (アウアウエー Sa52-nTDo)
2017/08/11(金) 11:50:59.38ID:H2cGDcz1a
あと並べて書いた場合でも変数一つずつ型指定してかないとvariantになるよ、vbaの場合
748デフォルトの名無しさん (ワッチョイ a379-AZXx)
2017/08/11(金) 13:07:34.65ID:11Y29+uU0
吉岡美穂のカキタレ
749デフォルトの名無しさん (ワッチョイ 0e4b-J8zh)
2017/08/11(金) 13:38:42.84ID:dnJD889I0
>>747
vbaでieを操作を読んでもググってもあり理解出来なくてとりあえず作りながら覚えようと
コピペしたものを一部変えました
tr、tdは特定出来ずclassが特定出来るのですがどのように書き換えればよろしいのでしょうか?
750デフォルトの名無しさん (ワッチョイ 0391-8lAF)
2017/08/11(金) 13:56:55.44ID:kj6/PAcR0
>>749
処理対象によってどうすればいいか変わるから
対象が判らないとなんとも言えないのではないと思う

クラスで全部のTRを取れてるのかも判らないし
751デフォルトの名無しさん (アウアウエー Sa52-nTDo)
2017/08/11(金) 14:32:36.47ID:yOhrxWpUa
>>749
trがほしいならgetElementsByTagName("TR")で取るのが普通じゃね
その後のfor eachの中の処理もよくわからんが
752デフォルトの名無しさん (ワッチョイ 0e6d-1q0p)
2017/08/11(金) 14:42:02.39ID:hvV/hgBn0
例えば下のように文字と数字が並んでいて、文字を数字の横に持って行くにはどうしたらいいですか?

12
q
15
b
10
c

12 q
15 b
10 c
753デフォルトの名無しさん (ワッチョイ b66d-Var+)
2017/08/11(金) 14:45:37.73ID:fD8DkUIg0
>>745
生のjsそのまま使うのはめっちゃめんどくさいから、ラッパーを探したほうが良い
で、探した。以下のサイトのラッパー使えば多分すぐに出来ると思う
http://language-and-engineering.hatenablog.jp/entry/20090710/p1
754デフォルトの名無しさん (ワッチョイ b66d-Var+)
2017/08/11(金) 14:51:25.70ID:fD8DkUIg0
>>752
必ず数字と英語が入れ替わりで来るなら以下のマクロ

Sub foo()
For i = 1 To 100
行 = Int(i / 2)
If i Mod 2 = 1 Then
Cells(行 + 1, 2) = Cells(i, 1)
Else
Cells(行, 3) = Cells(i, 1)
End If
Next
End Sub
755デフォルトの名無しさん (ワッチョイ 0e6d-1q0p)
2017/08/11(金) 15:01:16.16ID:hvV/hgBn0
>>754
ありがとうございます。
でもすみません、2連続で文字のパターンもあります
正確には下のような感じです


q
r


d


c


○ qr(セル内改行)
○ b
○ c
756デフォルトの名無しさん (ワッチョイ 0391-8lAF)
2017/08/11(金) 15:12:27.50ID:kj6/PAcR0
>>755
まず数字か文字列か判別すればいいんじゃね?
if a like "[0-9]*" then
って感じでできる様なきがする
757デフォルトの名無しさん (ワッチョイ 0e6d-1q0p)
2017/08/11(金) 15:23:36.72ID:hvV/hgBn0
>>756
今考えてるのは以下の感じです
VBAもプログラミングも初心者のため全然コードがわかってなくてすみません


loop (i)
if instr(cell(i,1),"○")<>0
sw=1

if sw=1

sw =1の時それより下のセルの情報を切り取り

 loop(n)
 n=i+1
 if instr(cell(n,1),"○")<>0
 sw=0

 else n=n+1
 loop end

else i=i+1
loop end
758デフォルトの名無しさん (ワッチョイ b66d-YQfT)
2017/08/11(金) 15:32:45.42ID:fD8DkUIg0
>>755
こう
Sub foo()
行 = 1
'一行目は数字
Cells(行, 2) = Cells(1, 1)
tmp = Cells(1, 1)
For i = 2 To 100
If IsNumeric(Cells(i, 1)) Then
'数字
Cells(行, 2) = tmp
Cells(行, 3) = 文字
行 = 行 + 1
tmp = Cells(i, 1)
文字 = ""
Else
'文字
文字 = 文字 & vbCrLf & Cells(i, 1)
End If
Next
End Sub
759デフォルトの名無しさん (ワッチョイ b66d-YQfT)
2017/08/11(金) 15:33:16.05ID:fD8DkUIg0
>>756
なんでlikeなんだよ
isnumericでいいだろw
760デフォルトの名無しさん (ワッチョイ 0391-8lAF)
2017/08/11(金) 15:48:56.25ID:kj6/PAcR0
>>759
数字を含む文字列をどっちに判別するかによるんじゃね
761デフォルトの名無しさん (アウアウエー Sa52-nTDo)
2017/08/11(金) 16:02:01.36ID:yOhrxWpUa
>>749
追記でおせっかいついでに、ie操作覚えたいなら軽くhtml勉強したほうがいいよ
エクセルのオブジェクト理解せずにvbaで扱うなんて無理なのと一緒
762デフォルトの名無しさん (ワッチョイ 4eaa-Kd4M)
2017/08/11(金) 16:32:57.50ID:FWZL6nYt0
Ruby で書いた
https://paiza.io/projects/HhNVuMxF20bU1t4-GMp0VQ

ary = []
File.open("File1") do |file|
# 1行ずつ処理する
file.each_line do |line|
# 0~9
if /^\d+$/ =~ line.chomp!
ary << line + ' '
else
ary[-1] = ary[-1] + line
end
end
end

puts ary

入力
01
a
b
12
c
23

出力
01 ab
12 c
23

ただし、23 の後ろに、半角空白が入っているけど
763デフォルトの名無しさん (ワッチョイ 0e6f-aEKd)
2017/08/11(金) 20:25:45.30ID:Nl+bIgs10
>>742
普通にCopyFromRecordsetするだけなら出来るんです。

Do Until rs.EOF
 rs!項目=何とか ←ここで何かしようとすると、Debug.Print以外は全て失敗します。
 rs.MoveNext
Loop

諦めて、GetRowsして編集してから出力しようとしたら、
縦横入れ替わってるし(Excelで使うのに何故こんな仕様にした?)、
Transposeで直そうと思っても型が違いますとか言われるし・・。

>>743
I-zamはサポートしてませんだったかも?
764デフォルトの名無しさん (ワッチョイ 1a06-KsLg)
2017/08/11(金) 20:45:51.85ID:2aci5jkj0
>>763
>rs!項目=何とか ←ここで何かしようとすると、

rs.項目に何か代入しようとしてんのか?
765デフォルトの名無しさん (ワッチョイ 97e4-GDrG)
2017/08/11(金) 20:48:59.91ID:+mgolt3u0
>>744
>クエリ結果にレコードが1件もない場合とかに出たりする。
それ普通はEOFがTrueになるはずだけど
MySQLのドライバでそうならなかったりするのか?ドライバのバグじゃねえの?
それどうやってゼロ件かどうか判定するんだ?
766デフォルトの名無しさん (ワッチョイ 97e4-GDrG)
2017/08/11(金) 21:03:31.05ID:+mgolt3u0
>>763
だからDBとドライバ何で、どうやってそのレコードセット作ってるんだよ

そもそもレコードセットを更新する必要があるのかどうかも疑問だけどな
レコードセットは常に更新できるとは限らんのだぞ
767デフォルトの名無しさん (ワッチョイ 0e6f-aEKd)
2017/08/11(金) 21:18:12.65ID:Nl+bIgs10
>>764
そうです。
SQL上だと難しい内容があるので、後から入れようかなと。

>>766
CsvとMicrosoft.Ace.OLEDB.12.0です。
元のCsvの方は、多分更新出来ないだろうとは思ってたのですが、
出力結果の方に、編集した内容が反映されればいいかなと。
768デフォルトの名無しさん (ワッチョイ 1a06-KsLg)
2017/08/11(金) 21:29:48.64ID:2aci5jkj0
>>767
CursorTypeがどうなっているのかとかいちいちこちらから聞かないと情報を出さないのか?
で、延々と続ける気?
769デフォルトの名無しさん (ワッチョイ 0391-8lAF)
2017/08/11(金) 22:03:13.38ID:kj6/PAcR0
>>764
rsに代入できるんだっけ?
debug.print出来るならrsから読み込むのは出来るんじゃね?
別変数にコピーしてから変更したら?
770デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/11(金) 22:06:37.63ID:mfxycmdp0
Excel(VBA)でデータベース接続ってどういうのが一般的なんでしょうか?
自分は専ら生ODBCを叩いているので他人のことが気になってる。
771デフォルトの名無しさん (ワッチョイ 0391-8lAF)
2017/08/11(金) 22:11:37.85ID:kj6/PAcR0
>>770
そんなの統計とかアンケートとかとってる人いないんじゃないかな
実現したいことができればいいんじゃね
772デフォルトの名無しさん (ワッチョイ b66d-hH8V)
2017/08/11(金) 22:15:41.96ID:fD8DkUIg0
そもそもexcelでデータベースに接続しないな
全部accessで済ませてしまう
773デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/11(金) 22:36:29.71ID:mfxycmdp0
>>772
VBAとODBCドライバしか使わないのでExcel, Outlook, Word, Access その他 Officeなら何でもOKにはしてる。
ExcelとOutlookくらいしか使わないけどね。
Outlookはメールで「このテーブルをこう読んだときに~」とか連絡を受けたときにそのままVBEを開いて使ったりとか。
774デフォルトの名無しさん (ワッチョイ 0e6f-aEKd)
2017/08/11(金) 23:12:57.71ID:Nl+bIgs10
>>768
それは最初に、読み取り専用じゃないやつに変えたけどダメだったと書きましたけど。

>>770
ググって引っかかる率が高いのはADO。
外部データ取り込みの方なら、参照設定もいらないのに、どういうわけかADOばっか。
ADOばっか出るから、ADOに乗り換えてみたら、このザマですよ。
775デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/11(金) 23:35:39.96ID:mfxycmdp0
>>774
乗り換えた、って何から?
776デフォルトの名無しさん (ワッチョイ 0e6f-aEKd)
2017/08/12(土) 00:49:01.81ID:RTe2mUwF0
>>775
外部データ取り込み(Microsoft Query)からです。

シートの指定が、なぜか[シート名$]じゃなくて`シート名$`とか、
データの出力開始列にコマンドボタンを配置すると、ボタンを押した瞬間、
ボタンが横に逃げるとか(離すと元の位置に戻ってくる)、
意味不明な軽い嫌がらせがありますけど。
777デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/12(土) 10:58:36.59ID:AoA5DjYT0
ヘルプ見ると日付型の説明として以下のように書いてあるじゃん。

 日付型 (Date) の変数は、IEEE 64 ビット (8 バイト) の浮動小数点数の変数です。
 西暦 100 年 1 月 1 日~西暦 9999 年 12 月 31 日の範囲の日付と、0:00:00 ~ 23:59:59 の
 範囲の時刻を表すことができます。

でも1900年以前のDate型変数をワークシートに貼ろうと思ってもできなくて、

 実行時エラー'1004':
 アプリケーション定義またはオブジェクト定義のエラーです。

ってエラーが出てくるじゃん。これ控えめにいtt
778デフォルトの名無しさん (ワッチョイ 1a06-KsLg)
2017/08/12(土) 11:02:43.67ID:q63a26xE0
mysqlとodbc経由で接続している。以前はSQLServerとでもやってた。他にもポスグレやoracleとやってる人間も沢山居るだろ。
んでそんな文句言ってるのはお前だけ。

お前のソースがバグだらけなんだよ。けどソースは示さないんだろ?一人勝手にやってろ
779デフォルトの名無しさん (ワッチョイ 5a6c-9RpY)
2017/08/12(土) 11:56:57.58ID:TCrjrl3y0
>>725
ごめんできちゃった

ありがとね
780デフォルトの名無しさん (オッペケ Srbb-paLu)
2017/08/12(土) 12:46:19.08ID:IpuKNNKZr
>>755

  Dim lastRow As Long
  Dim i As Long
  Dim arry
  Dim str
  
  lastRow = Cells(Rows.Count, 1).End(xlUp).Row
  arry = Range("A1:A" & lastRow).Value

  i = 1
  Do Until i = UBound(arry)
    If IsNumeric(arry(i, 1)) And arry(i, 1) <> "" Then
      str = str & arry(i, 1)
      Do Until IsNumeric(arry(i + 1, 1))
        str = str & arry(i + 1, 1)
        i = i + 1
        If i = UBound(arry) Then Exit Do
      Loop
      str = str & vbCrLf
    Else
      i = i + 1
    End If
  Loop
  Range("B1").Value = str
781デフォルトの名無しさん (オッペケ Srbb-CFLX)
2017/08/12(土) 13:38:05.91ID:IpuKNNKZr
>>779
満足してもらえたようで良かったです。
782デフォルトの名無しさん (ワッチョイ 4eaa-j2BT)
2017/08/12(土) 15:49:33.01ID:s2RcRfJ50
>>.777.
それはVBAの問題じゃない
EXCELで扱える日付範囲がVBAより狭いだけ
783デフォルトの名無しさん (ワッチョイ ab09-KsLg)
2017/08/13(日) 10:20:51.63ID:YIp/txnN0
VABでIEを開いて、
情報を取ってるんですが、
ie.Visible = False
で、
画面でないようにしてるけど、
これは、どこか裏で開いてる?
それとも、消えてくれるのかな、
Falseで画面出さない時は、
IE閉じる処理はしなくてもいいでしょうか?
784デフォルトの名無しさん (ワッチョイ 0e6f-aEKd)
2017/08/13(日) 10:33:34.50ID:ua4YvzFl0
よくわからんけど、WBEクエリってので、
画面出さずに取れませんか。
785デフォルトの名無しさん (ワッチョイ ab09-KsLg)
2017/08/13(日) 10:35:11.41ID:YIp/txnN0
>>784
クエリでも獲れるけど、
VBAも使いたいので、
なにか閉じる処理とかいるのかなぁ
786デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/13(日) 10:45:28.39ID:B6edc+jF0
>>784
表の中の項目だったら<td>のinnerTextを取ればいいし、リンクだったら<A>のhrefを取ればいい。
ググればなんとかなるさ。
787デフォルトの名無しさん (オッペケ Srbb-CFLX)
2017/08/13(日) 11:53:36.55ID:TIsdzDXzr
>>783
タスクマネージャのプロセスにieが残ってるはず。
たとえバックグラウンドであっても、開いたら閉じるが原則。

ie.Quitの1行は必須です。
788デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/13(日) 12:24:29.35ID:B6edc+jF0
>>784
ごめんWebクエリってExcelの機能があったのか。
>>786ではCreateObject("MSXML2.XMLHTTP")とCreateObject("htmlfile")を使う方法を答えてしまった。
789デフォルトの名無しさん (ワッチョイ ab09-KsLg)
2017/08/13(日) 12:33:27.11ID:YIp/txnN0
>>787
そうですか、
閉じるようにします、
ありがとうございます!
>>788
俺も、
htmlのタグとか、でieから情報とってる。
790デフォルトの名無しさん (ワッチョイ f34b-qwy0)
2017/08/16(水) 19:34:35.81ID:jf8MYepF0
>>745です
childrenで情報は取得できそうです(イミディエイト上確認できています)

エクセルのA列に入力のURL100をA2から順に自動で情報取得、B列、C列、D列に取得した情報を出力したいのですがどのようにすればいいでしょうか?
おそらくは下記部分の書き換えかと思われますがご教授下さい

objIE.navigate "http://www.aaa.jp/1234/123456789";

Debug.Print colTD(2).innerText & "|" & colTD(3).innerText & "|" & colTD(4).innerText
791デフォルトの名無しさん (アウアウカー Sac3-K37d)
2017/08/16(水) 21:36:07.94ID:DoB/Yq6sa
>>790
昔作った簡易ツールなんだけどさ、これで指定のURLのページのDOM情報を全部ごっそり取れるから試して見たら。

標準モジュールに張り付けて保存して閉じた後で再度開くとアドインリボンにボタンが2つ出来る。

https://pastebin.com/KkNL9u4G
792デフォルトの名無しさん (アウアウカー Sac3-K37d)
2017/08/16(水) 22:17:10.08ID:DoB/Yq6sa
一点忘れてた。
このツール、取ってくるページが重いと時間がかかる。

あんまり遅いときはBreakしてくれ。
793デフォルトの名無しさん (ワッチョイ 9aaa-W16a)
2017/08/16(水) 22:19:22.62ID:6PDnHTyR0
CreateObject("InternetExplorer.Application")
なんてしたくないからMSXML2.XMLHTTPとか使うんじゃないのか?
794デフォルトの名無しさん (アウアウカー Sac3-K37d)
2017/08/16(水) 22:53:28.23ID:DoB/Yq6sa
>>793
DOM情報は一緒に使える。
情報を得るだけならMSXML2.XMLHTTPの方が良い。

俺のツールは10年以上前に作ったから、その頃はMSXML2.XMLHTTPを知らんかった。
795デフォルトの名無しさん (オッペケ Sr4d-o0Er)
2017/08/17(木) 06:21:37.08ID:5/l7qEpXr
>>791
タイプミスが1個あったよ。

181行目:objndode

おそらく、objNodeと思われ...
796デフォルトの名無しさん (ワッチョイ 7973-DQO+)
2017/08/17(木) 08:34:41.30ID:CrDCSFke0
お前の過去とか知らんし、判ってる事なら修正版を出してはくれまいか
797デフォルトの名無しさん (アウアウカー Sa1d-R5c0)
2017/08/17(木) 17:22:04.13ID:im50xVqsa
>>795
おお、確かに。

>>796
必要なら自分で修正しなよ。
使えるから長いこと使ってるけど簡易ツールだし、マウス下のDOM情報を取って来るツールとかを使う場合も多い。
バグだらけだから公開はしないけど。
798デフォルトの名無しさん (ワッチョイ e14b-XaGt)
2017/08/17(木) 18:27:33.83ID:IrM4WgJo0
>>797
ありがとうございます。でもごっそりは重そうなので出来れば自作できればと。
ググるとこれが良さそうですが
Range("A1").Hyperlinks(1).Follow NewWindow:=True

例えばexcelシートにB2~B101までurlの記載があり選択してctrl+sみたいな感じで自動実行
これを書き換えるにはどうすればいいでしょうか?

Set DataSheer = ActiveSheet
Dim i As Long, cnt As Long
For i = 1 To 100
cnt = cnt + 1
Cells(cnt, 1) = i

適当に拾ってきた物を書いてみましたアドバイスをお願いします

>>793
MSXML2.XMLHTTP の利用について教えて下さい。
1日500URLを寝る前に取得したいので出来れば動作は早い方がいいです。
ieを開かずにデータを取得できるんですよね
>>745
Set objIE = CreateObject("Internetexplorer.Application")
objIE.Visible = True
を変更でいけますか?
Set objIE = CreateObject("MSXML2.XMLHTTP")
objIE.Visible = False
799デフォルトの名無しさん (ワッチョイ 93aa-jLVh)
2017/08/17(木) 21:06:10.14ID:wc7ZtjOc0
>>798
このへん読めばいいんじゃないの?
http://www.kanaya440.com/contents/tips/vbs/007.html
800デフォルトの名無しさん (アウアウカー Sa1d-R5c0)
2017/08/17(木) 23:13:12.34ID:yWP51BMra
>>798
そうじゃなくて、そのツールでとってこれるのは指定のURLのページがどういう構造になっているかという情報。
それが分かれば自分で組めるでしょという話。
500個のURLのページがみんな同じ構造なら取りあえず1つだけ構造を調べれば他は同じように組めるでしょ。

例えば君は9個のTRの内、1~4を取りたいけど1だけしか成功して無いんだろ。
なぜ2~4が取れないかを調べるのに使う。
取りたいデータに名前やクラス名がついてたらそれで取ってきた配列を使うし、無ければタグ名で取って来る。
タグ名ならその右にある番号から何個飛ばしで取れば良いとかを類推する。

MSXML2.XMLHTTPやMSHTML.HTMLDocumentは単純にInternetExplorer.Applicationを置き換えて使えるわけじゃない。
ソースを取ってきてそれをDOMDocumentに当て嵌めれば似たように使えるけど。

ところで、1日に500個のURLから情報取ってきて問題無いんだろうね。
岡崎図書館の例にもある通り、不正アクセスとして捕まるのを避けるために先方には確認してる?
801デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/17(木) 23:29:45.34ID:Fn2cTqwk0
ふだんプログラミングはExcelのVBAがほとんどでこれならかなり本格的なこともできるスキルがあります。
ところでJavascriptに興味を持ちメモ帳でJavascriptをはじめました。
これでExcelVBAのようにコード書くときにインテリセンスで入力補助ができるツールってないんですか?
メモ帳だから当然そんなのできません。
Javascriptの入門書はいつくか読んでますがExcelVBAのようなインテリセンスが使える開発環境のことには全くふれていません。
802デフォルトの名無しさん (ワッチョイ 196f-jLVh)
2017/08/18(金) 00:33:09.65ID:SqU1frnT0
JavaScriptスレでどうぞ
803デフォルトの名無しさん (オッペケ Sr4d-uth0)
2017/08/18(金) 00:52:10.12ID:fGYkVGPpr
ふつーにVSでいいんじゃね?
804デフォルトの名無しさん (ワッチョイ dbaa-jLVh)
2017/08/18(金) 02:47:26.07ID:2Rkfa1Rx0
うむ
805デフォルトの名無しさん (ワッチョイ b111-Ovym)
2017/08/18(金) 06:08:15.32ID:Pl3jF8BM0
フリーのテキストエディタなんて腐るほど調べりゃ出てくるだろ
806デフォルトの名無しさん (オッペケ Sr4d-uth0)
2017/08/18(金) 06:32:04.53ID:fGYkVGPpr
>>805
インテリセンスはどうすんの?
807801 (ワッチョイ 9352-jLVh)
2017/08/18(金) 06:47:56.97ID:r9Ad8ntQ0
>>802
いや、ここに居座る。

>>803
VSってVisual Studioですかね?かなり本格的なツールと思いますが
Javascriptでインテリセンスだけできたらいいのですがシンプルなツールはないものでしょうか?
というよりJavascriptやってる人の使用ツールの使用率みたいな円グラフはないでしょうか?

あとExcelVBAでよくやるブレークポイントを使ってF8のコマ送りや実行途中で変数の値を見るのって
Javascriptで使うツールでもできるんですかね?
808デフォルトの名無しさん (ワッチョイ 5b6d-/TKy)
2017/08/18(金) 06:56:08.49ID:uergmdKS0
回答率が低い方で聞くのは時間の無駄では?
NGにするから何でもいいけど
809デフォルトの名無しさん (アウアウエー Sa23-Ovym)
2017/08/18(金) 07:07:24.51ID:k8zOSHbua
>>806
javascriptサポートしてるやつは出てくるんじゃねえの?
使ったことないけど
出ないならvsとか使えばいいじゃん
810デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/18(金) 07:14:13.91ID:r9Ad8ntQ0
なんだよ、ここじゃ教えてくれないのです?
811デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/18(金) 07:15:23.14ID:r9Ad8ntQ0
             / ̄ ̄ ̄ ̄ ̄\
         /           \
         /              ヽ 
   / ̄\ l      \,, ,,/      | そりゃないよ
  ,┤    ト |    (●)     (●)   | かあちゃん!
 |  \_/  ヽ     \___/     |  
 |   __( ̄ |    \/     ノ 
 ヽ___) ノ
812デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/18(金) 07:17:18.70ID:r9Ad8ntQ0
>>809
VSは会社で気軽にインストールできないじゃん
813デフォルトの名無しさん (ワッチョイ 2ba2-jLVh)
2017/08/18(金) 07:28:46.83ID:sIEj8B6D0
必要なら出来るだろ
814デフォルトの名無しさん (アウアウエー Sa23-Ovym)
2017/08/18(金) 07:30:00.10ID:k8zOSHbua
TR取れないくんはgetElementByTagName("TR")は試したのかよ
815デフォルトの名無しさん (オッペケ Sr4d-uth0)
2017/08/18(金) 07:36:13.08ID:fGYkVGPpr
>>812
そこなんだよ、問題は。

じゃ、テキストエディタは気軽にインスコできるのかっつーと、インテリセンス実現するためには、やれプラグインだなんだって追加する必要が出てくる。

ソフトのインストール申請は1回で済ませたいよね。
となると、なんだかんだでVSが最良の選択肢になる。
配布元がMSなのも安心だし。

HTMLやCSSも入力補完できるからね。
入れておくとめちゃ便利でっせ、旦那。
816デフォルトの名無しさん (アウアウエー Sa23-Ovym)
2017/08/18(金) 08:07:29.86ID:k8zOSHbua
TeraPadは便利そうだけどvbscriptが標準でサポートされてないのがつらい
817デフォルトの名無しさん (アークセー Sx4d-2DR6)
2017/08/18(金) 08:21:16.51ID:6b7crCYjx
Notepad++とか軽くていいぞ
申請通りやすいかどうかは分からんが
818デフォルトの名無しさん (ワッチョイ 2baa-PF2c)
2017/08/18(金) 08:32:10.11ID:MkY1nhvU0
TeraPad は、サロゲートペア(4バイト文字)のような、
ユニコードに新しく採用された漢字は、? に変換されてしまう

中国の「深圳」みたいな漢字
819デフォルトの名無しさん (ワッチョイ 7973-DQO+)
2017/08/18(金) 08:34:34.23ID:Jk1oT0GC0
スレタイも読めない馬鹿はスルーで
820デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/18(金) 09:27:19.77ID:r9Ad8ntQ0
>>819
こんな掲示板のルールは守る必要がない。

そもそも20年くらい前のインターネット創始期にリアル世界からバーチャル世界への人々の続々の初参加で
みんなが気軽に参加さえできればどこでもいい掲示板がたまたまここだっただけで
まるで自分のアイデアで発明して作り上げた掲示板と勘違いした管理人が有名になったことも利用して年収数億円にもなった
そんなずるいアホの作ったルールを守る必要あるか?
821デフォルトの名無しさん (ワッチョイ 712d-jLVh)
2017/08/18(金) 09:32:23.59ID:vyx+pdak0
IDEがダメならVSCにすりゃ良いだろ
デバッグ機能使えるし、エディタ扱いだから軽い
822デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/18(金) 09:37:07.95ID:r9Ad8ntQ0
>>821
それはあちらのスレでもだれかが言ってたvisual studio codeですか。
評判よさそうなので使ってみます。
823デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/18(金) 09:39:00.89ID:r9Ad8ntQ0
あと最重要なことを忘れていた。
Excel VBAのF2で呼び出せるオブジェクトブラウザは上級者ならこの便利さは涙ものだと思うけど
これに相当するものはJavascriptでも使えるんですよね?
たいていのツールならJavascriptでのオブジェクトブラウザは見れる仕様になってるの?
824デフォルトの名無しさん (ササクッテロロ Sp4d-wXqg)
2017/08/18(金) 09:39:54.13ID:AHP5pPkPp
visual studio codeはフリーで商用利用も可能だったはず
825デフォルトの名無しさん (ワッチョイ 7973-DQO+)
2017/08/18(金) 11:46:40.85ID:Jk1oT0GC0
>>820
ルール無用な俺格好いい!w
826デフォルトの名無しさん (スッップ Sdb3-6IIt)
2017/08/18(金) 11:49:00.60ID:4NPjN4uFd
VSCかー、使ってみようかな
今までVSとVBEでしかプログラム書いたことないや
827デフォルトの名無しさん (ワッチョイ ab6f-oL0b)
2017/08/18(金) 11:56:09.72ID:WOYUy8950
>>820
>まるで自分のアイデアで発明して作り上げた掲示板と勘違いした管理人

何かの著書で、自分のオリジナルじゃないと言い切ってたけど。
828デフォルトの名無しさん (アークセー Sx4d-gUFl)
2017/08/18(金) 11:58:21.04ID:pqZlgJQex
>>820
ヒュー
スゲー承認します。



が提案は却下でーーす
829デフォルトの名無しさん (オッペケ Sr4d-uth0)
2017/08/18(金) 12:26:45.40ID:fGYkVGPpr
>>820
> こんな掲示板のルールは守る必要がない。

相手してくれる人がいるんならそれでいいんじゃね。
相手したくないやつはスルーするだろうし。
830デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/18(金) 12:44:31.00ID:r9Ad8ntQ0
しかもそいつはYoutube動画のすべてのサムネイルで
自分のカバみたいなデカい顔を恥ずかしげもなくデカデカとのせてる。
https://www.youtube.com/channel/UCWlenAgH6lBO36CKiAQR6gQ/videos
これが許させるのはイケメンだけではないか?
勘違いもはなはだしい。
831デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/18(金) 12:57:32.20ID:r9Ad8ntQ0
動画の内容も幼稚。
こんな低レベルのことしか考えれないのにしゃべるな!というレベル。

例えばプログラミングついての動画見てよ。

@YouTube


コピペが最良とか言ってて、こんなんやってたら共同作業でプログラングやってたらめちゃめちゃになる。
このレベルじゃデザインパターンとかリファクタリングのことを全く知らないしろうとだとわかる。
この人さっぱりプログラミングできないのは明らか。
言語の見解としてCOBOLはやる人がいないからチャンスかも、というのもそれは違うだろ。
832デフォルトの名無しさん (ワッチョイ 196f-jLVh)
2017/08/18(金) 13:20:37.36ID:SqU1frnT0
はいはいかっこいい
833デフォルトの名無しさん (アウアウカー Sa1d-R5c0)
2017/08/18(金) 13:55:05.43ID:HoFsfG3Ua
>>831
まあ、どうでも良いんだがjavascriptは詳しくないからなあ。
有用な回答が得られるかっていうと知らんということでjavascriptのスレよりは難しいんじゃないか?

ところでググることぐらいはしてるんだろうね。
OmniSharpが使えるエディタならなんでもいけるかも。

あと、マイナーかもしれんがScite4がいけるかも。
AutoItで使ってるからjavascriptはどの程度使えるかは分からんが。
834デフォルトの名無しさん (アウアウカー Sa1d-R5c0)
2017/08/18(金) 14:04:26.04ID:HoFsfG3Ua
>>814
うん、DOMの構造を調べて求めるデータがgetElementsByTagname("TR")の何番目なのかや、実際にはその子どもや孫の可能性もあるからその何番目かっていうのを簡易ツールで調べて欲しいんだがね。
テーブルの場合、連続した番号にならないことも多いから何個飛ばしかが分かれば取ってこれると思うんだけど。
835デフォルトの名無しさん (アークセー Sx4d-gUFl)
2017/08/18(金) 15:07:33.11ID:pqZlgJQex
>>831
スゲー承認します
836デフォルトの名無しさん (ワッチョイ e14b-XaGt)
2017/08/18(金) 17:40:24.80ID:AdXlT0dS0
TR取れない君です
>>790に書いてますが取得は出来てます
3サイト程試したので理解は出来ているかと思います
昨日はcellに出力まで出来ました。
Set colTable = htmlDoc.getElementsByName("oppai")

Dim el As IHTMLElement
For Each el In colTable

Set colTH = el.getElementsByTagName("th")
Set colTD = el.getElementsByTagName("td")

i = 2
Cells(i, "B") = colTD(2).innerText
Cells(i, "C") = colTD(3).innerText
Cells(i, "D") = colTD(4).innerText

Next el

後はA列に記載のURLから順に情報を取得して上のcellに格納していくのと
MSXML2.XMLHTTPやMSHTML.HTMLDocument化です

A列に記載のURL(B2からB101)から順に情報を取得して上のcellに格納の
具体的なコードを教えて頂けないでしょうか
837デフォルトの名無しさん (ワッチョイ e14b-XaGt)
2017/08/18(金) 17:41:43.48ID:AdXlT0dS0
A2からA101の間違いです
838デフォルトの名無しさん (ワッチョイ 2baa-PF2c)
2017/08/18(金) 17:55:29.64ID:MkY1nhvU0
>>798
1つのドメインにつき、1日1回までにしておかないと、業務妨害で逮捕されるぞ。
同じサイトへ、しつこくアクセスするなよ

普通のサイトは、ツールでのアクセスは認めていないから

robots.txt に、検索エンジンのクローラー(ロボット)に対する、命令が書いてあって、
それに従わないアクセスは、業務妨害で逮捕される
839デフォルトの名無しさん (ワッチョイ e14b-bEti)
2017/08/18(金) 20:31:07.04ID:AdXlT0dS0
>>838
えっ1日に2回サイトにアクセスすると逮捕って日本の法律?
じゃあスクリプト組んで商品買ってるやつみんな逮捕されてんの
コードの書き方書いてるやつやソフト屋も幇助で逮捕されてるんだ

ちなみに取りに行くの海外サイトなんだけど同じなの?
国際指名手配とかになると困るんだけど
840デフォルトの名無しさん (ワッチョイ 2b8f-jLVh)
2017/08/18(金) 20:35:27.71ID:50s8GsCc0
岡崎図書館アクセス事件か
841デフォルトの名無しさん (ワッチョイ 5b6d-9Vea)
2017/08/18(金) 20:42:49.44ID:uergmdKS0
>>839
大丈夫だよ
>>838はちょっと頭がおかしいだけ
842デフォルトの名無しさん (ワッチョイ 932e-oL0b)
2017/08/18(金) 23:15:13.61ID:b4AgNHol0
>>840
> 岡崎図書館アクセス事件か
wikiを見てみると、1秒に1アクセスは「常識的で礼儀正しい」って世間の認識のようだね

男性の作成したクローラの動作
このクローラは、同時には一回しかリクエストを送らず、受信後に間隔をおいてから次のリクエストを送信していた
(1秒に1アクセス程度に調整)。これはクローラの動作としては「常識的」「礼儀正しい」程度のものであり、
応答を待たずに過大なアクセスを行うことで高負荷にさせる攻撃用のプログラムと異なる動作であった。

男性の業務妨害の強い意図が認められないとして起訴猶予処分となった
843デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/18(金) 23:45:49.18ID:tsIqQuRu0
>>798
1日に500URLの取得が場合によってはサーバーの稼働を妨害していると見られる場合があるので
注意したほうがいいぞ、2回目で通報はないだろうけどな
844デフォルトの名無しさん (ワッチョイ ab4b-bEti)
2017/08/19(土) 00:40:39.77ID:vs90uVQG0
>>841 >>843
OKです

例えばですが同一サイトの目的の個別ページに100アクセスするのと
1アクセスになるのかわからないけど根こそぎリンクたどっていくのとどっちがいいのでしょうか

前者のやり方はググっても同じやり方の参考になるサイトがなくてコードを希望しました
後者なら似た感じのがあったので自分でも作れそうです
欲しい情報のほとんどが各ページ10字程度のTD1ケ所だけです
素人考えで該当のページから必要な部分だけ抜いたほうがいいのかなって思ったんですがどっちがいいのでしょうか
845デフォルトの名無しさん (アウアウカー Sa1d-Xpxm)
2017/08/19(土) 04:41:34.88ID:lWDfsp6Na
サーバーの性能、サイトやデータの構成、取得の目的とか書かないの?
846デフォルトの名無しさん (ワッチョイ 09cc-Ovym)
2017/08/19(土) 08:16:52.16ID:y9n8lCwp0
転売ヤーかなんかか?こいつ
847デフォルトの名無しさん (ワッチョイ 9306-JJVS)
2017/08/19(土) 09:53:56.58ID:OPyAj3On0
必要な情報は提供せず、こちらが知りたいことだけ教えろ!
これがこのスレの質問者のデフォ
848デフォルトの名無しさん (アウアウエー Sa23-Ovym)
2017/08/19(土) 10:50:30.19ID:4AkL572wa
>>847
教えても例もしないゴミクズが多すぎるな
特に「具体的なコード教えて」君は人としてのレベルの低さがすけて見えて気持ちが悪いわ
849デフォルトの名無しさん (ワッチョイ 2baa-PF2c)
2017/08/19(土) 12:32:35.39ID:9KU7ntuJ0
岡崎図書館事件では、逮捕されている。
第三者機関である裁判所から、逮捕状も取れている

裁判所だから、警察などの行政執行機関じゃなくて、司法の判断で、ほぼ有罪になる。
単に、起訴猶予処分にしたというだけ

1秒に1回なら、アクセスしても無罪というのは、
無罪になるために、こういうのが常識ですよって広めただけで、
実際には、逮捕状も取れている

robots.txt に従っていないと、相手のサイトが訴えるのは自由だから、
各社の検索エンジンは、1日1回しかアクセスしない
850デフォルトの名無しさん (ワッチョイ 5b6d-5Iur)
2017/08/19(土) 12:34:28.91ID:qVAbDdKi0
>>849
オンラインゲームでチート反対って言ってる人?
851デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/19(土) 13:55:26.61ID:8yrvVjZy0
詳細を知れば作り方によって回避できるのではないか
https://ja.wikipedia.org/wiki/%E5%B2%A1%E5%B4%8E%E5%B8%82%E7%AB%8B%E4%B8%AD%E5%A4%AE%E5%9B%B3%E6%9B%B8%E9%A4%A8%E4%BA%8B%E4%BB%B6
852デフォルトの名無しさん (アウアウカー Sa1d-R5c0)
2017/08/19(土) 13:55:32.82ID:stRE+6ELa
>>836
そこまで分かってて何で組めんの?
基本的な問題で躓いてるみたい。

君はどういう方針で組んでるの?
普通はそういうサンプル組めたらURLを変数に置き換えて、指定のURLを引数にして4つのデータを取得するプロシージャ作ると思うんだが。

Function Get4Data(strURL As String) As String()
Dim strData() String
.
.
.
Get4Data=strData
End Function

Sub MainProc()
Dim strData() As String
Dim i As Long
Dim j As Long
For i=2 To 102
strData=Get4Data(Cells(i,1).Value)
For j=0 To 2
Cells(i,j+2).Value=strData(j)
Next j
Next i
End Sub

4つのデータに意味を意識するならユーザー定義型を返すプロシージャにしてメインでは配列の利点を使わない。(jを使わない)
この辺は趣味の問題だと思うけど。

なお、スマホから打ってるからコードには間違いが有るかも。
853デフォルトの名無しさん (ワッチョイ 2baa-PF2c)
2017/08/19(土) 13:57:02.56ID:9KU7ntuJ0
別に反対とは言わないけど、
相手のサイトが、業務妨害で訴えるのは自由だから、逮捕されるよってだけ

コンビニのアイスクリームのケースに入って、写真を撮っただけで逮捕されてる

被害額は、0円なのにw
気持ち悪くて、客に出せないから、アイスクリームを全部捨てましたって

相手は、何とでもできる。
無傷でも、被害額を請求できる
854デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/19(土) 14:07:36.79ID:8yrvVjZy0
>>853
なぜ脅したがるのか知らんがクローラーでなければ問題ないし
先にrobot.txtの内容を見る処理書けばいいだけだから
855デフォルトの名無しさん (アウアウカー Sa1d-R5c0)
2017/08/19(土) 14:16:21.11ID:stRE+6ELa
岡崎図書館の場合は図書館側に問題があって、プログラムでアクセスした時にそれが顕在化したということだったと思うが。

ただし、プログラムでのアクセスはサーバーをダウンさせることもあり得るわけでそれはアクセスの程度問題であるということ、過度なアクセスはサーバー側にとっては迷惑であるということ、不正アクセス防止法は意図しなくても問えるということは、留意する必要があるだろう。

要は無断でのアクセスは迷惑になるから気をつけてってこと。
そういう意識があって、でもそれほどアクセスが有るわけじゃ無いから連絡はしなくても良いだろうという判断ならそれもありじゃないかとも思う。
これが全く気にもせず、人のことはどうでも良いと考える人ならもう教えないし、プログラム組むのも辞めた方が良いと思う。
そういう人のプログラムって動けばOKの独りよがりプログラムになって周りが迷惑になりがちだから。
856デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/19(土) 14:25:11.26ID:8yrvVjZy0
そのためのrobot.txtだし
857デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/19(土) 14:25:27.42ID:8yrvVjZy0
858デフォルトの名無しさん (アウアウカー Sa1d-R5c0)
2017/08/19(土) 14:33:28.32ID:stRE+6ELa
仕事でWebから情報取って来るプログラムを作ったときは客にその旨を説明し、先方には実際のプログラムのソースコードと一緒にどういう手順でアクセスするかの説明を提示して貰った。
先方と言っても会社は違うけど客の会社の関連会社で情報取って来るプログラムもその会社関連の仕事の中の一部だったわけだけど。
先方が承諾することは分かってたけど一応報告すべきってことで。

>>839
そういうわけで手順を踏んで許可を取れば問題ないから幇助には当たらない。
859デフォルトの名無しさん (ワッチョイ 93aa-jLVh)
2017/08/19(土) 15:26:44.64ID:s/7RraD70
無断でのアクセスって何のことだろう?
860デフォルトの名無しさん (JP 0Heb-oL0b)
2017/08/19(土) 15:56:14.31ID:qGabhzqpH
全部MDISのせい
Librahack氏はMDISに慰謝料を請求してもいいレベルだと思うね
861デフォルトの名無しさん (ワッチョイ 136c-/CPR)
2017/08/19(土) 16:13:25.46ID:YttHcr520
同じコードで実行してもできる時と反応がない時とあるんだけどなんで?
862デフォルトの名無しさん (オッペケ Sr4d-uth0)
2017/08/19(土) 16:51:19.94ID:8l5l37FKr
>>861
必要な情報は提供せず、こちらが知りたいことだけ教えろ!
これがこのスレの質問者のデフォ

らしいですよ。
863デフォルトの名無しさん (ワッチョイ 93aa-jLVh)
2017/08/19(土) 18:01:00.40ID:s/7RraD70
もうすぐ停電が起こる
864デフォルトの名無しさん (ワッチョイ 932e-oL0b)
2017/08/19(土) 18:37:05.55ID:lbryh9n10
>>849
> 1秒に1回なら、アクセスしても無罪というのは、
> 無罪になるために、こういうのが常識ですよって広めただけで、
> 実際には、逮捕状も取れている
不起訴になってるじゃん
前例ができたから、今後は逮捕されることもないでしょ
865デフォルトの名無しさん (ワッチョイ 5b6d-bEg4)
2017/08/19(土) 18:47:22.47ID:qVAbDdKi0
岡崎図書館不起訴になったのか
じゃあ問題無しだな。一時間に一回ぐらいのクロールなら余裕だろう
866デフォルトの名無しさん (アウアウエー Sa23-Ovym)
2017/08/19(土) 22:27:39.50ID:vZgN9gzSa
>>861
その同じコードをさらせよって意味だよ
日本語わかるよな
867デフォルトの名無しさん (ワッチョイ 5991-7WL/)
2017/08/19(土) 22:32:40.39ID:+zJz2sC40
>>862
逆に言うと
その程度の脳みそだから教えてもらわないとわからないってことなんだろうな

低レベルな質問するやつほど
自分の環境言わなかったりコード提示しないイメージ
868デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/19(土) 23:39:23.73ID:8yrvVjZy0
>>861
ネット関係ではよくあると思うが
869デフォルトの名無しさん (ワッチョイ 0971-JJVS)
2017/08/20(日) 05:28:39.28ID:C1zPHqEG0
>>853
> コンビニのアイスクリームのケースに入って、写真を撮っただけで逮捕されてる
> 被害額は、0円なのにw
そういう思考回路の時点で、お前も同じレベルのキチガイだ
870デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/20(日) 08:32:07.00ID:1pFA1rOB0
被害額0円でも女子トイレに入っただけでも逮捕されることあるけどな
871デフォルトの名無しさん (ワッチョイ 710d-Jcyw)
2017/08/20(日) 09:23:54.53ID:B8YXLqYv0
>>861
コードが間違ってるから
872デフォルトの名無しさん (オイコラミネオ MM6b-DQO+)
2017/08/20(日) 10:22:38.45ID:fQYf1WJRM
>>853
それが被害額ゼロ円だと思ってる時点でお察しだよ
873デフォルトの名無しさん (ワッチョイ 1101-bEti)
2017/08/20(日) 11:34:29.55ID:xnxdM6Sy0
初心者ですいません。教えてほしいです。

シートが2枚あり、1枚目のシートの特定セルに「デリ」と入力後、
2枚目シートの特定セルにデリと入力されるのを作ってるのですが1枚目のC13のは反映されるのですが、C14以降が反映されません
ご教授お願いします
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Dim name As Variant
Dim linenm As Integer
For i = 13 To 52
If Intersect(Target, Cells(i, 3)) Is Nothing Then
Exit Sub
Else
'デリがもし記載されていれば
If Cells(i, 3).Value = "デリ" Then
'デリが記載の名前をnameに代入
name = Cells(i, 3).Offset(0, 1).Value
'ワークシート(シフト)で、nameに代入されている名前の行数を取得
linenm = Application.Match(name, Worksheets("シフト").Range("A1:A60"), 0)
Worksheets("シフト").Cells(linenm, 2).Value = "デリ"
End If
End If
Next i
End Sub
874デフォルトの名無しさん (ワッチョイ 5b6d-5Iur)
2017/08/20(日) 13:16:25.67ID:hXI6dDhp0
>>873
ここがおかしい
targetがcells(14,3)だとループから即抜けて終わる
For i = 13 To 52
If Intersect(Target, Cells(i, 3)) Is Nothing Then
Exit Sub
Else

以下のように書き換える


Dim linenm As Integer
'範囲外だったら終了
If Intersect(Target, range(Cells(13, 3),cells(52,3))) Is Nothing Then
Exit Sub
endif

'メイン処理
For i = 13 To 52


こうすれば何をしているかわかりやすいと思う
875デフォルトの名無しさん (ワッチョイ 5b6d-5Iur)
2017/08/20(日) 13:17:04.87ID:hXI6dDhp0
で、更に言うと、スコープの関係でWorksheet_Changeから別シートは触れ無くないか?
以下はエラーになる気がする
Worksheets("シフト").Cells(linenm, 2).Value = "デリ"

以下のようにすると動くと思う
'worksheet1
Private Sub Worksheet_Change(ByVal target As Range)
'無限ループを抑制する
Application.EnableEvents = False
'この時点で選別する
If Intersect(target, Cells(i, 3)) Is Nothing Then
Exit Function
Else
'標準モジュールに投げる
foo (target)
End If
Application.EnableEvents = True
End Sub

'標準モジュールの内容
Function foo(ByVal target As Range)

Dim i As Integer
Dim name As Variant
Dim linenm As Integer

'範囲外だったら終了
If Intersect(Target, range(Cells(13, 3),cells(52,3))) Is Nothing Then
Exit Sub
endif

'メイン処理
For i = 13 To 52
876デフォルトの名無しさん (アウアウカー Sa1d-Enn5)
2017/08/20(日) 14:44:51.18ID:Qs6CySsIa
>>875

874理解しました。
なるほどです。

外出中なので検証できませんが、
changeイベントはシート1の値を対象で
イベントが発生すればifを実行

ifでシート1にデリが記載されていれば
シート2にデリを入力

というのは不可能なんでしょうか、、
帰ったらやってみます。
877デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/20(日) 18:50:52.94ID:1pFA1rOB0
できるよね
Worksheets("シート2").Cells(linenm,2).Value = "デリ"
878デフォルトの名無しさん (ワッチョイ 5b6d-SlN8)
2017/08/20(日) 18:56:54.50ID:hXI6dDhp0
すまんかった、普通に間違えてたわ
879デフォルトの名無しさん (ワッチョイ 1101-8l/3)
2017/08/20(日) 22:03:48.69ID:xnxdM6Sy0
>>878
今戻って書き直したら正常に動作しました。

ありがとうございます。

別件の質問なんですが、
worksheet_changeは
セルの値を削除した際には対応していないのでしょうか。
うまくいかない・・。
880デフォルトの名無しさん (ワッチョイ b111-Ovym)
2017/08/20(日) 22:23:57.13ID:4PP/aROC0
>>879
どう言う手順でセルを削除してるのか知らんが、ブレークポイント置いても止まらんのならそうなんだろ
削除の手順変えるか他のイベントを当たれ
881デフォルトの名無しさん (ワッチョイ 5b6d-bEg4)
2017/08/20(日) 22:27:23.10ID:hXI6dDhp0
>>879
削除ってDELETEキーの事?
それとも行削除?

どっちにしても取得できたけど
Private Sub Worksheet_Change(ByVal Target As Range)
Debug.Print Target.Row
End Sub
882デフォルトの名無しさん (ワッチョイ ab4b-ClLO)
2017/08/20(日) 22:32:57.93ID:ikiDo2Le0
>>846
余った金で買ってるですら時間かけれなくて基本放置メインの優待株なのにちまちま転売なんて時間ないですよ
休みは家族サービスしなきゃなんないし
暑いなかヨドバシ並んだり労力に合わないこと無理

>>845
いや初心者なんでほんと申し訳ないが相手のサーバーの性能とか構成とかどうやって調べるの?
知りたいしやり方具体的に教えてほしい

自分で貼ったコードは今は理解出来てるけど
初心者からすると3日前ならポカーン
正直debug→sellsなんて簡単な事すらわからないレベルが初心者ですw

>>852
ありがとうございます
変数の置き換え等がまさに知りたかった事です
改変出来るサイトが見つけられず完全にお手上げでした
お酒入ってるんで明日試してみます

質問ですが456行目の...はなにか入るかのでしょうか?それともこのままでしょうか?
tb3のみの取得の場合でもこれでいけるのでしょうか?
883デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/21(月) 00:12:17.86ID:yLjCptZM0
>>879
おそらくその削除行為で↓のNothing が成り立って終わっている
>If Intersect(Target, range(Cells(13, 3),cells(52,3))) Is Nothing Then
884デフォルトの名無しさん (アウアウカー Sa1d-Enn5)
2017/08/21(月) 02:11:48.51ID:7jIbvv4Ra
>>880
>>881
>>883

解決しました‼
無事作りたいのできました。ありがとうございます‼
885デフォルトの名無しさん (ワッチョイ b111-Ovym)
2017/08/21(月) 10:14:11.43ID:WASZaGRQ0
>>884
どう解決したか書けよハゲ
886デフォルトの名無しさん (オッペケ Sr4d-lC4d)
2017/08/21(月) 12:19:06.20ID:EyA7fO9yr
すまぬ。助けてほしい。

シート上にActiveコントロールのボタン配置します。
なぜか、勝手に大きくなったりちいさくなったりして堪らん。

解決策ありますか?


別件でもうひとつ。
シート右クリックメニューにコマンド追加してます。(マクロで追加)

端末によって、改ページシート表示時なら、コマンド表示されるけど、標準表示時は標準されない。

何が原因ですかな。標準表示でだしたいの。
887デフォルトの名無しさん (アウーイモ MM85-vD8I)
2017/08/21(月) 12:42:03.35ID:a8XpI6K5M
>>886
後者に関しては
Cellって名前のCommandBarを取得して変更してると思うけど
改ページと標準で名前はどちらもCellだけど実体は別々のCommandBarだから
改ページの方だけしかメニュー追加できてないんだろう
ついこないだ自分も全く同じ現象にハマった

そのことも加味して作ってるサンプルググれば出てくるよ
出先だから細かいことは書けん
888デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/21(月) 12:44:17.85ID:yLjCptZM0
>>886
右クリックしてコントロールの書式設定→プロパティ
セルに合わせて移動するがサイズ変更しないを選択
889デフォルトの名無しさん (オッペケ Sr4d-lC4d)
2017/08/21(月) 13:44:10.34ID:EyA7fO9yr
>>887
たすかる。あとは、さがしてみるよ!
890デフォルトの名無しさん (オッペケ Sr4d-lC4d)
2017/08/21(月) 13:46:53.82ID:EyA7fO9yr
>>888
ためしてみるよ。

ファイル開くたびにミリ単位に小さくなる。開放されたい。
891デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/21(月) 14:35:20.65ID:yLjCptZM0
>>890
https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_excel-mso_other/excel-2010/9ace220e-7e6c-4d2a-9e61-fdbdf2d6b12f?auth=1
それでもだめならグループ化すれば治る場合もあるらしい
892デフォルトの名無しさん (オッペケ Sr4d-lC4d)
2017/08/21(月) 14:42:45.59ID:EyA7fO9yr
>>891
おう!。たすかります。
893デフォルトの名無しさん (ワッチョイ 5b6d-DBYK)
2017/08/21(月) 20:36:29.86ID:F/qAyFl80
変数のウォッチ式を見ていると、変数の中身が勝手に変わるという現象に遭遇しました
以下のコードのどこかに問題があると思います。問題を絞り込み切れませんでした
直前にIEで「メモリを使い切りました」というエラーが出た場合に起こる頻度が高い気がしています
(このマクロは、IEから落とした巨大なデータに対して処理をかけるものです)
PCをしばらく動かしてからマクロを走らせると、何度やっても
特売コード名 = ""
のところで勝手に変数が書き換わります
再起動直後には変わる事はありません
IEのエラーに原因があるのでしょうか?
また、他に見るべきところなどはあるのでしょうか

マクロの内容は
・マクロファイル自体はマクロだけです
・データファイルをopenし、フィルターを掛けて新ブックにコピー、保存
これを繰り返しています

コードは以下です

Set 特売コードリスト = ThisWorkbook.Worksheets("list")
リスト最終行 = 特売コードリスト.Cells(Rows.Count, 1).End(xlUp).Row 'この時点で変数「リスト最終行」にはdoubleの140が格納されている

'特売コードのタイトル設定
For i = ヘッダ列数 + 1 To 最終列 Step 7
特売コード = RIファイル.Sheets(1).Cells(ヘッダ行数 - 1, i).Value * 1 '特売コードはlongの13桁です(JANコードです)
特売コード名 = "" '何故かここで変数変数「リスト最終行」が「特売コード」の値になります。13桁なのでものすごい量の処理になってしまいます
'以降、他の処理
Next
894デフォルトの名無しさん (ワッチョイ b111-Ovym)
2017/08/21(月) 20:44:14.03ID:WASZaGRQ0
>>893
変数の中身が変わってるって事は、どこかで代入してるってことだな
変数の宣言はどこでしてる?
895デフォルトの名無しさん (ワッチョイ 5b6d-DBYK)
2017/08/21(月) 20:48:40.29ID:F/qAyFl80
>>894
宣言は型も指定して、最初にまとめてしてます。
しかし宣言を削除しても変わりませんでした

代入は、していません。
ステップインで以下の行を実行すると、「リスト最終行」という全く関係ない変数の値が変わっています
可変変数かと思いましたが、一体何なんでしょうか
特売コード名 = "" '何故かここで変数「リスト最終行」が「特売コード」の値になります。13桁なのでものすごい量の処理になってしまいます

また、コードの最初に以下の高速化を入れていますが、関係あるでしょうか(もちろん最期に解除しています)
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
896デフォルトの名無しさん (ワッチョイ c191-wXqg)
2017/08/21(月) 21:01:33.61ID:UpqFzRYS0
>>895
コードを切り出す時に本当は関係ある所を
関係ないと思い込んでいる可能性があるから
コード全体を何処かにアップした方が早く解決すると思う
897デフォルトの名無しさん (ワッチョイ 5b6d-DBYK)
2017/08/21(月) 21:04:30.96ID:F/qAyFl80
>>896
ありがとうございます
社外持ち出し禁止のファイルなので、もう少し再現性のある部分を整理してみます
898デフォルトの名無しさん (ワッチョイ b111-Ovym)
2017/08/21(月) 21:21:28.12ID:WASZaGRQ0
>>895
long型の変数なら何らかの形で代入処理してないとあたいは変わらんはずだがな
自作関数にbyrefで渡したりしてねーかな
まあ、何にせよ上の人が言ってるようにもう一度全体を見直そう
899デフォルトの名無しさん (ワッチョイ b111-Ovym)
2017/08/21(月) 21:23:33.08ID:WASZaGRQ0
個人的には最終列の取得方法が怪しいと見ているが
900デフォルトの名無しさん (ワッチョイ 5b6d-SlN8)
2017/08/21(月) 21:41:38.22ID:F/qAyFl80
>>898
参照みたいというのは、私も感じました
しかし本当にこの行だったのです
特売コード名 = "" '何故かここで変数「リスト最終行」が「特売コード」の値になります
何度やっても結果が参照だか可変変数だかコード内の改行「 _」にしか見えなかったのですが、絶対に違うのです
メモリが書き換えられているのか、ポインタがぶっ飛んでいるのが、そこまで調査する能力はありません

同僚に「顔青白いけど大丈夫か!?」と言われました。

明日もう一度試してみます
901デフォルトの名無しさん (ワッチョイ 5b6d-SlN8)
2017/08/21(月) 21:43:58.48ID:F/qAyFl80
>>899
そうですね、もう何が怪しくてもなんでもいいです
最終行を取得せずに直接140を入れてみるテストをしてみます
902デフォルトの名無しさん (ワッチョイ b111-Ovym)
2017/08/21(月) 22:46:20.73ID:WASZaGRQ0
>>901
ちなみに最終列はどうやって取得しとるん?
forで使うときにobjectから引っ張ってきてるのか、その前に変数に代入してるのか
903デフォルトの名無しさん (ワッチョイ 5b6d-bEg4)
2017/08/21(月) 22:55:53.80ID:F/qAyFl80
>>902
プロンプトでデータファイルを指定し、開いた直後に最終行列を取得しています
もちろんこの際にキャンセルなどの処理は行っておらず、普通に選択しています

若干うろ覚えですが、以下のはずです

'dataファイルを指定
Set data = Workbooks.Open(Application.GetOpenFilename("Microsoft Excelブック,*.xls?"))

'最終行列
最終行 = data.sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
最終列 = data.sheets(1).Cells(ヘッダ行数, Columns.Count).End(xlToLeft).Column
904デフォルトの名無しさん (ワッチョイ 2ba2-jLVh)
2017/08/21(月) 23:16:57.21ID:AMZKW1PT0
わざと宣言をIntegerに変えてエラーが出ないかどうか
905デフォルトの名無しさん (ワッチョイ 2ba2-jLVh)
2017/08/21(月) 23:24:15.17ID:AMZKW1PT0
宣言を削除しても、ってことは Option Explicit はなし?
Dim 最終行, 最終列 As Long
のように最後だけに As ○○ ってしてないか?
906デフォルトの名無しさん (ワッチョイ 5b6d-13hs)
2017/08/21(月) 23:38:13.41ID:F/qAyFl80
>>905
>宣言を削除しても、ってことは Option Explicit はなし?
そのあたり纏めてです

>Dim 最終行, 最終列 As Long
それもないです、というか宣言あてもなくても変わりません
907デフォルトの名無しさん (ワッチョイ 016f-oL0b)
2017/08/22(火) 02:30:22.28ID:UcqKMUBs0
日本語の変数名ってどうなのかな
仮に全角の空白がコード中にあると見つけるのは厄介なんだよね
908デフォルトの名無しさん (ワッチョイ c191-wXqg)
2017/08/22(火) 07:30:25.87ID:IrcFtIiG0
>>907
解決方法としてはVBEからコードをエクスポートして
記号を表示できるテキストエディタで開くとか
909デフォルトの名無しさん (ワッチョイ 7973-DQO+)
2017/08/22(火) 08:46:12.95ID:efKhXBAh0
変数名が日本語なのがバグの原因、に100ペリカ
910デフォルトの名無しさん (スップ Sdb3-6IIt)
2017/08/22(火) 11:48:53.83ID:EWbmYfD4d
たまにしか日本語使わないがそんなことでトラブったことはないな
911デフォルトの名無しさん (ワントンキン MMd3-yDuE)
2017/08/22(火) 13:57:55.46ID:bO04JkUdM
ie制御系の本てあんまりないよね。ネットでちまちま調べながらやってるけどエラーがおこってその原因を調べるのも一苦労。数百回のループの中で99%成功一度だけエラーとか読み込み関係だと思うんだけど、こうすれば絶対防げるとかあるんかね。
912デフォルトの名無しさん (JP 0Heb-oL0b)
2017/08/22(火) 14:17:54.96ID:BcNwm5wtH
>>911
なんのためにIEを制御したいのかわからないけど、データ取得が目的ならIEを制御するという
方法をやめて、直接HTMLを取得して解析する方法にするとか。
913デフォルトの名無しさん (アウアウエー Sa23-Ovym)
2017/08/22(火) 14:32:57.14ID:3oFcm+Eea
変数が日本語で不具合でたことはないな
怪しいのは、変数の方をちゃんと指定してないんじゃないかなってとこ
最初の方でdoubleが入ってるって言ってたよね
~.Columnの参照持ってきちゃってるとかね
longで型指定してみたら
914デフォルトの名無しさん (ワントンキン MMd3-yDuE)
2017/08/22(火) 14:52:26.20ID:bO04JkUdM
>>912
エクセルから値をコピー→会社のシステム(ie)のテキストボックスにペースト→サーチボタン押す→チェックボックス押す→リストボックスから選ぶ→決定ボタン押す
てのを毎日数百件。
こんなのはスクリプトでも手作業でもなく、エクセルアップロードして終わりとかにして欲しいんだけど。
915デフォルトの名無しさん (ワッチョイ 993d-JJVS)
2017/08/22(火) 15:03:25.63ID:X7Tz7Bl60
>>914
ブラウザ側で、jsとか使ってcsv読み込めるようにした方が早そう
916デフォルトの名無しさん (JP 0Heb-oL0b)
2017/08/22(火) 15:31:32.03ID:BcNwm5wtH
>>914
RubyやPythonを使えるなら、すぐ作れそうだけどね
頑張って
917デフォルトの名無しさん (ワッチョイ 5b6d-jLVh)
2017/08/22(火) 19:14:59.94ID:mRcKPRVe0
ブラウザのコンソール使えばサイト変更せずに何でもできるよな
あれすげー好き
918デフォルトの名無しさん (アウアウウー Sa85-c2A1)
2017/08/22(火) 19:32:43.17ID:j7l9pWc0a
>>914 とりあえず>>791のツールを使ってみ。 そうすれば自動的にどういうコード書けば良いかわかる。
919デフォルトの名無しさん (アウアウウー Sa85-c2A1)
2017/08/22(火) 19:53:03.47ID:j7l9pWc0a
>>836
とりあえず、>>745と合わせてプログラムを類推して、ツッコミどころを順々に修正しながら8つのパターンで組んでみた。
たぶん、5つ目のサンプルでB2からB101まで取得データを書き込めると思う。
ただし、実際にはTHタグが何個あるかわからないのでIE上でF12キーを押して問題のテーブルを表示させてTHが何個あるかを確認して修正すること。
現在のプログラムはTHが3個、TDの2番目からデータを取得する前提で組んでいる。
(0始まりでTHは0、1、2なのでTDの2番目は全体で4番目)

https://pastebin.com/3sBqwsN9
920デフォルトの名無しさん (ワッチョイ b111-Ovym)
2017/08/22(火) 19:59:15.08ID:Gbnbr+eX0
>>914
クソみたいな作業だなw
ご愁傷様
921デフォルトの名無しさん (アウアウウー Sa85-c2A1)
2017/08/22(火) 20:14:43.78ID:j7l9pWc0a
>>893
コード示してあるけど、変数宣言部分が無く、また変数名から変数の型も類推できない。
これでは変数がどうなっているのかわからない。
変数に日本語使うのは自分ならしないけど、それよりも変数名から型が分からないのはほかの人も困らないか?

特売コード名=""のところと書いてあるが、デバッグ時に黄色になっているのはその次の行?
この行が黄色になっているならその前の行の実行でリスト最終行が変化したことになる。

下に変更してDebug.Print Typename(特売コード名)のところにプレークポイント置いて実行してみるとか。
For i = ヘッダ列数 + 1 To 最終列 Step 7
特売コード = RIファイル.Sheets(1).Cells(ヘッダ行数 - 1, i).Value * 1 '特売コードはlongの13桁です(JANコードです)
特売コード=123
Debug.Print リスト最終行
特売コード名="ABC"
Debug.Print リスト最終行
Debug.Print Typename(リスト最終行)
Debug.Print Typename(特売コード)
Debug.Print Typename(特売コード名)
特売コード名 = "" '何故かここで変数変数「リスト最終行」が「特売コード」の値になります。13桁なのでものすごい量の処理になってしまいます
'以降、他の処理
Next
922デフォルトの名無しさん (ワッチョイ 130f-yDuE)
2017/08/22(火) 20:24:31.59ID:fju/pSre0
>>915
>>916
VBA以外やった事ないんだよね。ie操作はエラーになった時の原因や対処がブログとか個人の質問回答とかで情報少なくて決定版みたいなの見つけにくいんだけど、別言語は充実してる?

>>918
ありがとう。でも会社のパソコン外部ネットワークにつながらなくてUSBとかの持ち込みもだめなんだよ。
一応ieの部品に対して行って欲しい処理自体はできてるから、ループ中に止まりにくい方法調べてみます。
923デフォルトの名無しさん (ワッチョイ 130f-yDuE)
2017/08/22(火) 20:35:39.11ID:fju/pSre0
>>920
クソ&クソ作業。
皆当たり前のようにやってる。自分もだけど、プログラミング的な知識無いと、そのやり方に疑問を持つのすら難しい。
924デフォルトの名無しさん (ワッチョイ 1311-slju)
2017/08/22(火) 20:57:35.78ID:1JK3C2LQ0
ExcelからIEを操作せずにバッチスクリプトでcURLやWgetみたいなHTTPクライアントを使ったらいいと思うけど
外部ネットワークにアクセスできなくて追加インストールもできないとなるといろいろ詰んでるね

Powershellが使えるならそれほど苦労せずスクリプト化できるよ
https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Invoke-WebRequest
925デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/22(火) 20:59:25.09ID:yhGjK5+g0
>>923
なるほど。
うちの職場も無駄な作業が多いけどみんな疑問をいだかないことに対してなんてアホの集団なんだろうと思ってたけど
「プログラミング的な知識が無いとやり方に疑問を持てない」のが原因だったか。
これで疑問が氷解した。

あと1つこの職場で学んだことだが
せっかく自分が自動化するVBAのツールをつくって何人かにそのツールをあげても「使ってくれない」。
これは便利なのが嫌い」なのではなくて「自分が作ったツールじゃないからなにをしているかがさっぱりわからないから怖くて使えない」からだということだ。
926デフォルトの名無しさん (ワッチョイ 9352-jLVh)
2017/08/22(火) 21:01:25.05ID:yhGjK5+g0
だから完全なるアホの集団ではないのかもしれないが、やっぱりアホの集団にはかわらない。
そんな周りの人たちの心理がわかる自分は天才だということだ。
927デフォルトの名無しさん (アウアウカー Sa1d-R5c0)
2017/08/22(火) 21:39:28.52ID:RSpbi9dUa
>>922
クリップボードとかSendkeysとか使って無いだろうな?
特にSendkeysは危険。
絶対使うべきじゃない。
分かって使うなら良いけど。

あと、Domを使ってるならクリック時にsubmitでなくClick使ってる場合は注意。
submitは送受信前提だから直後はIEがBusyになるけど、Clickは送受信前提じゃないから(と俺は思ってるけど別の理由かも)いっぱく置いてBusyになることがある。
つまり、Busyチェック時にはかからず、チェック抜けてからBusyになることがある。
俺の場合はClickの時だけチェック前に300msくらいSleepしておく。
928デフォルトの名無しさん (ワッチョイ b111-Ovym)
2017/08/22(火) 22:07:32.73ID:Gbnbr+eX0
>>927
やっぱスリープ入れるべきかな
なんとなくスマートじゃない感じして抜いても動くように作ろうとしてんだけどうまく行かん
929デフォルトの名無しさん (アウアウカー Sa1d-R5c0)
2017/08/22(火) 22:56:13.57ID:3iMCLjz4a
>>928
そのページの作りによる部分は有るからね。
submitでさえSleep入れる必要があるかもしれない。
遷移した後で少し待ってからさらに遷移する場合とかもあるし、どうしてもそのページに合わせる部分は有るでしょう。
930デフォルトの名無しさん (ワッチョイ ab4b-bEti)
2017/08/22(火) 22:57:24.09ID:vl5o4wqs0
>>919
凄く作り方の参考になるし完璧な説明です
ありがとうございます。
<TABLE>
<TR>
<TH>Title1</TH>
<TD>DATA1</TD>
</TR>
<TR>
<TH>Title2</TH>
<TD>DATA2</TD> 取得すべき最初のデータ
</TR>
<TR>
<TH>Title3</TH>
<TD>DATA3</TD> 取得すべき2番目のデータ
</TR>
.
.
.
<TR>
<TH>Title9</TH>
<TD>DATA9</TD>
</TR>
</TABLE>
-------------------------------------------
この構造の場合、下記はどのようになるのでしょうか?
TABLE群 -> colTable(0)
TR群 -> colTable(0).childNodes
TH群 -> colTable(0).childNodes.Item(0).childNodes(0番目~2番目)
TD群 -> colTable(0).childNodes.Item(0).childNodes(3番目~11番目)
931デフォルトの名無しさん (アウアウカー Sa1d-R5c0)
2017/08/23(水) 00:05:41.99ID:FdVTMyW1a
>>930
その場合は複数のTRがTABLEから見て子どもでしょ。
だからTRは最初のchildNodes.Item()の括弧の中が2番目からカウントアップ。
で、TDはそれぞれのTR内で常に2番目なのでchildNodes.Item(カウントアップ).childNodes.Item()の括弧の中は2番目。
各番目は0始まりだから2番目ってことは1ってことね。
この場合はcolTRも使わない。(Set colTR =で始まる文がいらない。)

Cells(i, 2).Value = colTable(0).childNodes.Item(1).childNodes.Item(1).innerText
Cells(i, 3).Value = colTable(0).childNodes.Item(2).childNodes.Item(1).InnerText
Cells(i, 4).Value = colTable(0).childNodes.Item(3).childNodes.Item(1).innerText

多分、こんな感じ。
932デフォルトの名無しさん (アウアウウー Sa85-mYeN)
2017/08/23(水) 08:10:00.16ID:EgpJbwY2a
全くの素人です
質問させてください

A1=1の場合タブの色を赤
A1=2の場合タブの色を青
としたくて
A1にはsum関数で数式を組んでるんだが1や2になっても反映されない
手入力で数値を入れるかセルをダブルクリックしてエンターを押すと反映される

何故でしょうか。
933デフォルトの名無しさん (ワッチョイ 5b6d-jLVh)
2017/08/23(水) 08:11:08.70ID:OKqU/Ui90
>>932
実際に何をやったの?
934デフォルトの名無しさん (アウアウエー Sa23-Ovym)
2017/08/23(水) 08:15:41.26ID:RC4smTF3a
>>932
イベントが間違ってる
そんなん条件付き書式でよくね?
935デフォルトの名無しさん (アウアウウー Sa85-mYeN)
2017/08/23(水) 08:18:48.53ID:EgpJbwY2a
コードは
private sub worksheet_change(ByVal
target as range)
If target.address〈〉"A1" then exit sub
If Target = "1" then Activesheet.Tab.ColorIndex = 9
If Target = "2" then Activesheet.Tab.ColorIndex = 3
End Sub

初心者ですのでここはこうした方がいいなどアドバイスいただけると幸いです
936デフォルトの名無しさん (ワッチョイ 5b6d-9Vea)
2017/08/23(水) 08:29:58.52ID:OKqU/Ui90
>>935
エラーになる
937デフォルトの名無しさん (アウアウウー Sa85-mYeN)
2017/08/23(水) 08:33:36.33ID:EgpJbwY2a
>>934
シートのタブ色変更なんですが条件付き書式でできますか?
938デフォルトの名無しさん (ワッチョイ 5b6d-9Vea)
2017/08/23(水) 08:36:18.74ID:OKqU/Ui90
>>932
どちらでも変わったけど
A1=SUM(1)
A1=SUM(2)
939デフォルトの名無しさん (ワッチョイ 7973-DQO+)
2017/08/23(水) 08:47:09.36ID:13NrMZgc0
>>925
それはお前が信用されてないからでわw
940デフォルトの名無しさん (ワッチョイ 7973-DQO+)
2017/08/23(水) 08:49:04.48ID:13NrMZgc0
>>937
条件付き「書式」なんだから、そういう事をするための物だよ
941デフォルトの名無しさん (ワッチョイ e1f2-bPth)
2017/08/23(水) 09:21:19.41ID:+0TvjQ0a0
>>935
"1"と"2"の両脇の"外したら動かないか?
942デフォルトの名無しさん (アウアウカー Sa1d-Xpxm)
2017/08/23(水) 10:06:33.42ID:zci6CT9Ca
>>935
色が変わったあとに1,2以外が入っても戻らない
943デフォルトの名無しさん (アウアウウー Sa85-mYeN)
2017/08/23(水) 10:15:50.03ID:EgpJbwY2a
>>940
ご教示下さい
944デフォルトの名無しさん (アウアウウー Sa85-mYeN)
2017/08/23(水) 10:23:11.79ID:EgpJbwY2a
>>941
動きませんでした
945デフォルトの名無しさん (アウアウウー Sa85-mYeN)
2017/08/23(水) 10:24:44.20ID:EgpJbwY2a
>>942
A1の数字は一定期間ごとに変化するんですがそれには対応できないということになりますか?
946デフォルトの名無しさん (アウアウエー Sa23-Ovym)
2017/08/23(水) 10:47:29.53ID:N2QxNW8Oa
>>937
ごめんタブか
947デフォルトの名無しさん (ワッチョイ 5991-7WL/)
2017/08/23(水) 11:13:45.38ID:yxvWLKA00
>>935
そもそも
Target.addressって絶対参照が返ってくるんじゃなかったっけ?
でもそれなら手入力でも反映されない気がするなぁ

あと、たとえばB1のセルを変更してA1の計算結果が変わったとしても
A1の数式を変更したわけじゃないから
targetにはB1が渡されるだけじゃない?

全部予想ですまん
948デフォルトの名無しさん (ワッチョイ 93b6-jLVh)
2017/08/23(水) 12:01:09.88ID:QSg8qhxn0
>>935
Worksheet.Change イベント (Excel)
https://msdn.microsoft.com/ja-jp/library/office/ff839775.aspx
>セルが再計算時に変更されると、このイベントは発生しません。シートの再計算をトラップするには、Calculate イベントを使用します。
949デフォルトの名無しさん (アウアウウー Sa85-mYeN)
2017/08/23(水) 13:56:51.41ID:EgpJbwY2a
>>948
ありがとうございますどう組んでいいかわからないので
Worksheet_change
calculateを調べてみます
950デフォルトの名無しさん (ドコグロ MMb3-x4Vn)
2017/08/23(水) 18:51:26.23ID:Rd2CDMDCM
A1セルの数式を変えていいならユーザー定義関数でできる
例えばA1に=Sum(B1:B2)と定義してるなら標準モジュールに
Function XXX(R As Range) As Double
Dim Result As Double
Result = Application.WorksheetFunction.Sum(R)
Select Case R
Case 1: ActiveSheet.Tab.ColorIndex = 9
Case 2: ActiveSheet.Tab.ColorIndex = 3
End Select
XXX = R
End Function
を定義してA1セルを=XXX(B1:B2)に書き換えればいい
951950 (ドコグロ MMb3-x4Vn)
2017/08/23(水) 18:54:14.54ID:Rd2CDMDCM
すまんちょっと間違えてたわ
Function XXX(R As Range) As Double
Dim Result As Double
Result = Application.WorksheetFunction.Sum(R)
Select Case Result
Case 1: ActiveSheet.Tab.ColorIndex = 9
Case 2: ActiveSheet.Tab.ColorIndex = 3
End Select
XXX = Result
End Function
952デフォルトの名無しさん (ワッチョイ ed6f-2x4P)
2017/08/24(木) 01:43:32.58ID:gFPKAoW/0
>>935
ちなみに<> を半角にして、"A1" を "$A$1" にしたら変わったぞ
953952 (ワッチョイ ed6f-2x4P)
2017/08/24(木) 02:23:07.38ID:gFPKAoW/0
>>935
もしA1に=SUM(B1:B2) ってなっているなら

If Cells(1, 1) = "1" Then ActiveSheet.Tab.ColorIndex = 9
If Cells(1, 1) = "2" Then ActiveSheet.Tab.ColorIndex = 3

これだけでいけた Target は変更(入力)した場所が入っているから
954デフォルトの名無しさん (ワッチョイ 86a2-vgeI)
2017/08/24(木) 05:57:45.02ID:H9WPuZGK0
SUMとしか言ってないので後だしっぽいが
=SUM(Sheet2!B1:B2)は考えなくていいかな
955デフォルトの名無しさん (ワッチョイ c66f-2x4P)
2017/08/24(木) 21:45:58.84ID:fiG1XOAx0
>>925
じゃあ関数ならわかるだろうと思って、
IFだらけのクソ長い関数作ってやったわ。

それもわからんて言われたけど。
当たり前か。
956デフォルトの名無しさん (ワッチョイ 86a2-vgeI)
2017/08/24(木) 22:13:24.34ID:H9WPuZGK0
そのツールでやってるのは上司も知ってる?
それでも使わない?
何かあれば責任の所在は明らかなのに
957デフォルトの名無しさん (ワッチョイ 29aa-vgeI)
2017/08/24(木) 23:00:01.92ID:q91vBAgZ0
ADOでエクセル上にあるテーブルに接続していますが、
テキストデータを追加したり、更新したりすると先頭にシングルクォテーションが付いてしまいます。
これは仕様だと思いますが、付かないようにする方法ないでしょうか?
後から消すって方法は無しでお願いします。
958デフォルトの名無しさん (オッペケ Sr6d-d2qD)
2017/08/25(金) 01:43:07.95ID:KTLmtMM0r
>>914
> エクセルアップロードして終わりとかにして欲しいんだけど。

システムへの大量レコードのアップロードって、ミスした時が大変なのよ。
アップロードするファイルを間違えたりするやつが必ずいるから。

場合によっては、システムを停めて修正しなければならなくなる。

なので、コピペによる数百件の手入力は言わば安全策。
派遣スタッフが多い職場でありがちだよね。

というわけで、手入力作業をIE制御で自動で行うツールはどうしても必要になるんだけど、エラートラップ(例外処理)をきちんと作り込まないと逆に使いづらくなるので要注意。
959デフォルトの名無しさん (ワッチョイ ed6f-2x4P)
2017/08/25(金) 02:02:02.49ID:jgB7N/LP0
>>957
コードは?
960デフォルトの名無しさん (ワッチョイ ad23-FM7+)
2017/08/25(金) 06:46:28.19ID:eH4j8CdN0
>>957
元データに入ってる、というオチではない?
961デフォルトの名無しさん (ドコグロ MM72-+ULf)
2017/08/25(金) 07:59:18.90ID:s9vD7wq8M
>>958
> アップロードするファイルを間違えたりするやつが必ずいるから。
そんな奴はコピペでも間違えたファイルからコピペするだろ w
962デフォルトの名無しさん (アウアウカー Sa85-1rYb)
2017/08/25(金) 08:16:24.76ID:fNT5yRt6a
大量のデータをエクセルでやるのに無理がある
963デフォルトの名無しさん (ワッチョイ 5973-wCej)
2017/08/25(金) 08:39:54.31ID:ZY8b+JLd0
>>962
エクセルだと無理ってことはアクセス使えってこと?
余計に問題が増えそうだが
964デフォルトの名無しさん (スップ Sdea-U5o/)
2017/08/25(金) 11:34:23.91ID:9EHfqskZd
>>958
なるほど
レコード数に関係なく一定の手間でできるとなると、一瞬で大量のエラーを発生させるやつが出てくるな
965デフォルトの名無しさん (アウアウカー Sa85-HXRX)
2017/08/25(金) 12:46:59.96ID:4kzNGnM2a
>>956
そういう責任問題はマクロや関数使わなくても同じ話。
というか、コンピューター使ってる時点で駄目だろ。

最後は何やってもお前のコンピューターの使い方が悪いという話になる。
966デフォルトの名無しさん (アウアウカー Sa85-HXRX)
2017/08/25(金) 12:55:04.81ID:4kzNGnM2a
>>958
それはそういうシステム作った奴が悪い。
いくらでも規定のフォーマットじゃなければ受け付けないシステムは作れるだろ。

CSVなんかでもカンマ区切りじゃなくて普通ならどうやってもキーボード入力出来ない文字で区切るなんてやるし。
それで区切ってなければ1行のデータ数不正で受け取らないなんて簡単。
それ以外にもチェック項目入れてEXCEL上で出力編集できるプログラム組めば良いし。
967デフォルトの名無しさん (ワッチョイ caaa-vgeI)
2017/08/25(金) 13:18:40.53ID:11RxMW0L0
>>966
データの中身が間違っているものをアップロードしてしまうことを言ってるんじゃないだろうか
968デフォルトの名無しさん (ワッチョイ ed6f-2x4P)
2017/08/25(金) 14:22:18.70ID:jgB7N/LP0
正しいデータを入れなおして直るならいいんだけど
取り返しのつかないミスで業務に支障がでたら知らん
969デフォルトの名無しさん (JP 0H0e-2x4P)
2017/08/25(金) 15:30:41.90ID:7eimf3NdH
>>958
データのバリデーションが足りてないだけでしょ
970デフォルトの名無しさん (ササクッテロ Sp6d-Hgyh)
2017/08/25(金) 16:19:40.23ID:YOvDFOChp
バックアップを取ってリカバリしないの?
971デフォルトの名無しさん (ササクッテロレ Sp6d-tWDQ)
2017/08/25(金) 18:19:08.43ID:ljcbkcPnp
>>958
ウチの会社にもいましたわ、こんな事やらかす人達。
所詮、人間がやる事ですけど。
972デフォルトの名無しさん (オッペケ Sr6d-d2qD)
2017/08/25(金) 18:24:10.85ID:KTLmtMM0r
>>966
フォーマットの問題じゃないんだよね。

アップ済みのファイルを再度アップしてしまったり、修正前のファイルをアップしたりとか、フォーマットに問題はないのでシステムは受け付けてしまう。

その辺をリカバリできるシステムにしようとするとまた莫大な金がかかるので、上はなかなか動かない。

それによってどのくらいのコスト削減あるいは利益が見込めるのか、まずは数字出さないと話も聞いてもらえないよ。
973デフォルトの名無しさん (アウアウカー Sa85-HXRX)
2017/08/25(金) 22:45:26.71ID:jbJbRr/0a
>>972
???
後からでも受け付けるようにするだけだろ。
別に難しくないだろ。
後からアップしたのでデータ上書きすれば良い。
もちろん戻れるように履歴取る必要は有るけど。
974デフォルトの名無しさん (ワッチョイ caaa-vgeI)
2017/08/25(金) 23:17:31.65ID:11RxMW0L0
>>973
たぶんキーが無いんじゃない?
975デフォルトの名無しさん (オッペケ Sr6d-d2qD)
2017/08/26(土) 07:13:30.51ID:vvYv5Hier
>>973
働いたことないの?
976デフォルトの名無しさん (オッペケ Sr6d-d2qD)
2017/08/26(土) 07:22:16.86ID:vvYv5Hier
>>974
一応、ファイルのフォーマットにはユニークなカラムはあるんだけどね。
システム側では、そのカラムはキーになってない。。。と思われ。

さすがにシステムの仕様まではわからない。
977デフォルトの名無しさん (ワッチョイ 1d4b-rG16)
2017/08/26(土) 09:32:33.78ID:5dccF0/k0
>>931
ありがとうございます。
あれから色々試しましたがいくつか問題点があります。

問題1
Dim el As IHTMLElement を削除するとTDが取得出来ず、table丸ごとの取得となります。
問題2
Dim htmlDoc As HTMLDocument を削除するとエラーが出ます。
問題3
7番目のサンプルを実行するとこの部分がエラーをおこします。
objDOM.body.innerHTML = objXML.responseText

問題1についてtableデータ丸ごとでも取得後必要箇所を抜き出せばいいので用は足せます。
変わらなければそのままいこうと思っていますが相手サーバーへの負担は増えるのでしょうか?

問題2について削除しなければ問題ありませんがxml化時に下記3箇所をどのように記載を変更すればいいでしょうか?
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document
Set colTable = htmlDoc.getElementsByName("oppai")

問題3について下記の("htmlfile")が原因かと思ったのですがこのままでいいでしょうか?
それとも何かのシート名を入れるのでしょうか?
Set objDOM = CreateObject("htmlfile")

毎度すいませんがよろしくお願い致します。
978デフォルトの名無しさん (ワッチョイ 86aa-oTLP)
2017/08/26(土) 13:59:12.95ID:1Xp/S2sl0
>>958
>システムへの大量レコードのアップロードって、ミスした時が大変なのよ。
>アップロードするファイルを間違えたりするやつが必ずいるから

人間は、必ず間違うから、絶対に回復機能が必要。
普通は、バックアップ・スナップショット機能で、前の状態へ戻れる

銀行では、アルバイト3人が、同じデータを入力する。
3人とも同じ金額の時だけ、合格

バリデ、validation
979デフォルトの名無しさん (ワッチョイ 86aa-oTLP)
2017/08/26(土) 14:10:14.30ID:1Xp/S2sl0
>>977
JavaScript の、jQuery でやれば?
Groovy, Ruby でも良いし

何で、VBA でやる?
VBAには、クロージャがあるのか?

最初から、ライブラリが揃っている言語を、使えば良いだけ
980デフォルトの名無しさん (ワッチョイ fe6d-brQu)
2017/08/26(土) 14:14:47.08ID:svByvDEZ0
>>978
>銀行では、アルバイト3人が、同じデータを入力する。
どこの銀行だよwww聞いたことないわwww
981デフォルトの名無しさん (ワッチョイ ca11-+ULf)
2017/08/26(土) 15:49:08.64ID:O53zOlu10
データを2人で入力してチェックするのは割りと普通
https://www.noc-net.co.jp/blog/2015/06/column_050/
重要な奴なら3重チェックもあるんじゃね
982デフォルトの名無しさん (ワッチョイ 0a11-xpGE)
2017/08/26(土) 16:55:31.30ID:azDqTcfP0
>>972
>アップ済みのファイルを再度アップしてしまったり、修正前のファイルをアップしたりとか、

間違ったと気づいた時点でオペレータ自身が元に戻せるような仕組みを作るのはそれほど難しくないよ
手動でExcelを修正するステップやその前のステップを含めてシステム化するのが理想ではあるだろうけどね

ただ100~300万くらいのお金を莫大な金と言ってるんであれば自力で頑張るしかない
担当が変われば元の木阿弥だし、本来機械にやらせるべき仕事を人間がやってることによる逸失利益を加味したら安い買い物
983デフォルトの名無しさん (ワッチョイ ca11-+ULf)
2017/08/26(土) 17:26:45.76ID:O53zOlu10
>>982
要件も確認しないうちから
> 間違ったと気づいた時点でオペレータ自身が元に戻せるような仕組みを作るのはそれほど難しくないよ
とか言うアホ営業 w
984デフォルトの名無しさん (ワッチョイ 293d-oKtA)
2017/08/26(土) 17:45:46.64ID:6HYM9FnY0
在庫と直結するようなシステムだと現物が関わるからタイミングによっては取り戻すの大変だしね。
985デフォルトの名無しさん (ワッチョイ 0a11-xpGE)
2017/08/26(土) 17:49:54.05ID:azDqTcfP0
>>983
ははは、言いたいことはわかるけどそれは客が要件をすべて決めると思ってるやつの発想
費用に応じて提供出来る内容を変えてあげればいいだけ
そういう調整が出来ない人ばっかりだと苦労するよね

まあそこは論点じゃなく莫大な費用がかかると思ってるのは解決方法の選択肢が見えてないだけで
思ってるほどの費用がかからない方法も有るよってことよ
VBAのかわりにスクリプト書くだけなら100万もいらんし
986デフォルトの名無しさん (ワッチョイ 0a11-xpGE)
2017/08/26(土) 17:55:27.18ID:azDqTcfP0
>>984
それは今でも発生しうる業務フローの問題でしょ?
誰かが確認するっていうステップが必要なだけで1件1件コピペ入力しなきゃいけないのとは別問題
確認が必要ならそのフローをシステムに取り込んであげればいい

機械で自動確認できるほうが楽だけどそれは必須じゃないじゃん
987デフォルトの名無しさん (ワッチョイ 0a11-xpGE)
2017/08/26(土) 17:56:27.22ID:azDqTcfP0
Excel関係ない気がするからこの辺にしとくわ
988デフォルトの名無しさん (ワッチョイ ca11-+ULf)
2017/08/26(土) 18:39:24.64ID:O53zOlu10
>>985
> まあそこは論点じゃなく莫大な費用がかかると思ってるのは解決方法の選択肢が見えてないだけで
だから要件も見えてないのに選択肢が見えるわけないだろ w
>>984の件も数件なら後追いで修正できるけど1万件とかになると破綻するとかあるだろうし
989デフォルトの名無しさん (アウアウカー Sa85-1rYb)
2017/08/26(土) 19:30:25.78ID:qX5fc/S5a
株かなにかで金額間違えてニュースになったな
990デフォルトの名無しさん (ワッチョイ caaa-vgeI)
2017/08/26(土) 19:42:35.36ID:eHXsO5oX0
あれはトレーダーによる入力だからそれ自体が一次情報
複数人による入力対象ではない
991デフォルトの名無しさん (ワッチョイ 29e4-fJzc)
2017/08/26(土) 21:03:15.65ID:F72uLJPi0
いつから問題の対象が
複数人による入力
に限定されるようになったんだ
992デフォルトの名無しさん (ワッチョイ caaa-vgeI)
2017/08/26(土) 22:10:58.71ID:eHXsO5oX0
さあ
993デフォルトの名無しさん (ワッチョイ 3e1e-CSD/)
2017/08/27(日) 02:42:06.83ID:L7AzHdYH0
>>914
> こんなのはスクリプトでも手作業でもなく、エクセルアップロードして終わりとかにして欲しいんだけど。
と書いた時から、サーバ側も巻き込んだシステム全体の話になってしまって
このスレの範疇を越えるものになったんだろうな
それは多分「単純作業をVBAでなんとかしたい」と思ってただけの>>914にとって
「そんなことを議論されても俺にはどうしようもない・・・」と思ってると思う
994デフォルトの名無しさん (ワッチョイ c66f-2x4P)
2017/08/27(日) 09:42:07.86ID:M71tiO6/0
995デフォルトの名無しさん (アウアウカー Sa85-HXRX)
2017/08/27(日) 10:41:40.78ID:hneRKt3Sa
>>993
そもそもは>>958が手入力を安全策とか言い出したことからだろ。

手入力なんて全く安全策じゃないし、コンピューターを使う以上、安全性を追求しすぎると本末転倒になるという話。
996デフォルトの名無しさん (アウアウカー Sa85-1rYb)
2017/08/27(日) 12:36:10.64ID:9rRkVsmFa
銀行でバイトに入力させるとかないだろ
997デフォルトの名無しさん (ワッチョイ fe6d-YxLc)
2017/08/27(日) 12:40:26.06ID:LjjEWylk0
>>996
あるよ。金融業だけど、新規口座の個人情報入力は子会社の派遣君がやってた。
チェックは正社員がやる。

振込処理なんかはもちろん、絶対にないw
998デフォルトの名無しさん (ワッチョイ fe6d-YxLc)
2017/08/27(日) 12:40:42.78ID:LjjEWylk0


Excel VBA 質問スレ Part50 [無断転載禁止]?2ch.net
https://mevius.2ch.net/test/read.cgi/tech/1503805217/l50
999デフォルトの名無しさん (ワッチョイ 293d-oKtA)
2017/08/27(日) 13:14:20.45ID:EGaKBA6h0
>>998
1000デフォルトの名無しさん (ワッチョイ 0a0f-cmDg)
2017/08/27(日) 13:34:20.02ID:rBvqwKY30
ぬるぽ
-curl
lud20250208190117ca
このスレへの固定リンク: http://5chb.net/r/tech/1498410914/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「Excel VBA 質問スレ Part49©2ch.net YouTube動画>12本 ->画像>8枚 」を見た人も見ています:
Excel VBA 質問スレ Part61
Excel VBA 質問スレ Part58
Excel VBA 質問スレ Part64
Excel VBA 質問スレ Part67
Excel VBA 質問スレ Part80
Excel VBA 質問スレ Part70
Excel VBA 質問スレ Part69
Excel VBA 質問スレ Part79(ワッチョイあり)
【TESO質問】The Elder Scrolls Online 質問スレ Part1
【TESO】The Elder Scrolls Online 質問スレ Part30
【TESO】The Elder Scrolls Online 質問スレ Part21
【RIFT】 Rift: Planes of Telara 質問スレ Part5
【PS/XB】Elden Ring エルデンリング 質問スレ Part6
【PS/XB】Elden Ring エルデンリング 質問スレ Part3
iTunes 質問スレ Part14
幻想神域 質問スレ Part41
Avisynth 質問スレ Part10
【PC】Terraria 質問スレ Part11
【PC】Terraria 質問スレ Part16
【アズレン】アズールレーン 質問スレ Part21
【アズレン】アズールレーン 質問スレ Part71
【PS4/XB1】The Division 質問スレ part13【ディビジョン】
【DQB2】ドラゴンクエストビルダーズ2 質問スレ part19
iTunes 質問スレ Part17
au by KDDI 質問スレ Part.211
【PoE】 Path of Exile 質問スレ part28
【PoE】 Path of Exile 質問スレ part26
【PoE】 Path of Exile 質問スレ part15
【PoE】 Path of Exile 質問スレ part23
【PoE】 Path of Exile 質問スレ part17
【PoE】 Path of Exile 質問スレ part19
【BlackDesert】黒い砂漠 質問スレ Part14
【馳為】CHUWI タブレット 質問スレ Part.4
【アズレン】アズールレーン 質問スレ Part6
【アズレン】アズールレーン 質問スレ Part66
【アズレン】アズールレーン 質問スレ Part70
【アズレン】アズールレーン 質問スレ Part28
【アズレン】アズールレーン 質問スレ Part29
【オルサガ】オルタンシア・サーガ 質問スレ Part12
【PS4/XB1】The Division 質問スレ part6【ディビジョン】
【DQB2】ドラゴンクエストビルダーズ2 質問スレ part3
【少女前線】ドールズフロントライン 質問スレ Part10【ドルフロ】
【少女前線】ドールズフロントライン 質問スレ Part5【ドルフロ】
Tree of savior 質問スレ Part7
Tree of savior 質問スレ Part6
Windows 10 質問スレッド Part46
Tree of Savior 質問スレ Part40
Tree of Savior 質問スレ Part34
Tree of Savior 質問スレ Part22
Windows 10 質問スレッド Part45
Windows 10 質問スレッド Part43
Windows 10 質問スレッド Part41
Windows 10 質問スレッド Part61
【WoT】World of Tanks 質問スレ Part38
【PoE】 Path of Exile 質問スレ part36
乖離性ミリオンアーサー 質問スレ part29
【LostArk】ロストアーク 質問スレ Part4
乖離性ミリオンアーサー 質問スレ part25
【LostArk】ロストアーク 質問スレ Part3
【アズレン】アズールレーン 質問スレ Part90
Android 質問スレ Part76 【アプリ質問は他で】
【アズレン】アズールレーン 質問スレ Part93
【PS4/Switch】DIABLO3 ディアブロ3 質問スレ Part49
スターウォーズバトルフロント 質問スレPART1
Hearthstone: Heroes of Warcraft 質問スレ part40
【Switch】ファイアーエムブレム風花雪月 質問スレ part8
20:04:16 up 100 days, 21:03, 0 users, load average: 10.30, 10.53, 10.55

in 2.2729449272156 sec @2.2729449272156@0b7 on 072709