トップページtech
1001コメント346KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2014/12/28(日) 07:18:52.51ID:jXo1P+zk
ExcelのVBAに関する質問スレです

                   ___
       ___      /____ヽ      ____
      /____\    | |´・ω・`| |    /___ヽ
      .l |´・ω・`|  ニX二 . ̄ ̄ ̄  二X二  |´・ω・`| l 俺たちに任せろ
      !、 ̄ ̄ ̄  ヽ   |       |    /    ̄ ̄ ̄/
       ヽ_/ヽ、  ヽ__)  \__/\_/.   /_/  ノヽ_/
             ̄                ̄ ̄

このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。

コードが嫌な人は別スレ建ててください。

※前スレ
Excel VBA 質問スレ Part35
http://peace.2ch.net/test/read.cgi/tech/1414186311/

※頭のレスの方でキチガイが束縛テンプレを貼る詐欺行為が前スレまで散見されましたので、十分にご注意ください。
0002デフォルトの名無しさん 転載ダメ©2ch.net2014/12/29(月) 22:03:43.98ID:8KDlrwKz

板復帰(OK!:Gather .dat file OK:moving DAT 426 -> 424:Get subject.txt OK:Check subject.txt 426 -> 424:Overwrite OK)load averages: 0.69, 0.93, 0.97
sage subject:424 dat:424 rebuild OK!
0003デフォルトの名無しさん2014/12/30(火) 14:09:30.86ID:cQa86VGR
>>2
うるさいよ
0004デフォルトの名無しさん2015/01/07(水) 22:07:57.43ID:0eah282z
あれ?前スレ途中で消されてない?
0005デフォルトの名無しさん2015/01/14(水) 22:20:08.05ID:Xuc5GVH9
はいざんねーん

Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1420790342/l50
0006デフォルトの名無しさん2015/01/15(木) 09:38:12.17ID:9RvUPi7W
>>5

そっちはテンプレ改悪で使いづらい
こっちでいいよ
0007デフォルトの名無しさん2015/01/15(木) 18:48:13.20ID:Oh+UDtkh
はいはいくやちいでちゅねー
0008デフォルトの名無しさん2015/01/16(金) 01:07:22.96ID:sWLkYVWD
>>5
残念じゃねーよ、後から立てた重複スレなんだから削除依頼出すか次に使うのがスジだろボケが
0009デフォルトの名無しさん2015/01/16(金) 15:16:11.16ID:MA1v3jsm
>>8
消えろ
0010デフォルトの名無しさん2015/01/17(土) 01:05:49.03ID:pPtCgDJH
>>9
何で二重に建てたん?
しかも二週間もあとに(笑)
0011デフォルトの名無しさん2015/01/18(日) 10:17:39.29ID:wo+YRjYB
済みません、VBA初心者ですが教えてください。

今、幾つかのブックを開いて一つのブックのあるシートに集計するロジックを作っているのですが、

@サーバーに置かれている、開く対象のブックが、既に他者に開かれていることを知る方法はありますか?
また、それは共有のブックでも可能ですか?

Aあるセルの範囲をコピーして、他のブックのシートに貼り付けるときは貼り付け先をActivateにしなければ
いけないと聞きました。それって外部から触れる可能性が無い作りに出来ると言うことでしょうか?

B今、開く対象のブック、シート単位でそれをコントロールするクラスを作っていますが、
それらのクラスで同じ役割のメソッドを纏めるためにインターフェースを使っています。
ですが、同じような処理を行うため、VB.NetやC#で言う継承が使えません。インターフェース継承って何ですか?
どうすればVB.Netで言うところの継承と同じようなことが出来ますか?
0012デフォルトの名無しさん2015/01/18(日) 21:10:38.35ID:GIXEH9nI
>>11
@
共有ブックを開いているユーザーを調べる
http://officetanaka.net/excel/vba/tips/tips99.htm

A言ってる事が分からない

B自分の知識レベルでは回答不能
0013デフォルトの名無しさん2015/01/18(日) 21:29:42.13ID:NXagbm7V
>>11
@
ここに載ってる。
http://officetanaka.net/excel/vba/tips/tips99.htm

A
心配なら処理中はApplication.ScreenUpdating=Falseで画面を固めて触らせないようにすればいい。
それでも心配なら、開いたときにブックなりシートなりのオブジェクトを抱えておいて、
貼り付ける直前でActivateにするなり、Activateになっているかチェックするなりすればいい。

B
VBAのインターフェースは、使い方は.Netのインターフェースのそれと同じで、.Netで言う継承は使えないと考えていい。
同じ処理を実行したいなら、ベースになる別クラスを作ってそこに共通メソッドを作り、
各クラスからそのメソッドを呼び出すようにする。その際、引数やプロパティを渡すことで同じコードでも
違う振る舞いを行うように作ることで代用する。俗に言う処理の移譲を行う。
0014デフォルトの名無しさん2015/01/18(日) 22:36:28.82ID:oufbqCEs
>>11
どしたの?

47 :デフォルトの名無しさん:2015/01/18(日) 02:21:02.84 ID:wo+YRjYB
ボタンを押したと同時に死ねばいいよ
0015デフォルトの名無しさん2015/01/18(日) 22:37:55.82ID:wo+YRjYB
>>12
>>13
ありがとうございます。何とかなりそうです。

厚かましいかも知れませんが、もう一つ質問しても良いでしょうか。

>>13さんの言ってる方法で作るとして、どうせ継承が使えないのなら、
各ブック、シートのコントロールクラスを
シングルトンパターンで作成したいと考えています。
ところがVBAにはSheardのようなものも無ければ、
コンストラクタに引数を渡すことも出来ないみたいなんです。
通常のモジュールを使えばインターフェースが使えなくなりますし、
何か良い方法はありませんか?
0016デフォルトの名無しさん2015/01/18(日) 23:16:10.30ID:NXagbm7V
>>15
なるほど、どうやらVB.Net使ってるみたいだね。

方法としてはちょっと面倒だけど、標準モジュールを介在させて、標準モジュール側で初期化メソッドを作って、
それに引数を渡すようにして、その中でコントロールクラスとやらを生成したり、
引数で初期化するような処理を書いておけばいいんじゃないかな。

で、その標準モジュールでGetInstanceみたいにインスタンスを取得するメソッドを書いておけば、
取得される型はインターフェースでも使えるはず。

考えればもっといい方法もあるかも知れないけど、とりあえずぱっと思い付いたところだとそんな感じ。
0017デフォルトの名無しさん2015/01/18(日) 23:28:09.72ID:wo+YRjYB
>>16
ありがとうございます!
ちょっとそれでやってみます。
また分からないことが出てきたら宜しくお願いします。
0018デフォルトの名無しさん2015/01/19(月) 23:18:01.86ID:0AwM+hCr
>>17
どったの?
あっちのスレが使われると何かくやちいことがあったの?


47 :デフォルトの名無しさん:2015/01/18(日) 02:21:02.84 ID:wo+YRjYB
ボタンを押したと同時に死ねばいいよ
0019デフォルトの名無しさん2015/01/19(月) 23:58:08.62ID:MW0jYfdq
ID被りを知らない初心者?
0020デフォルトの名無しさん2015/01/21(水) 00:57:45.53ID:eRu+vB0J
被りといいはるということはMW0jYfdq=wo+YRjYB ?
0021デフォルトの名無しさん2015/01/22(木) 01:16:33.19ID:hYET/dI2
Findメソッドってあるじゃないですか。
あれって検索する速度遅すぎませんか?
大文字小文字の区別とか全角半角の区別や、完全一致や部分一致、
複数箇所の検索とかを考慮して自分で作っても、Findで検索すると1時間くらい掛かっていたものが
セルの値を配列に入れて検索すると1分も掛からなかったりします。
Findメソッドの存在意義って何ですか?
0022デフォルトの名無しさん2015/01/22(木) 01:35:05.28ID:BH2riox/
>>21
そういうのを自分で作れない人の方が圧倒的に多いので需要は十分にあります
0023デフォルトの名無しさん2015/01/22(木) 05:38:10.64ID:vsxHNAsj
>>21
一瞬で終わる量なら重宝するだろうという想像力はないんですか?
って質問は愚問か。無いから質問してるんだもんな。可哀想に
0024デフォルトの名無しさん2015/01/22(木) 14:28:35.88ID:cZlOLLyd
キーマクロでメニューと同じことを記述できるようにするためじゃないの
0025デフォルトの名無しさん2015/01/22(木) 20:47:49.75ID:op5QAFZq
>>21
セルの数式も検索してから言え
0026デフォルトの名無しさん2015/01/23(金) 01:49:17.02ID:4gDSibKt
>>23
愚問ですね。一度関数化してしまえば以降の労力は変わらない。
量が多くなれば使えなくなるようなものを何でずっと引きずってなければならないんです?

>>25
配列にしまう際に数式をしまえばいいだけでしょ?それを差し引いても全然レスポンスが違いますよ。
0027デフォルトの名無しさん2015/01/23(金) 02:44:24.36ID:mWbfYiff
>>26
すごく雑に言うけど、一万円札があるんだから他のお札は存在意義なくね?って言ってるんすよ君は。

findよりスゴいの出来た!
 ↓
誰かに「良くできました」の判子を押してもらってこの話は終わり。

それか自信たっぷりにMSに「find改をVBAで書きました。よかったら次期のMS officeのfindと置き換えてください。」って連絡でもしなよ。
0028デフォルトの名無しさん2015/01/23(金) 03:23:20.99ID:AkvDem9m
>>26
ほんとにFindと同じ事を、Findより圧倒的に速くやれるなら
ぜひコード公開してくれや
0029デフォルトの名無しさん2015/01/23(金) 06:04:46.45ID:kLOpfBTA
findはたぶん、互換性のためにあるだけ

その後に、配列のソート・検索の速度があがったのかも。

ソートだって最近は、Tim Sort を使うものが多いらしい
0030デフォルトの名無しさん2015/01/23(金) 09:47:48.83ID:HpxWu8WK
書式で検索できる?
できるなら使いたい
公開して
0031デフォルトの名無しさん2015/01/23(金) 14:20:33.62ID:9aT4HWHH
マクロ と VBA どう違うんでしたっけ?
何となく作ってるけどw
0032デフォルトの名無しさん2015/01/23(金) 14:28:02.94ID:s6a4y7QT
>>31
同じ意味で使われる場合もあるし
VBAじゃないマクロもあるし

オレもよく判らないな
0033デフォルトの名無しさん2015/01/23(金) 14:30:02.99ID:xwefCwRE
Excelのマクロ(一連の操作を自動実行する仕組み)を実現する言語の一つがVBA。
VBA以外にも、Excel 4.0マクロというのがかつて(今も?)あった。
0034デフォルトの名無しさん2015/01/23(金) 14:31:49.11ID:xwefCwRE
確認したら、Excel 2013でも、シートの挿入でExcel 4.0マクロは健在だった。
0035デフォルトの名無しさん2015/01/23(金) 14:59:50.70ID:9aT4HWHH
マクロの記録で操作を記録…ってのはよくするんですけどね。
んで、そのマクロの記録で出来たものをちょちょっと修正して…
みたいな

>>33
マクロの上位に位置するもの…みたいな感じなんですかね
0036デフォルトの名無しさん2015/01/23(金) 15:16:19.37ID:UJ+zCl8q
本来の意味で言えば、マクロは人間の操作や思考を肩代わりする物、つまり「機能」のこと
それを実現する「手段」の一つがVBA

なので、文章を正確に書くとしたら「VBAでマクロを作る」のようになる
体系的に見れば同じ物を指していると言えるので、
略して「VBAを作る(書く)」と書いても、文法上はまったく問題がない

結局はどっちでもいい。通じればいい
0037デフォルトの名無しさん2015/01/23(金) 15:25:19.26ID:xwefCwRE
細かいけど、VBAは作らないでしょ・・・
0038312015/01/23(金) 15:57:05.99ID:9aT4HWHH
ありがとうございます 了解しました!
0039デフォルトの名無しさん2015/01/23(金) 16:46:37.80ID:UJ+zCl8q
口語なら「○○するVBAを作った」みたいな言い回しは別におかしくない
日常でもまれによく見られるし、いちいち「VBAは作らない」なんて反論をする方が変人扱いされる
0040デフォルトの名無しさん2015/01/23(金) 17:16:09.54ID:xwefCwRE
「(言語名)を作る」ってあまり聞かないなぁ。HTMLを書くとかSQLを書くとかなら良く聞くけど。
〜をするVBを作った。
〜をするC#を作った。
〜をするC++を作った。
〜をするJavaを作った。
すごい違和感あるんだけど。
0041デフォルトの名無しさん2015/01/23(金) 17:34:05.23ID:s6a4y7QT
>>39
違和感あるけど指摘はしないな
これも同様 → "まれによく見られる"

オレは絶対言わないけどね
0042デフォルトの名無しさん2015/01/23(金) 17:46:48.45ID:xwefCwRE
「文法上はまったく問題がない」とか言われると、ついつい言いたくなっちゃうんだよなぁ。
0043デフォルトの名無しさん2015/01/23(金) 19:23:37.56ID:AkvDem9m
VBAマクロの意味でVBAと言われる事はある
VBAマクロを作る、だとおかしくはないだろ

まれによく見られるは2chスラング
0044デフォルトの名無しさん2015/01/24(土) 00:39:03.67ID:qV60IszQ
>>31
昔の名残り
エクセルer向けがマクロで、プログラマ向けがVB
すぐにofficeのVBAが強化されて今に至る
マクロは簡単な処理で終わってた
0045デフォルトの名無しさん2015/01/24(土) 03:27:26.88ID:4KWVQwlI
マクロはそもそもEXCELの時に出来た概念じゃ無いよ。
アセンブラの時代から複数の処理を纏めて記述するという概念で存在する。
今でこそマクロと言えば広域でVBAのことを指すことが多いけど、4.0とか言うならもっと前がある。
0046デフォルトの名無しさん2015/01/24(土) 03:55:07.45ID:OYkQ2I8v
アセンブラ時代のマクロは、今のVBAに例えるとプロシージャの意味で使われていた
0047デフォルトの名無しさん2015/01/24(土) 06:48:33.13ID:bCSfcL8K
アセン時代のマクロ=現代で言うプロシージャ
マクロの記録→プロシージャが作成される

なるほどね。

○○をするマクロをVBAで組みました
○○をするマクロをVBAで作りました
○○をするVBAを作りました
○○をVBAで組みました
○○をVBAで自動化しました
○○作業をVBAでワンタッチちょりーっす

くそどうでもいいな
0048デフォルトの名無しさん2015/01/24(土) 07:58:03.50ID:4WzAA3v6
広域()
広義ね
0049デフォルトの名無しさん2015/01/24(土) 08:11:21.41ID:qV60IszQ
>>45
テレビはそもそも液晶の時に出来た概念じゃ無いよ。
ブラウン管時代から家庭で映像を流すために存在する。
今でこそテレビと言えば広域で液晶テレビのことを指すことが多いけど、TFTとか言うならもっと前がある。
0050デフォルトの名無しさん2015/01/24(土) 10:17:55.45ID:LdIBiv/J
>>46
んなアホな
アセンブラでもサブルーチンはあるぞ
どっちかって言うとアセンブラのマクロは C の #define
0051デフォルトの名無しさん2015/01/24(土) 10:31:47.17ID:qV60IszQ
プリプロセスだよな
なので>>45が言ってるのとは言葉は同じでも意味が違う
0052デフォルトの名無しさん2015/01/24(土) 13:51:58.07ID:4KWVQwlI
>>50
そこは俺も突っ込もうかと思ったけど、どういうものかはともかく、どうしてそういうものがあるのか
説明しろと言われたら面倒臭いから黙ってたw
0053デフォルトの名無しさん2015/01/24(土) 14:45:28.64ID:4KWVQwlI
ついでを言うとサブルーチンってN-BASIC時代に GOSUB RETURN ってのがあったけど、
その名残りでVBAにも有るんだよね。昔のサブルーチンは今の関数やメソッドに該当するから>>50の人の表現は
正しいんだけど、じゃ、今のGOSUBは何に当たるのかと言われると、
関数の中に関数があるような、何とも言えない存在になっている。
ま、考えれば使い道あるんだろうけど、分かり辛くなりそうだし、余り使う機会なさそう。
0054デフォルトの名無しさん2015/01/24(土) 15:43:59.02ID:qV60IszQ
>>52
分かって無いだろ(笑)
0055デフォルトの名無しさん2015/01/24(土) 18:58:43.30ID:4KWVQwlI
>>54
マクロ命令で纏まったオペランドがぽっこり追加されてアセンブルされるか、
EXCELで操作した内容がぽっこりコードに追加されるかの違いなだけ。
何をもってして分かっていないかということについては確かに分かっていない。
どこ?
0056デフォルトの名無しさん2015/01/24(土) 19:19:42.87ID:qV60IszQ
>>55
アセンブリのマクロはプリプロセッサで置換整形された後コンパイル(アセンブル)。
同じモノを纏める、かつサブルーチン化のプロセスを除く手法

EXCELのマクロは素人が記録で読み取りプログラムに自動変換するもので、素人でもモノを作れる手法

名前は同じだがそもそも別物だよ
0057デフォルトの名無しさん2015/01/24(土) 19:30:32.40ID:4KWVQwlI
ああそうか、何でそう言うものが有るのかに付いてだっけ。
理由として一つは少ないニーモニックで構成されている時、サブルーチンをコールすると
その分ジャンプ命令を通ることになるから、処理コストが増えるんだよ。
昔のPCとかは処理速度が遅かったから、速度重視の場合でトータルしたバイト数が少ない場合はマクロを使うことがままあった。
後は俺が使ってた時代には無かった概念みたいだけど、名前ではなくて変数としてアドレスを指定出来るらしい。
同じ処理で変数の内容を格納するアドレスが都度違う場合はそのアドレス指定分バイトが稼げるらしい。
そんなとこだよ。
0058デフォルトの名無しさん2015/01/24(土) 19:36:54.47ID:4KWVQwlI
>>56
それを言っちゃうと、「マクロとはなんぞや」と言う話に戻らなければならなくなる。
上ではEXCEL4.0と今のマクロを一緒とみなすならという話をしていたはず。
0059デフォルトの名無しさん2015/01/24(土) 19:47:11.38ID:qV60IszQ
>>31には4.0の話は無いやろ
つか、>>57書けるならエクセルマクロとアセンブラのマクロは、そもそも概念が違うの分かるやろ
0060デフォルトの名無しさん2015/01/24(土) 19:51:24.93ID:4KWVQwlI
>>59
話が出てきたのは>>44>>45あたり。
じゃ、EXCEL4.0をひっくるめてマクロって何?
0061デフォルトの名無しさん2015/01/24(土) 20:20:54.64ID:LdIBiv/J
>>60
一般的にソフト関係の言葉としては、複数の命令や操作をまとめてひとつの命令や操作として使えるようにする機構のこと
0062デフォルトの名無しさん2015/01/24(土) 20:26:56.43ID:4KWVQwlI
>>61
だよね。だから概念が違うのかと言われると、その定義に寄り切りなんだけど、
その一般的な定義としてはどちらも当てはまるんじゃないかと思うんだ。
0063デフォルトの名無しさん2015/01/24(土) 20:42:02.39ID:LdIBiv/J
>>62
ただ、このスレでアセンブラマクロだしてくるのはどうかと思う
コンピューター繋がりで FPGA のハードマクロとかの話されても困るでしょ?
0064デフォルトの名無しさん2015/01/24(土) 20:51:25.65ID:4KWVQwlI
>>63
そうね、言いたいことは分かる。
でもこれでマクロとVBAってそれぞれどう言う関係なのかだいたい分かったと思うんだ。
0065デフォルトの名無しさん2015/01/24(土) 23:37:47.96ID:4KWVQwlI
向こうのスレ行ったらVBで書けることすらスレ違いだって怒られちゃったよw
厳しいねぇ。
0066デフォルトの名無しさん2015/01/24(土) 23:59:05.67ID:KEoUQ8Iu
>>65
たまに自治厨みたいの湧くんだよね(´・_・`)
0067デフォルトの名無しさん2015/01/25(日) 00:09:58.38ID:6hPIl1qj
別に自治厨なんか無視して回答が付くのを待ってりゃいいんだよ
0068デフォルトの名無しさん2015/01/25(日) 00:12:56.48ID:PLw+K7Cf
まぁでもそれが嫌で別スレまで立てたんだろうから、
嫌がることを無理に通すんだったら、俺はこっちでいいわ。
0069デフォルトの名無しさん2015/01/25(日) 04:27:02.61ID:82uqmraw
>>58
は?
>>31はexcelのマクロとVBAの違いを問うてるんだよ
お前のマスターべーション講釈なんざいらんよ

>>57はjumpじゃなくてpushな
はっきり言って相当勘違いしてるから学び直せ
0070デフォルトの名無しさん2015/01/25(日) 08:48:08.96ID:n8UjrMVE
>>69
朝もはよから知ったか厨に構うなよ...
0071デフォルトの名無しさん2015/01/25(日) 11:07:40.66ID:zUfV/sVc
>>69
一々負け惜しみで荒らすなよ。
アセンブラの話はマクロが本来どう言うものかを導き出すために出した例だろ。
お前、全く本質が見えてないな。もう程度が知れたからいいよ。

後、サブルーチンのコールにスタック命令が挟まるのは当然だろう。なにを当たり前のことドヤ顔で列挙してるの?
そんな細かいことを言うなら何でPOP(アセンブラによってはPULL)のことが抜け落ちてるの?ボケ老人なの?
スタックだけ処理して実行アドレス移動しないと思ってる辺り、ちょっとおつむのネジが
2、3本外れた関西人のようだけど、一々いちゃもん付けてくるなよ。迷惑だ。
0072デフォルトの名無しさん2015/01/25(日) 11:24:46.58ID:zUfV/sVc
全く、JMPやJUMPやJMLなどのアドレス指定で飛ぶ命令、
CALLやJSRやJSLとかサブルーチンのアドレスへ戻り先のアドレスをスタックに抱えながら飛ぶ命令、
どっちもジャンプ命令と呼ばれる部類なのに、
なにを屁理屈こねていちゃもん付けてんだか・・・
これだから関西弁を話す奴と韓国語を話す奴は嫌なんだ。
0073デフォルトの名無しさん2015/01/25(日) 13:57:31.84ID:QZEwkuoI
あれ、ここ何スレ?
0074デフォルトの名無しさん2015/01/25(日) 17:09:39.98ID:PLw+K7Cf
>>72
確かにジャンプ系の命令をcallなら兎も角、
push()とか言っちゃってる人に勉強不足呼ばわりされたら
頭にくるのは分かるけど、書いてることがフリーダムすぎw
VBAの話をしようよ

>>69
俺もアセンブラは殆ど知らないけど、
残念ながらドラクエでいうところのレベル3くらいの人が
レベル30くらいの人に噛み付いているみたいにしかみえないよ
もういいからVBAの話をしようよ
0075デフォルトの名無しさん2015/01/25(日) 19:00:05.64ID:bbm8MHtJ
>>71-72
>>63 は見れてないのか?
はっきり言ってスレ違いだし、ちんけな知識ひけらかしてる老害にしか見えん
0076デフォルトの名無しさん2015/01/25(日) 19:14:34.50ID:PLw+K7Cf
ま、よくは分からんけど、多分>>69
格下と思える人からいい加減なこと言われて頭に来たっぽいな
0077デフォルトの名無しさん2015/01/25(日) 19:28:16.51ID:r8WR3aqo
格下w
0078デフォルトの名無しさん2015/01/25(日) 20:10:53.92ID:P/Zlfpoi
>>69が格下かどうかはどうでもいいが
あれが関西弁だとか関西人だとか言い出すやつもどうかしてるわ
関西人に謝れ
0079デフォルトの名無しさん2015/01/25(日) 20:51:43.56ID:jNZ1CTPY
>>78
関西はともかく、いきなり韓国とか言う奴の相手するなよ...
0080デフォルトの名無しさん2015/01/25(日) 21:19:45.57ID:PLw+K7Cf
関西や韓国はともかく、VBAの話をしようよ
0081デフォルトの名無しさん2015/01/27(火) 18:51:49.69ID:nXIQJnkv
VBAって、自分でコードを生成しながら走らせること出来るんだね。びっくりしたわ。
0082デフォルトの名無しさん2015/02/11(水) 23:55:03.43ID:tH22N6Kv
はいざんねーん

Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1420790342/l50
0083デフォルトの名無しさん2015/04/01(水) 20:02:31.54ID:by1Nk6ea
前スレでVBAはオモチャだって言ってた人がいたな。


仕事中にオモチャで遊ぶなよ(´・ω・`)
0084デフォルトの名無しさん2015/04/01(水) 20:28:27.19ID:sGrouffr
使いこなせなくてディスってるだけだろ
最近の言語に比べりゃ劣るところは多々あるけど、エンドユーザー相手だからあまりモダンな機能入れてもどうせ使われないだろうし
0085デフォルトの名無しさん2015/04/01(水) 21:52:46.98ID:IqBtbgK/
仕様が変わらないように圧力をかけよう
0086デフォルトの名無しさん2015/04/01(水) 22:04:17.30ID:by1Nk6ea
えー、欲しいけどなモダンな機能
取り敢えず画面分割みたいに同じブックのシートを
並べて見れるような機能が欲しい。
0087デフォルトの名無しさん2015/04/02(木) 08:56:37.02ID:Jvi83lIY
>>86
>取り敢えず画面分割みたいに同じブックのシートを
>並べて見れるような機能が欲しい。
俺のEXCELにはすでに実装されてるようだが
0088デフォルトの名無しさん2015/04/02(木) 09:41:09.10ID:7N3OzWW2
>>86
今どきのExcelではできるみたいですよ。
表示→新しいウィンドウを開く→整列→左右に並べて表示っていう
隠しコマンドがあるらしい。
0089デフォルトの名無しさん2015/04/02(木) 11:05:18.02ID:0E43xav7
よのなかにはどれくらい変態度の高いVBAライブラリがありますか?
0090デフォルトの名無しさん2015/04/02(木) 11:07:25.99ID:KOknepj/
>>89
clGDIPlusとか
0091デフォルトの名無しさん2015/04/02(木) 12:01:05.37ID:0E43xav7
>>90
ぐぐってみたけど変態というより労作なのかな?
なぜAccess+Excelなのかな、という疑問は残るけど。
0092デフォルトの名無しさん2015/04/02(木) 19:04:14.58ID:oQZ6ujJZ
>>88
え?ほんとに?
違うブックを整列して並べるんじゃなくて?

いいな、2010持ってるんだけど、次出たら買おうかな。
0093デフォルトの名無しさん2015/04/02(木) 19:16:13.18ID:DnwfhgCI
>>92
いや、そういう機能ないから。
0094デフォルトの名無しさん2015/04/02(木) 19:22:29.36ID:DnwfhgCI
あー、ちょっと認識がずれてるかもな。
同じブックを違うウィンドウで開いて、そのウィンドウを整列する機能はずっと前からある。
同じブック内の異なるシートを整列して表示する機能はない。
0095デフォルトの名無しさん2015/04/02(木) 20:05:29.76ID:Jvi83lIY
>>94
ActiveWindow.NewWindow
Windows.Arrange ArrangeStyle:=xlVertical
Sheets("Sheet2").Select

すくなくとも2007では出来る
俺の記憶では2003でもできる
最近のEXCELはMDI廃止になったらしいからどうなってるかはしらん
0096デフォルトの名無しさん2015/04/03(金) 07:42:00.26ID:MGm7PXDj
スレが変わってから今いち伸びが悪いな。
そうだ、爆弾を投下しよう。

前スレ>>984

>というコードをテストするには、画面クラスを通す必要がある。

InputさえあればUI層を通す必要などない。通す時はUTではなく、IT。

>厳密に言えば、今回の話は、画面クラスにビジネスロジックがあったときに、それをテストするときの話で、
>何が問題かというと、画面構築コストが高い場合があるということ。
>ビジネスロジックが通常Class内にあれば、100個のテストが100msで終わるのに、画面クラス内にあるが
>ためにテスト実行に毎回画面構築コストのオーバーヘッドがかかり、100個のテストに5000msかかるように
>なったりする。
>1回のテストに100msしかかからないのならば頻繁にテストを実行するだろうが、5000msかかるとなると
>テスト実行を躊躇することになり、あちこち変更してテストしたらいろんなところでTest Failになってた
>みたいなことが起こりがち。

UI層とBL層をごっちゃにするな。フォームはUI層。BL層は標準モジュールかクラスモジュール。Formにビジネスロジック?
何を訳の分からないことを言ってるんだ?

>でも、標準モジュールからWorksheetオブジェクトにはアクセスするでしょ?
>それも駄目なの?

これはアクセスする標準モジュールをUI層として用意したなら問題ない。BL層として用意したものなら駄目。
0097デフォルトの名無しさん2015/04/03(金) 08:00:47.36ID:fygFc6bt
>>96
プログラム板の人はベーコンレタスには興味ないですお
0098デフォルトの名無しさん2015/04/03(金) 08:26:01.61ID:yaChXg4h
他のブックが閉じたときのイベントを
記述したいのですが、上手くいきません。

これでopenは取れるのですが…。
ttp://m.chiebukuro.yahoo.co.jp/detail/q12127969522

アドバイスお願いいたします。
0099デフォルトの名無しさん2015/04/03(金) 10:09:10.80ID:C7O2gbfJ
>>95
> 最近のEXCELはMDI廃止になったらしいからどうなってるかはしらん
2013では、別Windowになりますね。
0100デフォルトの名無しさん2015/04/03(金) 10:10:18.04ID:C7O2gbfJ
>>96
> これはアクセスする標準モジュールをUI層として用意したなら問題ない。BL層として用意したものなら駄目。
相変わらず頭固いね。
君がそうするのは別にかまわないけど、他人に強制しないように。
0101デフォルトの名無しさん2015/04/03(金) 10:33:51.46ID:fygFc6bt
>>100
まったくもって同意。
一人であたかも正論かのように振り回して、駄目だのなんだの、たかが
Excelで。こういう奴うちにもいるよww みんなに相手にされてないけれど。

完全にアスペ。
0102デフォルトの名無しさん2015/04/03(金) 11:39:59.72ID:MqJmbX9B
>>96の言ってることは一般論としては正しいかもしれんが物事には例外がある。
ダメと切り捨てるのは思考停止になりがち。
0103デフォルトの名無しさん2015/04/03(金) 11:41:10.31ID:C7O2gbfJ
>>98
試したら、普通にできたよ?
Private Sub Workbook_Open()
  Set xlApp = Application
End Sub

Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
  MsgBox "Close " & Wb.Name
End Sub
0104デフォルトの名無しさん2015/04/03(金) 12:23:50.12ID:MGm7PXDj
>>100
>>101
そうではない。どうすれば出来るだけ解り易く、後に効率良く改修出来るかと言う
必然的に生まれた形式。
それが構造化で有り、Object指向であり、デザインパターン。
0105デフォルトの名無しさん2015/04/03(金) 12:39:29.20ID:fygFc6bt
>>104
もういいから。
君のご高説に誰も興味ないよ。

必然だのなんだの結構ですからww どうぞお引き取りください。
0106デフォルトの名無しさん2015/04/03(金) 12:44:27.22ID:C7O2gbfJ
ただのかまってちゃんだな。
0107デフォルトの名無しさん2015/04/03(金) 12:45:49.60ID:MGm7PXDj
いやです
0108デフォルトの名無しさん2015/04/03(金) 13:10:28.40ID:fygFc6bt
>>106
いや、キチガイですね。
0109デフォルトの名無しさん2015/04/03(金) 13:19:52.70ID:MqJmbX9B
>>104
例外がありえるのに一律に切り捨てようとするのは良くない。
物事は実証的にやるべきだ。
0110デフォルトの名無しさん2015/04/03(金) 13:26:45.87ID:MGm7PXDj
>>109
今回私がダメと言ったものに対しての例外って何?
0111デフォルトの名無しさん2015/04/03(金) 13:49:18.22ID:mN+R/hGu
たとえれば

日曜大工で犬小屋作りたいんですがって人に
耐震性がどうのこうの、強度が構造計算が、とか言い出すような人

お前らが構うのは勝手だが、よそでやってくれ
0112デフォルトの名無しさん2015/04/03(金) 13:52:59.61ID:MGm7PXDj
>>111
VBAは全て犬小屋だけ作ってればいいってもんじゃない。
それでは犬小屋しか作れない素人と一緒。
0113デフォルトの名無しさん2015/04/03(金) 14:19:00.32ID:MqJmbX9B
>>112
実証的にやるべきだと言ってるだろ。
犬小屋と高層ビルの間に無数の階層があるというレベル感を無視してるように見える。
そういうところが実証的ではなく原理主義的だ。
0114デフォルトの名無しさん2015/04/03(金) 14:34:48.34ID:mN+R/hGu
>>113
構うなって
素人じゃない俺スゲーって言いたいだけだから
0115デフォルトの名無しさん2015/04/03(金) 14:45:19.69ID:fygFc6bt
>>113
NGIDに入れて消すといいですよ。
構う価値もない、仕事もない三流プログラマ崩れですから。そいつ。
0116デフォルトの名無しさん2015/04/03(金) 14:58:19.74ID:MGm7PXDj
>>113
高層ビルじゃないよ。
構造化言語で構造化の話をするのは当たり前のこと。
犬小屋をうまい棒で作るレベルの話をされても困る。
0117デフォルトの名無しさん2015/04/03(金) 15:47:05.87ID:SYya6M1N
犬に高層ビルを与えてもしょうがあるまい。
かと言って高層ビルを建てるのにうまい棒とまでは言わないが、木材を使用する人もいないだろう。
0118デフォルトの名無しさん2015/04/03(金) 15:56:00.35ID:37KRMiY3
VBAは犬小屋でいいんだよ
高層ビル作りたいなら、VSTOでC#使うか、apps for OfficeでJavaScriptでも使えばいいだろ
0119デフォルトの名無しさん2015/04/03(金) 16:18:00.93ID:MGm7PXDj
VBAは犬小屋でいいかもしれないが、
その犬小屋建てるまでに至れてない人が言っても虚しいだけ。
0120デフォルトの名無しさん2015/04/03(金) 19:23:29.78ID:MGm7PXDj
結局のところ、かまってちゃんだのキチガイだのと程度の低い煽りと
犬小屋がどうのと全く的外れな意見ばかりで論理的に反論出来る人はいないようだ。

これで質問者も言っていることは分からなくても、
取り敢えずフォームから他フォームのコントローラーを触らない方がいいことくらいは理解してくれたろうか。
0121デフォルトの名無しさん2015/04/03(金) 20:14:11.98ID:C7O2gbfJ
>>120
> 取り敢えずフォームから他フォームのコントローラーを触らない方がいいことくらいは理解してくれたろうか。

それ、Office TANAKAの前でも言えんの?
0122デフォルトの名無しさん2015/04/03(金) 20:14:49.51ID:SYya6M1N
Unload ID:MGm7PXDj
0123デフォルトの名無しさん2015/04/03(金) 20:24:11.67ID:kXB5Vk27
>>121
余裕で言える。何故なら私はまだ自分が言っていることを間違っていると思っていないからだ。

誰が言おうが関係ない。そこまで言うならOFFICE TANAKAの田中さんを連れてきて私を論破してみたらどうだ。
0124デフォルトの名無しさん2015/04/03(金) 20:26:44.53ID:aocH4Iov
他の言語ならいざしらず、Callが異様に重いVBAでOOPなんてやったら処理速度的にクソの塊しか出来ないだろ。
処理速度を度外視して分かりやすさと改修のし易さに特化するならセルに関数埋め込めばいいし。
0125デフォルトの名無しさん2015/04/03(金) 20:36:15.62ID:MqJmbX9B
>>124
Callが異様に重いってどういうこと?
0126デフォルトの名無しさん2015/04/03(金) 20:40:11.24ID:O7uJyf+n
>>120
>これで質問者も言っていることは分からなくても、
>取り敢えずフォームから他フォームのコントローラーを触らない方がいいことくらいは理解してくれたろうか。

理解されない。
なぜなら初心者が知らない言葉で言い合いしてるだけで
実際のサンプルコードは一個も書いてないから。
初心者を相手にするなら分りやすく実例を見せてやるのが一番早い。
0127デフォルトの名無しさん2015/04/03(金) 20:53:06.97ID:GQyQBFTT
>>124
Object指向を取り入れろとは今回言っていない。あくまで構造化の話をしている。
それに処理速度がVBAだとCallで重くなるなんて言ったら、
他言語でクラスを生成するときにヒープ領域にインスタンスを展開するときどうなってしまうと思うんだ?
スピードを重要視するなら、C++のインラインアセンブラでも使っておけばいい。
0128デフォルトの名無しさん2015/04/03(金) 21:02:59.41ID:GGvkoKPE
いいから、だまって俺の質問に答えてればいいんだよ。
お前らのプログラミング講釈なんざ、クソの役にも立たんからな。
余計な事はしゃべるな、わかったか?
0129デフォルトの名無しさん2015/04/03(金) 21:06:33.50ID:aocH4Iov
>>127
他の言語ならいざ知らずって言ってるだろ。目的も環境も是とすべき実装も違うんだよ。

プロシージャは実行された時点から一連のプロセスを終了するまで可能な限り内部的に処理する事で処理速度を高めるべきなのであって、
それを否定するなら全てセルに関数書いて解決すればいい。速度を問題視しないならVBAに自分で書く必要がない。
0130デフォルトの名無しさん2015/04/03(金) 21:07:51.80ID:l+h8sd1x
ここはVBA「質問スレ」ですよみなさん。
0131デフォルトの名無しさん2015/04/03(金) 21:12:32.83ID:GQyQBFTT
>>129
ならば起動トリガーの後、一切途中に関数挟むことなく一本道の関数作っとけ。
0132デフォルトの名無しさん2015/04/03(金) 21:14:22.59ID:aocH4Iov
>>131
おう、それが理想型だな。お前もようやく自分が間違っていた事に気づいたか。
0133デフォルトの名無しさん2015/04/03(金) 21:18:35.27ID:GQyQBFTT
>>132
では自分の理想を追い求めて1関数が何千行になろうが貫き通してくれ。
そんな理想、私は嫌だ。
0134デフォルトの名無しさん2015/04/03(金) 21:20:00.37ID:aocH4Iov
>>133
大丈夫だって、どんなにお前が稚拙なプログラマーだって
頑張り次第で少しは俺が言うような理想的なプログラミングが出来る様になるからあきらめんなって
0135デフォルトの名無しさん2015/04/03(金) 21:20:23.86ID:MqJmbX9B
単なる関数呼び出しならCの関数と異なるのは __stdcall である点ぐらいだよね?違うのか?
0136デフォルトの名無しさん2015/04/03(金) 21:29:54.72ID:GQyQBFTT
>>135
その辺余り詳しくないが、多分そうだと思う。
0137デフォルトの名無しさん2015/04/03(金) 22:57:18.20ID:MqJmbX9B
原則は守った方がいろいろトラブルを避けられていいかもしれないが、
Vbaではそれを強いるのも強いられるのもつらい。

ところでWindowsでシンボリックリンクを作成するの、コマンドラインからやるのはかったるいが、kernel32にある
CreateSymbolicLinkA(またはCreateSymbolicLinkW)をDeclareすればエクセルから使えて便利だぞ。
対象ファイルをリストアップして一括処理したりが自在にできる。こういうのエクセルの利点だ。
0138デフォルトの名無しさん2015/04/04(土) 00:10:57.59ID:n7yWKRVY
そらAPI使えばなんだってできるだろ
別にVBAじゃなくてもJScriptからだって呼べるし
0139デフォルトの名無しさん2015/04/04(土) 07:00:41.79ID:tFbLNVar
いや、多分EXCELファイルからの操作だと、一々別のテキストファイルを用意して一覧を作らなくても
直接シートに一覧を作ってそこから読み取れば良いと言うことが言いたいのかも知れない。

大した手間の違いではないが。
0140デフォルトの名無しさん2015/04/04(土) 10:18:09.90ID:AiOROLC/
>>122
そこは
Kill "ID:MGm7PXDj"
だろ
0141デフォルトの名無しさん2015/04/04(土) 10:24:26.27ID:AiOROLC/
>>138
> JScriptからだって呼べるし
そんなのできたっけ?
0142デフォルトの名無しさん2015/04/04(土) 11:50:41.83ID:u9UoiVR2
>>135
単なる__stdcall関数として呼び出すことも実際可能だし、コールバックの中ではそうやって使ってるけど、
VBAの中ではなんか複雑なことをやってるんじゃない?
0143デフォルトの名無しさん2015/04/04(土) 18:39:08.85ID:9VKUXwgp
>>142
なんでそう思うの?
0144デフォルトの名無しさん2015/04/04(土) 18:46:28.95ID:u9UoiVR2
>>143
上の方でVBAの関数呼び出しが遅いようなこと言ってたから
0145デフォルトの名無しさん2015/04/04(土) 19:11:38.07ID:9VKUXwgp
あれって適当な出まかせじゃないの?
なんか途中で黙りこんじゃってたし
0146デフォルトの名無しさん2015/04/04(土) 22:08:19.24ID:u9UoiVR2
>>145
ならいいや
0147デフォルトの名無しさん2015/04/05(日) 10:46:01.37ID:H1gZUohn
vba少しかじった程度のもんですが資格ってどういうのがありますか?
とりあえずvbaエキスパートスタンダードなるものはとったんですけど
0148デフォルトの名無しさん2015/04/05(日) 11:17:56.54ID:DF2lDrS2
VBAがらみの試験ならここを見ておけばいいかな
http://vbae.odyssey-com.co.jp/about/
0149デフォルトの名無しさん2015/04/05(日) 13:07:48.19ID:rftisBed
>>147
取って何か役にたった?
俺も遠い昔に取ったけど、未だに何の役にも立ってない気がする。
0150デフォルトの名無しさん2015/04/05(日) 15:24:02.00ID:H1gZUohn
>>148
とったのそれです。

>>149
いやー特に役にはたってないですね。
なんとなく技術力アピールの為にとったんですけどちょっとこれは簡単すぎでした
なので他に何かないかなーと。
0151デフォルトの名無しさん2015/04/05(日) 16:25:08.20ID:DF2lDrS2
>>150
おめでとう。このスレ卒業だ。

本来このスレはEXCELVBAの質問スレで、試験の合格を目的としていたなら
そのための役目は果たしきったと言える。

他の試験を受けるなら、自分が今後何をやりたいのかを考えて、
それに役立つ試験を受ければいいと思うけど、その方向は自分で決めるしかないし、
その為に受ける試験もここで聞いても仕方がないよ。
0152デフォルトの名無しさん2015/04/06(月) 01:00:29.27ID:Gw8/gQ2T
VBAで数百メガあるExcelファイルを閉じて次のファイルを開くというコードを書くと開くのに時間がかかりすぎた場合
エラーになったり開いてないのに次の処理が動き出したりするようですが
この場合どう対処してますか?
0153デフォルトの名無しさん2015/04/06(月) 01:19:45.36ID:79LtAvE/
VBAエキスパートってそんなに簡単なのか。
0154デフォルトの名無しさん2015/04/06(月) 01:35:23.35ID:i4LcoaiE
>>153
ネット上に練習問題が転がってる
0155デフォルトの名無しさん2015/04/06(月) 06:37:31.62ID:6qozZbmR
>>152
次のファイルが開かれているかのチェック処理を入れる。

エラーは出ているメッセージで対処法が変わる。
0156デフォルトの名無しさん2015/04/06(月) 11:09:29.82ID:9W6wTYs8
Book1〜5を開いて計算した値をBookNに移すマクロで
Book1を閉じるときに保存しますか?とメッセージが出て中断してしまいます
スルーするか「いいえ」を選択する方法ってありますか?
0157デフォルトの名無しさん2015/04/06(月) 11:18:25.88ID:PufGX+Fr
>>156
保存すればいいじゃn
0158デフォルトの名無しさん2015/04/06(月) 11:33:01.67ID:WlfIOA8X
>>156
どんなコード書いてるのか知らんけど
ブックを閉じるときに
Workbooks("Book1").Close SaveChanges:=False
とかやれば保存されないよね?
0159デフォルトの名無しさん2015/04/06(月) 11:41:14.26ID:9W6wTYs8
>>158
知りたかったのはそれです!ありがとう!
0160デフォルトの名無しさん2015/04/06(月) 11:57:11.01ID:nJVLUi4t
資格ってそれ自体役に立つこともあるけど、一番の目的は資格の勉強することで体系的に学べること。
だと個人的におもう。
0161デフォルトの名無しさん2015/04/06(月) 12:52:40.41ID:Qf0sjema
いつも検索とコピペでコード書いてるから、練習問題で解けないやつがあった
定数の定義名のスペルミスとかわからんわ
0162デフォルトの名無しさん2015/04/06(月) 18:07:02.86ID:R0FU2E8+
Sub Test1()から呼び出したいSub Test2()があるんだけど
このTest2というのは必ずTest1の中からしか呼び出されないから
Test1とTest2を並列に並べる感じじゃなくて
Test1の内部にTest2に位置させる構造みたいにすることはできないですか?
0163デフォルトの名無しさん2015/04/06(月) 18:30:40.15ID:nJVLUi4t
>>162
Test2の処理をまるごとTest1の中に書くのじゃいかんのかい?
test2メソッド作って必要な時に呼ぶとか
0164デフォルトの名無しさん2015/04/06(月) 18:58:06.69ID:GoRtmIXL
>>162
内部に位置させるとか意味不明。

だったら、ルーチンの一部にすりゃいいだろ。サブルーチンの意味わかってんのか?
0165デフォルトの名無しさん2015/04/06(月) 19:02:58.87ID:6qozZbmR
>>162
もの凄くイヤな書き方だけど、旧BASICの負の遺産でGOSUBって言うのが有る。
これを使うくらいなら並べて書いた方がいいけど、
有るか無いかで言われたらそう言ったのが有る。
0166デフォルトの名無しさん2015/04/06(月) 19:23:28.06ID:ZlggGPnA
なぜそうしたいのか?意図が知りたい・・・
0167デフォルトの名無しさん2015/04/06(月) 19:52:19.50ID:+u84JNAU
Module1

Public Sub Test1()
Call Test2
Exit Sub

Private Sub Test2()
Debug Print "hoge"
Exit Sub



Module2

Public Sub Test3
Call Test2 '呼び出せない
Exit Sub

これじゃあかんの?
0168デフォルトの名無しさん2015/04/06(月) 20:12:19.19ID:ywPvvzEg
ExcelでAccessのオートナンバー型みたいなのは作れませんか?
使用期間を通して一意な値のデータを元にして表を作成したいんですが、
エクセルしか使えず、しかも印刷プレビューになるだけで「操作を受け付けない!」と混乱し始めたり、
半角でないといけない所を全角で書いたり、パターン表を勝手に切り貼りして空いたところを非表示にして見た目だけ整えたりして、
それでマクロがデバッグに入ると「壊れた!」と騒ぎ出すレベルの人が使用する事を前提にするので、
一意な値を書き換えられないようにしたいんですが、総数が増減するのでセルにある最大値を取ろうとすると重複するし、
モジュールや定数を自身に書き込むマクロを組むとセキュリティの警告が出て使えません。
非表示にしたシートは再表示にされたり、非表示だったから要らないのだろうと判断されて削除される恐れもあります。
別のファイル(たとえばテキストファイルなど)に書き込んで、常にセットで運用してもらうのも難しいです。
こういう環境下でオートナンバー型の様に振る舞うマクロって作れませんか?
0169デフォルトの名無しさん2015/04/06(月) 20:43:54.94ID:6qozZbmR
>>168
@
オートナンバーを設定したい列を用意。

A
データの入っている行の範囲で、オートナンバー列の最大値を求め、変数に格納する。

B
オートナンバー列をデータの入っている行の最初から舐めて、
値が設定されていない行があったら、Aで格納した変数の値を+1して同変数とオートナンバー列の対象行に設定する。

C
データの入っている行数分Bを繰り返す。

こんなんで出来ると思うけど、オートナンバーって上限が有るからね。
別途上限を超える時のこと、考える必要が有るなら考えないといけない。
0170デフォルトの名無しさん2015/04/06(月) 20:46:42.46ID:rbpG+7VY
>>168
> 非表示にしたシートは再表示にされたり、非表示だったから要らないのだろうと判断されて削除される恐れもあります。

シート構成変える必要ないならシート保護しとけばいいだけかと
http://officetanaka.net/excel/vba/sheet/sheet07.htm

シート構成変える必要あるなら xlVeryHidden という定数を指定して非表示にすれば VBA 使わないと表示できなくなる
http://officetanaka.net/excel/vba/sheet/sheet06.htm
0171デフォルトの名無しさん2015/04/06(月) 21:07:55.74ID:ywPvvzEg
>>169
オートナンバー型を使いたい場所は半年に一度、多いときでも10くらいしか増減しないので上限はあまり問題にならないと思います。

>>170
ありがとうございます。
シートはマクロを走らせる都度、印刷用ページを増加させる(必要はないけど使用者がそうする)のでxlVeryHiddenを使ってみたいと思います。
0172デフォルトの名無しさん2015/04/06(月) 21:13:48.86ID:6qozZbmR
サブルーチンて呼び方する人まだいるんだな。
俺はさっきみたいにGOSUBの存在が有るから関数かメソッドって呼ぶようにしてる。
0173デフォルトの名無しさん2015/04/06(月) 21:24:09.84ID:rbpG+7VY
>>172
Sub xxx だから普通にサブルーチンだわ
関数だと Function yyy だと思うし、VBA にもクラスはあるからメソッドも別にあるし
0174デフォルトの名無しさん2015/04/07(火) 05:41:45.27ID:uglnpAKe
オレは「サブ・ルーティーン」だわ。
0175デフォルトの名無しさん2015/04/07(火) 05:42:00.41ID:T6jm7qcv
え?関数とメソッドの違いって、標準モジュールに有るかクラスモジュールに有るかなの?
俺てっきり標準モジュールもクラスの一種で、関数とメソッドって呼び方が違うだけで同じものだと思ってたわ。
0176デフォルトの名無しさん2015/04/07(火) 06:00:11.25ID:uglnpAKe
標準モジュールがクラスの一種であるとこはドブネズミでも分かる。
どう違うかだ。
下記の言葉を使って答えたまえ。

・別々の標準モジュール
・同名のSub
0177デフォルトの名無しさん2015/04/07(火) 07:27:00.45ID:T6jm7qcv
>>176
なるほど、分かった。サンキュ
0178デフォルトの名無しさん2015/04/07(火) 07:59:32.71ID:mWh4eTM0
>>176
標準モジュールもクラスと捉えるべきなのか。オレはnamespace的なものと思っていた。
0179デフォルトの名無しさん2015/04/07(火) 11:47:47.95ID:aqqi4euK
>>178
そっちが正しい。
なにをもって標準モジュールがクラスの一種だと言ってるのかわからん。
0180デフォルトの名無しさん2015/04/07(火) 12:13:15.87ID:mWh4eTM0
>>179
そうか。
自分がドブネズミかと思ってドキッとしてしまったわい。
0181デフォルトの名無しさん2015/04/07(火) 12:15:17.96ID:/CDZGxyg
Subってサブルーチンの頭文字?
サブプロシージャだと思ってた
0182デフォルトの名無しさん2015/04/07(火) 12:23:23.04ID:cOmIu6fE
>>179
標準モジュールは一応規定とか暗黙とか言われているインスタンスを持っているらしいが、
NameSpaceにそれが有るって言うのか?
0183デフォルトの名無しさん2015/04/07(火) 15:26:17.77ID:aqqi4euK
>>182
> 標準モジュールは一応規定とか暗黙とか言われているインスタンスを持っているらしいが、
いや、持ってないよ。
何かと勘違いしてるんじゃないの?
0184デフォルトの名無しさん2015/04/07(火) 15:53:57.66ID:IdsSczXc
標準モジュールってマジでただのテキストでしかないぜ。

入れ物でしかない。インスタンスだのネームスペースだの
そんなものでもなんでもない。

あるルールは、publicなら全部から参照でき、privateなら
そのモジュール内でだけ参照できる。

ソレ以上でもソレ以下でもない。
0185デフォルトの名無しさん2015/04/07(火) 16:40:18.97ID:uglnpAKe
近年はVBAの言語はやってないから忘れたが、確かいっぱい標準モジュール、例えば
・Module1
・Module2
・Module3
を作り、PublicでもPrivateでも別々のModuleに入った同名のSub(例えばTestSub)は問題なく動く。
Module1から自分のTestSubを呼ぶには単にTestSub、となりのやつを呼ぶにはModule2.TestSubという具合にだ。

これは単に標準モジュール用のクラスがあり
そのインスタンスがこの場合3個、コードの実行前に作られていると考えられる。
0186デフォルトの名無しさん2015/04/07(火) 16:41:57.59ID:uglnpAKe
だからprivateならそのモジュール内だけでしか参照できないのはクラスの性質上当然と言える。
0187デフォルトの名無しさん2015/04/07(火) 16:44:52.49ID:uglnpAKe
標準モジュールの上部に書いた変数はクラスのメンバ変数であり
それはVBA実行中ずっとメモリに記憶される。

しかしフォームモジュールはそのフォームを表示させたときにはじめてインスタンス化され
その中のメンバ変数が有効になる。
そしてフォームをCloseした場合、インスタンスも消えるからそのメンバ変数も使えなくなる。
0188デフォルトの名無しさん2015/04/07(火) 16:56:42.52ID:mWh4eTM0
そういう解釈は出来なくもないし、自由だけど、それはクラスのメンバというよりnamespaceのメンバと言う方が相応しかろう。
名前のスコープとアクセス制御のことなんだから。
0189デフォルトの名無しさん2015/04/07(火) 16:58:02.31ID:aqqi4euK
>>185
> Module1から自分のTestSubを呼ぶには単にTestSub、となりのやつを呼ぶにはModule2.TestSubという具合にだ。
それは、namespace的なprefixだよ。

> これは単に標準モジュール用のクラスがあり
> そのインスタンスがこの場合3個、コードの実行前に作られていると考えられる。
いや、ないって。

規定のインスタンスというのは、インスタンス化できるオブジェクトが対象で、それが暗黙的に
作られるのが「規定のインスタンス」。

標準モジュールはインスタンス化できないから、規定のインスタンスなんかないよ。
0190デフォルトの名無しさん2015/04/07(火) 17:02:02.45ID:uglnpAKe
インスタンスなんかないよ、と言われても
オバケなんてないさ、にしか聞こえない。
0191デフォルトの名無しさん2015/04/07(火) 17:15:28.70ID:aqqi4euK
>>190
逆に、インスタンスがある証明をして欲しいんだが。

インスタンス化できるなら、dim hoge = new Module1と書けるはずだが、実際は書けない。
インスタンスなら、debug.print typeof(Module1)と書けるはずだが、実際には書けない。
インスタンスなら変数に代入できるはずだが、set hoge = Module1ともhoge = Module1とも書けない。
0192デフォルトの名無しさん2015/04/07(火) 17:17:32.92ID:aqqi4euK
typeof(Module1)じゃなくて、typename(Module1)だった。
0193デフォルトの名無しさん2015/04/07(火) 18:31:28.97ID:nOR7M4vA
マックのハッシュポテトクーポン
http://mcdonalds-campaign.jp/coupon/pc/

何度かお世話になったのでよかったらどうぞ
0194デフォルトの名無しさん2015/04/07(火) 19:41:53.69ID:3+A3nDts
>>191
そもそも標準モジュールはVBがオブジェクト指向言語になる前からあるので
厳密なオブジェクト指向での考え方に合わない点があるんだが
たとえばVB.NETのModuleの説明だと
>クラスはオブジェクト指向ですが、モジュールはオブジェクト指向ではありません。
>したがって、クラスだけがオブジェクトとしてインスタンス化できます。
と書いてある
つまり、モジュールにインスタンスという概念が成り立たない
だからインスタンス化できるかどうかという議論も無意味だけど
実際にプログラム組むときの感覚で言えば、自分でインスタンスを操作できないだけで
インスタンスはあると考える方が自然だと思うが
インスタンスの概念がないので、厳密には既定のインスタンスではないのだが
既定のインスタンスと同様に考えて大きな問題はないし
0195デフォルトの名無しさん2015/04/08(水) 06:08:26.11ID:RSh+hWVh
>>194
まー、そんな考え方でいいと思う。
混同しがちだけど、VB.NetではNameSpaceやImportsなどで名前空間を指定する際にクラス名やモジュール名は含まない。
そもそもVBAには名前空間の概念がないし、VB.Netの標準モジュールもC#で言うところの静的クラスと互換性が有ると言うんならクラスで間違いないだろう。

https://code.msdn.microsoft.com/windowsdesktop/14-Visual-Basic-Module-2c407099
0196デフォルトの名無しさん2015/04/08(水) 10:31:56.42ID:O4e51bmX
>>194
> 既定のインスタンスと同様に考えて大きな問題はないし
お前がそう考えるのは別にかまわないが、他人にその考え方を強制するな。

これ、お前の発言だろ?
> 標準モジュールがクラスの一種であるとこはドブネズミでも分かる。

最近、こんな奴ばっか。
0197デフォルトの名無しさん2015/04/08(水) 10:33:08.06ID:O4e51bmX
>>195
> 静的クラスと互換性が有ると言うんなら
いや、ないし。

ポエムは自分のブログでやってくれませんかね。
0198デフォルトの名無しさん2015/04/08(水) 10:36:23.12ID:KM862bWm
最近ここに、やたら御託ならべて胡散臭い理屈こねくり回すだけの
馬鹿が張り付いてるなwww

特徴は他人に考えを強制するって点でもろバレだが。
0199デフォルトの名無しさん2015/04/08(水) 11:05:48.60ID:S9Y1Pk/m
>>194
>>195
解釈に無理があるし、なによりも役に立たない。
0200デフォルトの名無しさん2015/04/08(水) 12:03:15.24ID:DpJSi/5c
くっだらん罵り合いは気にしなくて良いんで、次の質問の方どうぞ〜
0201デフォルトの名無しさん2015/04/08(水) 12:22:16.68ID:KM862bWm
>>200
何しきってんの単発ID
0202デフォルトの名無しさん2015/04/08(水) 12:27:03.41ID:S9Y1Pk/m
じゃあ For Each x in 〜 構文のなかで別のコレクションの要素も一緒に操作する場合のスマートな方法教えて。
0203デフォルトの名無しさん2015/04/08(水) 12:59:03.21ID:a2Fpxgql
>>197
思いっきりリンク先に書いてあるな。
0204デフォルトの名無しさん2015/04/08(水) 13:26:24.04ID:O4e51bmX
>>203
> 思いっきりリンク先に書いてあるな。
めんどくさ。

> C# の「静的クラス」は Visual Basic の「モジュール」に相当する型と言うことができます。
って書いてるだけじゃん。
これを、互換性があるって取っちゃうのか。
0205デフォルトの名無しさん2015/04/08(水) 14:12:53.12ID:a2Fpxgql
>>204
めくら〜w
0206デフォルトの名無しさん2015/04/08(水) 19:10:22.43ID:fypBn6Jm
>>196
どこをどう読んだらその二つが同一人物の発言に見えるんだ
0207デフォルトの名無しさん2015/04/08(水) 19:35:23.96ID:RKL00iuY
「俺はそういう風に理解している」ならいいけど「こう理解しなければならない」というなら、
VBAはプロシージャとモジュールという単位として管理していてクラスもモジュールの一部という理解をすべき。

ローカル変数? ねぇよそんなもん!!
0208デフォルトの名無しさん2015/04/08(水) 21:30:31.95ID:a2Fpxgql
ドブネズミ〜



みたいに〜♪
0209デフォルトの名無しさん2015/04/09(木) 07:12:32.55ID:b1vwu2KZ
>>202
何をしたいのかよくわからん
コードで示してくれ
0210デフォルトの名無しさん2015/04/09(木) 07:20:58.80ID:b1vwu2KZ
>>181
> Subってサブルーチンの頭文字?
> サブプロシージャだと思ってた

すまん、あんたの方が正しかったわ

https://msdn.microsoft.com/en-us/library/office/gg251432.aspx

関数は Function procedure って言うんだな、Pascal 使ってたから Procedure ⇔ Function だと思ってた
0211デフォルトの名無しさん2015/04/09(木) 07:50:00.45ID:GwLtV5N4
サブルーチンって呼ぶ奴は大体じじい
0212デフォルトの名無しさん2015/04/09(木) 08:47:19.06ID:teaLGODa
>211
言われてみれば、その言葉をいつの間にか全くと言っていいほど聞かなくなってしまったな
0213デフォルトの名無しさん2015/04/09(木) 10:12:09.80ID:U9p+hMiz
>>209
For Each x in arr1
このなかで別の配列arr2の要素も
操作・参照したい
Next x

例えばこれに相当することを
For i = 0 To Ubound(arr1) step 1
s = s + ayy1(i) + arr2(i)
Next i

整数インデックスでループするよりスマートにやる方法が知りたい
0214デフォルトの名無しさん2015/04/09(木) 12:30:59.37ID:U9p+hMiz
X ayy1
○ arr1
0215デフォルトの名無しさん2015/04/09(木) 12:36:29.11ID:gC1GZRrM
とりあえず、Step 1とNextの後の変数名を削除かな
0216デフォルトの名無しさん2015/04/09(木) 12:40:10.35ID:P4izb6gk
next のあとの変数名は削除しない。
省略してるとネストしたときに分りにくい。
0217デフォルトの名無しさん2015/04/09(木) 15:07:11.28ID:GwLtV5N4
どっちでもいいよ。

For Each使った時なんて書いたためしが無いから付けられるかどうか分からないくらいだ。

そもそもネストで分かり辛くなるようなコードの時点で残念だろ。
0218デフォルトの名無しさん2015/04/09(木) 15:59:00.02ID:U9p+hMiz
そんなことより整数インデックスじゃない方法知ってるなら教えてよ。
For Each {x, y} in {arr1, arr2}
・・・
Next {x , y}
みたいに書けりゃいいけどそんなの無いし。
他言語でもrange based for推奨とかで整数インデックスかこわるいってイメージ。
既存のコードを書き換えたいけどうまくいかない。
0219デフォルトの名無しさん2015/04/09(木) 16:14:12.44ID:vr/wyORc
また変なこと言い始める奴が登場した
0220デフォルトの名無しさん2015/04/09(木) 16:22:07.43ID:6OGmwsxh
>>218
すたっくおーばーふろーに行くと多分解決するよ
0221デフォルトの名無しさん2015/04/09(木) 18:45:14.53ID:odUGCUmQ
そういう時はarry1(の要素)とarry2(の要素)を合体したクラスなり構造体なり(の集合)使えよ
0222デフォルトの名無しさん2015/04/09(木) 19:24:42.46ID:U9p+hMiz
>>221
おっしゃる通りだが質問の条件に合ってない。
0223デフォルトの名無しさん2015/04/09(木) 19:30:57.71ID:/ag7R+ss
Dim i As Long
i = LBound(arr1)
For Each x In arr1
   s = s + arr1(i) + arr2(i)
   i = i + 1
Next

っていう事じゃないのか?
0224デフォルトの名無しさん2015/04/09(木) 20:27:41.66ID:odUGCUmQ
>>222
まあその通りだが
スマートじゃない設計してるのに、スマートなコード書きたいって言われてもなぁ

>>223
それなら素直にFor i=LBound to Uboundで回す方がまだスマートだと思うが
0225デフォルトの名無しさん2015/04/09(木) 20:56:07.89ID:U9p+hMiz
>>224
>>221の方法で関数を作ると、「この関数に渡すデータは、あらかじめ合体した構造体にしてから渡してください」
という仕様になるでしょ。
使う側は、単に手元にある二つの配列を渡して何らかの計算をしてもらいたいだけなのよ。
それに、合体した構造体をどうやって作るかを考えるとやっぱりループが出てくるし、循環論法。
0226デフォルトの名無しさん2015/04/09(木) 20:56:44.56ID:/ag7R+ss
ForEachってそもそも配列のそれぞれの要素をただの変数であるかのように見立てて処理を行いたい時に使う物だから、
配列でなければならず、しかもその順番が重要っていう条件でForEach縛りしたら、どう足掻いてもスマートにはならないよな。
0227デフォルトの名無しさん2015/04/09(木) 21:43:43.05ID:4CRBEaVU
「どう足掻いてスマートにはならない」
そりゃそうだわ、足掻いてスマートとか矛盾にも程がある
涼しい顔してやってのけるからスマートなんだぞ
0228デフォルトの名無しさん2015/04/09(木) 21:53:09.33ID:/ag7R+ss
発言する前に一度、英和辞典を引いてみるという考えは無かったのだろうか。
0229デフォルトの名無しさん2015/04/10(金) 00:15:38.17ID:z3hI09s9
うちの英和辞典にはForEachが載ってないんだ
0230デフォルトの名無しさん2015/04/10(金) 07:40:12.17ID:KV63kOi+
>>229
いや、スマートの方を調べろって事だと思うよ
0231デフォルトの名無しさん2015/04/11(土) 03:07:58.46ID:i/ICoFfj
1秒毎に実行されるプロシージャ内で1秒毎に実行する処理を入れたいのですがいい方法が思い浮かびません

Sub 一秒毎()

End Sub
0232デフォルトの名無しさん2015/04/11(土) 03:11:24.52ID:i/ICoFfj
すいません途中で送信してしまいました
以下は途中まで作ったプログラムです
3分ごとの処理をどう書けばいいかご教授願いたいです

Sub 一秒毎()
'3分毎の処理
・・・

Application.OnTime Now + TimeValue("00:00:01"), "一秒毎", Now + TimeValue("00:00:02")
End Sub
0233デフォルトの名無しさん2015/04/11(土) 06:27:56.03ID:DIKK7EKz
VBA1年目ですが
短時間で更に爆発的に上達するためにやるべき事を教えて下さい。
0234デフォルトの名無しさん2015/04/11(土) 07:19:37.77ID:iQU2462u
>>233
短時間で更に爆発的に勉強する
0235デフォルトの名無しさん2015/04/11(土) 08:02:29.21ID:0PbM2j6c
>>232
Sub Test
   If (Timer - 1sExeT) > 1 Then 一秒毎
End Sub

Sub 一秒毎()
   If (Timer - 3mExeT) > 180 Then 三分毎
   1sExeT = Timer
End Sub

Sub 三分毎()
   3mExeT = Timer
End Sub
0236デフォルトの名無しさん2015/04/11(土) 09:28:22.01ID:aih7mS+Y
>>232
カウンタ作って、180回毎に実行すればいいだけじゃないの?
0237デフォルトの名無しさん2015/04/11(土) 10:04:42.49ID:tg4Z2PXf
困っているので以下について教えて下さい。

【前提】
・1行目のC列から右に1〜31(日数)を順番に記載
・B列(B2以降)には個人名を記載
・各行のC列以降には1日の出費(金額)を記載

【やりたいこと】
出費が1万円を超えた日数をA列に記載したいです。
例えば、Aさんが1日目五千円、2日目五千円を利用した場合、AさんのA列には「2」が入ります。
要は1万円を超えるまで出費額を繰り返し足していき、1万円を超えたら結果を出力して次の人の計算に移るイメージです。

【質問】
ループを抜けた後にA列に日数を記入する方法を教えて下さい。1行目の日数を参照すればよいと思うのですが分からず…
0238デフォルトの名無しさん2015/04/11(土) 10:10:33.69ID:57NV/HJw
[C1].Offset(N, i).value の累計が閾値を超えるまで i をループして、止まったたところの i + 1 の値を書き込めばいいんじゃないの?
0239デフォルトの名無しさん2015/04/11(土) 10:57:42.59ID:QOc8rwlG
何の面白みもない質問だけど、EXCELの数式だけでやらせようとすれば、意外に面白いかも
0240デフォルトの名無しさん2015/04/11(土) 11:01:02.64ID:FOw0SFZq
>>237
なんか久々にちゃんとした様式の質問がきたなw
0241デフォルトの名無しさん2015/04/11(土) 11:07:10.14ID:QOc8rwlG
いや、ここからいつも回答者がどんどんおかしな方向に持って行くんだろ?
0242デフォルトの名無しさん2015/04/11(土) 11:43:47.60ID:aih7mS+Y
>>239
人数分作業行使っていいなら、累計行作って、MATCH( ) でいけるんじゃね?
0243デフォルトの名無しさん2015/04/11(土) 12:01:27.79ID:0PbM2j6c
>>237
Sub test()
  Dim c As Range, d As Range, 出費額 As Long
  For Each c In Range(Cells(2, 2), Cells(Rows.Count, 2).End(xlUp))
     出費額 = 0
     For Each d In Range(Cells(1, 3), Cells(1, 3).Offset(0, Day(DateAdd("d", -1, Cells(1, 3))) - 1))
       出費額 = 出費額 + Cells(c.Row, d.Column)
       If 出費額 > 10000 Then Cells(c.Row, 1) = Day(Cells(1, d.Column)): Exit For
     Next
  Next
End Sub

※Range("C1")は日付形式で、かつ一日が入っている事。
0244デフォルトの名無しさん2015/04/11(土) 12:03:39.08ID:0PbM2j6c
間違えた。

×For Each d In Range(Cells(1, 3), Cells(1, 3).Offset(0, Day(DateAdd("d", -1, Cells(1, 3))) - 1))

○For Each d In Range(Cells(1, 3), Cells(1, 3).Offset(0, Day(DateAdd("d", -1, DateAdd("m",1,Cells(1, 3)))) - 1))
0245デフォルトの名無しさん2015/04/11(土) 12:58:27.77ID:i/ICoFfj
>>235
>>236
ありがとうございます!
0246デフォルトの名無しさん2015/04/11(土) 14:22:44.35ID:tg4Z2PXf
>>243
ご丁寧にありがとうございます。

出先でまだ試せてないのですが、仮に条件を10万等にした場合で10万に満たない場合はどのような結果になりますでしょうか…
0247デフォルトの名無しさん2015/04/11(土) 15:06:20.46ID:aih7mS+Y
>>246
なにも入らないだけだろ
0248デフォルトの名無しさん2015/04/11(土) 16:05:34.46ID:0PbM2j6c
>>246
設定数値を超過しなかった場合を指定したかったら、こう

Sub test()
  Dim c As Range, d As Range, 出費額 As Long
  For Each c In Range(Cells(2, 2), Cells(Rows.Count, 2).End(xlUp))
     出費額 = 0
     For Each d In Range(Cells(1, 3), Cells(1, 3).Offset(0, Day(DateAdd("d", -1, DateAdd("m",1,Cells(1, 3)))) - 1))
       出費額 = 出費額 + Cells(c.Row, d.Column)
       If 出費額 > 10000 Then Cells(c.Row, 1) = Day(Cells(1, d.Column)): Exit For
     Next
     If Cells(c.Row,1) = "" Then Cells(c.Row,1) = "超過なし"
  Next
End Sub
0249デフォルトの名無しさん2015/04/11(土) 19:01:13.40ID:Di7hwpD1
>>237
ユーザー定義関数で作ってみました。

https://friendpaste.com/5aSpV7j9R8jlmYmUZzZ3z1

これを標準モジュールにコピペすると、
=integration(閾値,列オフセット)
という関数が使えるようになります。

使い方は、開始セル(例:C2)から閾値(10000)を超えるまでの列数を表示したいセル(基準セルと呼ぶ)(例:A2)に
=integration(10000,2)
と入力すると、開始セルから右に向かって加算を続け、合計が閾値以上になった列数を表示します。
閾値を超えるか、空白セルが出てくるまで計算を続けますが、
空白セルまでいっても閾値に満たない場合や、開始セルの列指定が負の数になる場合などにはゼロを返します。
なお、列オフセットが負の数の場合には基準セルに到達する場合にも計算を終了します。
(そうしないと循環参照になってしまうので)
0250デフォルトの名無しさん2015/04/11(土) 19:40:43.67ID:iSQZEGOP
一体何をすればVBA上達するのでしょうか?お勧めの方法を教えて下さい。
0251デフォルトの名無しさん2015/04/11(土) 20:08:57.13ID:0PbM2j6c
関数にするならこういう方がいいんじゃね?

Function Test(範囲 As Range, 閾値)
  If Not IsNumeric(閾値) Then Exit Function
  Dim TargetRange As Variant, x As Variant
  Dim i As Long, j As Long

  If 範囲 Is Nothing Then Test = "ERROR"
  TargetRange = 範囲
  For Each x In TargetRange
     i = i + 1
     If IsNumeric(x) Then j = j + x
     If j > 閾値 Then Test = i: Exit Function
  Next
  Test = "該当無し"
End Function
0252デフォルトの名無しさん2015/04/11(土) 20:11:11.78ID:0PbM2j6c
×  If 範囲 Is Nothing Then Test = "ERROR"
○  If 範囲 Is Nothing Then Test = "ERROR": Exit Function
0253Office & Gamers ◆G144Hzgh2.0e 2015/04/11(土) 20:51:26.41ID:qwyJf/Pv
なんかCOBOLみたいでワロタw
0254デフォルトの名無しさん2015/04/12(日) 00:32:53.59ID:K7dkD1iB
>>251
コード一生懸命書き込んでくれるのはいいんだが、
1度動作確認してから書いた方がいいと思うぞ。
折角修正してもそれだけじゃ動作すらしないだろ?
0255デフォルトの名無しさん2015/04/12(日) 00:34:11.50ID:B1LmB3ZH
一体何をすればVBAが上達するのでしょうか?お勧めの方法を教えて下さい。
0256デフォルトの名無しさん2015/04/12(日) 01:02:21.73ID:dgOnfcNk
>>255
プログラミング言語全体に言えることだけど
仕事で毎日使うこと。これに尽きる
仕事なら目標がはっきり示されるし、
品質・納期に甘えが許されないから嫌でも身につく
0257デフォルトの名無しさん2015/04/12(日) 01:16:29.75ID:t+tTqJJ2
>>255
VBA 入門 でググって、
そこに書かれているコードを実際に自分で試してみる。
出来ればそれで実際にツールを作ってみる。

ここで回答している人達も、必ずしもVBAを100%理解している訳じゃなくて
質問者の内容を調べて回答する、というように、常に勉強している。
0258デフォルトの名無しさん2015/04/12(日) 01:49:37.26ID:/a8eNQvW
>>255
教え方の上手な人にテンポ良く習う
あと実践
0259Office & Gamers ◆G144Hzgh2.0e 2015/04/12(日) 02:32:22.71ID:qV7OJBYF
>>255
さっさとVC++に移るw
0260デフォルトの名無しさん2015/04/12(日) 05:50:49.46ID:v/vGNoLh
>>254
試してみたら普通に動作したけど、コピペの仕方とか間違ったんじゃないのか?
0261Office & Gamers ◆G144Hzgh2.0e 2015/04/12(日) 06:04:57.50ID:qV7OJBYF
VB知らないけど、for eachの多重ループってどんな動作するの?w
0262デフォルトの名無しさん2015/04/12(日) 06:07:34.26ID:8jpSmqLc
>>255
現在あなたのレベルによるが
もし何も判らないなら入門書を一冊買って最初から地道に勉強すべき
複数の人から教わると混乱して挫折しやすい

ある程度判るようにならヘルプだけ見て大変でも自力で頑張る
ネット検索しコピペに頼ってると身に付かない

ヘルプ見れば大抵の事はできるレベルなら
質問掲示板に回答者として参加
0263Office & Gamers ◆G144Hzgh2.0e 2015/04/12(日) 06:13:06.63ID:qV7OJBYF
そして宿題には答えない、っとw
0264デフォルトの名無しさん2015/04/12(日) 08:15:06.06ID:tL06Oggo
>>260
済まない、TargetRangeに範囲を代入している所で頭にSetが付いていなかったからそこで落ちると思った。
型、Valiantで定義してたのね。俺の方がよく見てなかったわ。
0265デフォルトの名無しさん2015/04/12(日) 08:19:38.94ID:tL06Oggo
×Valiant
⚪︎Variant
0266デフォルトの名無しさん2015/04/12(日) 08:55:21.90ID:v/vGNoLh
システムハンガリアンに則ってv_TargetRangeとかRange_vとかにすべきだったか。
0267デフォルトの名無しさん2015/04/12(日) 09:15:11.75ID:lPZ2kSBr
・標準モジュール
・フォームモジュール
・クラスモジュール
のしくみについて深く知りたいのですが、これらについて深く解説している本みたいなのはないのですか?
0268デフォルトの名無しさん2015/04/12(日) 09:15:57.78ID:taPXD9k9
>>261
そんなことよりも、配列のFor Eachは代入ができないことが問題だ!

For Each z in matrix
z = z * 2
とかできない。
0269デフォルトの名無しさん2015/04/12(日) 09:16:32.49ID:cVd0kkwW
いや、命名規約の話になると今時の言語では〜とか、インテリセンスが効かないから〜とか、
日本語でも1文字でも分かりけりゃいい〜とか、それぞれ思うところがあるらしく、荒れるからいいや。
0270デフォルトの名無しさん2015/04/12(日) 09:20:06.09ID:taPXD9k9
参照型にすりゃいいのかと思ってこうしてみたがもちろんダメ

For Each &z in matrix
z = z * 2
0271デフォルトの名無しさん2015/04/12(日) 10:05:39.04ID:BQBr0rdt
>>266
それ以前に必要ないのに Variant なんか使うなよ
0272デフォルトの名無しさん2015/04/12(日) 10:20:09.92ID:v/vGNoLh
>>271
必要ないのにってどういう事だ。RangeObjectのままFor Eachにつっこめと?
0273デフォルトの名無しさん2015/04/12(日) 10:28:53.70ID:lPZ2kSBr
ないですかね?
0274デフォルトの名無しさん2015/04/12(日) 10:48:11.45ID:v/vGNoLh
>>267
詳しく解説した本は知らないけど、

シートオブジェクト → GUIあり。Newできない。
フォームモジュール→ GUIあり。Newできる。
標準モジュール→GUIなし。Newできない。
クラスモジュール→GUIなし。Newできる。

という違いしかないと思うぞ。
0275デフォルトの名無しさん2015/04/12(日) 10:52:43.09ID:cVd0kkwW
>>274
FormオブジェクトはNewしてもしなくても使えるからまた別の考え方になるけどな
0276デフォルトの名無しさん2015/04/12(日) 10:59:04.10ID:BQBr0rdt
>>272
Range でいいだろ
Variant である「必要がない」ってこと
0277デフォルトの名無しさん2015/04/12(日) 11:29:16.53ID:lPZ2kSBr
>>274
なるほどありがとう。
Newできないのはずっと存在している性的なエッチなクラスみたいなものだという認識でよろしいでしょうか?
それぞれのモジュール/オブジェクトの先頭で宣言した変数は、クラスのメンバ変数と考えてよろしいでしょうか?
0278デフォルトの名無しさん2015/04/12(日) 11:39:40.22ID:v/vGNoLh
>>275,277
仕組みとか他の言語に例えると〜〜とかやり始めるとまた面倒くさい事になるから、あくまでVBA上の動作としてな。

>>276
それはRangeオブジェクトのままの状態と、Variant配列にした時の処理速度の違いを理解した上で言ってるの?
0279デフォルトの名無しさん2015/04/12(日) 12:05:50.12ID:lPZ2kSBr
Variant型って
メモリ上ではどういうしくみ/領域で記憶されているんですか?
0280デフォルトの名無しさん2015/04/12(日) 12:10:58.07ID:v/vGNoLh
>>279
http://marupeke296.com/IKDADV_CPP_VARIANT.html
0281デフォルトの名無しさん2015/04/12(日) 12:46:46.80ID:b0zj5JyQ
Range処理はやっぱり汎用的がいまいちだからな。
「必要か?」というと不要だが、いずれ配列処理に移行するのが必然。
0282デフォルトの名無しさん2015/04/12(日) 16:40:22.61ID:qz9ad5ml
1.Workbooks.Open Filename:="Book1.xls" と Workbooks.Open "Book1.xls" の違いがわかりますか?
2.Workbooks.Open "Book1.xls" と Workbooks.Open("Book1.xls") の違いがわかりますか?
3.「=」と「:=」の違いがわかりますか?
4.Setを使うのはどんなときですか?
5.RangeとCellsは、どう使い分けるべきですか?
6.変数は宣言して使うべきです。その理由がわかりますか?
7.条件分岐のIfと、繰り返しのFor Nextを、自在に使えますか?
8.ビジネスの現場で作成されるマクロで、最も重要なことは何ですか?
0283デフォルトの名無しさん2015/04/12(日) 16:47:57.58ID:nKvs/5SB
rangeで出来てcellsで出来ないことはあるけど
逆はないような気がする
でも使いやすいのはcells
0284デフォルトの名無しさん2015/04/12(日) 17:13:56.60ID:iDS7EXN0
>>282
宿題か?それとも面接気分で使える人間をここで探してんのか?
0285デフォルトの名無しさん2015/04/12(日) 17:29:38.76ID:cVd0kkwW
>>282
めんどくさいから前回以前のスレ漁ってくれ。
どれもこれもそれが理由で荒れたことがある奴を狙ってるっぽいけどな。
0286デフォルトの名無しさん2015/04/12(日) 17:38:15.75ID:v/vGNoLh
対象にしてる質問のレベルがバラバラだなと思ってたけど、なるほど、誰しも一家言ある質問シリーズか。そう見ると面白いな。
0287デフォルトの名無しさん2015/04/12(日) 20:18:22.05ID:d7t2BKGs
どう見ても面接かテストだよなあ
俺が試されている
そして不合格確定
0288デフォルトの名無しさん2015/04/12(日) 20:28:49.02ID:R2DZtWRM
>>282
結論は簡単だよね?(´・ω・`)
多分テストの答えとしては、それぞれに正解があるんだろうけど?(´・ω・`)
現実的な結論はひとつしかないよね?(´・ω・`)

             /)
           ///)
          /,.=゙''"/          Excel VBA なんだから
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /
0289デフォルトの名無しさん2015/04/12(日) 21:37:26.29ID:v/vGNoLh
>>282
1. Filename:=が入っているか入っていないか
2. ()がついているか、ついていないか
3. :がついているか、ついていないか
4. コンパイラに怒られた時
5. 他人に見せる時と自分だけ分かっていればいい時
6. はい
7. はい
8. 納期

よし、完璧。
0290デフォルトの名無しさん2015/04/12(日) 22:40:07.52ID:cVd0kkwW
>>289
学があるなぁ
0291デフォルトの名無しさん2015/04/13(月) 12:13:36.48ID:TNNdvaW0
>>282
OfficeTANAKAのセミナーの宣伝文句じゃねーか。
セミナー受ければその辺の違いが分かるようになります、とかっていう。
0292デフォルトの名無しさん2015/04/13(月) 12:58:23.68ID:vaW8dGcw
「=」と「:=」の違いは?
http://officetanaka.net/excel/vba/beginner/index.htm
0293デフォルトの名無しさん2015/04/13(月) 13:14:43.48ID:iWawuGaD
よくもまあ20年もVBAなんかに関わり続けていられるもんだ
0294デフォルトの名無しさん2015/04/13(月) 13:21:34.99ID:iWawuGaD
儲かるのか
0295デフォルトの名無しさん2015/04/13(月) 13:22:21.44ID:vaW8dGcw
このスレが過疎らない程度の需要はあるってこと
0296デフォルトの名無しさん2015/04/13(月) 13:22:56.09ID:vaW8dGcw
このスレが過疎らない程度の需要はある
0297デフォルトの名無しさん2015/04/13(月) 19:35:58.95ID:Nl26Y8lL
>>293
30年間C言語に関わってますが、なにか?
0298デフォルトの名無しさん2015/04/13(月) 19:52:38.74ID:iWawuGaD
>>297
_Genericって使ってる?
0299デフォルトの名無しさん2015/04/13(月) 20:32:24.41ID:Nl26Y8lL
>>298
使ってない
Cは組み込みでしか使ってないから、メーカーコンパイラだとまだサポートされてないし
そもそもそんなに使う機会なさげだしね
0300デフォルトの名無しさん2015/04/13(月) 21:29:24.81ID:pRuBwmQ3
DataTableに代わるいい入れ物って無いっすか?

いやー、ExcelのVBAだったらシート使えよって話なんでしょうけど、VB6上で扱ってるからそうも行かなくて。

RecoadSetはどっちかって言うとDataReaderみたいで値設定出来なそうだし、ただの配列だと項目として列に列名付けて引っ張るの変動的だと大変そうだし、
クラス作ってコレクションとかに行として突っ込むのも列名変動だと融通効かなそうだし。

いや、スレ違いと言うならVB6のスレに誘導してくれてもいいんですけどね。
0301デフォルトの名無しさん2015/04/13(月) 22:49:42.32ID:vaW8dGcw
>>300
ワークシートオブジェクトはVBからでも使えるんだぜ?
0302デフォルトの名無しさん2015/04/14(火) 03:37:14.18ID:yZaWizG/
>>301
いや、ここはExcel弄る前のところなんで、できればシート使わない前提でお願いできれば。
0303デフォルトの名無しさん2015/04/14(火) 05:51:57.10ID:ZWvZwDT8
ここexcelVBAのスレだぞ
0304デフォルトの名無しさん2015/04/14(火) 06:01:36.27ID:yZaWizG/
>>303
ではシートを使わないと制限の掛かった状態でExcel VBAで>>300と同じ内容をお願いします。
0305デフォルトの名無しさん2015/04/14(火) 06:07:58.52ID:ZWvZwDT8
VB6でワークシートをcreateobjectで使えるならそれで良いだろ
createobject出来ないなら他の方法でやれば良いだけ
0306デフォルトの名無しさん2015/04/14(火) 07:49:05.15ID:sORFX9lT
>>305
都度Bookを開いたり、ExcelObjectを介在させると時間が掛かってしまいます。

それにDataTableのようにただ値を保持したいだけなのに、
その為だけにわざわざExcel開いてワークシートを使うのもなんかなぁと思ったのですが、

やっぱりどうしてもシートを使わないとだめでしょうか?
無理だと言うならVB6のスレに誘導して下さい。
0307デフォルトの名無しさん2015/04/14(火) 08:17:51.11ID:zYEnmEOU
>>306
>ただの配列だと項目として列に列名付けて引っ張るの変動的だと大変そう
これの意味をもっと具体的に知りたい
0308デフォルトの名無しさん2015/04/14(火) 10:31:04.27ID:rcDR+pMa
>>306
CreateObjectの実行時間なんてせいぜい数ミリ秒だろ
それで時間が掛かるとか、いったい何に使うのさ
0309デフォルトの名無しさん2015/04/14(火) 10:49:29.04ID:0HPBZIqn
>>306
君程度の作るしろもので時間が掛かるとか、笑止千万なんだが?
そういうのは何万レコードも処理するとか、Access等で1度の演算で膨大な数
呼び出すとかそういうケースですよ。

都度ブックを開くのが嫌ならDBでも使ってろ。
0310デフォルトの名無しさん2015/04/14(火) 11:10:33.21ID:JeZk0L2t
VBAについて本で勉強し始めた初学者です。
その本に、「ActiveCell.Offset(0,1).Range("A1").Select」というステートメントの意味が「一つ右の列にセルを移動」となっていたのですが、
このRange("A1")って、A1セルと全く関係がないみたいなのですがどういう意味ですか?
回答よろしくお願いします
0311デフォルトの名無しさん2015/04/14(火) 11:35:47.08ID:rcDR+pMa
>>310
この場合は、ActiveCell.Offset(0,1) で示されたセルが基準点になって、そこから始まる範囲の一番左上がA1になる
だから、A1の指定はあってもなくても結果は同じ、これでも結果は同じになる
ActiveCell.Offset(0,1).Select

この方法だと基準より左、より上にあるセルは指定できなくなる
0312デフォルトの名無しさん2015/04/14(火) 11:46:38.69ID:0HPBZIqn
>>310
今、アクティブになっているセルを座標0.0として見た時に

offsetで0.1を指定するということは、y.xなので、横に1個(つまり、右に1個
移動するということになる。

それがA1かどうかは正直全く関係ない。その書き方は誤解を招く表現だね。
0313デフォルトの名無しさん2015/04/14(火) 12:01:58.96ID:JeZk0L2t
>>311
>>312
丁寧にどうもありがとうございました。
でもなぜこんなやり方があるのか不思議ですね
例えば、「ActiveCell.Offset(0,-5).Range("B1").Select」も「ActiveCell.Offset(0,-4)..Select」と表現すれば簡単になるのに…
「ActiveCell.Offset(a,b).Select」で全てのセルに移動できますよね
0314デフォルトの名無しさん2015/04/14(火) 12:19:12.22ID:rcDR+pMa
>>313
どうしてこんな書き方ができるのか、それはRangeオブジェクトの仕様だからです。副作用と言ってもいいでしょう
オブジェクトの仕組みを理解するには必用な知識ですが、初心者に教えることじゃないですね

だから、こんな風にもっと無意味な書き方もできてしまいます
ActiveCell.Offset(0, 0).Range("A1").Offset(0, 0).Range("A1").Select
0315デフォルトの名無しさん2015/04/14(火) 13:02:32.78ID:umPyd9Hn
>>313
> でもなぜこんなやり方があるのか不思議ですね
例えば、同じシートに3*5のサイズの表が複数個あるようなときに、全ての表に対して
topleftCell.Range("A1")
topleftCell.Range("B2")
などとアクセスできるのが便利(な人もいる)。
もちろん、
topleftCell.Cells(1, 1)
topleftCell.Cells(2, 2)
でも良いが。
0316デフォルトの名無しさん2015/04/14(火) 13:12:54.88ID:iagCX5p5
無意味な書き方(書いてあっても無くても結果に影響しないと言う意味)よりも
むしろ意味のある書き方(一応は結果に影響すると言う意味)で説明すべきじゃなかろうか?

例えば、
ActiveCell.Offset(3,4).Select と
ActiveCell.Range("D3").Select は同じ結果になる、みたいに。

ただ、敢えてそう書くメリットがあるかと言われれば
やっぱり思いつかないわけだけど。
03173162015/04/14(火) 13:16:04.64ID:iagCX5p5
あらま、>>314までみてリロードしてなかったら
>>315さんが一応意味のある使い道をひねり出してくれてたね。
0318デフォルトの名無しさん2015/04/14(火) 13:16:29.31ID:rcDR+pMa
相対位置でA1方式を使うメリットってないよなあ
小さい表の位置を変えた時に対応しやすいってのはあるけど、そんなExcelをワープロみたいに使うやり方は
あまり推奨すべきじゃないと思うし
0319デフォルトの名無しさん2015/04/14(火) 17:17:01.27ID:JeZk0L2t
みなさんありがとうございます。
また質問させていただくことがあるかもしれないので、そのときはよろしくお願いします。
0320デフォルトの名無しさん2015/04/14(火) 23:19:18.72ID:yZaWizG/
>>309
無理なら別にいいですと言いました。
別の所でもっといい案を頂きましたのでこの件はCloseさせて頂きます。
0321デフォルトの名無しさん2015/04/14(火) 23:29:34.82ID:cuMLaLg/
>>320
その前に>>307に答えてよ
0322デフォルトの名無しさん2015/04/14(火) 23:58:39.81ID:yZaWizG/
>>321
RecoadSetの代わりに配列でやってみれば分かると思います。
0323デフォルトの名無しさん2015/04/15(水) 06:42:33.13ID:t3UUHND4
>>322
RecoadSet w
まあ、構造体の配列つかってて構造体のメンバーを動的に定義したいと思ったことは何回かあるので、>>300 の気持ちはわからないでもない

>>308
数 ms で Excel 起動するとか、どんなモンスターマシンだよ w
0324デフォルトの名無しさん2015/04/15(水) 07:50:06.23ID:uwjeRs/E
質問者のレベルが低いのは構わんが、〜を使いたくないって要件出しててその理由書いてる奴に
自分のレベルが低くて分からないからって無理矢理押し付けたり煽ったりする回答者ってどうなの?
とは思った。
0325デフォルトの名無しさん2015/04/15(水) 08:08:21.71ID:7pisdgd2
>>324
あげている理由に疑問符がつくからさ。
0326デフォルトの名無しさん2015/04/15(水) 08:48:35.48ID:lLW4R3Pt
CFDで852買い
0327デフォルトの名無しさん2015/04/15(水) 10:02:31.60ID:7pisdgd2
64bit officeて使ってる?
0328デフォルトの名無しさん2015/04/15(水) 20:08:03.57ID:622rysnh
開いていないExcelファイルのデータを扱いたいとき
そのファイルがサイズがでかく重く
普通に開いてからデータを調べて扱ってから閉じる方法だと
処理時間がものすごくかかります。

これもっと処理時間を短くする方法はありますか?
ADOを使ってデータベースとしてそのExcelファイルを扱う方法があると聞いたのですが
それだと速いですか?
0329デフォルトの名無しさん2015/04/15(水) 22:33:01.81ID:0Tv6kfk+
>>328
速度が必要ならPostgreSQLなどのデータベースを使って欲しい
ADOなどでExcelを開くなら一気に読み込むのではなく少しずつ読み込めば軽くなる(レスポンスがよくなる)かもしれない
全件アクセスするなら変わらないと思うが
0330デフォルトの名無しさん2015/04/16(木) 12:40:44.24ID:Jej9KO2W
>>329
しかしそれ以前にExcelファイルを読ませようとすると
「非同期接続中に操作を行うことはできません。」とエラーが出るのですが
これを回避する方法は知りませんか?
0331デフォルトの名無しさん2015/04/16(木) 19:49:43.80ID:5dxwiSt3
凄くデカいファイルを加工せずにExcel VBAの範疇でやるとなると、読み込んだ後の作業を如何に高速化するかになるから、
実際には何をしているのか。それを高速化出来るか。というのを検討することになる。

凄くデカいファイルを加工できるなら、csvとかの軽いファイルにすれば開く時に軽くなるし、容量も少なく出来る。
またデータを一定基準で小分けにしてファイルを分け、ファイル名から大まかな特定が出来る様にすれば更に軽くなる。
0332デフォルトの名無しさん2015/04/16(木) 20:42:55.89ID:8Aqhe2mu
そっか、100MB超えるファイル扱ってるけど
csv保存しときゃいいのか。うっかりしてたわw
0333デフォルトの名無しさん2015/04/17(金) 15:50:07.78ID:WwDeOvZD
以下のようなコードを書く場合、「If GetInputState() Then DoEvents」は
どこに書くのがいいでしょうか?


Declare Function GetInputState Lib "USER32" () As Long
-----------------------------
Sub AAA
 For i=1 to 10000
  Call AAA 'SubBBBを1万回呼び出す
 Next
End Sub
-----------------------------
Sub BBB
 For i=1 to 2000
   計算など
 Next 
End Sub 'SubBBBにかかる時間は1回あたり0.5秒ほどです
0334デフォルトの名無しさん2015/04/17(金) 16:25:59.28ID:aGcs89jj
知ってた?Call BBBがどこにもないって?(´・ω・`)
0335デフォルトの名無しさん2015/04/17(金) 16:43:08.63ID:WwDeOvZD
間違えたw


Declare Function GetInputState Lib "USER32" () As Long
-----------------------------
Sub AAA
 For i=1 to 10000
  Call BBB 'SubBBBを1万回呼び出す
 Next
End Sub
-----------------------------
Sub BBB
 For i=1 to 2000
   計算など
 Next 
End Sub 'SubBBBにかかる時間は1回あたり0.5秒ほどです
0336デフォルトの名無しさん2015/04/17(金) 16:53:19.80ID:SDwp/TU0
>>333
For i=1 to 10000
  Call AAA 'SubBBBを1万回呼び出す
  DoEvents
Next
でなんでダメなの?
0337デフォルトの名無しさん2015/04/17(金) 17:11:15.20ID:WwDeOvZD
>>336
調べてみてSubBBBの

For i=1 to 2000
 If GetInputState() Then DoEvents

って書いてたんですがよく反応なしになるので
場所が間違ってるのかと思いました。
Callのあとですか試してみます。
0338デフォルトの名無しさん2015/04/17(金) 17:28:19.35ID:lGEgTHF3
100MB超えるファイルからデータを10セルずつ読み込む場合
csv形式とxls形式とでは動作速度は変わりますでしょうか?どちらがより速いとかありますでしょうか?
0339デフォルトの名無しさん2015/04/17(金) 17:31:47.31ID:1Snl7yZ8
自分で試せばいいだろ。アホ
0340デフォルトの名無しさん2015/04/17(金) 17:35:10.67ID:eFMbj8Tk
______  ___________
         V
    _____
   /::::::::::::::::::::::::::\                  _
  /::::::::::::::::::::::::::::::::::::::\             /  ̄   ̄ \
  |:::::::::::::::::|_|_|_|_|           /、          ヽ はぁ?他に言う事ねぇのかよバーカw
  |;;;;;;;;;;ノ   \,, ,,/ ヽ          |・ |―-、       |
  |::( 6  ー─◎─◎ )          q -´ 二 ヽ      |
  |ノ  (∵∴ ( o o)∴)          ノ_ ー  |     |
/|   <  ∵   3 ∵>          \. ̄`  |      /
::::::\  ヽ        ノ\           O===== |
:::::::::::::\_____ノ:::::::::::\        /          |
0341デフォルトの名無しさん2015/04/17(金) 17:53:41.79ID:+yzaDsFM
>>337
そりゃ条件によってはDoEventsが実行されないんだから反応なしになるわな

>>338
10セルずつとかどうやって読み込むのかによる
100M超えるCSVとかDBつかえよマジで
0342デフォルトの名無しさん2015/04/17(金) 18:13:27.22ID:lGEgTHF3
ベンチマークって検証方法が正しいかどうかの検証もしないといけば射場愛もあり意外と難しい 
詳しく知ってる人に聞くのが一番速いと言える
0343デフォルトの名無しさん2015/04/17(金) 18:14:07.16ID:lGEgTHF3
>>342
ば射場愛も>場合も 誤字。。
0344デフォルトの名無しさん2015/04/17(金) 18:52:59.74ID:SDwp/TU0
>>342
> 詳しく知ってる人に聞くのが一番速いと言える
人に聞いてもわからないよ。
結局自分で実測するしかない。
0345デフォルトの名無しさん2015/04/17(金) 19:31:26.90ID:nybfq0bG
検証方法の正しさも何も、考えつくもの実際に全て作って実際にかかった時間で計ればいいだけだろ。
0346デフォルトの名無しさん2015/04/17(金) 20:55:11.89ID:7Zn/9K8M
いつも思うんだけど大体このスレで高圧的な人って頭悪そうだよね
0347デフォルトの名無しさん2015/04/17(金) 21:18:09.64ID:NNPS0hI5
このスレに限定してしまう所が君の限界、つまり頭の悪さなのだよ。
0348デフォルトの名無しさん2015/04/17(金) 21:24:52.39ID:7Zn/9K8M
あ、ごめんね
悔しかったんだね
0349デフォルトの名無しさん2015/04/18(土) 01:19:17.79ID:TDz+1LLU
>>338
この答えがさらっと書けるイケメンはこのスレにはいないのか
0350デフォルトの名無しさん2015/04/18(土) 01:54:29.94ID:/SLWohM+
データの内容や書式によると思うけど、
どうせ一番のボトルネックはディスクI/Oになるだろうから、
絶対的にデータ量の小さいCSVが有利じゃないかな

ただしExcelでCSVの部分的な読み込みをどうやるかは知らんけど
結局は実装次第か?
0351デフォルトの名無しさん2015/04/18(土) 01:59:05.20ID:/SLWohM+
xslxはZIP圧縮されてるから全体を読み込まないと部分的なアクセスができない
CSVは可変長だと先頭から延々とスキャンしていかないと目的のレコードにたどり着けない
つまり最初の1組はCSVの方が有利

CSVで固定長ならシークが使えるからそこそこ効率良くランダムアクセスできる
0352デフォルトの名無しさん2015/04/18(土) 08:35:23.99ID:Ql1IVHxp
>>351
> xslxはZIP圧縮されてるから全体を読み込まないと部分的なアクセスができない
zip フォーマット知らないなら黙ってろよ...
0353デフォルトの名無しさん2015/04/18(土) 09:33:59.92ID:JGmEtZnj
あ、でもExcelをサクラエディタみたいにGrepするツールを作ったんだけど、都度ブック開いて検索して閉じて
時間が掛かってるから、ブックを開かずに検索する方法があったら俺も知りたいな。
0354デフォルトの名無しさん2015/04/18(土) 11:52:14.87ID:pucpWveX
ExcelVBAまじですばらしい
何がすばらしいかというと
Dim 最終行 As Long
といった変数名に日本語がかけるから。素晴らしい。
変数だけでなく関数名にも日本語でかける。
はっきりいってC言語は糞
0355Office & Gamers ◆G144Hzgh2.0e 2015/04/18(土) 12:02:58.62ID:yZFnrc/6
着実にCOBOLerまっしぐらだなw
0356デフォルトの名無しさん2015/04/18(土) 13:28:54.70ID:/SLWohM+
>>354
Cも日本語で書けるよ
処理系によってはそのまま書けるし、そうでなくてもプリプロセッサ次第
0357デフォルトの名無しさん2015/04/18(土) 14:01:18.23ID:90A42Qo7
変数を日本語にすると処理速度には影響するのかな?
素人っぽいコードになりそうだけどなw
0358デフォルトの名無しさん2015/04/18(土) 15:03:24.30ID:ZKGrUtyV
>>354
関数名を日本語にするのは意味があるかもしれないが、変数名は無意味だと思う。
というかメリットがない。わざわざ入力切替するのが面倒なだけ。
0359デフォルトの名無しさん2015/04/18(土) 16:56:33.66ID:pucpWveX
>>358
メリットは可読性がアップする
以下のコードをみてほしい。左辺だけみても何のrowなのか分からん。右辺をみて初めて意味が分かる
row = Range("A1").End(xlDown).Row

日本語で書いた場合、何をやっているか左辺だけで判断できるやろう
最終行 = Range("A1").End(xlDown).Row

確かに入力切り替えの手間はあるが、可読性があがるならいいことでは。
0360デフォルトの名無しさん2015/04/18(土) 17:26:24.96ID:JGmEtZnj
>>359
lastRowで駄目な理由を教えてくれ
0361デフォルトの名無しさん2015/04/18(土) 17:44:36.55ID:FKQ/us+d
VBAで膨大な量の配列処理を数日もしくは1年中連続稼働させた場合
PCやOSにどのような問題が発生しますでしょうか?
0362デフォルトの名無しさん2015/04/18(土) 18:11:30.12ID:/SLWohM+
>>360
Lastぐらいなら誰でもわかるけど、例えば「下から4行目」とか英語でどう書くか、誰でも知ってると思う?
0363デフォルトの名無しさん2015/04/18(土) 18:30:13.87ID:F5qBeUpb
>>361
PCの取り扱い説明書に〜時間以上は連続稼働しないでくださいって書いてなかった?

>>362
そもそも日本語だって変数名に「下から4行目」なんて付けるくらいならコメントで書かない?
0364デフォルトの名無しさん2015/04/18(土) 18:45:01.76ID:F5qBeUpb
後、日本語だとプレフィックス付けたり、関数内変数なのかモジュール変数なのかとか、定数なのかとかの区別を付ける
ように名前を付けさせると大変そう。特にモジュールレベル変数は頭アンダースコアで始めることができないし、
m_最終行みたいに英語混じっても変だし、モジュール変数_最終行みたいな名前でも長ったらしいし、
モ_最終行みたいだと意味分かんないし。
0365デフォルトの名無しさん2015/04/18(土) 18:46:23.12ID:/SLWohM+
和英辞典見ながら変数名を苦労して考えたはいいけど、デバッグの時に意味がわからなくて
もう一度英和辞典で意味を調べるハメになったりとか
それなりに長くやってれば、誰でも経験あると思うんだけどなあ

あと同僚が英語を放棄して何もかもローマ字で書いてるのに気付いて脱力したり
0366デフォルトの名無しさん2015/04/18(土) 18:56:52.63ID:F5qBeUpb
>>365
気持ちは分からないわけじゃない。仕事でやってて後で誰か見るって言うなら取り決め作って合わせた方がいいし、
自分が使うだけのツールなら自分の好きにすればいいんじゃないだろか。
0367デフォルトの名無しさん2015/04/18(土) 19:05:35.62ID:GgnclObV
また主義的な話になってる。英語だろうがフランス語だろうがアラビア語だろうが読めれば何でもいいだろ。
どの言語が読みやすいって話になるならたとえばスワヒリ語しかわかんないヤツには日本語も英語も同等にクソだからケースバイケースとしか言いようがない。
こういう明らかに答えが出ない話で自分の考え押しつけ合うの好きなヤツがいるよな。
0368デフォルトの名無しさん2015/04/18(土) 19:29:19.52ID:F5qBeUpb
>>367
押し付けるつもりは全くないし文章読み返したけど、どこにも押し付けるようなことは書いてないと思うけど、どこ?
0369デフォルトの名無しさん2015/04/18(土) 21:17:13.95ID:7d4DMTG7
俺の経験では、英語でも日本語でも、どっちに統一しようとしても変数や関数名で悩むことになる

英語は語学力の限界で、よく似た意味の単語を複数思い付けないし、使い分けが怪しくなる
日本語だと、カタカナ語がどうしても避けられなくて字数が長くなりがち、ソースが非常に読みづらくなる
0370デフォルトの名無しさん2015/04/18(土) 21:20:50.23ID:ZKGrUtyV
ローカル変数の可読性なんてほとんどの場合はどうでもいい。
わかりやすい名前がいいのはそりゃそうだけど、思いつかないなら aaa とか tmp で十分さ。
0371デフォルトの名無しさん2015/04/18(土) 21:54:49.48ID:5X4zf/wq
>>370
unkoとかはだめですか?
0372デフォルトの名無しさん2015/04/18(土) 22:05:23.35ID:SRGYwCui
>>371
だから好きにしろと書かれている
判らないなら自分はそういうことも判らない低能ですと
言って大声で叫んで寝ろ低能
0373デフォルトの名無しさん2015/04/18(土) 22:05:32.89ID:5X4zf/wq
会社のネットワークドライブにあるExcelファイルをひらくのが非常に重く時間がかかるのですが
なにか早く開く方法の提案はいくつかありますか?
0374デフォルトの名無しさん2015/04/18(土) 22:06:52.94ID:5X4zf/wq
>>372
なんだとこのやろう

>>373に補足して、早く開く方法というのはもちろんVBAでです。
0375デフォルトの名無しさん2015/04/18(土) 22:08:57.97ID:/SLWohM+
>>373
まずはボトルネックを調査
ブックのファイルサイズが関係あるかどうか調べる
時間帯によって速度が変わるかも調べる
0376デフォルトの名無しさん2015/04/18(土) 22:09:05.57ID:F5qBeUpb
>>371
実際お客さんから改修依頼で預かったツールに使われてたこと有ったわw

改修箇所ではないから、差分証跡だけ取って預かる前と差異がないとして流したけどなw
0377デフォルトの名無しさん2015/04/18(土) 23:11:26.81ID:JGNN/f1p
>>363
変数とコメントで事実が2か所存在してしまっている
1事実1か所の原則に反する

変数名をコメントにしてしまうのは意味がある

ただ、現在のVisualStudioでは日本語変数名は入力支援が貧弱なので扱いが面倒だ
0378デフォルトの名無しさん2015/04/18(土) 23:16:32.90ID:ZKGrUtyV
>>371
却って「どういう意味だろう?」と考えさせてしまうからダメなんじゃないかと思うぞ。
0379デフォルトの名無しさん2015/04/18(土) 23:24:46.25ID:JGNN/f1p
変数というのは変数名に意味がなければならない
変数を見ればその変数の型、スコープ、寿命、内容など全てがわかるべき
0380デフォルトの名無しさん2015/04/18(土) 23:39:35.26ID:nEc9whOH
>>379
何言ってるの?
http://i.imgur.com/d0khnV9.jpg
0381デフォルトの名無しさん2015/04/19(日) 01:06:41.56ID:dY1eD7XQ
>>379
変数の型、スコープ、寿命、内容など全てがわかるべきだが、変数「名」にそんなものを求めるべきではない。
名前なんてどうでもいい。
0382デフォルトの名無しさん2015/04/19(日) 02:12:00.00ID:13975baE
VBAを本で独学しているのですが、その本には
「PageSetup」プロパティを使うと、「PageSetup」オブジェクトを取得できます
と書いてあるんですが、「PageSetup」というのはプロパティ、オブジェクトのどちらなのですか?
0383デフォルトの名無しさん2015/04/19(日) 03:23:50.45ID:WMQbPkw9
>>382
PageSetupというプロパティもあるしPageSetupというオブジェクトもある

Dim ps As PageSetup 'これはオブジェクト(正確にはPageSetup型オブジェクト変数の宣言)
Set ps = ActiveSheet.PageSetup 'これはプロパティ(PageSetupオブジェクトを返してpsにセット)
ps.PaperSize = xlPaperA3
...
0384デフォルトの名無しさん2015/04/19(日) 08:15:55.58ID:UftegmFa
ActiveSheet.PageSetup.PaperSize = xlPaperA3
はどっちなんや?
0385デフォルトの名無しさん2015/04/19(日) 08:25:32.38ID:cbKo0tHc
プロパティを使って同名のオブジェクトにアクセスしてるんだろ。難しく考える事じゃない。
0386デフォルトの名無しさん2015/04/19(日) 09:28:41.73ID:proobNaS
>>380
変数名は命名が重要であり
その変数の型、スコープ、寿命、内容などの情報をどうやって変数名につめこむのがいいかいとう話をしているのだ。
どこかを大文字小文字にする、空白かアンダーバーか、型を先頭に書くハンガリアン法、などなど。
http://data.okinny.heypo.net/image/large/488ba9207bae4efb6cf3f375da98f5dc.jpg
0387デフォルトの名無しさん2015/04/19(日) 09:47:46.40ID:dY1eD7XQ
>>386
変数名は重要ではない

型、スコープ、寿命 ⇒ 変数名に反映するな
内容          ⇒ 変数名に反映してもいいが、しょせんその場限りのものだ

ルールが増えるのは悪だ
0388デフォルトの名無しさん2015/04/19(日) 10:37:57.93ID:H11CMV7L
>>386
>>367
その辺VBAでこだわり過ぎてるからいつも荒れるんじゃない?
いいじゃない、別に好きに命名して使ってたって自分らが困る訳じゃなし。
俺はその辺の話このスレでするのはとっくに諦めたよ。
0389デフォルトの名無しさん2015/04/19(日) 10:40:36.74ID:Tsl5gnGx
largeなのに横420というのが泣けてくる
いつの時代の画像だよ
0390デフォルトの名無しさん2015/04/19(日) 10:41:44.40ID:vasfhw5N
最近、書店にExcelVBAが雨後の筍のようにたくさん並んでおりますが
皆様のオススメはどの書籍でしょうか?
0391デフォルトの名無しさん2015/04/19(日) 10:58:42.14ID:Tsl5gnGx
たぶん最近に限った話じゃない
たぶんどれ読んでも大差ない
たぶん
0392デフォルトの名無しさん2015/04/19(日) 11:04:19.91ID:jwGG5Tfp
>>390
お勧めは買わないでネットで必死こいて調べること。
調べたことを自分で纏めてノート取っておくこと。
0393デフォルトの名無しさん2015/04/19(日) 11:05:47.12ID:cbKo0tHc
本はいくつか買ったけど、結局はネット検索の方が速いしより実践的な内容がヒットするから全然読んでねぇや。
0394デフォルトの名無しさん2015/04/19(日) 11:47:47.66ID:Tsl5gnGx
何から始めたらいいかわからない本島の初心者は本を買って最初から読めばいいと思うよ
それでも3章ぐらいまで進むと本の通りにやるのがつまらなくなって
ネットで自分のやりたいことを検索するようになる
結果4章から9章はまったく読まない、それでいいんだよ
0395デフォルトの名無しさん2015/04/19(日) 12:26:34.64ID:yIGS2rGn
初心者ってプログラミングの基本的な構文とかもわからないレベル?
条件分岐とか繰り返しとか。俺はC言語をかじってるから、VBAで書き方が異なっていても考え方が一緒だし、
リファレンスのような本で十分。所詮VBAも道具にすぎん
0396デフォルトの名無しさん2015/04/19(日) 13:26:46.19ID:/0rJTMjp
Windows74bit、office2013です。
Name ステートメントを使ってファイル名を変更するプログラムを作りました。

oldName = Dir(dirName, vbNormal)
Do While oldName <> ""
newPath = dirName & addName & oldName
oldPath = dirName & oldName
Debug.Print oldPath, newPath
Debug.Print Len(newPath)
Name oldPath As newPath
oldName = Dir()
Loop

dirName+oldName を dirName+addName+oldNameに変更するものです。
普通のアスキーコードx20〜x7eのファイル名ならうまく動くようですが
フランス語のアクセント記号や「ae」の合字などがあると
実行時エラー'52' ファイル名または番号が不正です。というエラーが出ます。
何か対策はありますか。
0397デフォルトの名無しさん2015/04/19(日) 13:27:46.33ID:/0rJTMjp
「Windows7、64bit、office2013です。」の間違いです。
0398デフォルトの名無しさん2015/04/19(日) 14:29:15.93ID:H11CMV7L
そういう文字使わなきゃいいんじゃね?
0399デフォルトの名無しさん2015/04/19(日) 14:48:34.51ID:/0rJTMjp
>>398
CD情報なので与えられた条件です。音楽CDの各トラックの時間情報を元にgracenoteなどのデータベースを検索して
各トラックの名称を取得し、各トラックの音楽情報をディスクに書き込んでいます。
再生順を正しくするためには複数枚のCDの場合、何枚目かの情報を書き加えないといけないのです。
396のaddNameというのが何枚目かという情報で、oldNameというのが01からの連番で始まった
フランス語もありのトラック名称が続きます。
0400デフォルトの名無しさん2015/04/19(日) 15:12:58.85ID:Tsl5gnGx
>>399
FileSystemObjectを使えばユニコードも普通に処理できる

サンプル
Sub m1()
  Set FSO = CreateObject("Scripting.FileSystemObject")
  Path = "C:\"
  OldName = "test.mp3"
  NewName = Range("A1") & ".mp3"  ' A1にはユニコードの文字列が入っている
  Set File = FSO.GetFile(Path & OldName)

  File.Name = NewName  ' ファイルのリネーム

  Set FSO = Nothing
End Sub

実行結果の画面キャプチャ
http://i.imgur.com/7E1EHMx.png
0401デフォルトの名無しさん2015/04/19(日) 15:36:10.69ID:cSXyLlQW
Sub test()
  Dim toshi As String
  100
    toshi = InputBox("あなたの年齢を入力してください!",      Title:="年齢入力")
  If toshi = "" Then
    MsgBox "もう一度、あなたの年齢を入力してください!",16,”再入力!”
    GoTo 100
  Else                    
        Range("C5").Value = toshi
End Sub

というプロシージャがあったとします。
そのプロシージャを実行して、例えばInputBox関数に25と入力した場合、
toshiという変数は文字列として宣言されているので
セルC5の値=toshi=25という文字列
となるはずなのに、実際には25という数値が入力されるのはなぜですか?
0402デフォルトの名無しさん2015/04/19(日) 15:36:25.71ID:/0rJTMjp
>>400
どこかでエンコードをUTF-8にでもすればいいのかと思っていました。
FileSystemObjectですか、やってみます。
0403デフォルトの名無しさん2015/04/19(日) 15:56:04.57ID:Jg9Fksmf
>>381
スコープと寿命って意味合い違うのん?
0404デフォルトの名無しさん2015/04/19(日) 16:27:44.96ID:cbKo0tHc
>>401
エクセルのお節介。

Range("C5").NumberFormatLocal = "@"

とかしておけば勝手に変換されないはず。
0405デフォルトの名無しさん2015/04/19(日) 16:37:29.54ID:DLETAMYv
>>338
>>351
>>352


2日間あれこれテストしてみたけど
CSVからの数値の読み込みはxls形式より明らかに遅いという結果になった。
二重チェックしてないので定かではないが、、
0406デフォルトの名無しさん2015/04/19(日) 17:03:50.31ID:cSXyLlQW
>>404
返事ありがとうございます。
本来、25は文字列として入力されたはずなのに、
excelが勝手に25を文字列から数値に変換しているという認識で大丈夫ですか?
0407デフォルトの名無しさん2015/04/19(日) 17:37:43.02ID:DLETAMYv
>>405
結論CSVは軽いけどVBAが読むには足りないデータがありそれを補足するために余計に時間がかかると見た。 
どうだろうか?
0408デフォルトの名無しさん2015/04/19(日) 19:21:55.27ID:WMQbPkw9
>>403
Static変数とか、スコープ抜けても寿命は尽きない
0409デフォルトの名無しさん2015/04/19(日) 19:53:42.94ID:PXqQj4UF
プロシージャを中間処理でランダムに呼び出すとエラーになるようですが
サブブロA →サブブロB〜Dをランダムに呼び出し → サブフE 最終集計処理→結果より次の数値を持たせてAからスタート

繰り返すうちにエラーが出る。。

サブブロB〜Dを必要なくても順に呼び出し必要ない物はしょりをスキップするように書くと動きましたが
この中間処理のパターンが膨大ににある場合は無駄な処理時間を要することになりますが
これはしょうがないのでしょうか?
中間処理のコードですが1つ1つが結構巨大コードなため1プロシージャにまとめてセレクトケースなどで実行させることは出来ません。。
この場合良い書き方はあるのでしょうか?
0410デフォルトの名無しさん2015/04/19(日) 20:28:24.90ID:PXqQj4UF
>>409
説明が下手ですみません 
要は中間処理であらかじめ用意した解析コードの書かれた複数のプロシージャを結果に応じてランダムに呼び出し対場合は一体どうすれば良いのですか?
構造化プログラミングは使わなくても全呼び出ししないと行けないようですが。そういう物なのですか?ランダムでも動かす方法はあるのでしょうか?
0411デフォルトの名無しさん2015/04/19(日) 21:57:36.46ID:dY1eD7XQ
>>410
おまえひとをバカにしてるだろ?
0412デフォルトの名無しさん2015/04/19(日) 22:01:59.85ID:AvGvLpfW
慇懃無礼の典型だな、たちが悪い
0413デフォルトの名無しさん2015/04/19(日) 22:28:51.92ID:yBTKbJUQ
>>411
ごめんなさい。
http://i.imgur.com/MPJaSxF.jpg
0414デフォルトの名無しさん2015/04/19(日) 22:33:01.43ID:dY1eD7XQ
けしからん!!!
0415デフォルトの名無しさん2015/04/19(日) 23:16:40.66ID:4Q4C5ycA
アイコラとは懐かしいな
0416デフォルトの名無しさん2015/04/19(日) 23:31:20.85ID:6VTvXYTp
>>409-410
文章に句読点を打て

文の意味や、例の構造が、全然わからん。
ちゃんと説明しろ
0417デフォルトの名無しさん2015/04/19(日) 23:53:27.53ID:QC/66xan
p410
別にランダムでプロシージャ呼び出してもエラーにはならない。
書いていることがよく分からないが、ひょっとしてプロシージャAを抜ける前にプロシージャAを呼んでいたり、
プロシージャBの中でプロシージャCを呼んで、その中でプロシージャBを呼んでいたり、抜ける想定がない
変な再帰で組んでいるんじゃないか?
だったらその内スタックエリアがオーバーフローしてエラーになるのもうなずける。
そうだとしたら、構造化言語であろうが無かろうが関係ないし、きちんとした作りで作れとしか言いようがない。
0418デフォルトの名無しさん2015/04/19(日) 23:54:44.49ID:QC/66xan
なんか文字が化けた。
p410っってなんだよ。>>410
0419デフォルトの名無しさん2015/04/20(月) 00:18:18.27ID:jWcSjqXL
>>417
1回実行するだけならエラーは出ませんが何百回もくり返し実行するとでるようです。
昔に書いたコードでエラー名は覚えていませんが
それに鳴かされました。短いコードはセレクトケースで解決しましたが
プロシージャにわけた物に関しては
実行させ無い物まですべて呼び出し、
各プロシージャ内の先頭にIF文で動かさない場合はスルーさせるコードをつけたら
何万回繰り返してもエラーは出なくなりました。
0420デフォルトの名無しさん2015/04/20(月) 00:32:56.70ID:jWcSjqXL
>>417
>プロシージャBの中でプロシージャCを呼んで、その中でプロシージャBを呼んでいたり、抜ける想定がない
まだ覚え立ての頃だったのでこれがあったかもしれません。
ランダム呼び出しはエラーにならないのならこれを機会にコードの合理化に挑戦したいですね
0421デフォルトの名無しさん2015/04/20(月) 07:13:03.95ID:9avAm14N
ランダムに呼び出すってどうやるの?
0422デフォルトの名無しさん2015/04/20(月) 07:43:55.06ID:jcO4RoYw
「エラー名は覚えていませんが」の時点でネタ確定
0423デフォルトの名無しさん2015/04/20(月) 07:56:58.33ID:pAlOCukf
>>421
乱数作ってSelectCaseで呼び出すとか?
0424デフォルトの名無しさん2015/04/20(月) 08:58:22.70ID:rutaMFFZ
>>422
初心者なんて得てしてそんなもんだよ

てか、>>417氏みたいに質問の意図を汲み取って回答できる人もいるんだから
分らないなら一々チャチャ入れずにだまってスルーしときなよ
0425デフォルトの名無しさん2015/04/20(月) 11:40:09.47ID:jcO4RoYw
じゃあハッキリ言うと俺は>>419が悪意あるネタだと思っているからさ。
0426デフォルトの名無しさん2015/04/20(月) 11:48:37.29ID:rutaMFFZ
>>425
>>420みたらまじめに相談してたように見えるけど?

というか、仮に悪意があろうがなんだろうが
そんなのアンタがこのスレを仕切ろうとする理由にはならんよ。

答えたい人は答えるし答えたくないヤツはスルーする
それでいいじゃん。
0427デフォルトの名無しさん2015/04/20(月) 12:02:25.38ID:pQJlMMJK
>>425
なら黙ってろよ。回答能力もない馬鹿なら尚更だ

ここはお前が管理している板でもスレでもないんだよ。いちいち横から口挟まずに
その臭い口を閉じて、ROMってろ。誰もお前のようなマヌケの回答は期待していない。
0428デフォルトの名無しさん2015/04/20(月) 12:12:02.85ID:jcO4RoYw
俺は回答能力は十分にあるよ。悪意ある質問が許せないだけ。仕切ろうという意思なんかない。
0429デフォルトの名無しさん2015/04/20(月) 12:17:04.46ID:pQJlMMJK
>>428
黙って消えろ。
悪意があるなし お前の判断などいちいち書くな。目障りだ。
0430デフォルトの名無しさん2015/04/20(月) 12:23:04.11ID:0I5iuM9W
質問に悪意があるように見えるのは、自分の能力が足りてないから。
0431デフォルトの名無しさん2015/04/20(月) 18:07:20.08ID:9TP/HHYl
>>429
お前のレスの方が目障り
0432デフォルトの名無しさん2015/04/20(月) 19:10:17.90ID:WrAJ0lVp
争いは同じレベルのうんたらかんたら
0433デフォルトの名無しさん2015/04/20(月) 21:01:30.56ID:l89ptU69
確かに凄まじい程の誤字だし、読み解くのに凄く苦労はするけど、
内容的にふざけているようにも見えないし、読み解けない範疇ではないな。

何をもって「悪意あるネタ」と判断したのかちょっと興味ある。
0434デフォルトの名無しさん2015/04/20(月) 21:10:58.56ID:fQFSMn1D
答えられない質問は全て悪意ある質問に認定します。
0435デフォルトの名無しさん2015/04/20(月) 21:32:28.53ID:gjl75LOs
いろんなひとがよむんだから質問者が第三者視点で質問文を考えて投稿するのは最低限のマナーでしょ。
それができていないのは悪意とはいわないが、人に読んでもらうような丁寧な文章だとは思えない。
0436デフォルトの名無しさん2015/04/20(月) 21:39:23.56ID:9avAm14N
>>409-410 を冷静にもう一度読んで叩きだしたくなるかどうか
0437デフォルトの名無しさん2015/04/20(月) 21:44:57.00ID:rutaMFFZ
>>435
回答者のほうも必ずしも丁寧ではないから
質問者だけにそれを要求は出来ないなぁ……
答える側が偉いってわけでも上位者ってわけでもないんだし。
0438デフォルトの名無しさん2015/04/21(火) 07:23:59.33ID:0HUTVP1u
>>431
消えろ
0439デフォルトの名無しさん2015/04/21(火) 07:46:29.42ID:Pd3/VmLq
こういう無償の場で回答を書いてるのはそれだけで善意だろ 質問側に求めるていねいさを回答側にも求めるのは無理
0440デフォルトの名無しさん2015/04/21(火) 08:28:15.68ID:u891fA0I
>この中間処理のパターンが膨大ににある場合は無駄な処理時間を要することになりますが
>これはしょうがないのでしょうか?

これはひとまず置いておいて

エラーの部分を直そうよw
エラー名を確認しておいで。
04414372015/04/21(火) 09:39:17.18ID:oL1dFXB7
>>439
そんなの善意の押し付けにすぎないよ
少なくとも俺は質問者にそんなものを求めていない
自分が答えられる範囲で答えたい内容なら答えるだけ

質問内容が嫌なら答えない自由は誰にでもある
答えたい人が答えれば良い

みんなが不快なら誰も答えないでしょ
でも実際に回答している人は居るんだから
感じ方は人それぞれなんだよ

その意味において
個々の回答者に許されるのは自分が回答しないという事だけであって
質問者を攻撃し排斥する事で他人が答える機会を奪う権利はないよ

もちろん、OSやExcelのバージョンが書いてなかったり、状況説明が曖昧だったりしたときに
質問内容や文章そのものの不備を指摘することは構わないと思う
それは質問者にとっても、他の回答者にとっても益するものだからね

直近では>>440がそうだよね?
(個人的にはこの質問は>>417で既に解決しただろうと思ってるけど)
0442デフォルトの名無しさん2015/04/21(火) 11:37:22.81ID:pUka2TzQ
自演のネタ振りと釣り師しか居ないだろ?
0443デフォルトの名無しさん2015/04/21(火) 13:51:51.98ID:/3GwGdzT
VBA自慢スレってないの?
0444デフォルトの名無しさん2015/04/21(火) 13:54:24.63ID:o3q83Z/W
>>443
作ってみたら?
まぁVBAマスター様たちにダメ出しくらいまくって荒れるだけだと思うがw
0445デフォルトの名無しさん2015/04/21(火) 14:10:30.61ID:Ys0gBcPs
書き込むだけ書き込んで読まなければいいんじゃないかな?(´・ω・`)
0446デフォルトの名無しさん2015/04/21(火) 14:38:28.14ID:/3GwGdzT
>>444
「横から失礼します。このライブラリがすごいです。」
って書き逃げでもいいんじゃね?
0447デフォルトの名無しさん2015/04/21(火) 17:28:36.26ID:xB0DS6q9
>>437
> 答える側が偉いってわけでも上位者ってわけでもないんだし。
偉いし上位でしょ。
0448デフォルトの名無しさん2015/04/21(火) 20:30:53.89ID:JOwb9Jco
>>447
その辺はスタンスによるんじゃないか?
まぁでもマナーとしてお互いを尊重するのはいいことだと思う。
0449デフォルトの名無しさん2015/04/21(火) 20:55:03.23ID:h247aERS
>>447
少なくともお前は偉くもなんともないよ
0450デフォルトの名無しさん2015/04/21(火) 20:58:28.36ID:XS2xEzbR
>>449
怖いガチ勢だったらどうするんだよ
0451デフォルトの名無しさん2015/04/21(火) 21:03:38.87ID:hVAOVrVr
>>447
質問と回答と言う意味だと上位だと思うけど、人間としてどうかは別だからねぇ
0452デフォルトの名無しさん2015/04/21(火) 21:13:40.75ID:JPiu54zH
https://pbs.twimg.com/media/CDHT4-BUsAAUVc9.jpg
0453デフォルトの名無しさん2015/04/21(火) 21:16:11.21ID:16ISYAs+
一応、プログラミングって特殊技能の一つだから、専門的な会社とかじゃないと少し出来るだけで周りから凄い凄いと褒められて勘違いしがち。
特にVBAはGUIがあるからイメージしやすく、Variant型のせいで何となくでも動くので出来る様になった気になってしまう。

つまり何が言いたいかというと「仕事でVBAやってました」ってヤツの信用ならなさは異常。
0454デフォルトの名無しさん2015/04/21(火) 21:24:08.00ID:hVAOVrVr
>>453
コード見てオブジェクト変数使ってるかどうかで大体わかる
0455デフォルトの名無しさん2015/04/21(火) 21:25:00.68ID:XS2xEzbR
オブジェクト変数ってなんですか?
0456デフォルトの名無しさん2015/04/21(火) 21:30:04.04ID:XS2xEzbR
ぐぐったらわかった。

ひねくれているかもしれないが、俺はマイクロソフト・テクノロジーに極力触れないようにVBAを書いてきた。
関わる気がないからだ。
だからCreateObjectとかそのへんはなるべく使わないようにしている。
0457デフォルトの名無しさん2015/04/21(火) 21:50:14.65ID:aHaNlkZP
>>453
「○○の□□は異常。」
このボキャブラリーのなさ、語彙の貧弱さはどうにかならんか?
知り合いでキモい人を3人知っているが、3人そろってインターネットで口癖のように「○○の□□は異常。」と書き込んでいた。
あなたもきっとキモい人なのであろう。

>>456
Excel自体がマイクロソフト・テクノロジーですよ。
0458デフォルトの名無しさん2015/04/21(火) 21:59:03.16ID:XS2xEzbR
>>457
>Excel自体がマイクロソフト・テクノロジーですよ。

そうなんだけどね。
VARIANTとSafeArrayだけで構成されてると安心できるんだ。
"Scripting.FileSystemObject"とかであれば使う気するけど、それ以外のものは自分でdll作った方が気が楽。
0459デフォルトの名無しさん2015/04/21(火) 22:06:00.62ID:16ISYAs+
という事はループ変数もVariantか。
かなり遅かった印象があるんだが、そんな環境で気が楽ってのは分からないな。
0460デフォルトの名無しさん2015/04/21(火) 22:08:57.37ID:XS2xEzbR
>>459
ごめん__int32とかの基本形は別
0461デフォルトの名無しさん2015/04/21(火) 22:40:59.87ID:ffKJD6wV
ウチの管理職でいます。
このフォーマットはプログラム組んであるから明日からコレ使ってねと言った上司。
コレってマクロの記録じゃないですか!!

誰もが知っている一部上場企業の現場です。

スレ違いの愚痴スンマセン。
0462デフォルトの名無しさん2015/04/22(水) 00:22:17.45ID:HqgslBZQ
>>460
いやいや、VBAの基本型に__int32とかないから。強いて言えばLongがそれに該当するか。
0463デフォルトの名無しさん2015/04/22(水) 05:46:07.78ID:DqDjP5Qa
DLLだってマイクロソフトテクノロジーじゃん
意味不明なポリシーをネットで披露して恥ずかしくないんだろうか
0464デフォルトの名無しさん2015/04/22(水) 08:21:48.67ID:iwbaaLY9
>>456
では、VBAを辞めて、この板からも去って、そして、人生の幕も卸せばいい
と思いますよ。君のような馬鹿はね。
0465デフォルトの名無しさん2015/04/22(水) 08:23:14.36ID:iwbaaLY9
>>463
アンチマイクロソフト崩れ気取りのアホなんでしょ。中二病の末期に
よくある。
なのに、使ってるのがVBAだのWindowsだのww 

しかも型付けひとつまともにできないような5流プログラマ。
こういうマヌケはJavaScriptでもやっていればいいと思いますよ。
0466デフォルトの名無しさん2015/04/22(水) 08:39:12.69ID:mQeLnHao
VBAそのものがMS-BASICというMS独自仕様のBASIC言語の流れを受け継いでる
N-BASICとHu-BASICの違いに戸惑ったやつは少なくない
0467デフォルトの名無しさん2015/04/22(水) 08:44:53.09ID:+vHWvwHP
なんでこっちのVBA質問スレはこんなに非生産的なレスしかないの?
0468デフォルトの名無しさん2015/04/22(水) 09:09:31.52ID:UT+wGgAk
1回マクロを実行させてその処理が終了したあと
標準モジュールの上部に書いたPublicの変数は
次回にもその値は記憶されたパパですか?
0469デフォルトの名無しさん2015/04/22(水) 09:10:07.55ID:UT+wGgAk
x パパ
o まま
0470デフォルトの名無しさん2015/04/22(水) 09:14:12.21ID:WdF90UyG
不本意にVBAに取り組んでいる層がいるということでは?
VBAに別方向の味付けをしようとしている有名ライブラリがあるじゃん。
0471デフォルトの名無しさん2015/04/22(水) 09:16:22.24ID:UT+wGgAk
例えば↓のコードを書いて、フォームには2個ボタン作って、それぞれを押したときそれぞれfx, mxの値を+1させるようにしたとき
イミディエイトwindowで値を調べるとmxは表示されるけどfxは保存されてないみたいなんです。

[標準モジュール]
Public mx As Integer
Sub test()
UserForm1.Show vbModeless
End Sub

[フォームモジュール]
Public fx As Integer
Private Sub CommandButton1_Click()
fx = fx + 1
End Sub
Private Sub CommandButton2_Click()
mx = mx + 1
End Sub
0472デフォルトの名無しさん2015/04/22(水) 09:19:33.00ID:UT+wGgAk
また不思議なことを発見したよ。

イミディエイトwindowで
? a
と、aの値を調べようとすると空白がかえってくる。

でも標準モジュールの上部にPublic a as Integerと書いた瞬間に
? a
とすると 0 がかえってきた。
0473デフォルトの名無しさん2015/04/22(水) 10:27:30.91ID:UT+wGgAk
性器の大発見!

UserForm1.fx
で、値が表示されるようになったよ
0474デフォルトの名無しさん2015/04/22(水) 10:29:23.05ID:iwbaaLY9
>>473
性器ってなんだよ。プログラム板で卑猥な言葉つかうなって。
0475デフォルトの名無しさん2015/04/22(水) 10:39:09.99ID:UT+wGgAk
>>474
ちんこorまんこのことです。
0476デフォルトの名無しさん2015/04/22(水) 10:49:58.10ID:WdF90UyG
>>473
ふざけてるんなら出て行きな。
それを使って面白いことが出来るというなら示せ。
0477デフォルトの名無しさん2015/04/22(水) 11:34:01.34ID:oUgI0BBb
知らんがな。
0478デフォルトの名無しさん2015/04/22(水) 11:53:40.29ID:WdF90UyG
プログラミングポエムというやつか
0479デフォルトの名無しさん2015/04/22(水) 11:55:44.99ID:BrMnuWaj
>>458
> "Scripting.FileSystemObject"とかであれば使う気するけど、それ以外のものは自分でdll作った方が気が楽。
一人で完結することしかやらないんであれば、それでもいいけどね。
0480デフォルトの名無しさん2015/04/22(水) 12:12:04.46ID:WdF90UyG
>>458には自分も聞きたい。
気が楽ってどういう意味?
実は自分も同じようなことをやっているかもしれない。
Mac版Excelでもほぼ同じコードを動かすためだけど。
0481デフォルトの名無しさん2015/04/22(水) 12:38:52.27ID:ObY6rSG7
下ネタ嫌いなやつはいまいち信用出来んな
0482デフォルトの名無しさん2015/04/22(水) 17:05:26.08ID:Gr0aLB03
信用できる・出来ない…

お前の基準なんぞ知ったことか
0483デフォルトの名無しさん2015/04/22(水) 19:39:15.62ID:WdF90UyG
酷いVBAポエマーを他所で見た
0484デフォルトの名無しさん2015/04/22(水) 19:42:53.14ID:PK68vyTH
vbaの勉強を始めるのですが、参考書は逆引きタイプのものがいいですか?
初めてプログラムの勉強をするのでおすすめの方法を教えていただきたいと思います。
0485デフォルトの名無しさん2015/04/22(水) 19:47:38.38ID:Gr0aLB03
Excel VBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに!

のシリーズなんかよろしいんじゃ
0486デフォルトの名無しさん2015/04/22(水) 21:03:53.16ID:jkp6++rG
逆引きって語学で言えば辞書みたいなもんだろ
英和辞典だけで英会話ができるようになる人なら良いんだろうけど
初心者が始めて勉強するためのもんじゃないと思うが
0487デフォルトの名無しさん2015/04/23(木) 00:15:02.70ID:2CYs0DSE
最良の参考書は実務で使われているエレガントなコードなのだが、vbaの世界では特にそういう物は少ない。
次善の策として、エレガントなコーマンはモチベーションを高める材料にはなる。
0488デフォルトの名無しさん2015/04/23(木) 00:55:29.01ID:P9hfxpsG
エレガントなコード、まれによく見るね
0489デフォルトの名無しさん2015/04/23(木) 05:36:46.65ID:VM6FE8p1
Worksheets("Sheet1").Range("A1").value=1

Worksheets("Sheet1") がオブジェクト
.Range("A1") もオブジェクト
.value がプロパティ
1 が値

でいいの?
0490デフォルトの名無しさん2015/04/23(木) 06:28:22.42ID:av3o5i/d
>>489
厳密に言うともうちょい長くなるけど
間違ってはいない
0491デフォルトの名無しさん2015/04/23(木) 08:02:05.09ID:MOJZs/rD
>>481
専門板で余計な会話は慎め。
0492デフォルトの名無しさん2015/04/23(木) 08:03:31.76ID:MOJZs/rD
>>489
クラス、メソッド、値

それぞれを変数に格納した時は、その通りといえるけれどな。
0493デフォルトの名無しさん2015/04/23(木) 08:29:21.32ID:J7PhUCRs
>.Range("A1") もオブジェクト
ドット付けて書くと、普通はそのドットの前にあるオブジェクトのメンバだと取るんじゃね
この場合はWorksheetオブジェクトのRangeプロパティと取る方が正しいだろ
0494デフォルトの名無しさん2015/04/23(木) 08:30:53.53ID:29z1l0hy
>>492
Worksheet、Range、Value、1、と4つ列挙されてて3つしか答えが無いってどーゆーこと?
0495デフォルトの名無しさん2015/04/23(木) 12:41:17.89ID:RD6nQcL7
>>491
少し肩の力抜けよw
そんな事じゃ良いアプリ作れんよw
0496デフォルトの名無しさん2015/04/23(木) 17:14:29.80ID:lY4YzXQr
>>493
> この場合はWorksheetオブジェクトのRangeプロパティと取る方が正しいだろ
Rangeプロパティで取得したものは、Rangeオブジェクト
0497デフォルトの名無しさん2015/04/23(木) 21:10:25.76ID:+O6VWDUu
>>494
クラスとか言ってる奴は、いまいち理解してない人だからスルーでいい
0498デフォルトの名無しさん2015/04/23(木) 22:18:18.06ID:MCctmnNE
片手で ControlとBreakキーに指が届かないのですが一体どうすれば良いのでしょうか?
0499デフォルトの名無しさん2015/04/23(木) 22:21:16.42ID:zOzRaArG
>>498
両手使うと良いと思いますよ
0500デフォルトの名無しさん2015/04/23(木) 22:27:20.52ID:MCctmnNE
>>499
今食事中で手が離せません!!
0501デフォルトの名無しさん2015/04/23(木) 22:29:35.11ID:zOzRaArG
>>500
では真ん中の棒を使えば良い。
距離が足りないときは揉んだり、xvideosを閲覧すると伸びる伸縮性があるので届くようになります。
0502デフォルトの名無しさん2015/04/24(金) 12:49:53.51ID:fn1zmNrt
机の裏にちんこ様のcontrolキーをつければ、手が空いて勃起力まで鍛えられるな。
0503デフォルトの名無しさん2015/04/24(金) 19:27:52.53ID:cgmvlwhf
↑下ネタを絡ませないと書き込みが出来ないヴァカ
0504デフォルトの名無しさん2015/04/24(金) 21:44:19.40ID:vlOeNW1P
VBAの勉強始めました
質問ですがセルにアクセスするときRangeとCellsの2種類あるんですが
なんで2種類もあるんですか。使いやすいさを考えると断然Rangeのが上なのに
Cellsは数値を2か所埋め込んでいかないといけないので、しかもそれがどのセルを参照しているのか
意識しておかないとバグの元になると思うんです。
はっきりCellsいらないんじゃないですか。Cellsが必要なケースってなんです?
0505デフォルトの名無しさん2015/04/24(金) 22:22:20.10ID:VUm4Qq0l
むしろセル操作にRangeを使った記憶がないw
ForNextとかではもっぱらCellsが便利だからな。
そのうち分かる。
0506デフォルトの名無しさん2015/04/24(金) 22:27:57.36ID:cgmvlwhf
>>504
For 〜 Next や Do Loop でどんどんセル位置を変化させていく時のことを考えろよ
それも1行とか1列とかでなしに。

Cells(i,j)でiやjを変化させた方が楽だろ
0507デフォルトの名無しさん2015/04/24(金) 22:30:14.98ID:EgwUeymW
>>504
Rangeの処理はCellsよりも重いので、セルを一つずつ処理する場合はCellsを使う方が好ましい。
表記の仕方がRangeとCellsで逆なので最初は混乱するかもしれないが、慣れればRangeよりもCellsを使うと思う。

というか「数値を2カ所に〜〜」って事は、たぶんRange("A"& i)みたいな使い方してるんだろうけど、列が可変の場合はどうするつもりなんだ。
0508デフォルトの名無しさん2015/04/24(金) 22:31:22.01ID:BfsRfAtY
Cellsいらねーよ
0509デフォルトの名無しさん2015/04/24(金) 22:50:01.02ID:vlOeNW1P
>>507
>列が可変の場合はどうするつもりなんだ。
Range("A1").offset(0,j)
列が可変のときはoffset使ってアクセスしながらマクロ組んでたけど
>Rangeの処理はCellsよりも重い
でいわれてるようにcellsつかったほうがいいのか
0510デフォルトの名無しさん2015/04/24(金) 23:07:00.69ID:BfsRfAtY
Rangeの遅さを気にしてCellsを使う馬鹿は、大体汚ない上にくそ遅いプログラムを書いてる。
RangeとOffsetを使いこなして、読みやすいプログラムを書く>>509の方が断然スマートですね。
0511デフォルトの名無しさん2015/04/24(金) 23:21:04.51ID:godUEfQO
RangeでVariantでSetなんかイラネーヨ!ってヤツのほうが読みやすい。
0512デフォルトの名無しさん2015/04/25(土) 00:27:51.51ID:7Ju+0bPx
>>504
Rangeの範囲は二つのCellsで指定出来るからRangeを制御するクラスを作るとき、
その中で二つのセルをコントロールするクラスのインスタンスを生成して使うと結構使いやすいんだよ。
もちろん範囲を直接設定したりするのとコンバート機能は持たせるけどね。
どちらからでも設定できてすぐ変換する機能を持たせるように作って使ってみると、
ああ、なるほどねって思うことが出てくるよ。
0513デフォルトの名無しさん2015/04/25(土) 05:40:49.61ID:U/6kymEa
>>507
>Rangeの処理はCellsよりも重いので
初耳だけど、ソースは?
0514デフォルトの名無しさん2015/04/25(土) 06:01:14.12ID:8ddnTGgp
For文でoffsetねぇ。やったことないけど便利なんだろうか。試してみるかな。
Cellsだと二次元で番地がすぐに分かるから
offsetよりは見やすいと思ったが。
0515デフォルトの名無しさん2015/04/25(土) 06:25:11.13ID:IoK0sU8l
Dim c As Range, i As Range
Set c = Cells.Find("HOGE")

For i = 0 To 100
   c.Offset(0,i) = "HOGE"
Next

という様にFindと合わせてOffsetを使うことはあるかな。
0516デフォルトの名無しさん2015/04/25(土) 06:45:04.80ID:U10MupQm
>>515
なんで i もRange型で宣言してるんだ?
0517デフォルトの名無しさん2015/04/25(土) 06:46:02.11ID:IoK0sU8l
>>516
普通に書き間違えた。
0518デフォルトの名無しさん2015/04/25(土) 07:56:40.33ID:U10MupQm
RangeもCellsもどっちもRangeオブジェクトなんだからどっちでもいいんじゃねーの?
言うなればカーナビで地図表示をノースアップにするかヘッドアップにするかの違いのようなもの

ただ、Cellsは起点を常に(0,0)に取ったそこからのOffsetだといえるので
Range("A1").Offset(i,j) は Cells(i-1,j-1) と等価になる
流石にここでRange & Offset を使う意味はあんまり無いと思う
起点がA1以外ならまぁ分らんでもない

ちなみに俺はノースアップでCells派です
0519デフォルトの名無しさん2015/04/25(土) 08:23:09.42ID:Z59tocYG
ちなみに
Range(Cells(leftPos,topPos),Cells(bottomPos,rightPos))
みたいな記述で変数をこねくりまわして範囲を変えるような場合は
Offsetではどうやって始末を付けるの?
0520デフォルトの名無しさん2015/04/25(土) 08:45:38.17ID:IoK0sU8l
>>518
Cellsは指定された範囲をRangeオブジェクトとして返す。
Rangeは指定された範囲のCellsを取得してRangeオブジェクトとして返す。

Range("A1")は毎度新しく範囲を取得しているからCells(1,1)の方が若干速い。という仕組みだったはず。
0521デフォルトの名無しさん2015/04/25(土) 08:54:25.28ID:U10MupQm
>>519
OffsetとResize併用じゃないの?(ところで、topPos と leftPos 逆だよね?)

Range("A1").Offset(topPos - 1,leftPos - 1).Resize(bottomPos - topPos +1,rightPos - leftPos +1)

このケースでもCellsのほうが書きやすい

Cells(topPos,leftPos).Resize(bottomPos - topPos +1,rightPos - leftPos +1)
0522デフォルトの名無しさん2015/04/25(土) 09:03:41.32ID:Z59tocYG
>>521
あ、本当だ。すまん間違ってた。

なるほど、それだけでもCellsは存在価値があるな。
0523デフォルトの名無しさん2015/04/25(土) 11:12:23.73ID:KJ1nzu+7
>>521
> このケースでもCellsのほうが書きやすい

top, left, height, width みたいな持ち方してたら Resize の方が書きやすいでしょ
ケースバイケースだよ
0524デフォルトの名無しさん2015/04/25(土) 12:53:11.81ID:tOvy7QkU
なんか論点がずれてるな、基準位置に対してのオフセット座標を使うか、常に絶対座標を使うかの違いだぞ。
オフセット座標を使う場合は、基準位置は表記のわかりやすいRangeがいい。
0525デフォルトの名無しさん2015/04/25(土) 14:45:09.39ID:U10MupQm
>>523
何を言ってるのか良く分らない
Range(に加えて Offset)とCellsの話をしてるのであって
Resizeはどっちでも使うよ
そしてケースバイケースである事も>>518にて言及済み
0526デフォルトの名無しさん2015/04/25(土) 18:17:06.08ID:x5qj/yI2
Excel2003で書いて動作確認したVBAをExcel2010で動かすと正常に動かなかったのですが
バージョンが違うと挙動が変わる場合もあるのでしょうか?
0527デフォルトの名無しさん2015/04/25(土) 18:28:57.94ID:HPXCVzqJ
>>526
あるよ
0528デフォルトの名無しさん2015/04/25(土) 18:30:40.12ID:2BgGr/Q+
>>526
もちろんある
そういう違いがわかってない人ほど、同じバージョンで作ったり確認する必要がある
内容によっては32bitと64bitの違いにも注意が必要だし、サービスパックの有無が影響することもある
0529デフォルトの名無しさん2015/04/25(土) 18:36:29.51ID:x5qj/yI2
>>527
>>528
ありがとうございます。詳しく調べてみます。
0530デフォルトの名無しさん2015/04/25(土) 23:19:42.77ID:Zwve/QP8
ちょっと色々ソフトを立ち上げていて余計な操作が出来ないのだが
「AV」はセルズ記述で何列目か教えてくれないか? 
〜もしくは簡単に知る方法がありましたら教えて下さい。
0531デフォルトの名無しさん2015/04/26(日) 01:04:45.21ID:diAoS38Z
>>504
range("セルの名前").value
のように使えるのは非常に便利ですよね。
セルがずれない
0532デフォルトの名無しさん2015/04/26(日) 01:36:22.99ID:ZDlO3ZNo
>>530
イミディエイトウィンドウで
?range("AV1").column
0533デフォルトの名無しさん2015/04/26(日) 07:39:02.41ID:f7efuFEj
>>530
?cells(1,"AV").column
0534デフォルトの名無しさん2015/04/26(日) 08:04:19.46ID:qxkuCj4o
>>530
イミディエイトウィンドウで
?columns("AV").column

ってか何この流れ
大喜利コーナー?
0535デフォルトの名無しさん2015/04/26(日) 08:21:04.58ID:P1ipXLUA
行だけ変数にしてCells(i,"AV") でやりゃいい。
もしくは列名を数値に変換する方法も検索すれば出てくる
0536デフォルトの名無しさん2015/04/26(日) 10:40:43.52ID:IMlFMZK9
正規表現と正規表現のように使えるlike演算子つかってどちらが高速化
タイマーを張って測定したらlike演算子のほうが速かった
0537デフォルトの名無しさん2015/04/26(日) 13:04:09.37ID:w3SM0RQc
VBAで変数は最大どのくらいの情報が定義出来るのでしょうか?
たとえば10桁の数字の場合最大で何個ぐらい定義出来るのでしょうか?
0538デフォルトの名無しさん2015/04/26(日) 13:10:40.45ID:iqBA4vQ3
>>536
まあ、一般的な話としては、やれることが少ない方が大抵速い
0539デフォルトの名無しさん2015/04/26(日) 15:48:14.44ID:ZDlO3ZNo
Excel2010/64、物理メモリ10GBのマシンで実験

約4GBなら確保できた
Sub a()
  Dim i(2000000000) As Integer
End Sub

約8GBにしたらExcelが落ちた
Sub a()
  Dim j(2000000000) As Long
End Sub
0540デフォルトの名無しさん2015/04/26(日) 16:20:00.26ID:TSTvOAjs
>>536-537
そもそもVBAに組み込みの正規表現はない
外部モジュールと組み込み演算子なら組み込みの方が速度的に優位だろう
0541デフォルトの名無しさん2015/04/27(月) 01:06:16.10ID:si+kDoKQ
あらかじめ数種類の図形を作っておき、あるセルの値の時にそれに相当する図形を決まった位置に表示させることは可能でしょうか?
具体的に言うと、A1からA5までオートシェイプで5種類の図形を作っておき、B2に数値の1から5までしか入力できないものとしたうえで、2を入力する。
C1にA2の図形が表示される。
よろしくご教示ください。
0542デフォルトの名無しさん2015/04/27(月) 03:39:21.42ID:ebWiZqjs
>>541
ちょっと考えてみたけど
>A1からA5までオートシェイプで5種類の図形を作っておき
シェープはセルに紐づいてるわけじゃない
すべてのシェープの位置をチェックすれば可能かもしれない
>B2に数値の1から5までしか入力できないものとしたうえで
めんどいから考慮しない
>C1にA2の図形が表示される
シェープを移動すると元がなくなる
新規シェープを表示するなら、本来自分でシェープ作って必要な属性セットしてやる必要があるけど
クリップボード経由でコピー&ペーストで行けるかもしれん

と言う感じでやればできるんじゃないだろうか
0543デフォルトの名無しさん2015/04/27(月) 03:42:06.35ID:ebWiZqjs
と言う事でコード書いてみた
シートモジュールで
Function getShape(r As Integer) As Shape
Dim s As Shape
For Each s In Shapes
If s.TopLeftCell.Column = 1 And s.TopLeftCell.Row = r Then
Set getShape = s
Exit Function
End If
Next
End Function
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As Shape
If Target.Address <> "$B$1" Then Exit Sub
Set s = getShape(Target.Value)
If s Is Nothing Then Exit Sub
Application.EnableEvents = False
s.Copy
Paste Range("C1")
Application.EnableEvents = True
End Sub

こんな感じでどうだろう
色々手抜きなので想定外の動作は考慮してない
0544デフォルトの名無しさん2015/04/27(月) 05:07:14.87ID:LZbcGKrc
>>532
>>533
>>534
ありがとうございました。これは便利ですねイミディエイトウィンドウの使い方を初めて知りました。
アルファベット26文字+Vまで 26+(26 - wxyz) とかでてくるかと思いましたが 昨日はとっさに思いついて解決しました。
普段はオートフィルで永遠と引っ張り続けて調べていました。(笑)
0545デフォルトの名無しさん2015/04/27(月) 07:15:31.90ID:Q/A/b/fb
>>544
わりと間違えてる人居るけど

×:永遠
○:延々
0546デフォルトの名無しさん2015/04/27(月) 07:39:48.19ID:gAbBwCE3
>>544
ワークシート使ってピンポイントで調べるならAV1セルに=COLUMN()て入れるだけ
0547デフォルトの名無しさん2015/04/27(月) 12:56:08.77ID:si+kDoKQ
>>543
夜遅くにお答えしていただきありがとうございます。さっそくシートモジュールで試したいと思いますm(_ _)m
0548デフォルトの名無しさん2015/04/28(火) 02:59:32.61ID:3RLwDW+z
プログラム組む間だけR1C1で表示にして
、列を数字表示にしておくこともたまにやる。
0549デフォルトの名無しさん2015/04/29(水) 15:05:28.38ID:XOI0TWkM
なんつー所に、打つんだよ、非常識だな
0550デフォルトの名無しさん2015/04/29(水) 15:20:43.86ID:R/1STMzq
そういう指摘するときは"、"じゃなくて読点と書けよ、非常識だな
0551デフォルトの名無しさん2015/04/29(水) 15:44:24.31ID:XOI0TWkM
すまんな読点読点と言うのかこの読点読点勉強になったわ
0552デフォルトの名無しさん2015/04/30(木) 16:12:06.09ID:4jJoQh7U
香山リカ&須田慎一郎が青山繁晴氏を誹謗中傷→謝罪
http://www.youtube.com/watch?v=CLeDZ-ye6MU


問題発言が↓の動画47分あたり
https://www.youtube.com/watch?v=YTtOs0MB2yc
0553デフォルトの名無しさん2015/04/30(木) 19:58:42.34ID:QaYryZKk
入力とSUM程度しか知らない俺が質問したら怒る?
0554デフォルトの名無しさん2015/04/30(木) 20:08:55.76ID:bOb9LxUO
>>553
まずググれ
検索結果の最初の3ページ内で解決しなければここに書け
0555デフォルトの名無しさん2015/04/30(木) 21:28:48.27ID:ixVNRETP
ググって解決出来ない問題を俺達が解決出来るわけないだろ
よく考えてもの言えよ
0556デフォルトの名無しさん2015/04/30(木) 22:28:44.95ID:QaYryZKk
>>554 >>555
もちろん無知なりに調べては見たんだぜ
マクロボタンを押す→ボックスに日付を入力→別シートの一致する日付のデータを引っ張ってくる
ってのをやりたいんだが、どうしてもうまく出来なくて困ってるのだ
前の会社で上司がエクセルで自作したのが使いやすかったから今の会社で似たようなのを作れないかと思ってるんだが
ヒントだけでも教えてくれないか?
0557デフォルトの名無しさん2015/04/30(木) 22:51:20.15ID:J2OiWj7V
ボックスってのはユーザーフォームのテキストボックスの事か?
で、引っ張ってくるってのは具体的には何処にどう表示するんだ?一致するデータが無かった時は?
0558デフォルトの名無しさん2015/04/30(木) 23:06:15.24ID:QaYryZKk
>>557
今テキストボックスのことを調べてみたんだが、まさにそれでした
日付を一致した場合は別シートに一日の作業ということで何がどれだけ出たのかをまとめたい
一致するデータがなかった場合は空白で大丈夫かな
0559デフォルトの名無しさん2015/04/30(木) 23:07:02.18ID:QaYryZKk
ごめん、途中で書き込んでしまった
テキストボックスのことがわかったからこれを元にググって調べて、また行き詰まった時に質問させてもらいます
0560デフォルトの名無しさん2015/05/02(土) 11:48:52.44ID:wDTkVdlz
ExcelVBAでたとえばRangeオブジェクトの中身を見ることできます?
オブジェクト指向プログラミングのように扱えるのかと思ったら実はそうではなさそう。。
オーバーライドしてRangeというクラスのメソッドに自分なりのアレンジを加えて実装を変更する、といった使い方は可能ですか?
なんでそんなことするのかときかれたら、それができたら便利だと思うからです。
0561デフォルトの名無しさん2015/05/02(土) 12:26:54.49ID:da9gskQ4
>>560
そもそもVBAはvb.netのようなオブジェクト指向言語ではありませんし、
オーバーライドなんて出来ません。

以上。
0562デフォルトの名無しさん2015/05/02(土) 12:52:29.50ID:wDTkVdlz
回答ありがとう
vbaでオブジェクトやらメソッドやらでてくるので、
なんとなくvbaがオブジェクト指向言語であると錯覚したようです
0563デフォルトの名無しさん2015/05/02(土) 14:07:57.38ID:2p5/iRKG
>>562
オブジェクト指向で合ってるよ
公開されてない部分があるってだけ
0564デフォルトの名無しさん2015/05/03(日) 01:15:51.90ID:XPytrHLP
外部ライブラリを用いたある関数があって、その関数を実行して5秒経過しても処理が完了しない場合には再度実行というような
タイムアウト処理を実装したいのですがどう書けばいいか全く思い浮かびません

誰かご教授ください
0565デフォルトの名無しさん2015/05/03(日) 01:23:14.80ID:AaUKIUAA
>>564
ライブラリの仕様によって対処方法が違う
そもそも処理が終わる前に何度も呼んでも大丈夫なライブラリなのか?
0566デフォルトの名無しさん2015/05/03(日) 04:10:09.97ID:+VijmkAc
>>560
VBは継承もオーバーロードもオーバーライドも使えないけど、インターフェースが有るし、委譲を使えば似たようなことは
出来ないでもない。でも本格的にやると面倒くさい。
0567デフォルトの名無しさん2015/05/03(日) 06:05:59.31ID:7AJkLeM5
>>566
> VBは継承もオーバーロードもオーバーライドも使えないけど、インターフェースが有るし、委譲を使えば似たようなことは 出来ないでもない。
Range に新しいメソッド追加してみてくれ
0568デフォルトの名無しさん2015/05/03(日) 06:19:21.00ID:gIBxvmDz
>>564
外部プログラムの実行と処理待ち(APIを利用した同期処理)
http://www.moug.net/tech/exvba/0150034.html
0569デフォルトの名無しさん2015/05/03(日) 06:44:23.46ID:+VijmkAc
>>567
Rangeそのものに新しいメソッドの追加は無理だわな。
それはVBに限らず、VB.Netでも同じことで、継承先と継承元のクラスを同じ名前にすることは出来ない。
むしろ.Netで出来ると言うならやって見てくれ。
0570デフォルトの名無しさん2015/05/03(日) 07:01:39.10ID:7AJkLeM5
>>569
> 継承先と継承元のクラスを同じ名前にすることは出来ない。

そんなことは要求してない
普通に新しいメソッドが追加されたオブジェクトを生成できればいいだけ
似たようなことならできるんでしょ?
0571デフォルトの名無しさん2015/05/03(日) 07:05:54.85ID:6Kt6EVgX
>>569
口でほざいてないでやってみせろよ。
似たようなことなら出来るんだろ?同じ名前がどうだなんて、誰もここで
言ってないwww 
0572デフォルトの名無しさん2015/05/03(日) 07:54:27.76ID:+VijmkAc
>>570
>>571

えー?委譲ってキーワードだけで殆ど答え言っちゃってるみたいなもんなんだけどなぁ。そこまで説明しないとダメか。

一つの例として、myRangeってクラスを作って、そのインストラクタでRangeクラスのインスタンスを生成し、
それをクラスMyRangeの内部変数として抱えておく。
MyRangeクラスにはRangeクラスと同じメソッド、プロパティのシグネチャを用意して、それらが使われた際、
MyRangeの内部変数として抱えられたRangeクラスのインスタンスの同じメソッド、プロパティを呼び出すようにする。
とりあえずこれで継承と似たようなことは出来る。
後はMyRangeクラスに任意のロジックで組んだメソッドやプロパティを追加する。
実際には全てのシグネチャを用意するのは相当面倒くさいので、使う分だけ用意すればいいだろな。

お前ら、その分からなければ人を煽る癖やめれ。
0573デフォルトの名無しさん2015/05/03(日) 08:08:05.03ID:+VijmkAc
インストラクタってなんだよ。コンストラクタの間違いだ。
後、最初に書いたmyRangeもMyRangeの間違いだな。変数かよって話になっちゃうわな。
ダメだ〜休みボケしてるわ〜
0574デフォルトの名無しさん2015/05/03(日) 08:15:14.99ID:SvmZEXBD
なんか気持ち悪い
mylib::my_range
にしてくれ
0575デフォルトの名無しさん2015/05/03(日) 08:17:34.47ID:+VijmkAc
>>574
何の言語でどう言う意味?
0576デフォルトの名無しさん2015/05/03(日) 08:20:54.48ID:SvmZEXBD
クラス名はmy_range、インスタンス名はmyRangeがしっくりくる。
後者は比較的どうでもよいが。
0577デフォルトの名無しさん2015/05/03(日) 08:31:41.47ID:7AJkLeM5
>>572
お前のレベルを見てみただけ
アホすぎて誰も書かないレベルの回答ありがとう w
0578デフォルトの名無しさん2015/05/03(日) 08:32:53.71ID:6Kt6EVgX
>>572
説明はいらねぇ。
コードで出せ

ここはプログラム板だ。御託はいらねぇんだよ。出来もしねぇならデカイ口
叩いてんじゃねぇよ。カスが。
0579デフォルトの名無しさん2015/05/03(日) 08:33:56.68ID:6Kt6EVgX
>>577
全くもって同意。

以前からここに張り付いてる御託だけ並べる馬鹿か、Rubyではなどと
称してる勘違い野郎だろう。コテつけてほしいもんだわ。

邪魔だから
0580デフォルトの名無しさん2015/05/03(日) 08:34:40.71ID:+VijmkAc
正直、命名規則についてはあまりどうこう言うつもりはないなぁ。荒れるし。

ちなみに一応マイクロソフトがこんなこと言ってるんで従うようにはしてるけど、

https://social.msdn.microsoft.com/Search/ja-jp/?Query=名前に関するガイドライン

VBAやVB6はインテリセンスが弱いのでプリフィクス絶対付けちゃいけないかと言われればそれもどうかと思うし、
作るときに決まりだけ作っておけばいいかなぁと思ってる。VBAだし。
0581デフォルトの名無しさん2015/05/03(日) 08:39:25.28ID:6Kt6EVgX
>>580
さっさとコードだせよ三流プログラマ。

消えろって言われて、嫌ですとかほざいたカス野郎www
0582デフォルトの名無しさん2015/05/03(日) 08:42:26.04ID:+VijmkAc
>>577
>>558
想定通りの返事ありがとう。
やっぱり君達には少し早過ぎたみたいだ。
0583デフォルトの名無しさん2015/05/03(日) 08:44:31.43ID:+VijmkAc
>>581
よく分らないけど誰かと勘違いしてるんじゃないかなぁ。


でもイヤですw
0584デフォルトの名無しさん2015/05/03(日) 08:48:15.20ID:SvmZEXBD
>>582
オレはあんたに絡んでる奴等と何の関係もないが、>>572のやり方はちょっとうんざりだね。
0585デフォルトの名無しさん2015/05/03(日) 08:54:47.15ID:7AJkLeM5
>>582
面倒くさい奴だなぁ
そんなご託は仮想関数が実装できるようになってから言えよ
0586デフォルトの名無しさん2015/05/03(日) 08:55:02.59ID:X1aWQUTT
マイクロソフトはVBAをやめて、さっさとRubyにすべき
0587デフォルトの名無しさん2015/05/03(日) 08:57:20.71ID:+VijmkAc
Rubyいいよね。


よく知らないけど。
0588デフォルトの名無しさん2015/05/03(日) 08:57:24.25ID:6Kt6EVgX
そして、コードも一切提示しない

三流馬鹿でした。
0589デフォルトの名無しさん2015/05/03(日) 09:02:25.88ID:+VijmkAc
>>584
だって継承使えないんだもん
0590デフォルトの名無しさん2015/05/03(日) 09:05:58.23ID:X1aWQUTT
そう、Rubyならね。
0591デフォルトの名無しさん2015/05/03(日) 09:30:52.37ID:SvmZEXBD
よかったでちゅね〜
0592デフォルトの名無しさん2015/05/03(日) 10:43:05.42ID:GULU5m5A
>>560-591を読んで分ったのは
ID:7AJkLeM5

ID:6Kt6EVgX
がケチつけるだけで自分ではなにもしてないクズだという事実だけ
他人のコード批判するならまずは自らが実例を示せよ
0593デフォルトの名無しさん2015/05/03(日) 11:28:46.15ID:msdfDtrH
コード作成依頼はオッケーでしょうか
1.基本的にはセルA1(手入力)の14日後をB1に表示する
2.A1+14が祭日(別シートA:Aに手入力で可)に当たる場合,翌平日を返す

・・・祭日が1日のみであれば,ワークシート関数のIF(COUNTIF・・・)で何とかなったのですが,
ゴールデンウィーク等になると無理でした

Excel2007です。もちろんVBAでよいですが,関数だとなおありがたいです
0594デフォルトの名無しさん2015/05/03(日) 11:45:11.16ID:7AJkLeM5
>>592
>>585
0595デフォルトの名無しさん2015/05/03(日) 11:51:57.02ID:wjCUKbZ4
>>593
http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm

の祝日マクロ (ktHolidayName )を使って

Function test(x As Range)
If Not IsDate(x.Value) Then Exit Function

Dim cnt As Long
cnt = 14

Do Until ktHolidayName(DateAdd("d", cnt, x.Value)) = ""
cnt = cnt + 1
Loop

test = DateAdd("d", cnt, x.Value)
End Function
0596デフォルトの名無しさん2015/05/03(日) 11:55:44.29ID:msdfDtrH
>>595
早速ありがとうございます!あとで検討します
0597デフォルトの名無しさん2015/05/03(日) 12:07:45.83ID:eExkaOtq
>>593
別シートのB列に祝日だった場合に返したい値を作っておくのが一番シンプルじゃないかな?
0598デフォルトの名無しさん2015/05/03(日) 12:10:48.03ID:oyhjzf2Y
>>592
まぁこのスレでは口先ばかり煽ってて何も出来ないクズって普通にいるよ。
周りはみんな理解してるのにコードコードと自分1人が理解してないのを空気読まずに連呼したり、
VBAで仮想関数とか口走ってみたり。
0599デフォルトの名無しさん2015/05/03(日) 12:25:58.36ID:msdfDtrH
>>597
たしかに・・・祭日指定は手入力でいいと考えていたので、それで十分ですね・・・
0600デフォルトの名無しさん2015/05/03(日) 14:52:38.22ID:LnEljR08
>>598
そんなに悔しかったのな w
0601デフォルトの名無しさん2015/05/03(日) 15:53:35.15ID:oyhjzf2Y
>>600
はいはいくやちいでちゅね〜
0602デフォルトの名無しさん2015/05/03(日) 15:59:51.88ID:0bQGbDtx
恥ずかしい奴...
0603デフォルトの名無しさん2015/05/03(日) 17:01:45.76ID:+VijmkAc
まあまあ、一々煽るなよ。
本当にここは煽り耐性がない人ばかりだな。
0604デフォルトの名無しさん2015/05/03(日) 18:15:13.84ID:9L5yIilo
>>582 書いた奴が言う台詞じゃないわな w
0605デフォルトの名無しさん2015/05/03(日) 19:23:04.21ID:XURiKB5u
ANDROIDでVBAを動かしたりVBAエディターで記述したりする事は出来ますか?
0606デフォルトの名無しさん2015/05/03(日) 19:32:36.55ID:L+z/3h2/
シート1のセル範囲A1:A2の値をシート2のB1:C1に代入するコードを教えてください。

Windows 8.1 excel 2007
0607デフォルトの名無しさん2015/05/03(日) 19:34:54.06ID:XURiKB5u
>>606
= でおK?
0608デフォルトの名無しさん2015/05/03(日) 19:45:58.44ID:L+z/3h2/
>>607
セル範囲が縦方向と横方向とで違っていても、単純にイコールで
結べばよいのですか。ありがとうございます。
0609デフォルトの名無しさん2015/05/03(日) 19:55:24.25ID:XURiKB5u
>>606
>>608
行列の入れ替えね
ならこの辺か?
http://excel-ubara.com/excelvba2/EXCELVBA014.html

行列入れ替え Transpose:=True
http://www.moug.net/tech/exvba/0050104.html

確かにコピーしてペーストする必要はあるかも 
0610デフォルトの名無しさん2015/05/03(日) 19:57:50.97ID:GULU5m5A
>>606

transpose vbaでググる
https://www.google.co.jp/search?q=transpose+vba&;ie=utf-8&oe=utf-8&hl=ja
0611デフォルトの名無しさん2015/05/03(日) 20:02:49.54ID:oyhjzf2Y
>>605
OSが違うから今は多分無理。
今と言う言い方をしたのは、iOSみたいにそのOS用でExcelが出れば或いはと言うこと。
0612デフォルトの名無しさん2015/05/03(日) 20:06:26.88ID:L+z/3h2/
>>609
Range( "A1:A2").Value = Range("B1:C1").Value.Transpose: = True
としてみます。 ありがとうございました。
0613デフォルトの名無しさん2015/05/03(日) 20:11:47.51ID:L+z/3h2/
>>610

リンク先、勉強になります。ありがとうございます。
0614デフォルトの名無しさん2015/05/03(日) 20:25:05.84ID:PQ+RWjx+
Office Tanakaの文章はちょっと気持ち悪いね。
程度の低い内容を有難がっているところがなんとも。
0615デフォルトの名無しさん2015/05/03(日) 20:30:56.81ID:+VijmkAc
>>614
あれはあれでその程度の低さにかえって価値があることを計算して書いてるのかも知れないよ。
0616デフォルトの名無しさん2015/05/03(日) 20:48:56.60ID:t1aJDpO7
VBAってこれからもずっとこの仕様のままなのだろうか
今時、リストも連想配列も自前で持っていない言語を使うのはつらい
0617デフォルトの名無しさん2015/05/03(日) 20:54:09.07ID:PQ+RWjx+
>>616
想像だがこのままなのではないか。
一般ユーザーの資産が多いから互換性を壊すと暴動が起きる。とはいえ今さら機能追加はかったるい。
自分がMicrosoftだったら他の言語と併用してね、と言う。
0618デフォルトの名無しさん2015/05/03(日) 20:57:30.12ID:YgS8sWbg
もーぐとか言うところの方がきもい
田中さんのは読めばわかるけどもーぐのは最後まで読んでも何の解説かわからない物がある
0619デフォルトの名無しさん2015/05/03(日) 21:11:27.83ID:PQ+RWjx+
それと機能が貧弱だからこそライブラリで工夫して補ってきた面があるので、ちょっとくらいの機能アップと引き換えにそれらを捨てるのは割に合わないかと。
0620デフォルトの名無しさん2015/05/03(日) 21:12:39.51ID:G/VsvCph
よねさん
ここから先は自分で考えましょう・・・ (おまえらちょっとぐらいは自分で考えろ!)実はスパルタ系の要素ありw
0621デフォルトの名無しさん2015/05/03(日) 21:16:57.50ID:G/VsvCph
緑色のページの人
とりあえずコードだけ書いとくが 細かい説明はしらんよ 

excelでお仕事の人
田中さんに続いて親切説明で自分は好き
0622デフォルトの名無しさん2015/05/03(日) 21:29:22.15ID:0ILB3RdV
皆の反対を無視して過去バージョンをばっさり切り捨てる時が来ると思う 
Windowsでやってるからその時が来たら躊躇はしないだろう。
0623デフォルトの名無しさん2015/05/03(日) 21:38:07.06ID:GZ4kM7ll
>>622
時期はビックデータ完全対応が当たり前に必要になる頃かな。
0624デフォルトの名無しさん2015/05/03(日) 21:51:46.30ID:oyhjzf2Y
次辺りじゃね?

VSではもうこんなの用意されて大分こなれて来てるみたいだしな

https://msdn.microsoft.com/ja-jp/library/bb386107.aspx
0625デフォルトの名無しさん2015/05/03(日) 22:18:13.83ID:sahXehPL
>>623
ビックカメラのデータ?
0626デフォルトの名無しさん2015/05/04(月) 01:40:00.72ID:nbXZ9dWZ
人工知能が組み込まれるのは何時頃でしょうか?
0627デフォルトの名無しさん2015/05/04(月) 08:44:47.11ID:cIT0ahnA
>>626
そういうアホな質問をする奴がいなくなる頃だと思う
0628デフォルトの名無しさん2015/05/04(月) 09:12:30.15ID:eB8EANtJ
マイクロソフトがIBMと提携すればExcelにWatson積んでくれるよ
0629デフォルトの名無しさん2015/05/04(月) 12:24:54.60ID:kOBi+ngQ
| 何について調べますか?
| ┌────────────┐
| |                  |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ
0630デフォルトの名無しさん2015/05/04(月) 12:26:39.12ID:P3zvOlQg
vbeバージョンアップして欲しい
つかUI古くさいし、使いにい
0631デフォルトの名無しさん2015/05/04(月) 12:42:31.33ID:4DKzbhug
だったら使うな 以上
0632デフォルトの名無しさん2015/05/04(月) 12:44:58.71ID:Vqi2r60l
>>627
そういうアホな質問をする奴がいなくなるのはいつ頃でしょうか?
0633デフォルトの名無しさん2015/05/04(月) 18:37:34.40ID:eq2s1Han
量子コンピューティングに対応するのは何時ですか?
0634デフォルトの名無しさん2015/05/04(月) 18:58:56.88ID:eq2s1Han
>>628
IBMにはロータス123があるから無理だろう・・・
0635デフォルトの名無しさん2015/05/04(月) 19:22:30.01ID:cIT0ahnA
>>632
お前がいる限り無理だろうな
0636デフォルトの名無しさん2015/05/04(月) 21:05:12.21ID:rQPyUbnW
>>617
暴動なんか起きるだろうか。
開発者からしてみれば移行の仕事が増えるし、
便利な機能は増えるし、
不勉強な輩や、頭の固いじじいは淘汰され、より人員的にも質が向上し、
歳を取って新しい言語について行けない人でも、それまで努力していた人は
PGからSEに移行する良い機会になるし、
願ったりかなったりなんじゃないのか?
0637デフォルトの名無しさん2015/05/04(月) 21:15:50.56ID:1YWdu089
>>636
それはSIer視点なのでは?
PGだのSEだのといった言葉からそれを感じる。
0638デフォルトの名無しさん2015/05/04(月) 21:23:20.07ID:L/qP2+/W
>>635
そういうアホな回答をする奴がいなくなるのはいつ頃でしょうか?
0639デフォルトの名無しさん2015/05/04(月) 22:26:55.87ID:eq2s1Han
セルへの数値の書き換え速度をもっと劇的に速くしてほしいね
バージョンが上がってもPCの性能が上がっても変化がほとんど見られない。
遅すぎる。そこさえなおしてくれればいい
0640デフォルトの名無しさん2015/05/04(月) 22:37:22.75ID:cIT0ahnA
>>638
>>635
0641デフォルトの名無しさん2015/05/04(月) 23:31:49.05ID:kVrs2MFr
continue; ++; --; +=; -=辺りが使えるようになりゃVBAのままでもいいや。

>>639
あれってバックアップとってるみたいだから性能的には外部記憶媒体が関わってくるんじゃないの。
つまりSSDなら速度アップする可能性がある。
0642デフォルトの名無しさん2015/05/05(火) 06:18:26.36ID:Gy6WgfTU
continueは欲しいな
あとはオーバーロードというかパターンマッチがあれは
0643デフォルトの名無しさん2015/05/05(火) 07:34:23.31ID:cVgS2eSX
VBAにAIが組み込まれて人格や自我を持つのはいつ頃ですか?
0644デフォルトの名無しさん2015/05/05(火) 07:53:53.24ID:JjKsPjho
みんな謙虚だな。俺は欲張りだから、まず継承を使えるようにして欲しいし、
ListやDataSet、ハッシュテーブルとかジェネリック型のを使えるようにして欲しい。
後、マルチスレッドが行えるバックワーカー的なものも欲しいし、デリゲートも使えるようにして欲しいし、
もっと欲を言えばLinqやラムダ式も使えるようにして欲しい。

色々夢がひろがりんぐだけど、もっと根本的な所で、あのインテリセンスをどうにかして欲しい。
コード打ってる最中で、あの辺どう作ってたかなーとか思って他の部分見に行ったときカーソル当てると、
ピロンとか言ってエラーメッセージがポップアップされてスクロール戻されて、
都度メッセージ閉じなきゃいけないとか脱力感が半端ない。
0645デフォルトの名無しさん2015/05/05(火) 08:03:11.47ID:Gy6WgfTU
それならエクセルが直接コントロールできるC++14でいいじゃないか
0646デフォルトの名無しさん2015/05/05(火) 08:34:18.28ID:JjKsPjho
C++14てよく知らないけど、Excelに関するObjectの解放って楽なの?
楽なら視野に入れてみる。
0647デフォルトの名無しさん2015/05/05(火) 08:57:26.37ID:UdkO95mG
VBA使わず残業までしてまじめに作業して上司の評価が固いA君と
VBAを使い仕事はあっという間に終わらし定時ですぐ帰るオレ、

どっちが評価されるべきですか?
0648デフォルトの名無しさん2015/05/05(火) 08:58:51.68ID:UdkO95mG
固→高
0649デフォルトの名無しさん2015/05/05(火) 09:30:17.49ID:JjKsPjho
>>647
VBAで簡略化出来ない複雑かつ重要な役割を任されているA君
0650デフォルトの名無しさん2015/05/05(火) 09:34:21.45ID:UdkO95mG
>>649
こら、そこ。仕事内容は同じだ。
0651デフォルトの名無しさん2015/05/05(火) 09:39:00.78ID:Gy6WgfTU
>>646
make_unique(Worksheet("tmp"))->なんちゃら();
とかやってテンポラリシートの生成と利用と破棄が管理できる。
といいな。
0652デフォルトの名無しさん2015/05/05(火) 09:39:43.73ID:Gy6WgfTU
定時にカエル?
0653デフォルトの名無しさん2015/05/05(火) 10:07:05.29ID:/3twg/Gq
>>641
バックアップってなんだよ w
セルにガンガンアクセスしてメモリーが普通にあればストレージにアクセスなんかしないし
大量のセルにアクセスするなら配列にコピーするだろ...
0654デフォルトの名無しさん2015/05/05(火) 10:08:11.19ID:/3twg/Gq
Typo だ
> セルにガンガンアクセスして(も)メモリーが
0655デフォルトの名無しさん2015/05/05(火) 10:10:09.14ID:Gy6WgfTU
なんかで落ちたとき直前の状態にもどしてくれるアレ?
0656デフォルトの名無しさん2015/05/05(火) 12:07:41.71ID:GWkF3sJ3
>>651
シンタックス変だった
make_unique<Worksheet>("tmp", 0)->なんちゃら();
0657デフォルトの名無しさん2015/05/05(火) 19:55:12.44ID:GkORub/f
>>651
それ使い終わったらシートも削除されるの?
0658デフォルトの名無しさん2015/05/05(火) 21:51:49.86ID:1dQ8UigB
>>657
そりゃあRAII目的ですから
0659デフォルトの名無しさん2015/05/05(火) 22:43:30.43ID:wAMsNAOA
うーん。何か俺が言ってた解放の難しさが伝わってない気がする。
ラムダ式による要素の抽出部分はいいから、手数で申し訳ないけども
例えばBook1のSheet1のCelll、A1に"あ"と言う文字を設定するとき、
どんなObjectを生成して使うつもりだったのかだけ教えて欲しい。
別にコードでなくても意味が伝われば構わない。
何が知りたいのかと言うと、>>645で言っていた「Excelが直接コントロールできる」と言うのが、COMなのかどうかの1点だけ。
0660デフォルトの名無しさん2015/05/06(水) 00:57:21.38ID:2v/4EFCA
そんなことより参照を返せるようにしてくれないか?!
Byref引数で受け取ったものに何かした後、それをそのまま返せる機能がないのは困る。
0661デフォルトの名無しさん2015/05/06(水) 00:58:38.44ID:2v/4EFCA
それが無理なら配列の移動(move)でもいいぞ
0662デフォルトの名無しさん2015/05/06(水) 03:22:29.51ID:NryHUEhv
>>660
>Byref引数で受け取ったものに何かした後、それをそのまま返せる機能がないのは困る。

同一アドレスを指しているのだから戻り値でわざわざ返さなくてもそのまま見ればいいと思うのだが、
どんな困った事象が発生するんだ?

後、「そんなことより」とはどう言う了見だ?喧嘩売ってるのか?
0663デフォルトの名無しさん2015/05/06(水) 08:28:12.14ID:2v/4EFCA
>>662
>そのまま見ればいい
それはおっしゃる通り。
しかしそれだと既存のライブラリが使えないのです。

初期値A0 -> A1 ->A2 -> ・・・ ->An
って処理が連なっていて、一つ一つの処理は特定の関数がやるとする。
そのライブラリは、最終的なAnを求めるループ処理を抽象化してくれるんだけど、返り値を使っている。

>喧嘩売ってるのか?
いや別に。すまんかった。
0664デフォルトの名無しさん2015/05/06(水) 08:58:57.10ID:gNaaolis
ここは質問スレ
Excelにああして欲しい、こうなって欲しいってのは別スレでも立ててそこでやれや
0665デフォルトの名無しさん2015/05/06(水) 10:11:25.13ID:NryHUEhv
>>663
それは元々その既存ライブラリとやらが参照で引数から取得したオブジェクトを元に別のオブジェクトに形成したものを
返却しているのであって、その既存ライブラリの仕様じゃないのか?

参照で引数に設定されているものを直接変更しているのであれば、やっぱり見ているアドレスは同一だろうから、
返却値が値渡ししてようがしてまいが、引数に設定したオブジェクトを見れば
変更後の内容が取得出来ると思うんだが。

「ループ処理を抽象化してくれる」とあるが、本当にVBAでそんなライブラリ使えるのか?
0666デフォルトの名無しさん2015/05/06(水) 11:24:15.05ID:2v/4EFCA
>>665
いや、>>663に書いたように「一つ一つの処理は特定の関数がやる」んで、その関数が参照を返すんならライブラリ側はそれに従うだけ。

>引数に設定したオブジェクトを見れば変更後の内容が取得出来る
もちろんそれはそうだ。
でも自分でループを書いて処理のつど元の引数を見るっていう動作を入れることになってしまう。
ループを書くのは避けたい。

それと訂正ですがライブラリが「使えない」というのは言い過ぎで、変数のコピーがオーバーヘッドになってしまう、という意味です。
0667デフォルトの名無しさん2015/05/06(水) 12:13:27.50ID:h7IHpKC6
Option Explicit

Private WithEvents Inet1 As Inet

Private Const AppKey As String = "aqMBM5paukkx5FOVcSfisMTMj8I4Dm"
Private Const HMKey As String = "CPGjWLXxFojVtO7tiu3Lrwm1yLqtk1"

Private Function authenticate() As String
  
  Dim CT As String
  Dim message As String
  Dim HB As String
  Dim url As String
  Dim values As String
  Dim headers As String
  Dim data As String
  
  CT = "1234567890"
  message = AppKey + CT
   
  
  HB = hmac(HMKey, message)
  
  url = "https://api.2ch.net/v1/auth/";
0668デフォルトの名無しさん2015/05/06(水) 12:14:34.73ID:h7IHpKC6
  values = "ID=" & "" & "&" & _
       "PW=" & "" & "&" & _
       "kY=" & AppKey & "&" & _
       "CT=" & CT & "&" & _
       "HB=" & HB
    
  headers = "X-2ch-UA: JaneStyle/3.81" & vbCrLf & _
       "User-Agent: Mozilla/3.0 (compatible; JaneStyle/3.81..)" & vbCrLf & _
       "Content-Type: application/x-www-form-urlencoded" & vbCrLf & _
       vbCrLf
       
  data = values
  
  Set Inet1 = New Inet
  
  With Inet1
    .Execute url, "POST", data, headers
    Do While .StillExecuting
      DoEvents
    Loop
    .Cancel
  End With
  
  Set Inet1 = Nothing
  
End Function
0669デフォルトの名無しさん2015/05/06(水) 12:22:38.72ID:h7IHpKC6
>>667,668

http://pastebin.com/CdSrLEBj
のコードをVBAに移植しようと考えています。

sidを取得する部分でエラーng (appkey incorrect length)”が
返ってきます。どの部分に不具合があるのかご指摘いただけると
幸いです。
0670デフォルトの名無しさん2015/05/06(水) 12:25:28.80ID:rGM+rJxQ
>>666
じゃその糞ライブラリ使わなきゃいいんじゃね
0671デフォルトの名無しさん2015/05/06(水) 12:37:10.08ID:kTRUDxsQ
>>669
エラーメッセージに appkey incorrect length って出てんだからappkey(文字列)の長さがおかしいんだろ?
変数の内容を確認して文字数に間違いが無かったら文字コードの問題じゃね?
0672デフォルトの名無しさん2015/05/06(水) 12:40:13.80ID:2v/4EFCA
>>670
ライブラリ側では直接はどうしようもないかもしれないけど、何か考えてとリクエスト出をしておいた。
0673デフォルトの名無しさん2015/05/06(水) 13:46:22.39ID:h7IHpKC6
>>671
ありがとうございます。無事解決しました。
0674デフォルトの名無しさん2015/05/06(水) 15:34:01.36ID:NryHUEhv
>>666
どうも話が見えないな。
「一つ一つの処理」の部分が抽象化されていると言うならまだ何と無く想像付かなくもないが、実際言ってるのは、
「一つ一つの処理は特定の関数がやる」が、抽象化されているのは「ループ処理」。
ならループ処理は最初からライブラリから外出しされていることになるから、
敢えて新たにループを書くこともないはずなんだが。
0675デフォルトの名無しさん2015/05/06(水) 17:40:54.30ID:2v/4EFCA
>>674
ユーザーが定義した「一つ一つの処理」をする関数 → UFunc
ループを抽象化したライブラリ関数 → LibFunc
処理対象となる配列など → param

LibFunc(UFunc, param)
こうやったとき、LibFuncはUFuncの返り値を使いながらループ処理をする。
UFuncが参照を返せればこのコードは効率がいいけどそれができない。
しょうがないからライブラリ関数を使うのをあきらめてベタなループにするか、って話です。
0676デフォルトの名無しさん2015/05/06(水) 17:58:51.98ID:NryHUEhv
>>675
素朴な疑問なんだが、実際はUFunkは引数として参照渡しの引数を持っているんだよな?
で、同じ型のものを返却していると言うことでいいんだよな?

だったらUFunkの返却値を直接LibFunkに設定するのではなく、
UFunkの中でUFunkの引数に設定しているObjectを弄って、
UFunkの引数に設定したObjectをLibFunkの引数に設定するのでは駄目なのか?

無論そうなるとUFunkの返却値自体が必要なくなる訳だが。
0677デフォルトの名無しさん2015/05/06(水) 18:00:30.82ID:NryHUEhv
LibFunkじゃなくてLibFundか。失礼。
0678デフォルトの名無しさん2015/05/06(水) 18:40:08.98ID:rGM+rJxQ
>>675
よく読んでみたけど、やはりそのライブラリの仕様だな。
ライブラリ作り変えるのが一番早いよ。
0679デフォルトの名無しさん2015/05/06(水) 18:53:40.10ID:2v/4EFCA
>>676
>>678
ユーザー関数はライブラリ関数を意識しないし、ライブラリ関数はいろんなユーザー関数を受け取るわけで。

UFunc1 は数値を受け取ってそれに +1 した値を返すだけ
UFunc2 は大きな配列を受け取って、ランダムな一カ所を書き換える
ライブラリ関数はそれらを繰り返し適用する。

UFunc1かUFunc2かのタイプ別にライブラリ側の関数も分けた方がいいってこと?
今は前者のタイプにしか対応していないので、後者を効率的に扱えるよう提案してみようかな。
0680デフォルトの名無しさん2015/05/06(水) 20:11:34.18ID:jaSoCnGu
なんで最近VBA関連書籍が売れてるの?
0681デフォルトの名無しさん2015/05/06(水) 20:50:02.60ID:EgiInHJn
Excelから複数のウェブデータの取得をして値を更新するプログラムを作ったのですが
更新時に上書きされてしまうためどのデータが更新されたのかわからず、毎回古いファイルと手動で見比べています
本当はデータ更新したシートに更新日や値の変化を記載したいのですがうまいやり方はありませんでしょうか?
0682デフォルトの名無しさん2015/05/06(水) 21:00:53.53ID:kTRUDxsQ
>>681
別のシートに記録するかセルを色分けするか
0683デフォルトの名無しさん2015/05/06(水) 23:01:54.29ID:0awSaezo
後輩の女の子落とせるコード教えて下さい。
0684デフォルトの名無しさん2015/05/06(水) 23:06:06.49ID:28HcwESH
教えてやってもいいけどその後輩って45才とかじゃねーよな?
0685デフォルトの名無しさん2015/05/06(水) 23:30:09.21ID:eWVaawVe
>>681
コメントに変更日時書けば良いじゃん
0686デフォルトの名無しさん2015/05/06(水) 23:54:30.69ID:kTRUDxsQ
>>683
その子の顔写真や詳細な個人情報がないとコードが書けんのだが
0687デフォルトの名無しさん2015/05/07(木) 05:18:28.65ID:zn14xsQg
>>681
Excelのバージョンによっては
更新履歴を別シートに出力する機能があったような。
0688デフォルトの名無しさん2015/05/07(木) 08:42:31.63ID:boZKLFPs
>>680
売れてるかどうかも知らんが、新人とか新入生が買ってんじゃねーの?
0689デフォルトの名無しさん2015/05/07(木) 09:13:24.53ID:vq5P4hYI
「売れてる」のソースは?
俺のバイト先で今月は10冊も売れた、みたいなローカルな話?
0690デフォルトの名無しさん2015/05/07(木) 09:34:21.62ID:GGV5P5UC
>>689
そういう話だろ。ハッキリいいって書籍自体は、もう、奈落の底へ一直線だよ。
0691デフォルトの名無しさん2015/05/07(木) 10:44:13.92ID:7go8IjAb
VBA本はブックオフの100円コーナーで良く見る
殆ど汚れてないキレイなヤツが
0692デフォルトの名無しさん2015/05/07(木) 11:49:12.26ID:GGV5P5UC
>>691
挫折して、本棚で塩漬けされてたんだろうな
0693デフォルトの名無しさん2015/05/07(木) 13:21:14.04ID:mvrNqduB
VBAのハッキングって何だろね?
0694デフォルトの名無しさん2015/05/07(木) 19:38:36.43ID:6IQs9Pra
>>JAVAEEの本が挫折者多そうだが安くならない。母数が少ないのか。
0695デフォルトの名無しさん2015/05/08(金) 19:13:18.50ID:t2ava6jV
>>681は問答無用で上書き処理してるってことですかね
クロールしたときに取得した新しいデータと古いデータの比較をして一致しない場合のみ内容を書き換える処理にして、
その処理のケツにでも現在時刻を隣のセルに入力すればいいんじゃないすか
数値のグラフ化とかしたいなら縦に日付、横に項目の二次元配列的にして、クロールする度入力する行をずらしていけばいんじゃね?
あと前回取得分と比較してセルの色を反転させるとかすれば一目瞭然的な
項目数と頻度によっては結構なデータ量になっちゃうけど・・・
0696デフォルトの名無しさん2015/05/09(土) 00:53:59.54ID:I0gjduBT
質問です

セルに記載されているファイル名の形式チェックをしています
例 [xxxxx] vvvvvvv.zip

で最初の"]"が出たあとには必ず半角のスペースが無いと駄目ということにしたい
最初の"]"がある位置は instr(cells(3,2),"]")で出ますが(cells(3,2)にあるとして)、その文字の
次の位置にあるものが半角スペースかどうかを知るにはどう書けばいいんでしょ

勿論最初の"]"が出現する位置は不定だけど必ずあるという前提なんですが
0697デフォルトの名無しさん2015/05/09(土) 01:05:57.76ID:v2y59Ut7
"]"の位置をfindして+1してmidする
0698デフォルトの名無しさん2015/05/09(土) 02:55:38.38ID:sO+GvBen
最初ならinstrでしょ
0699デフォルトの名無しさん2015/05/09(土) 10:03:35.67ID:I0gjduBT
696です

moji = "]"
pos = InStr(Cells(3, 2), moji)
searchchar = Mid(Cells(3, 2), pos + 1, 1)
If searchchar = " " Then
MsgBox "OK"
Else
MsgBox "NO " & searchchar
End If

ということにしました。Midの存在を忘れてました^^;
0700デフォルトの名無しさん2015/05/09(土) 14:16:39.93ID:WohtoduL
VBAのコードから直接、画像を生成したい場合って、Windows APIかDirectXを使うしか方法ない?
操作に合わせて動的に画面を変化させたいんだけどセルに色付ける方法だと凄く遅いんだよね。
0701デフォルトの名無しさん2015/05/09(土) 16:51:24.45ID:N3erwSaL
すみません
教えて欲しいのですが、

ボタンを押すと、

1とあるwebの検索ページにアクセス(例えば書籍検索とかするページ)
2エクセルのセルにあるデータを入力(作者情報とか)
3検索ボタンを押す
4検索結果表示
5検索結果をエクセルのシートに貼り付けする


1〜4までは自力でできたのですが
5ができません。
検索結果ページではなく、1の検索画面の内容が貼り付けされてしまう

一般的にどういったコードを書けばいいんでしょうか(´;ω;`)??
0702デフォルトの名無しさん2015/05/09(土) 17:22:29.09ID:epMtPBEd
>>700
オートシェイプ
0703デフォルトの名無しさん2015/05/09(土) 17:24:01.94ID:epMtPBEd
>>701
全部説明するのは面倒だし方法も1つじゃないから作成済みの1〜4をどっかに貼って
0704デフォルトの名無しさん2015/05/09(土) 17:42:03.76ID:N3erwSaL
>>703
仕事で使ってるもんなんで晒すと身バレしそうで貼れないんです
ううむどうしたもんか・・(´;ω;`)
0705デフォルトの名無しさん2015/05/09(土) 17:49:48.16ID:N3erwSaL
えーと参考ですけども

この人と基幹部分はだいたい一緒です
そして偶然にも同じ現象でつまづいているという
http://m.chiebukuro.yahoo.co.jp/detail/q14129550669
0706デフォルトの名無しさん2015/05/09(土) 18:34:36.54ID:epMtPBEd
>>705
いちいちフォームに入力してボタンを押すんじゃなくてURLにパラメータを書いたら?
0707デフォルトの名無しさん2015/05/09(土) 19:18:29.50ID:GEEuC9in
>>705
じゃあせめて同じ方法で解決できたのかどうかぐらいまで書けないのかよ
0708デフォルトの名無しさん2015/05/09(土) 19:38:46.03ID:N3erwSaL
>>707
できなかったよ('A`)
IE上で検索結果までは表示されてるから、それを貼り付けるだけなんだけど、
検索画面が貼り付けされてしまうんだよなぁ

ちょっとした何かでできそうなんだが、ううむ。
サイトはjavascriptで制御されてる

サイト晒した方がいいんだろうけど、社内用のサイトだから晒したら一発でバレる・・・
0709デフォルトの名無しさん2015/05/09(土) 21:17:55.83ID:NuoHUnXd
なんか前にもいたなぁ
ソース貼れって言ってるのに頑なに張らない奴
少し濁して分からなくさせたりとかして、なんとか解決しようとか思ったりしないのかね

検索画面が貼られるってことは読み込みが完了してないんじゃないの
エスパーじゃないからわからんけど
0710デフォルトの名無しさん2015/05/09(土) 21:30:48.98ID:GEEuC9in
>>708
特定サイトで動くけど特定サイトではダメとかでもなければ、サイトそのものを晒す必要なんてない
処理内容が解ればよいだけ
最低限、その、貼り付け といってる処理のコードぐらい書け

エスパー上級者がいればそれで何かヒントくれるかもしれん
0711デフォルトの名無しさん2015/05/09(土) 21:35:19.54ID:G2txpaJV
クレクレ回答者ワロタw
0712デフォルトの名無しさん2015/05/09(土) 22:30:12.66ID:epMtPBEd
検索結果をJavaScriptで生成するタイプのページはソースから結果が取り出せない
画面をコピペすれば行けるんじゃないかと思うけど、アクセスできないんじゃ
原因も推測するしかないし、検証もできないなあ
0713デフォルトの名無しさん2015/05/09(土) 23:39:53.51ID:GEEuC9in
>>712
JavaScriptで書き換えてるようなページでも、>>705のリンク先でやってるような
DOMからInnerHTMLとるような形なら更新後の値が取れると思うが
当然タイミング的な問題はクリアされてるとしてだが
0714デフォルトの名無しさん2015/05/10(日) 04:25:48.28ID:jQkATGDu
>>708
そこのURLに載ってるみたいに、取得直前で止めてみて、完全に画面が書き換わった後で再実行するとどうなるの?
0715デフォルトの名無しさん2015/05/10(日) 04:31:53.28ID:jQkATGDu
>>700
どんなことをしたいかで有効な方法が変わるから何とも。
例えばゲームを作りたくてスプライトみたいなことをやりたければシェイプやセル範囲のコピペが有効だったり、
色数そんなに使わないならセルで条件付き書式が有効だったり。
0716デフォルトの名無しさん2015/05/10(日) 14:05:10.69ID:VY6ICWjv
>>714
一行ずつ完全に読み込みを待ってやってみたら貼り付けできました。
どうやらタイミングの問題のようです
本当にありがとうございました。
でもそのページ見たくdocumentcompleteでやってるのにできないのは何故なんだろうか?

もうちょっと検証してみます (。・ω・)ゞ
0717デフォルトの名無しさん2015/05/10(日) 16:03:04.15ID:jQkATGDu
>>716
頑張ってね〜

>>709
理由なくソースを頑なに貼らない人はちょっとアレだけど、
本質が見えてない人がソースソースと騒いで
結局ただの冷やかしだったケースもちょっと前にあったからな。

俺からすれば後者の方がクズにみえる。
0718デフォルトの名無しさん2015/05/10(日) 17:06:03.18ID:ZQGgJB6p
貼ればすむ話をごちゃごちゃ言う奴は 100% 妄想
(俺調べ)
0719デフォルトの名無しさん2015/05/10(日) 17:26:56.38ID:1xvnzJix
妄想膨らむよね

俺の妄想だとコード厨はなぜかC++引き合いに出す奴とペアで現れることが多い

あ、ただの妄想だから気にしないでねw
0720デフォルトの名無しさん2015/05/10(日) 19:49:00.43ID:qlA+/piR
vbaでテトリスつくれます?
趣味で迷路探索、クロスワードパズル自動作成くらいはvbaでつくれたけど。
0721デフォルトの名無しさん2015/05/10(日) 20:00:28.76ID:VmxiSVho
>>720
作れる人いました
http://www.geocities.co.jp/SiliconValley-PaloAlto/1200/html/tetris.htm
0722デフォルトの名無しさん2015/05/10(日) 20:19:41.36ID:qlA+/piR
さんくす
コードつきでテトリスの仕組みみれるとは感動した
0723デフォルトの名無しさん2015/05/11(月) 19:19:37.80ID:AU+j6osa
ExcelでVBAは便利だし本もたくさん出てますが
OutlookでVBAを使う余地はないのですか?
できることはできるみたいなのでなにか便利な使い方がありそうで活用したいのですが。
0724デフォルトの名無しさん2015/05/11(月) 21:00:37.54ID:6nr7Iogf
送信時に件名と文章、宛先が正しく入力されているかどうか確認するの機能と
添付ファイル込みでサイズが3MB超えたらエラーを起こすように設定してる
後は社内のメンバーの連絡先を最新に同期させたりとか
でもwebメールで良くね?と思うこの頃
0725デフォルトの名無しさん2015/05/11(月) 21:08:10.03ID:+qwhrh9C
>>723
ここはExcelVBAのスレだから、スレチとか厳しいこと言わなかったとしても、
こっちの方が色々知ってる人がいるんじゃないかなぁ。過疎ってるけど。

VBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/
0726デフォルトの名無しさん2015/05/12(火) 10:08:53.32ID:v0hswOsZ
オートフィルターを掛けると、想定外の行までフィルタリングされて非表示になってしまう

1行目   タイトル1 タイトル2 タイトル3  ・・・
2行目   データ1  データ2  データ3   ・・・
・・・・
N行目   データ1  データ2  データ3   ・・・
N+1行目  空白
・・・・
M行目   空白
M+1行目  データ1  データ2  データ3   ・・・
M+2行目  データ1  データ2  データ3   ・・・
M+3行目  データ1  データ2  データ3   ・・・

フィルタリングしたいのは、2〜N行目で
M+1行目以降は参考データとして常に表示したいんだけど
オートフィルターを掛けると、M+3まで一緒くたにフィルタリングされて非表示になってしまう

Selection.AutoFilter Field:=3, Criteria1:="=名前*", Operator:=xlAnd

どこをどう直せばいいのでしょう?シートのN+1行目の空白コラムに何か入れる?
0727デフォルトの名無しさん2015/05/12(火) 10:31:24.02ID:eRFd7464
>>726
SelectionのかわりにRange("1:N+1")にしたまえ。N+1は実際の値を。
0728デフォルトの名無しさん2015/05/12(火) 10:32:40.90ID:eRFd7464
Range("2:N")だ。
0729デフォルトの名無しさん2015/05/12(火) 12:40:54.10ID:v0hswOsZ
決め打ちやっても消えちゃうんだよな
0730デフォルトの名無しさん2015/05/12(火) 16:07:12.99ID:O1QCogbs
Excelから自動ログインしたいのですが
Excelからあるwebサイトに自動ログインさせたいです

Htmlソースが↓のようになっていて
input type="password" name="login[password]"


objIE.Document.all.login[password].value = "1234"
と書きたいのですが

objIE.Document.all.login [Password].value = "1234"
と角括弧の前に勝手にスペースが加わったり大文字に書き換わってしまったりで
上手くパスワードを入力させられません

何か対処策はございませぬでしょうか?
0731デフォルトの名無しさん2015/05/12(火) 16:43:10.59ID:/4X+mEl8
>>730
Document.All(n).Value
0732デフォルトの名無しさん2015/05/12(火) 17:07:57.92ID:/4X+mEl8
>>730
ヒントというかサンプル
こうやって入力することができる

Sub test1()
  Set objIE = CreateObject("InternetExplorer.Application")
  objIE.Visible = True
  objIE.Navigate "http://www.yahoo.co.jp/";
  Do
    DoEvents
  Loop Until objIE.busy = False
  Do
    DoEvents
  Loop Until objIE.document.readystate = "complete"
  For i = 0 To objIE.document.all.Length - 1
    If objIE.document.all.Item(i).tagName = "INPUT" Then
      If objIE.document.all.Item(i).ID = "srchtxt" Then
        objIE.document.all.Item(i).Value = "ぱすわーど"
        Exit For
      End If
    End If
  Next
End Sub
0733デフォルトの名無しさん2015/05/12(火) 18:28:43.93ID:O1QCogbs
>>731-732
ありがとうございます、うまくできました
name="login[password]" に囚われていました
0734デフォルトの名無しさん2015/05/13(水) 16:52:04.40ID:Wy6i99cw
キーワードからURLを探したり、
アップ前の特定のURLの存在確認をし、
ページがアップされたら、そのページ中の
ボタンをクリックするような記述方法を
ご存知の方いらっしゃいませんか?
自動化をFireFoxかChromeから行いたいと
思っております。
0735デフォルトの名無しさん2015/05/13(水) 17:13:08.33ID:Pza1t8eb
転売はアカンよ
0736デフォルトの名無しさん2015/05/13(水) 17:45:52.94ID:Wy6i99cw
>>735
いえいえ、完全に自分用です。
0737デフォルトの名無しさん2015/05/14(木) 00:32:37.93ID:cv6v5HT1
ExcelVBA作成依頼です

○sheet1の内容

0001.rpls  番組1
0002.rpls  番組2
0003.rpls  番組3
0004.rpls  番組4

○目的フォルダの内容

0001.m2ts
0002.m2ts
0003.m2ts
0004.m2ts

であるとき、sheet1の”0001.rpls”から"番組名4"を範囲選択してVBAを実行すると、目的フォルダにあるファイルの名前が

番組名1.m2ts
番組名2.m2ts
番組名3.m2ts
番組名4.m2ts

になるようなVBAがほしいです。お願い致します。
0738デフォルトの名無しさん2015/05/14(木) 00:34:27.12ID:cv6v5HT1
番組名1 は 番組1 の誤りです(以下同じ) すみません
0739デフォルトの名無しさん2015/05/14(木) 00:43:47.34ID:zDQ6fGxV
リネームぐらいバッチファイルでできるよ

ren 0001.rpls 番組1.m2ts
ren 0002.rpls 番組2.m2ts
ren 0003.rpls 番組3.m2ts
ren 0004.rpls 番組4.m2ts
0740デフォルトの名無しさん2015/05/14(木) 01:04:50.98ID:cv6v5HT1
バッチファイルでもいいんですが
sheet1のフォーマットで2000行くらいあります 
すでにExcelに入力済なのでVBAのほうがいいかなと
0741デフォルトの名無しさん2015/05/14(木) 01:11:51.34ID:9sPCAAuz
行数は関係無い
セル範囲をメモ帳に貼り付けるとタブ区切りで貼りつく
タブをスペースに置換する
その結果がバッチのコマンドになるようにExcelに入力しておけば良い
0742デフォルトの名無しさん2015/05/14(木) 01:28:38.73ID:zDQ6fGxV
>>740
ちょっと編集すればバッチファイルはすぐにできる
A列を挿入して「ren」をオートフィル
D列に=C1&".m2ts"と入れてオートフィル
D列をC列に値貼り付け
A〜C列をメモ帳にコピペして保存、ダブルクリックで実行

>>741
スペースに置換しなくてもタブのまま実行できる
0743デフォルトの名無しさん2015/05/14(木) 01:35:23.64ID:cv6v5HT1
番組名の途中に空白があるときの処理でまごつきましたがうまくいきました ありがとうございました
0744デフォルトの名無しさん2015/05/14(木) 20:16:43.00ID:F7V5bQJf
WordのVBAのほうに主に関係ありますが該当スレがないのでここで質問させていただきます。

Wordで文書のテンプレートを作っておき
いくつかは穴埋めのように[(1)   ]、[(2)   ]、[(3)   ]、[(4)   ]、[(5)   ]・・・・・と仮入力しておきます。
そしてこの[(n)   ] (*nは自然数) のところはExcelのデータが入ったシートからその文字列を引っ張ってくるようにしたいんです。
そのためにはどういうコードを書けばいいでしょうか?
つまるところ、[(n)   ]の部分を次々に置換していくだけのコードを作りたいのですが。
0745デフォルトの名無しさん2015/05/14(木) 20:18:04.67ID:F7V5bQJf
ついでに引っ張ってくるのは文字列だけでなく画像ファイルもサイズ指定で可能なら最高です。
0746デフォルトの名無しさん2015/05/14(木) 20:22:38.01ID:9qw93D9E
差し込み印刷じゃあかんの?
0747デフォルトの名無しさん2015/05/14(木) 20:24:18.33ID:IIsY3hAO
文章のひな形全体をコードで書くか、一覧として取得出来る様にしといて&で地道に繋いでいくしかないんじゃないのかな。
0748デフォルトの名無しさん2015/05/14(木) 20:29:26.12ID:F7V5bQJf
>>746
いい質問ですね。
でもあかんのです。
0749デフォルトの名無しさん2015/05/14(木) 20:45:37.38ID:9qw93D9E
>>748
なんで上から目線やねんw腹立つわーお前w
0750デフォルトの名無しさん2015/05/14(木) 20:52:55.50ID:acBE6LVC
ワードって碌に使ったことないわ
とりあえず何でもエクセルで済ませるからなぁ。
0751デフォルトの名無しさん2015/05/14(木) 20:54:21.01ID:O7MsFe85
あかん理由を書かないのはネタと判断するしかないからスルーしとくよ
0752デフォルトの名無しさん2015/05/15(金) 08:08:47.46ID:hB02Sd+M
>>744
あのね、そういうのは予め仮入力なんてしておくもんじゃないんですよww
考え方まず変えろ。
0753デフォルトの名無しさん2015/05/15(金) 09:00:12.35ID:fABQpvFq
>>744
Excelで文章作ってしまえ。
0754デフォルトの名無しさん2015/05/15(金) 12:33:33.28ID:OMVhwfYU
>>744
文字に置換するだけなら
Application.ActiveDocunent.Range.Find.Execute FindText:="[(1) ]", ReplaceWith:="xxx", Replace:=wdReplaceOne
でいい
画像を挿入したいなら InlineShapes.AddPicture でやればいい
ただしサイズは指定できないようなので、挿入してから変更する
0755デフォルトの名無しさん2015/05/15(金) 20:58:35.65ID:HJjbweM7
なんでvbの世界っていまだにヘンテコなハンガリアン記法残ってるん?
0756デフォルトの名無しさん2015/05/15(金) 21:35:19.65ID:LwgLu353
ハンガリアン記法ってむしろC言語系列の方が多く見かける気がするんだけど。
0757デフォルトの名無しさん2015/05/15(金) 21:40:30.32ID:KG1O+50c
VBEでendifと打つとEnd Ifとスペースを入れて分割してくれるのに
endwithではしてくれないのが地味にストレス
0758デフォルトの名無しさん2015/05/15(金) 21:59:40.91ID:CjVYKosx
endwith で dとwの間にスペースを入れると
ENd With にしてくれるのにねw
0759デフォルトの名無しさん2015/05/15(金) 22:55:39.57ID:skv10qrJ
質問です。

ちょっと実際のサイトを出してしまってスミマセンが、
以下のサイトのプルダウンをVBAで操作することは可能なんでしょうか?
ttp://e-apply.jp/shiharai/select

一つ目のプルダウンは、こんな感じでいけるんですが、
objIE.Document.getElementById("first_exam_code").SelectedIndex = "1"
objIE.Document.getElementById("first_exam_code").onchange

2個目以降のプルダウンって操作できるもんなんでしょうか?
0760デフォルトの名無しさん2015/05/15(金) 23:15:15.38ID:trr6aaop
どう見ても VBA でなにかすべきサイトに見えない
うっすら犯罪の臭いまでしやがる
0761デフォルトの名無しさん2015/05/15(金) 23:24:18.51ID:7xd2oNko
セッションエラー
0762デフォルトの名無しさん2015/05/15(金) 23:45:12.82ID:HJjbweM7
不正アクセスしちゃったのか、御愁傷様。
07637592015/05/16(土) 14:07:02.70ID:i0GMMExw
>>760-762
あ、別に同様の仕組みを持つなら、このサイトじゃなくてもいいんですが
vbaの勉強してて、最近使ったこのサイトを見たらワケ分からなかったんで
0764デフォルトの名無しさん2015/05/16(土) 14:38:42.05ID:cnOdW2ic
質問です。

VLOOKUP関数を使って別シートから参照したデータをセル(1,2)に入れたいんですが


Worksheets("シート1").Cells(1,2).Value = _
Application.WorksheetFunction.VLookup(Cells(1,1), Sheets("シート2").Range(cells(1,1),cells(8,2)), 2, False)

このようにうちこんだところエラーがでます。
VBA初心者なもので間違いが馬鹿みたいに根本的なところかもしれませんが・・・

VBAを使ってとの指示なので関数をそのままシートに入れ込む方法はNGです
0765デフォルトの名無しさん2015/05/16(土) 15:01:20.00ID:cnOdW2ic
>>764すいません
「Application.WorksheetFunction.Vlookup」と打ち込みましたが
実際は「Application.Vlookup」です
0766デフォルトの名無しさん2015/05/16(土) 15:20:37.05ID:zE8oVtYD
>>764ですがじこかいけつしました
0767デフォルトの名無しさん2015/05/16(土) 15:34:16.08ID:808i7u12
>>764
Cells(1,1),
cells(1,1),
cells(8,2)

こいつらがどのシートのセルであるべきかをよく考えて

あと、エラーになるならそのメッセージを貼ってくれ
それと問題のコードは可能なら手打ちじゃなくてコピペした方がいい
0768デフォルトの名無しさん2015/05/16(土) 15:53:05.26ID:zE8oVtYD
>>767
ありがとうございます
今回は解決したので次回質問の際はそうしようと思います
0769デフォルトの名無しさん2015/05/16(土) 16:07:40.03ID:xLQoB7z8
>>764
Cells はその前にシートを明示的に指定しないと、標準モジュール内では ActiveSheet を指定したとみなされる。
(シートモジュールではそのシートが指定されたとみなされる)
複数のシート間でそういう処理をしたいならきちんとシートから指定しないと駄目。
0770デフォルトの名無しさん2015/05/16(土) 16:14:53.27ID:zE8oVtYD
>>769
はい、ありがとうございます
0771デフォルトの名無しさん2015/05/16(土) 17:02:48.35ID:ND3HyJT5
あるワークシートのshapesオブジェクトで特定のshapeオブジェクトを一意に識別するものはありますか?
shape.nameは重複する可能性があり、
またインデックス番号ではshapeが削除されたときに、変化してしまいます。

何をしたいかというと、
ユーザーが描いた図形に対して、
システム管理者側で、図形とシステム内部のデータをリンク付して処理します。
初期作成時は良いのですが、
ユーザ側で図の変更(増減)があったときに、差分に対してのみ管理者側でリンク付けを見直したいのです。
ユーザ側にはリンク付けに対して可能な限り、意識しないで言いようにしたいと思っています。
図の名前(shape.name)はワークシートで一意だと思っていたら、
図を複製(Duplicate)すると同一名称になってしまい、行き詰まっています。

2007です。
0772デフォルトの名無しさん2015/05/16(土) 17:17:40.54ID:xhmYU3Qu
Shape.IDってあるけどどうだ
0773デフォルトの名無しさん2015/05/17(日) 19:09:40.96ID:n+Xb8uOT
2015/05/15 10:29:02 2015/05/16 0:05:21

↑この表記方法の情報より
マイナスして何時間何分かかったかを計算する
最適なコードを教えて下さい。

簡単そうで何度も挫折。結局暗算の方が速くコード作成に至りません。。
0774デフォルトの名無しさん2015/05/17(日) 19:31:27.16ID:jekqdhQF
>>773
どこまで最適したいのか知らんが、時間を計算するだけなら挫折するほど難しいとも思えんのだが

' 元データ
s = "2015/05/15 10:29:02 2015/05/16 0:05:21"
' 時間計算
a = Split(s, " ")
t = DateValue(a(2)) + TimeValue(a(3)) - DateValue(a(0)) - TimeValue(a(1))
' 結果
MsgBox (t)
0775デフォルトの名無しさん2015/05/17(日) 23:05:20.77ID:Iar2rpm1
グローバル名前空間を汚すことになるからやめた方がいい
0776デフォルトの名無しさん2015/05/17(日) 23:22:09.19ID:cYQeAXyU
グローバル名前空間とはなんですか?
07777752015/05/18(月) 00:02:18.90ID:JByp2bx3
誤爆した。忘れてください。
0778デフォルトの名無しさん2015/05/18(月) 00:09:09.50ID:g1eLp8hQ
俺の名前空間を汚すのは誰だ
0779デフォルトの名無しさん2015/05/18(月) 00:16:06.73ID:8tdUJmku
>>774
ご丁寧にありがとうございます。
この式の仕組みがぱっと見高度すぎて理解が出来ない初心者ですが記述を元に勉強してみます。ありがとうございました!
0780デフォルトの名無しさん2015/05/18(月) 00:43:16.88ID:MUJ+gX8Y
>>778
こんにちは、グローバルさん。
0781デフォルトの名無しさん2015/05/18(月) 22:18:13.26ID:+CxU+mbP
本当はドロドロに汚して欲しいんだろグローバルさん
0782デフォルトの名無しさん2015/05/18(月) 22:35:28.84ID:JByp2bx3
はよう〇〇まみれになろうぜ
0783デフォルトの名無しさん2015/05/19(火) 01:05:07.39ID:6GwM+PLB
何この流れ
0784デフォルトの名無しさん2015/05/19(火) 07:59:26.66ID:Q5dfCaCY
川の流れのように
0785デフォルトの名無しさん2015/05/19(火) 08:00:21.31ID:/N0/LJWo
コードで突っ込めない奴等が嬉々としてレスしているの図
0786デフォルトの名無しさん2015/05/19(火) 20:26:44.79ID:51Kay7LI
上級者になるとコードで突っ込みとか出来るようになるのか
俺も早くそのレベルに到達したいわ
0787デフォルトの名無しさん2015/05/19(火) 21:27:44.20ID:pk00adtK
多分コードを>>785の尻の穴に突っ込むの間違いだとおもう
0788デフォルトの名無しさん2015/05/19(火) 22:49:07.22ID:NTe3EXZz
Excelのx97m_sugar.dの作り方を教えてください。
0789デフォルトの名無しさん2015/05/19(火) 23:04:15.24ID:Y2eIQ7MR
Excelのx97m_sugar.dの作り方は教えてあげないでください。
0790sage2015/05/20(水) 13:30:05.09ID:/G4b9/O8
ブックAのA列に夫々違う番号が何行か記載されております。
ブックBのA列には500行程あり夫々変わった番号が記載されています。
ブックAに記載されている番号一つ一つをBのブックに記載されている番号と照合して一致した場合なにもしない
一致しなければ列の削除を行なう。

結果ブックAにはブックBに記載のある番号だけが残るというマクロを作成したいと考えております。

番号と照合して一致した場合なにもしない 一致しなければ列の削除を行なうマクロは下記のようになるのかなと思いますが
ブックAとブックBを総当りのようにして照合しないといけない点でどのようにしたらいいのか困っております。
アドバイスを宜しくお願い致します。



Dim lRow As Long
Dim i As Long
lRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = lRow To 2 Step -1

If Cells(i, 1).Value Like "*ブックBのA列の数字*" Then

Else

Rows(i).Select
Rows(i).Delete
End If
Next i
0791デフォルトの名無しさん2015/05/20(水) 14:40:36.23ID:+7CH4iLo
>>790
何がどう問題だと思ってるんだ?

Lookup系の関数使うとか何とか色々あるけど
基本的に表計算なんだから
>ブックAとブックBを総当りのようにして照合しないといけない
のはしょうがないぞ

各シートをテーブルとみなしてSQL発行とかでも行けるかもしれんが
だったら素直にDMBS使えよって話だと思うな

それか単に、総当たりで検索する方法がわからんとか言う話か?
0792デフォルトの名無しさん2015/05/20(水) 15:30:49.52ID:toAFo5AQ
>>790
ブックBのA列をコレクションとかディクショナリーに突っ込んで
Existsメソッドで重複を判定する

http://officetanaka.net/excel/vba/tips/tips80.htm
0793デフォルトの名無しさん2015/05/20(水) 19:39:24.59ID:mpg1pqam
>>790
500行ぐらいなら総当たりでも充分
あと、一致を調べながら削除するのは行がずれるので慣れないとバグの元
消すべき行は番号をクリアするとかのマーキングしといて、調べ終わったらマーキングした行を下から消すようにした方が楽
0794デフォルトの名無しさん2015/05/20(水) 19:48:22.09ID:U03hSAHA
>>790
Sub test()
Dim SheetA As Worksheet, SheetB As Worksheet
Dim c As Range, d As Range, DeleteRow As Range

Set SheetA = BookA.Sheets(1)
Set SheetB = BookB.Sheets(1)

For Each c In Range(SheetA.Cells(1, 1), SheetA.Cells(Rows.Count, 1).End(xlUp))
For Each d In Range(SheetB.Cells(1, 1), SheetB.Cells(Rows.Count, 1).End(xlUp))
If c.Value = d.Value Then
If DeleteRow Is Nothing Then
Set DeleteRow = c.EntireRow
Else
Set DeleteRow = Union(DeleteRow, c.EntireRow)
End If
End If
Next
Next

DeleteRow.Delete

End Sub

こういうこったろ。
0795デフォルトの名無しさん2015/05/20(水) 21:32:59.41ID:ViQsHset
>>794
DeleteRow は DeleteRows にして欲しいな
0796デフォルトの名無しさん2015/05/20(水) 21:48:04.22ID:HCLyDu6k
列の削除だぞ
0797デフォルトの名無しさん2015/05/20(水) 22:11:55.19ID:ViQsHset
複数行(になることもある)
07987902015/05/20(水) 22:23:10.85ID:/Q2126ec
皆さんアドバイスありがとうございます。

>>794
なるほどそういうふうにすればいいんですね。
初心者でかんたんな物しか作った事がないので勉強させてもらいました。

ありがとうございました。
0799デフォルトの名無しさん2015/05/22(金) 00:16:22.94ID:7IAbjP3n
質問します
excel2007以上の場合
画像を貼り付けて大きさを縮小して1回目の保存をすると
自動的に圧縮がかかってしまいますが
圧縮をさせないにはどういうコードを書けばいいのでしょうか

手動で設定するとなると
画像の圧縮設定≫オプション≫圧縮オプション≫保存時に基本的な圧縮を自動で行う のチェックを消す
をした後に保存するといいのですがVBAではどのようにすればいいのかわかりません
宜しくお願いします
0800デフォルトの名無しさん2015/05/22(金) 00:45:04.71ID:m+2CPTEZ
>>799
画像の圧縮設定をVBAから変更するにはレジストリ操作が必用
0801デフォルトの名無しさん2015/05/22(金) 00:46:02.47ID:mKEmVuJj
なんか貼り付けのオプションがあったような。
0802デフォルトの名無しさん2015/05/22(金) 00:48:11.98ID:mMDyzvZD
>>790
CSV でも何でもよいが、ファイルに出力して、
Ruby, Python の配列で集合演算してから、Excelに読み込む

A{1,2}, B{2,3}
積: A & B → 2
差: A - B → 1
0803デフォルトの名無しさん2015/05/22(金) 06:54:34.47ID:Pn6Oo0VM
>>802
周回遅れでそのレスって...
0804デフォルトの名無しさん2015/05/22(金) 07:18:28.69ID:lw1n3rmm
>>790
配列操作のライブラリ導入したほうが後々いい
0805デフォルトの名無しさん2015/05/23(土) 04:23:29.08ID:JX2ttYg2
Libre Office Math モジュールで、集合演算できる
0806デフォルトの名無しさん2015/05/23(土) 19:35:45.54ID:S/R6EJL5
コードを書く時にrange("A1")よりもcells(y,x)を使うことのほうが多いと思うのですが
列(x)の値をすぐ調べる方法ってありますか?
いつも左端まで選択して調べてるんですけど面倒で・・・
0807デフォルトの名無しさん2015/05/23(土) 19:44:25.17ID:loW/oZwH
AとかBじゃなくて、列も行と同じように1とか2とかで表示したら?
0808デフォルトの名無しさん2015/05/23(土) 19:44:59.72ID:6uRtySl8
>>806

>>530-534
0809デフォルトの名無しさん2015/05/24(日) 00:07:53.75ID:jU7nwXbg
=COLUMN(INDIRECT(B1))

この場合、B1セルに M1 とか知りたい列と数字を入れれば列の値が出る

自分はデバックしながら作ることが多いから
その列のどこかにに =COLUMN() 入れてるけどね
0810デフォルトの名無しさん2015/05/24(日) 00:15:39.02ID:XnjYG7Rv
>>806
列固定なら数字がわからなくても Cells(y, "AB") みたいに書くこともできる
0811デフォルトの名無しさん2015/05/24(日) 13:07:44.90ID:m+xdfutr
色々やり方あるんですね。ありがとうございました。
0812デフォルトの名無しさん2015/05/24(日) 23:39:39.11ID:mkdpU9/c
ttp://iup.2ch-library.com/i/i1439926-1432478208.jpg

VBAから外部アプリをアクティブにする方法までは分かったのですが、
上記のようにタブが設定されている場合の操作方法、
例えば
 ・タブの名前を取得する方法
 ・任意のタブをアクティブにする方法
が分かりません。

どなたかご教授頂けませんか?
0813デフォルトの名無しさん2015/05/25(月) 00:08:47.08ID:vKvddwmi
そこまでは無理なんじゃね?
0814デフォルトの名無しさん2015/05/25(月) 00:11:07.67ID:qIuI2+n/
>>812
どんなアプリを作っているんですか?
0815デフォルトの名無しさん2015/05/25(月) 00:27:11.12ID:CYyVEuL9
>>812
タブの情報取得は使ってるライブラリによって方法が違うので、汎用で使える物を作ろうとするとかなりめんどくさい
不可能ではないんだけど、コントロールしたいウィンドウが決まってるなら決め打ちで作った方が早い
タブの切り替えはSendkeysでCtrl+Tabを送ればいい
逆送りはCtrl+Shift+Tab
0816デフォルトの名無しさん2015/05/25(月) 01:01:07.39ID:Q8EilB3B
>>813
調べてもなかなか方法が見つからなかったので、無理かなあ・・・とは思ってました。

>>814
社内の内製ツールにexcelのデータを打ち込むアプリですね。
作業が面倒だったので自動化したいなと。

>>815
コントロールしたいウィンドウは決まっているので、
教えて頂いた方法で作りたいと思います。
ご回答ありがとうございます。
0817デフォルトの名無しさん2015/05/25(月) 02:32:42.22ID:d24JU1ne
改行コードをCRLFにしつつcsv出力するマクロを組みたいのですがさっぱりです
ご教示お願いいたします
0818デフォルトの名無しさん2015/05/25(月) 04:08:50.61ID:mfxJeCqJ
>>816
それは内製ツールにエクセルデータ読ませるべきだろ。
外部ツールとの連携って普通は読み込む側が対応するものだし。
0819デフォルトの名無しさん2015/05/25(月) 04:41:58.07ID:CYyVEuL9
>>817
Dim A()

Print #1, Join(A, ",") & vbCrLf;
0820デフォルトの名無しさん2015/05/27(水) 20:56:42.91ID:eIlYoeOr
工場で事務の仕事をしてます。
作業者に一日の作業内容を書いてもらって、人件費のみの製造原価を計算するように言われました。
作業者に書いてもらう内容は、作業時間(○○:○○〜××:××)、製品名、本数、作業工程です。
作業者日報をエクセルで入力すれば、製品に対する作業工程、本数、作業時間を抽出できるようにしたいのですが、
どうすればいいのでしょうか?
もしかしたら、スレ違いかもしれませんがよろしくお願いします。
0821デフォルトの名無しさん2015/05/27(水) 21:36:19.06ID:Pu761imv
>>820
開始、終了、本数は数字を入力、品名、工程はリストから選択するようにして、あとは数式かピボットかマクロで集計
データは正規化しておくこと
日付と作業者名も入力しといた方がいいだろうね
氏名はリスト選択だな
0822デフォルトの名無しさん2015/05/27(水) 21:46:53.91ID:eIlYoeOr
>>821
貴重なアドバイス有難うございます。正規化というのが分かりませんが、調べて進めてみます。
0823デフォルトの名無しさん2015/05/28(木) 18:13:57.66ID:Oyf8GQaQ
Windows10移行からはIEなくなるみたいだし、クリエでクロームとか使えないかな
0824デフォルトの名無しさん2015/05/28(木) 18:14:25.82ID:j1AAH5mx
>>823
いやあるし
0825デフォルトの名無しさん2015/05/28(木) 18:53:13.17ID:FNdyiEN3
Codename Project Spartan は Microsoft Edge と正式名称が付いた
付いただけでタイルタッチしてもなんか動き出さないけど またなんか無駄な機能満載な希ガス
0826デフォルトの名無しさん2015/05/28(木) 19:53:02.31ID:MDCiTYVt
createObject(internetexplorer.application)と
フォームのWebBrowserコントロールを使うのとでは、
互換性とかどのような違いが出てきますでしょうか?
082710人に一人はカルトか外国人2015/05/29(金) 03:47:59.18ID:K07Xnd2y
★マインドコントロールの手法★

・沢山の人が偏った意見を一貫して支持する
 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法

・不利な質問をさせなくしたり、不利な質問には答えない、スルーする
 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法

偏った思想や考え方に染まっていたり、常識が通じない人間は、頭が悪いフリをしているカルト工作員の可能性が高い

靖国参拝、皇族、国旗国歌、神社神道を嫌うカルト

10人に一人はカルトか外国人

「ガスライティング」で検索を!
0828デフォルトの名無しさん2015/05/29(金) 07:14:01.85ID:zB4zEZMz
あれ?
ここってVBAスレじゃなかったのか

すみません。お邪魔しました
0829デフォルトの名無しさん2015/05/30(土) 05:04:12.50ID:r+1vXVeE
自由にデータの格納・削除が可能でFor Eachで順にアクセスできるリスト構造が欲しい
0830デフォルトの名無しさん2015/05/30(土) 07:24:56.67ID:/Jk06/tQ
>>829
少なくともVBAのFor Eachって読み出すだけで書き込みは別の手段使わないといけないからなぁ。
追加と削除が自由に出来て見た目が単純な配列(の様な構造)なら、

Type TestType
Dim i As Long
Dim PreviousType As TestType
Dim NextType As TestType
End Type

みたいな構造体を持つクラスを作って、

Function ToNext() As TestType
  ToNext = NextType
End Function

って形の関数で次を返してやるっていう方法がC++勉強している時にあったなと思ったけど、
前後への参照ってポインタじゃないと成立しないかな、これ。
0831デフォルトの名無しさん2015/05/30(土) 08:53:36.04ID:4IPDAfwH
ワークシートにデータを並べれば、だいたい同じようなことができる
行の削除や挿入も自由だし
問題は重すぎることぐらいかな
0832デフォルトの名無しさん2015/05/30(土) 10:31:01.12ID:ZN/k7wLR
そもそもC++はVB6の時からある
旧態依然とした糞言語と言う話を
聞いたことがある。

昔から存在しているだけあって、
JAVAやVB.net、C#のように
洗練されておらす、
ポインタの間接参照、多重継承など、
下手をしたらアプリだけで無く
マシンごと暴走したり、
勉強しても今の主流のObject指向言語と
形式がかなり違うので
他に潰しが利かないらしい。

そう言ってる奴がいたけど、
俺はよく知らん。
0833デフォルトの名無しさん2015/05/30(土) 12:25:08.80ID:mU8J0Ylc
VBAのスレでいきなりC++って
0834デフォルトの名無しさん2015/05/30(土) 14:54:50.20ID:tOCF6Az4
質問なのですが、数式の結果によってマクロ実行することは可能でしょうか?
例えばA1に数式が入っていて、計算結果が"無し"
の場合にマクロ実行という感じで行いたいです。
可能でしたらすみませんが、教えていただきたいです。
0835デフォルトの名無しさん2015/05/30(土) 14:57:42.72ID:hoDObeoT
>>834
数式そのもので使う関数をVBAで自作すれば良いと思うんだが
0836デフォルトの名無しさん2015/05/30(土) 16:37:54.33ID:zCeNynVh
>>834
不可能
マクロは必ず実行されてしまうので、その中で計算結果がどうなっているか判断するしかない
0837デフォルトの名無しさん2015/05/30(土) 16:53:29.13ID:yyPVZrz3
>>836
おい嘘教えんなw
0838デフォルトの名無しさん2015/05/30(土) 16:53:58.24ID:u87GwTIT
>>834
>>835の言うようにユーザー定義関数がベスト
ただ制限がキツイからやりたい事が出来るかはわからんが
無理ならWorksheet_Calculateだろうな
0839デフォルトの名無しさん2015/05/30(土) 17:33:09.64ID:6R4xdRbg
>>834
A1の値を変数に入れて"無し"ならマクロ実行させて同時に変数クリアすれば良いんじゃ?
変数に入れるタイミングをどうするかが肝だ
0840デフォルトの名無しさん2015/05/30(土) 18:11:57.57ID:Gez8yvtR
条件付き書式にマクロの実行ってのがあったら便利なのにねぇ
0841デフォルトの名無しさん2015/05/30(土) 19:16:34.56ID:gEFTPVJN
Public Function 無し()
みたいな関数を作れば行けるだろ
0842デフォルトの名無しさん2015/05/31(日) 06:34:34.18ID:kPmhLqLU
>>830
>VBAのFor Eachって読み出すだけで書き込みは別の手段使わないといけないからなぁ。
結果が参照になっていない仕様は本当にダメ
これのせいでVBAのFor Eachは価値が半減している。

関数が参照を返せないのも本当にクソ
0843デフォルトの名無しさん2015/05/31(日) 07:52:30.28ID:vc0UiurH
無いものねだりしてもしょうがない
ポインタを使えないVBAがクソなら
更に先のデリゲートが無くて
同じことをやるなら色々面倒なことが
必要なC++もビヂクソ
0844デフォルトの名無しさん2015/05/31(日) 10:20:10.85ID:MsgqmVeV
Scripting.Dictionaryを定義すると
キーと値のペアを登録する辞書データがVBAで使えるようになるのだけど
これのリスト版ってないものかな
0845デフォルトの名無しさん2015/05/31(日) 10:33:35.22ID:vCKs7HZr
>>843
できないことと、面倒だけとできることの間には深くて暗い溝がある

>>844
ない、俺は ReDim 駆使するのが多い
ただ、これはこれで要素が無いときの扱いが面倒だったりする

それにしても Scripting.Dictionary のキーはともかく、値は Variant にしておいて欲しかった
0846デフォルトの名無しさん2015/05/31(日) 12:17:29.66ID:0ODl3Gwz
VBAの参照ってどうしてもVariant型を通す必要があるからなぁ。

Class Test
   Dim i As Long
   Property Let Add(arg)
       i = arg
   End Property
End Class

Dim c(10) As Test

For Each x in c
   x.Add = 1
next

試してないけどこんな形にすれば何とかForEachで個々の変数にアクセス出来るかも。
0847デフォルトの名無しさん2015/05/31(日) 13:48:45.67ID:yHSp9kv+
そこでRange型ですよ
これならFor Eachで参照できる
0848デフォルトの名無しさん2015/05/31(日) 15:32:18.21ID:9VNzTXZk
>>843
C++03とかのイメージで語ってないか??
0849デフォルトの名無しさん2015/05/31(日) 16:21:42.26ID:z9G7B0pQ
ポインタってなに?
0850デフォルトの名無しさん2015/05/31(日) 17:46:06.94ID:HJcUYUCv
>>849
地球防衛軍の警備車輌
0851デフォルトの名無しさん2015/05/31(日) 19:24:32.30ID:yHSp9kv+
0852デフォルトの名無しさん2015/05/31(日) 22:06:16.17ID:0zt8UYVs
>>849
アセンブラの頃には間接修飾とか間接参照と呼ばれていた、
Cに受け継がれた今となっては負の遺産の一つ。
0853デフォルトの名無しさん2015/05/31(日) 23:27:20.71ID:kPmhLqLU
関数が参照を返せないってのは本当に困りもの。
0854デフォルトの名無しさん2015/06/01(月) 07:35:45.36ID:IdfmF7Zn
参照を返せる型のものを使えばいいんじゃないの?Collectionとか。
0855デフォルトの名無しさん2015/06/01(月) 09:12:01.80ID:b5EyYOue
大きすぎる制約
0856デフォルトの名無しさん2015/06/01(月) 09:13:11.38ID:b5EyYOue
てかCollectionだと参照を返せるんだ?
0857デフォルトの名無しさん2015/06/01(月) 12:32:29.88ID:+Jl+yFZ9
関数が参照を返しても全く意味がないんだけど分かって言ってんの?
0858デフォルトの名無しさん2015/06/01(月) 13:03:22.50ID:b5EyYOue
>>857
VBAにそういう固有の事情でもあると?
0859デフォルトの名無しさん2015/06/01(月) 13:07:09.81ID:b5EyYOue
>>857
もしかしてVBAで効率を気にしても意味ないって言ってるのかな?コピーを返すコストは気にするなと。
0860デフォルトの名無しさん2015/06/01(月) 14:14:16.76ID:WHpiTc/Q
出来ない事をぐだぐだ言ってもあまり意味がないからどうでもいいんだけど
参照っていう言葉の意味をちゃんと定義してから議論してくれ
オブジェクト型変数が表すものは参照と呼べるの?呼べないの?
0861デフォルトの名無しさん2015/06/01(月) 15:12:46.15ID:b5EyYOue
>>860
定義ったってVBAで参照といえばByRefのことだとしか。
関数がByRefで受け取った変数をByRef のまま出力することを言ってるのさ。
0862デフォルトの名無しさん2015/06/01(月) 15:36:15.33ID:lImu9kYR
if文です。

if 〜 then x=1 and Y=2

もし条件が当てはまればXは1にしてYは2にするという構文を作りたいのですが

これを書くとXもYも数字が入りません
if 〜 then x=1  
とするとX=1で認識されます。
if 〜 then Y=2
でもY=2となるのですが
if 〜 then x=1 and Y=2はできません。
if 〜 then and(x=1,Y=2)これは使えません。

どうやって書いたらいいのでしょうか?
0863デフォルトの名無しさん2015/06/01(月) 15:38:36.40ID:2CPY9Y9I
If 〜 then
X=1
Y=2

これでいいんでない?
0864デフォルトの名無しさん2015/06/01(月) 15:41:59.09ID:lImu9kYR
end ifで閉じてできました。

めんどくさがって1文で済ませようとしてたのが。
初歩的なところで混乱してしまいました。
ありがとうございます。
0865デフォルトの名無しさん2015/06/01(月) 15:55:56.99ID:WHpiTc/Q
>>861
だったらByRefで受けた引数はそのままIN/OUT出来るわけだが

>>862
if 〜 then x=1:Y=2
お勧めしないけどな
0866デフォルトの名無しさん2015/06/01(月) 16:22:04.96ID:lImu9kYR
>>865
おおぉ
ありがとうございます。
一文の方が助かります
0867デフォルトの名無しさん2015/06/01(月) 17:28:34.46ID:E85enODL
↑のメンテはしたくねぇな
0868デフォルトの名無しさん2015/06/01(月) 18:22:09.18ID:b5EyYOue
>>865
ByRefでのOUTはないでしょ?
y = func(func(x))
で内側のfuncが返す値はコピー。
xが配列のときつらい。
0869デフォルトの名無しさん2015/06/01(月) 19:23:19.23ID:Db8kvl/G
>>868
いやだから関数のreturnがByRefである事の意味分かってないよお前
0870デフォルトの名無しさん2015/06/01(月) 19:32:26.58ID:b5EyYOue
>>869
どこかや?
0871デフォルトの名無しさん2015/06/01(月) 19:33:05.33ID:b5EyYOue
間違えた
>>869
どこがや?
0872デフォルトの名無しさん2015/06/01(月) 19:40:12.86ID:b5EyYOue
じゃあ少し具体的に書くと、
関数 func(ByRef x As Variant ) As Variant
が配列 x のランダムな位置の1要素をランダム値に書き換える関数だとする。
これを3回繰り返すとき x = func(func(func(x))) と書きたい。
そういうときどうするよ?
0873デフォルトの名無しさん2015/06/01(月) 19:49:23.27ID:Db8kvl/G
>>872
その通り書けよ。参照を返す必要ないぞ。
0874デフォルトの名無しさん2015/06/01(月) 19:50:06.20ID:WHpiTc/Q
>>868
引数でOUTできるって言ってるんだが
戻り値にByRefもByValもないからな

すくなくとも俺はx = func(func(func(x))) なんて式は書きたくないけど
そこまで速度気にするなら全部グローバルな変数でやってればいいんじゃね
0875デフォルトの名無しさん2015/06/01(月) 19:50:35.11ID:OoLqVGO6
今日、VBA ポインタで検索してVarPtr()なるものがある事を知ったけど使い方が分からず。
Long型で返すらしいから

Dim PtrArr() As Long
ReDim PtrArr(LBound(Hoge) To Ubound(Hoge))
For i = LBound(Hoge) To Ubound(Hoge)
   PtrArr(i) = VarPtr(Hoge(i))
Next

という手順を踏めばFor Eachでも読み書きが出来そうとか思ったけど、
そこまでの手順を踏むより別の手段使った方が処理速度的にも早そう。
0876デフォルトの名無しさん2015/06/01(月) 19:56:12.43ID:zsOMpfxb
>>872
それならできるよ。
x = func(func(func(x)))
って書いたときに、一度も配列のコピーが発生しないようにできる。x の要素数がどんなに多くても一瞬で処理完了。
ただハッキングに近いやり方だからな。
0877デフォルトの名無しさん2015/06/01(月) 20:18:35.39ID:b5EyYOue
>>874
ああ「引数でOUT」ね。でも理由があってチェーン表記にする必要があるし、グローバル変数は使いたくない。

>>876マジで?
手元の環境で>>872の処理だとxの要素数1,000,000で大体150msくらいかかる。実際の繰り返しはもっと多いです。
0878デフォルトの名無しさん2015/06/01(月) 20:44:27.15ID:Db8kvl/G
>>862>>877のような初心者が、訳も分からず表記方法にだけこだわるのやめた方がいい。
百害あって一理なしとはまさにこの事と言ってもいい。
素直に泥臭く書いて、素直にグローバル変数を使って少しづつ成長すればいいんだよ。
0879デフォルトの名無しさん2015/06/01(月) 20:51:14.69ID:b5EyYOue
>>878
おまえは>>872に対する解を何一つ持ってないじゃないかドアホウ。
なにがグローバル変数を使えだ、いいかげんにしろ。

>>876
そう言わずに教えてよ。
0880デフォルトの名無しさん2015/06/01(月) 20:52:58.50ID:Db8kvl/G
>>879
なぜグローバル変数使いたくない?言ってみろ。
0881デフォルトの名無しさん2015/06/01(月) 21:08:45.97ID:b5EyYOue
>>880
そりゃ複数の箇所から使うときのオーナーシップ管理がややこしくなるし、関数ごとにfunc1用グローバルfunc2用グローバルとか必要になった日にはそんな関数一般化も汎用化も望めなくなるし、第一グローバル変数を避けることに理由付けなんかいらないんだよね。
0882デフォルトの名無しさん2015/06/01(月) 21:16:14.52ID:hih5o8Kt
ExcelとVBAを避けるという選択肢もあるな
0883デフォルトの名無しさん2015/06/01(月) 21:16:29.78ID:zsOMpfxb
>>879
えーなんか言い争いになってるし、そんなところに飛び込んで巻き込まれるのはちょっと。

ぐぐってくれ。
0884デフォルトの名無しさん2015/06/01(月) 21:18:31.44ID:OoLqVGO6
汎用的に使いたいものでグローバル変数は御法度だけど(っていうか個々に変数持ちたいならクラス化すりゃいいんだけど)、
極限定的な使い方しかしない(変数が単一目的でしか使用されない)事が保証されている環境ならグローバル変数も考慮には入る。

「なんだか世の中的にカプセル化が流行りなのでグローバル変数死すべし」っていう狭量な考え方は少し待った方がいい。
0885デフォルトの名無しさん2015/06/01(月) 21:20:07.99ID:Db8kvl/G
>>881
まず変数のオーナーとか変な造語やめれ。
変数の性質は生存期間や可視範囲で語るものだ。
それが、プログラム実行中ずっと必要だったり、複数のモジュールから参照したいのであれば
グローバル変数にするのが最も自然なアプローチだぞ。
0886デフォルトの名無しさん2015/06/01(月) 21:30:01.89ID:b5EyYOue
>>885
この場合その前提かあてはまるか?
>>872にある
x = func(func(func(x)))
の変数 x のどこにそんなグローバル性が見いだせるの?

>>883
ヒン...ト...
0887デフォルトの名無しさん2015/06/01(月) 21:37:44.27ID:Db8kvl/G
>>886
その例に限って言えば、関数を入れ子にする必然性が全くない。
単にそう書きたいってだけのワガママ。
0888デフォルトの名無しさん2015/06/01(月) 21:48:54.79ID:Db8kvl/G
まあ、あまり長びかせるのもアレだから書くけど
関数がByRefで返すってのは変数のアドレスを返すという意味だからな。
それがグローバル変数ならあまり意味がないし
そうでなければ、スタック領域のアドレスという事になる。
VBでそんな危険な仕様を新たに取り入れる必要は全くない。
0889デフォルトの名無しさん2015/06/01(月) 22:02:15.36ID:NN8EkQRr
>>888
て言うかスタックのどこに割り当てられたか探せるの?

その関数を呼ぶまでのルートで配置場所変わると思うんだけど。
0890デフォルトの名無しさん2015/06/01(月) 22:07:31.02ID:Db8kvl/G
>>889
なんのこっちゃ?ローカル変数のアドレス返すだけだぞ。
0891デフォルトの名無しさん2015/06/01(月) 22:09:34.58ID:WHpiTc/Q
>>877
>チェーン表記にする必要があるし、グローバル変数は使いたくない。
じゃあVBA以外の言語使えよで終了
VBAでの速度向上を求める事に意味が無いとはいわないが
VBAで出来ない事をもとめて速度がどうこう言ってもしょうがない

>>876
そんな方法があるなら興味あるしちょっと教えてくれ
0892デフォルトの名無しさん2015/06/01(月) 22:10:58.83ID:b5EyYOue
>>887
単純化したサンプルだからそう見えるかもしれないが、「文ではなく式であり値を持つ」ことに価値がある場合があるのさ。
func0(funcA(x), funcB(y), funcC(z)...)
としたらもっとわかりやすいか?
0893デフォルトの名無しさん2015/06/01(月) 22:11:33.11ID:CikCK20O
>>866
一文にこだわる奴は120%変人。
B型かAB型だな。
0894デフォルトの名無しさん2015/06/01(月) 22:16:06.97ID:Db8kvl/G
>>892
なんか関数型プログラミングに影響受けてるっぽいけど、だったらそういう言語使え。
VBは素人が考えた通りに手続きを書き下ろせば、簡単にプログラミングできる様にデザインされた言語。
そもそも目的が違う。

大体、返された値を使いたかったら、func(x)の中でxの値を更新するな。
0895デフォルトの名無しさん2015/06/01(月) 22:18:38.01ID:CikCK20O
まあこう言う論争が起きる原因はvbaがこの30年くらい、殆ど進化していない事だよな。プログラミング言語界のシーラカンスと言っても過言ではない。それを使っている奴らはピテカントロプスか!
0896デフォルトの名無しさん2015/06/01(月) 22:24:54.71ID:xEns3aUX
ruby使おうぜruby
0897デフォルトの名無しさん2015/06/01(月) 22:29:58.36ID:CikCK20O
>>896
excelでruby使えるんか?
0898デフォルトの名無しさん2015/06/01(月) 22:31:51.95ID:NN8EkQRr
>>856
C++には参照渡しの他に参照型と言う概念は無いのかな?

戻り値が値渡しと言うなら参照型、つまり生成して渡すものであれば別にクラスでもいいんだけど、
要は参照型の値渡しをしてやればいい。
とりあえず思い付いたのがコレクションだったので、そう書いただけだけどね。

Private Sub ReferTest1()
Dim collection1 As New collection
Dim collection2 As collection
Call collection1.Add("AAA")
Set collection2 = ReferTest2(collection1)
Call MsgBox(collection1 Is collection2)
End Sub

Private Function ReferTest2(ByVal coll As collection) As collection
Call coll.Add("BBB")
Set ReferTest2 = coll
End Function

これで戻り値に参照が渡ったことが確認出来るよね。
0899デフォルトの名無しさん2015/06/01(月) 22:32:25.58ID:xEns3aUX
excelでrubyは使えないけどrubyでexcelは使えるよ
というかCOMにアクセスできる言語ならなんでもexcel使えるやろ
0900デフォルトの名無しさん2015/06/01(月) 22:37:11.84ID:CikCK20O
>>899
COMでexcel
コムデギャルソン
似てる
0901デフォルトの名無しさん2015/06/01(月) 22:40:21.86ID:OoLqVGO6
エクセルの標準機能で書けるようになってからRubyを薦めてくれ。
っていうかC#とかpythonとかでも書けるようにしてほしい。

そしてここは「VBAのスレ」であって「エクセルを扱える言語スレ」ではない。
0902デフォルトの名無しさん2015/06/01(月) 23:00:07.78ID:zsOMpfxb
>>892
>func0(funcA(x), funcB(y), funcC(z)...)

こういうときには僕の方法は使いにくい。
あくまでコピーを発生させずに処理できるというだけで、
x = func0(funcA(x), funcB(y), funcC(z)...)
と書いたならxは残るけどyとzは消える。

あなたが気にしてるコピーは、次の func = x のところで発生するでしょ
Function func(ByRef x As Variant ・・・
・・・ x になにか処理 ・・・
func = x ' ←ここ
End Function

func = x って書いちゃダメなんですよ。
x が100万要素の配列だとして、それを関数から返すのにどうやってコピーを避けるか。
(ポインターの使えない言語だし、無理やりアドレスを返しても受け取った側は困ってしまう。)

xには、消えてもらうしかないんですよ。
0903デフォルトの名無しさん2015/06/01(月) 23:22:45.28ID:IdfmF7Zn
>>902
横槍だけど、単純にx,y,zのプロパティをもつエンティティクラスを生成して、
そのインスタンスごと引数にぶち込んで、それを戻り値に設定してやれば
万事解決じゃないの?

どうもさっきから戻り値に参照が渡せないとか、
融通のきかない設計を一生懸命やろうとして嘆いてるようにしか見えないんだよなぁ。
0904デフォルトの名無しさん2015/06/02(火) 00:44:15.89ID:lKtLXZHs
手元に環境なくて試せないんだが、byrefで渡した配列をコール先でいじったら、コール元でも変更されてるんじゃないの?
↓で、2が出ないんだっけ?

sub macro1
dim arr(0)
arr(0)=1
call byref_test(arr)
msgbox arr(0)
end sub

sub byref_test(byref arr() as variant)
arr(0)=2
end sub
0905デフォルトの名無しさん2015/06/02(火) 01:09:43.65ID:2tSqBHbP
>>904
呼び先で戻り値に設定したいんだと

でももう片付いた話だからいいよ
0906デフォルトの名無しさん2015/06/02(火) 08:05:46.46ID:UQqysIrc
@ そもそも何故StringやIntegerなどでは参照を返せないのか。

A 何故C++で存在した多重継承やポインタをC#になったとき使えなくなったのか。

B @はC++では出来るがC#でその機能は消されている。つまり敢えて封じられている訳だけど何故か。


この辺が分かると何故Goto文を乱用してはいけないのか、のときみたいな解答が分かるかもね。
0907デフォルトの名無しさん2015/06/02(火) 09:02:17.18ID:FFYJa/uF
解答はもう少し先にならないと得られないだろう。
0908デフォルトの名無しさん2015/06/02(火) 12:04:19.40ID:FFYJa/uF
型の違いと値/参照の違いが直結してる言語と独立してる言語の二通りあるんだよ。
0909デフォルトの名無しさん2015/06/02(火) 18:55:37.06ID:8xk68iX+
>>902
思わせぶりに書くだけで、はっきりコード出せないのか?
0910デフォルトの名無しさん2015/06/02(火) 19:17:47.88ID:FFYJa/uF
>>906
B はどう考えても「ヘタレだから」だろう
0911デフォルトの名無しさん2015/06/02(火) 19:21:37.61ID:UQqysIrc
頭のおかしいコード厨に絡まれて>>902がかわいそう

いっつもC++やってる人弄ると出てくるよね

ま、同一人物なんだろうけどさ
0912デフォルトの名無しさん2015/06/02(火) 21:07:03.38ID:FFYJa/uF
そうはいっても>>902の「xには、消えてもらうしかないんですよ」は相当な思わせ振りとしか。
0913デフォルトの名無しさん2015/06/02(火) 21:31:46.66ID:8xk68iX+
別にコード以外でちゃんと説明できるならそれでもいいんだけどね
消えてもらうしかないとか良くわからない説明してるからコード書いてもらう方がわかりやすいかと

結局具体的には一切説明してないし
これを思わせぶりと言わずして何と言うんだね
0914デフォルトの名無しさん2015/06/02(火) 22:57:25.33ID:JFmwO0q+
ID:zsOMpfxbが女だったらお前らとっくに2〜300万いかれてるなw
0915デフォルトの名無しさん2015/06/02(火) 23:04:30.79ID:FFYJa/uF
しかし思わせ振りなのは表現の仕方だけで、コピーもせずに同じものを二つ得られる道理はないんだから、
片方に消えてもらいましょうてのは至極当然のような気がしてきた。
0916デフォルトの名無しさん2015/06/03(水) 02:09:09.21ID:9nuZvQmA
すっかり忘れてたけど、参照を返せることが判ったなら、
以前>>660でそれに断ち切られた>>644-659のくだりの
>>659の質問にぼちぼち答えて頂けないだろうか。
0917デフォルトの名無しさん2015/06/03(水) 20:57:35.98ID:tM+0mKUp
質問するならもっと思わせ振りにしろよ
盛り上がらんだろ
0918デフォルトの名無しさん2015/06/03(水) 21:32:16.34ID:C2NDVDWh
思わせぶりなことを言ってたのはこのCプラプラーの方だ。

645 名前:デフォルトの名無しさん :2015/05/05(火) 08:03:11.47 ID:Gy6WgfTU
それならエクセルが直接コントロールできるC++14でいいじゃないか
0919デフォルトの名無しさん2015/06/03(水) 21:42:44.32ID:nuofSA+R
1ヶ月前のレスに呼び掛けてもな
0920デフォルトの名無しさん2015/06/03(水) 22:26:32.54ID:C2NDVDWh
で、結局のところどうなのよ?
0921デフォルトの名無しさん2015/06/03(水) 22:59:18.01ID:ZxJD2qlU
よし、C++でCSV形式のテキストを書き出そう。
0922デフォルトの名無しさん2015/06/04(木) 00:44:13.32ID:SUYmAF8I
VBAのことじゃないのでスルーでよいです
0923デフォルトの名無しさん2015/06/04(木) 01:02:36.34ID:2DlOgaWy
と言うことはやっぱりCOMなんだろな
C++14名指しで出しといて糞じゃん
0924デフォルトの名無しさん2015/06/04(木) 12:38:15.22ID:83CYV2wO
思わせ振りな言葉にひっかかる方も悪いんだよ
0925デフォルトの名無しさん2015/06/04(木) 22:31:24.23ID:eZ6vZki5
久しぶりにコマンドラインからJavaをやろうとしたら
うまくいかないので、以下のHello.javaを作って
コンパイル、実行すると以下の通りでした。
2号機のほうにもJavaを入れ(SE8-45)
コンパイル、実行するとうまくいきます。
思い当たるのは1号機の方にNetBeansと
GlassFishを入れたことです。
以下、1号機でのコンパイル、実行です。
NetBeansなどが入ったマシン(Windows7-pro)で
cmd.exeから実行するにはどうすればいいですか。
----------------------------
Hello.java
class Hello{
public static void main(String[] args) {
System.out.println("Hello");
}
}
0926デフォルトの名無しさん2015/06/04(木) 22:32:09.43ID:eZ6vZki5
C:\dev\java\study>javac Hello.java

C:\dev\java\study>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 10D2-49BD です

C:\dev\java\study のディレクトリ

2015/06/04 22:17 <DIR> .
2015/06/04 22:17 <DIR> ..
2015/06/04 22:17 401 Hello.class
2015/06/04 22:07 226 Hello.java
6 個のファイル 1,945 バイト
2 個のディレクトリ 335,030,054,912 バイトの空き領域

C:\dev\java\study>java Hello
エラー: メイン・クラスHelloが見つからなかったかロードできませんでした

C:\dev\java\study>
0927デフォルトの名無しさん2015/06/04(木) 22:36:17.80ID:eZ6vZki5
925,926はJavaスレの誤爆でした。
0928デフォルトの名無しさん2015/06/04(木) 22:54:04.19ID:rgPVcrQM
ふしだらな
0929デフォルトの名無しさん2015/06/05(金) 08:05:55.34ID:AkSsA4ec
定刻にVBSからExcelマクロを呼び出してるんだけど
なぜかコードが途中で止まる。
ブレークポイントも設定してないのに
F8でステップ実行したときみたいにコードが黄色くなっててそこで停止。
エラーも吐かない。
マクロ単体で走らせると完走するのに…なぜだ?
0930デフォルトの名無しさん2015/06/05(金) 08:34:07.63ID:7wdWgOJI
>>929
ブレークポイントを設定したままセーブしてしまってゴミが残ってるんじゃないの?

同じ箇所にもう一度ブレークポイントを貼って外してセーブして戻らない?
0931デフォルトの名無しさん2015/06/05(金) 08:36:24.13ID:AkSsA4ec
>>930
そんなことあんの?あとでやってみるわ。

にしても、消したはずのセルにゴミデータを残したり
いろいろバグ?が残ってるねぇ。
09329292015/06/05(金) 09:43:08.40ID:uVDOAU2b
>>930
すべてのブレークポイントを解除ってやってみたら上手くいったかもしれん。
様子みてみるわ、感謝。
0933デフォルトの名無しさん2015/06/05(金) 10:25:30.36ID:kFF4Ec8B
ViaualStudioもそんな不具合あるね。preview使ってるからかも知れんが。
0934デフォルトの名無しさん2015/06/05(金) 18:14:55.83ID:3UseM3t2
タスクスケジューラとかで呼び出すと、実行ユーザーによって正常に動かんとかたまにある
0935デフォルトの名無しさん2015/06/05(金) 19:04:35.19ID:7wdWgOJI
こう言うとき、どこの仕事場行っても言われるのが
「まぁ、Microsoftですから」
0936デフォルトの名無しさん2015/06/05(金) 22:18:29.64ID:nnmK9CiW
まあバグの原因の99%は自分の書いたコードにあるんですけどね
0937デフォルトの名無しさん2015/06/06(土) 11:53:05.28ID:ms2Ewoz/
>>933
20年前からそれあるよ
コード編集やデバッガが複雑化していくから防げん
0938デフォルトの名無しさん2015/06/06(土) 14:20:58.89ID:kLk3hEuP
ユーザーフォームのチェックボックスについてですが、あのチェックボックスの大きさって変えることは出来ないですか?
Heightを変えてもその範囲(?)が変化するだけでボックス自体の大きさは変わらないみたいですが。
0939デフォルトの名無しさん2015/06/06(土) 16:47:35.47ID:XENnJZ5/
>>938
出来ないんだよ。
替わりの方法を考えるしかない。
0940デフォルトの名無しさん2015/06/06(土) 17:02:57.32ID:kLk3hEuP
>>939
ムゥゥ…了解しました
0941デフォルトの名無しさん2015/06/06(土) 23:37:49.26ID:53bH7fGL
ユーザーフォームはショボいよな。
せめてAccessなみにして欲しい。
0942デフォルトの名無しさん2015/06/07(日) 00:22:13.71ID:cQIUp8uB
>>938
http://www.dotup.org/uploda/www.dotup.org355344.png

チェックボックスのところだけ Frame で囲って、Frame のプロパティにある zoom の数値高くすれば
部分的に巨大化できる

あとは caption と border 消せばおk
0943デフォルトの名無しさん2015/06/07(日) 02:03:22.24ID:E+AQ3Mq+
Windowsの設定でどこぞのフォントサイズ変えてやれば変わったような気もするけど
0944デフォルトの名無しさん2015/06/07(日) 06:55:33.40ID:r1CTg/ug
>>942
出来ました!アリガトウです
0945デフォルトの名無しさん2015/06/07(日) 12:23:11.78ID:8lJn8ygb
>>942
凄い!
0946デフォルトの名無しさん2015/06/09(火) 19:43:08.22ID:c8o1Qw3+
Collectionを使いたいのですが
これにTypeで定義した型を入れようとするとエラーがでます。
なにかやりかたが間違ってるのですか?
0947デフォルトの名無しさん2015/06/09(火) 19:55:25.28ID:U2CZ6+4J
>>946
>なにかやりかたが間違ってるのですか?
エラーメッセージもやってる事も書かないで判断できると思うのか?

まあ、ユーザー定義型はいろいろ制約があるので、出来るならクラス定義してそっち使え
0948デフォルトの名無しさん2015/06/09(火) 19:57:54.85ID:c8o1Qw3+
仮に入れるための変数をTempとして
内容は変えてもその同じTempをCollectionに入れてたのが間違い?
0949デフォルトの名無しさん2015/06/09(火) 19:58:24.34ID:c8o1Qw3+
エラーはわすれた。いまは別のコードになおしたから。
0950デフォルトの名無しさん2015/06/09(火) 21:27:22.78ID:c2p5M67A
>>946
そもそもユーザー定義型はcollectionに入れられないよ
素直に配列で宣言するか、>>947の言う通りクラスを作るか

1個access作って、各項目を定義した一時テーブルにデータを入れて、クエリで集計とかしたのち、またexcelに出力とかしてるんだけどそういう人いる?
最近構造体作るの面倒になって全部こうしてるんだけど、access壊れやすいし、データ管理でなんか良い方法知ってる人いるかね
0951デフォルトの名無しさん2015/06/09(火) 21:47:36.56ID:ZzpK0e2Q
壊れやすいってのがどういう状況なのか知らんけど、accessじゃなしにSQLServerとかMySQLとかにすれば?
0952デフォルトの名無しさん2015/06/09(火) 22:05:16.80ID:c2p5M67A
…accessしか使ったことないんです
恥を忍んで教えて欲しいんですが、SQLserverやMySQLを使うと、mdbやaccdbみたいなファイルって作れるんですか?
そっからDAOとかADOで、ExcelVBAから接続できたりするんですかね?
どうもSQLserverってデータベースサーバーのイメージがあって取っ付き難くて…
0953デフォルトの名無しさん2015/06/10(水) 00:37:39.56ID:laRMen7X
>>952
ADOでExcelからMySQL接続やってるよ。SQLServer(Express)でも接続文字列さえ変えれば同じようにアクセスできるし
(勿論SQLで固有の部分は書き換えないといけないけど)
0954デフォルトの名無しさん2015/06/10(水) 08:42:16.96ID:GViOj19C
>>952
恥じる必要性は全くない。

フロントエンドは今まで通りAccessを使えば良い。データストア場所を
MySQLにすれば良い。当然、ExcelからもMySQLへ接続できる。
0955デフォルトの名無しさん2015/06/10(水) 16:22:48.03ID:T4wZlTyk
次スレ立てときましたっ

http://peace.2ch.net/test/read.cgi/tech/1433920729/l50
0956デフォルトの名無しさん2015/06/10(水) 16:28:32.56ID:PjJ8iHSX
>>955
うむ、ご苦労。褒美に俺が今後作るコードをデバッグさせてやろう。
0957デフォルトの名無しさん2015/06/10(水) 17:34:20.56ID:JjE8Vgth
>>955
なに勝手にテンプレ変えてるんだよ?
0958デフォルトの名無しさん2015/06/10(水) 18:14:37.24ID:v/kP17pJ
>>955
次スレはこっちに立ってる

Excel VBA 質問スレ Part37 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1420841190/
0959デフォルトの名無しさん2015/06/11(木) 13:00:37.63ID:6lcwVNck
シート1の背景色(20色くらい)だけをそのままシート2にコピーしたいんですがうまくいきません
Sheets("Sheet2").Range("A1:Z1000").Interior.Color = Sheets("Sheet1").Range("A1:Z1000").Interior.Color
これだと全部黒で塗りつぶされてしまうんですが、どう直せばいいんでしょうか?
0960デフォルトの名無しさん2015/06/11(木) 13:14:09.89ID:PQqxmR5I
各セルごとにコピーすればいい
0961デフォルトの名無しさん2015/06/11(木) 15:12:32.90ID:iXgLxT1K
マクロの記録を参考にしてみる
0962デフォルトの名無しさん2015/06/11(木) 18:43:31.96ID:PQqxmR5I
>>959
はい

For Each aa In Sheets("Sheet1").Range("A1:Z1000")
Sheets("Sheet2").Range(aa.Address).Interior.Color = aa.Interior.Color
Next
0963デフォルトの名無しさん2015/06/11(木) 19:52:50.39ID:LAXjMw3B
vbeで構文エラーになる書き方してカーソル移動すると
エラーメッセージが出るんですけど出さなくする方法はありますか?
赤くしてくれればそれでいいのに消すのがすごく面倒です。
0964デフォルトの名無しさん2015/06/11(木) 20:01:02.74ID:LAXjMw3B
あと配列の並び替えする関数ってないんですかね?
自分で書いてみたものの毎回書くの?って感じです。
0965デフォルトの名無しさん2015/06/11(木) 20:04:39.76ID:sy6xTaqk
配列の並び替えってWorksheetfunction.transpose()の事?
0966デフォルトの名無しさん2015/06/11(木) 20:08:08.42ID:PWtILvFt
ソートする方法無くはなかったはずだけどめんどくさそうだった気がする。
0967デフォルトの名無しさん2015/06/11(木) 20:08:37.88ID:PQqxmR5I
オプション>>自動構文チェックのチェックを消す
0968デフォルトの名無しさん2015/06/11(木) 20:16:10.22ID:sy6xTaqk
ソートならシートに吐き出せば機能使えるな。
問題はエクセルの機能を使えないかという質問にシートに吐き出せという答えを返すと「シートは処理が重いから」と後出し条件出すバカが多い事だが。
0969デフォルトの名無しさん2015/06/11(木) 20:38:35.02ID:iXgLxT1K
条件によってはワークシートでソートした方がずっと速い
0970デフォルトの名無しさん2015/06/11(木) 20:49:36.20ID:LAXjMw3B
ありがとうございます。
sort関数的なものを探しましたがどうやら無いようですね。
調べたところ自分でソートするか、シートに張り付けて並び替え機能使うか、という感じなんですね。
自分は結局ループ処理で数値比較しながら配列に入れ直すようにしました。
動的配列使うにも一手間かかるし配列関係は使い勝手がいまいちな印象です。
0971デフォルトの名無しさん2015/06/11(木) 20:49:59.89ID:LAXjMw3B
>>967
ありがとうございます。試してみます。
0972デフォルトの名無しさん2015/06/11(木) 21:00:24.62ID:o6JsBkeK
>>970
ソート関数は一度書けばずっと使えるんだからいいじゃないか
0973デフォルトの名無しさん2015/06/11(木) 21:22:11.78ID:6lcwVNck
>>960
レスありがとうございます
ヒントどうもでした

>>962
うまく動きました
自分でも作ってみました

Dim i As Long
Dim j As Long
For i = 1 To 1000
For j = 1 To 26
If Sheets("Sheet1").Cells(i, j).Interior.ColorIndex <> xlColorIndexNone Then
Sheets("Sheet2").Cells(i, j).Interior.Color = Sheets("Sheet1").Cells(i, j).Interior.Color
End If
Next j
Next i
End Sub
0974デフォルトの名無しさん2015/06/11(木) 21:54:55.11ID:1wrXKn1u
>>970
だって配列はただの配列ですからね。

あなたが思っているものは、コレクションやテーブルですね。
0975デフォルトの名無しさん2015/06/11(木) 22:00:31.80ID:MEVqNqhj
>>972
Generic とか使えないから配列要素の型が変わったら書き直さないとダメだし、比較関数も指定できないから逆順にするだけでも手を入れないといけないよね
C#A が欲しいわ
0976デフォルトの名無しさん2015/06/11(木) 22:10:09.15ID:MYWYh3I3
>>964
.NET FrameworkのArrayListを使ったら

http://officetanaka.net/excel/vba/tips/tips98.htm
0977デフォルトの名無しさん2015/06/11(木) 22:14:27.86ID:o6JsBkeK
>>975
Genericもtemplateもないのはその通りだけど、ひとつのソート関数で複数の型の配列をまかなえるよね。
0978デフォルトの名無しさん2015/06/11(木) 22:46:06.86ID:nXSQMIaU
>>977
まかなえるかも知れないけど、型が担保されないのがね。

ちょっと前にVB6で同じようなことで悩んでたけど、
Recordsetがどうやら自分で項目やレコードを作ることが出来て、Sortすることが出来るらしい。

.NetのDataTableとは少し使い勝手が違うとは言え、Sortすると言う観点から見れば
大体同じことが出来るんじゃなかろうか。

と言うことで現在調査中。LinqのようにクラスのプロパティでSortしたりは出来ないけど、
使えるようならそこそこ使う機会が有りそうな気がする。
0979デフォルトの名無しさん2015/06/11(木) 22:57:30.41ID:MEVqNqhj
>>977
どうやってやるの?
0980デフォルトの名無しさん2015/06/11(木) 23:00:48.04ID:o6JsBkeK
>>979
え?
だって < 演算子はIntegerでもDoubleでもStringでも共通に使えるでしょ?
ソートのアルゴリズムを型ごとに分けて書く必要はないはずだが。
0981デフォルトの名無しさん2015/06/11(木) 23:02:50.52ID:o6JsBkeK
念のため、、
「配列要素の型が違う」っていうのは Integer() か Variant() で違うって意味だよね?
0982デフォルトの名無しさん2015/06/11(木) 23:25:48.60ID:MEVqNqhj
>>980
引数の型名どうする気だよ w
0983デフォルトの名無しさん2015/06/11(木) 23:29:34.63ID:o6JsBkeK
>>982
ByRef x As Variant

に決まってるじゃないか。
0984デフォルトの名無しさん2015/06/11(木) 23:56:56.31ID:iXgLxT1K
As Variantなんていちいち書か
0985デフォルトの名無しさん2015/06/12(金) 00:06:26.62ID:25M6JlyC
ワークシートでソートするのもちろんいいんだけど、「どのシートのどこを使うか」を都度決めなければならない。
汎用性というか可搬性に欠ける。
0986デフォルトの名無しさん2015/06/12(金) 00:18:27.87ID:V1caHJYS
毎回シート生成して消せばいいでしょ
0987デフォルトの名無しさん2015/06/12(金) 00:34:00.59ID:8AB+bqYO
なんでAccess使わないのか?
0988デフォルトの名無しさん2015/06/12(金) 00:59:07.91ID:25M6JlyC
データ源泉がDBテーブルにあるんだったらそりゃSQL使うだろう。
だけどORDER BY ASCとDESCしかないんじゃ不便でしょう。

これの問題4とかを解きたい。
http://www.softantenna.com/wp/software/5-programming-problems/
0989デフォルトの名無しさん2015/06/12(金) 01:16:51.15ID:DzGJHX8D
社内を見渡すと
え?そんな作業を手でやってるの?っていう人が多い。
颯爽とマクロなりスクリプトをつくってどやる。

するとどうでしょう、余計なことしやがって的な反応が。

彼らは仕事を失うこと、今までのやり方を否定されたことに怒りを覚えるのでしょう。

そんな経験ある人いる?
0990デフォルトの名無しさん2015/06/12(金) 01:39:44.83ID:8AB+bqYO
>>988
ソート関係ないじゃん。
0991デフォルトの名無しさん2015/06/12(金) 01:41:47.74ID:8AB+bqYO
24通りの数字列の大小を比較するだけだろうが。
0992デフォルトの名無しさん2015/06/12(金) 01:42:53.89ID:8AB+bqYO
>>989
あなたにそんなことは求めていない。
0993デフォルトの名無しさん2015/06/12(金) 01:56:23.67ID:XHErEd8v
>>989
あるある、あるよ。
0994デフォルトの名無しさん2015/06/12(金) 02:00:05.67ID:XHErEd8v
そのことがあってから
神ツールは自分だけか特に仲のいい同僚だけにシェアすることにした。

それをされたら「アホと思われてたんだ」とプライドを傷つけることになると学んだから。
0995デフォルトの名無しさん2015/06/12(金) 02:27:55.98ID:8AB+bqYO
青いな。
0996デフォルトの名無しさん2015/06/12(金) 03:52:32.03ID:8q2nRNuu
俺の作ったマクロでパートさんが契約終了になりそうだよ。
0997デフォルトの名無しさん2015/06/12(金) 03:53:05.71ID:V1caHJYS
>>988
後ろゼロ埋めして長さ揃えてソートして、その順に元の文字連結する
0998デフォルトの名無しさん2015/06/12(金) 05:23:45.81ID:L5AJPpJ8
うめ
0999デフォルトの名無しさん2015/06/12(金) 05:43:15.76ID:9iuD3EDL
>>996
俺のマクロで仕事のなくなった一人がクビになったわ
めっちゃ後味悪い
1000デフォルトの名無しさん2015/06/12(金) 07:04:04.68ID:25M6JlyC
>>990-991,997
解き方はいろいろあるだろうけど、このページにあるような方法をとりたい。
https://blog.svpino.com/2015/05/08/solution-to-problem-4
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。