16/04/27 04:15:15.99 Nk+oP5xR.net
実質前スレ
Excel VBA 質問スレ Part37
スレリンク(tech板)
3:デフォルトの名無しさん
16/04/27 21:55:10.70 56VYowtZ.net
乙
前スレでQiitaのExcelタグ記事が出てたからいろいろ見たけどもう疲れた
4:デフォルトの名無しさん
16/04/28 05:56:31.13 HABRmm6+.net
Excel2010です
別のExcelファイルから参照している複数のセルに並び替えをしたいと考えています
その際空白は省きたいです
普通に並び替えても数式が狂ってしまいますので、文字の入ってるセルの行だけ抽出して並び替えられるようにしたいのですが
数式を文字として認識しているのか
空白を省けません
何か方法はありますでしょうか?
5:デフォルトの名無しさん
16/04/28 06:08:09.63 R0Skxwpj.net
.value==""にマッチしないの?
6:デフォルトの名無しさん
16/04/28 06:20:12.22 kK5ruPHc.net
>>4
Value2
7:デフォルトの名無しさん
16/04/28 06:23:08.26 HABRmm6+.net
>>5
valueは…表示されません
セルに文字がある場合は「1」ない場合は「0」と表示させてMARCH関数で該当するかしないかを表そうと思っています
参照元が空白で、参照先も空白になるのですが、セルには数式が入力されていて
空白でも「1」と表示されてしまいます
8:デフォルトの名無しさん
16/04/28 06:38:20.09 HABRmm6+.net
URLリンク(m.chiebukuro.yahoo.co.jp)
他サイトからの引用で申し訳ありませんが、やりたい事はこれと同じです
異なるのは、文字の入ってるセルが、他のファイルからの参照先になっていますので
「=[他ファイル.xls]などの数式が入ってしまっています
9:デフォルトの名無しさん
16/04/28 06:39:31.82 R0Skxwpj.net
VBAなのこれ
10:デフォルトの名無しさん
16/04/28 06:45:42.55 HABRmm6+.net
あ、VBAではないですね
すみませんでした…
11:デフォルトの名無しさん
16/04/29 00:24:13.71 5uxjIDtf.net
VBA界に新しい話題ってないの?
12:デフォルトの名無しさん
16/04/29 00:37:59.90 nMX0BLZ6.net
ないと思う
たぶんこのスレを見に来てももうあなたが新たに得られるような情報はないかと
13:デフォルトの名無しさん
16/04/29 00:44:23.68 5uxjIDtf.net
そうなのか
ステキな出会いを期待してたのに
14:デフォルトの名無しさん
16/04/29 01:43:24.44 L3/tzjQ7.net
.netにしろやクソMS
15:デフォルトの名無しさん
16/04/29 02:20:11.85 4zpSkGz3.net
>>14
すでに.NETからEXCELを使う方法は提供されているわけで
そういう人はVSTO使えばいいというのがMSの方針じゃなかろうかね
16:デフォルトの名無しさん
16/04/29 03:27:47.90 22q9RBL3.net
VBAの強みってOffice製品の機能の一部として捉えられてるおかげで
会社のセキュリティすり抜けられるっていう一点だけだから
好きなIDEが使えるならVBAにこだわる人間は少ないんじゃないか
17:デフォルトの名無しさん
16/04/29 03:46:43.37 L3/tzjQ7.net
プログラミングができる、好きな学生が開発以外に行く→プログラミングができることを会社でポロっと言ってしまう→VBA地獄
こんな感じだよね。勝手にソフトウェア入れるわけにもいかないし、VBAじゃダメなの?と聞かれても俺じゃ納得させられないよ
18:デフォルトの名無しさん
16/04/29 08:38:57.84 WJMtHckd.net
VBAさえ使いこなせない学生は他の言語いってもダメだろう
19:デフォルトの名無しさん
16/04/29 08:54:03.96 KCDOC8aI.net
>>15
VBAみたいに気楽に使えるようにして欲しいわ
20:デフォルトの名無しさん
16/04/29 09:54:43.92 5uxjIDtf.net
気軽じゃあないんだ・・・
21:デフォルトの名無しさん
16/04/29 11:08:32.92 22q9RBL3.net
Visual Studioの許可申請通すための妥当な理由ってなんかあるかな
22:デフォルトの名無しさん
16/04/29 11:13:45.24 hLQru2tB.net
.net使ってみたいんだけど、どこかにまとまった解説サイトってあるの?
23:デフォルトの名無しさん
16/04/29 12:31:42.69 pnlNs8XQ.net
マジで集計マクロみたいなただの便利ツール作るのは苦行だな
自分でやれよと思ってしまう
みんなでクラス構成考えたりコードレビューとかしながら成長できる環境なら別にvbaでも構わんよ
24:デフォルトの名無しさん
16/04/29 12:46:25.08 5uxjIDtf.net
エクセルVBAはツールとライブラリに分けよう
ツール: 電卓と一緒。大抵のことは自分でやれ。引き継ぎ対象にしない。
ライブラリ: 担当者がメンテする。ちゃんと引き継ぐ。
25:デフォルトの名無しさん
16/04/29 12:49:00.15 Iep7JOlc.net
お前らエクセルちゃんをコキ使い過ぎやでマジに
26:デフォルトの名無しさん
16/04/29 13:13:33.73 onpOySfz.net
>>21
こう言うツールを作れば作業時間が○○ぐらい減るので
△△円/月程度の費用削減が可能です
って説明すればいいかと
27:デフォルトの名無しさん
16/04/29 13:34:23.20 oVc0CQsa.net
俺の作業時間が減っても正直金にならんしな
残業は今でもほぼ無いし、早く終わったからってすぐにやるべき仕事もない
28:デフォルトの名無しさん
16/04/29 13:42:07.75 22q9RBL3.net
作業時間が延びる原因って作業環境云々よりも
やれ会議だ、やれ相談だと呼ばれて中断せざるを得ない場合の方が比重が高そう
だいたい作業時間短縮ってツールよりもライブラリの充実の方が問題になるし・・・
けど考えてみれば俺以外分からないんだから、ツールくれれば効率上がりまっせって言うのはありか
29:デフォルトの名無しさん
16/04/29 13:43:50.31 UCIGz4cp.net
FINDでヒットしたセルに連番を振っていくんだけど、
右から列方向で連番を振る方法ありますか?
オプションで逆方向xlPreviousをつけても、
一番右下に1が振られるだけで、後の順序は
左から列方向したのと同じなのですが。
30:デフォルトの名無しさん
16/04/29 13:55:01.28 22q9RBL3.net
>>29
Sub test(検査範囲 As Range, 検査値 As String)
k = 0 '連番開始値
xr = 検査範囲
Top = LBound(xr, xlRows)
Bottom = UBound(xr, xlRows)
Left = LBound(xr, xlColumns)
Right = UBound(xr, xlColumns)
For i = Right To Left '右から左
For j = Top To Bottom '上から下
If xr(j, i) = 検査値 Then
検査範囲.Range(j, i) = k
k = k + 1
End If
Next
Next
End Sub
こういう事?
31:デフォルトの名無しさん
16/04/29 14:06:46.66 zF/UNtdR.net
>>28
expressでいいんでしょ?
32:デフォルトの名無しさん
16/04/29 14:19:18.90 Fcw6JTQb.net
>>27
他の人の業務も早く正確にミスなく出来る
リードタイムも減って機会損失が少なくなるとか
33:デフォルトの名無しさん
16/04/29 14:33:09.04 UCIGz4cp.net
>>30
FINDの引数でどうにかならないかと思っていましたが、
やっぱりforとifで判定していくしかないんですね。
ありがとうございます。参考になりました。
34:デフォルトの名無しさん
16/04/29 16:56:22.77 VQFWKbyJ.net
>>29 >>33
通常のFINDとは逆順で検索したいんだよね?
右下から左に検索 & 下から上
1回目のみ FIND(・・・ ,SearchDirection:=xlPrevious,SearchOrder:=xlByRows)
2回目以降 FindPrevious()
でよくね?
やりたい事の意味を間違って受け取ってるかな?
35:デフォルトの名無しさん
16/04/29 19:35:10.13 UCIGz4cp.net
>>34
言葉足らずですみません。
6 3
5 2
4 1
ではなくて、
4 1
5 2
6 3
という意図でした。
123
456
や、
1 4
2 5
3 6
はFINDの引数だけでできたので、右から列方向もさくっとできないかと思ったのでした。
36:デフォルトの名無しさん
16/04/29 21:15:23.39 sUt0Q0jr.net
Excel2003から2013に変えたら、
時々、シートに配置したボタンが、どこかに飛んでいくようになった。
ブック名やシート名を指定してるのに、
全然関係ないセルに値を書き込みにいったり。
俺がバグってるだけ?
37:デフォルトの名無しさん
16/04/30 01:05:44.58 bnyf9CY9.net
vbaのフォームは、フォームやコントロールのイベントを感知して、処理コードを書くことが出来ます。
それとは逆に、シートのセル例えば Range("A1")の値が変化することをイベントとすることで、
例えば、フォームのTextBox1の値を変化させることはできるかな?
超上級レベルのPGさん(C#, VB,net, Java経験者)、その方法を教えて。
38:デフォルトの名無しさん
16/04/30 01:23:26.23 bQzkVaJ6.net
適当なセルに
=foo(A1)
と入れときゃいいんじゃないの?
その関数 foo の中でTextBox1の値を変化させる
39:37
16/04/30 01:27:16.13 bnyf9CY9.net
フォーム実行中にRange("A1")の値は、
外部アプリ、例えば、UWSCで書き込むものとします。
40:37
16/04/30 01:59:49.62 bnyf9CY9.net
自己解決しました。
41:37
16/04/30 02:03:47.30 bnyf9CY9.net
超上級レベルのPGさん(C#, VB,net, Java経験者)へ、
vbaでもvb.net のような、自作イベントなんてできるの?
RaiseEventのような。
42:デフォルトの名無しさん
16/04/30 04:06:29.80 3b/0XXdC.net
>>41
VB6と一緒で一応ある。
以下のMSDNに載っている使用例のサンプルは、
VB6のコードのようでVBAで使うにはコントロール名など若干修正は必要だが
RaiseEvent ステートメント
URLリンク(msdn.microsoft.com)
43:デフォルトの名無しさん
16/04/30 05:52:32.49 nOun1cZC.net
Excel で、インベーダーゲームを作っている本もあるから、
たぶん、様々なイベントもあるのだろう
44:デフォルトの名無しさん
16/04/30 08:01:04.45 YWn/7cOt.net
>>41
あるものとないものがある。
ま、モノが違うから当然だけど。
例えば一定時間でイベントが発生するようなものは確かVB.Netでは3種類くらいあったと思ったけど、
VBAでは無いのでAPIを使ってコールバックさせるような感じで組まなければいけなかったりとか
45:デフォルトの名無しさん
16/04/30 12:10:14.21 uVz81x78.net
GitHubで匿名通信(Tor、i2p等)ができるBitComet(トラッカーサイト不要でDHTだけで日本語検索可能)
みたいな、BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
URLリンク(twitter.com)
ちなみにオイラはCovenant(純粋P2Pのファイル共有ソフト)の完成が待ち遠しいプログラミングできないアスペルガーw
46:デフォルトの名無しさん
16/04/30 12:37:56.63 3TsFkhxL.net
VBAからブラウザを操作するとき
いっぱいページ開いてタブを複数使ってるとき
各タブがbusyでまだ表示が終わってないかを判定するにはどうしたらいいですか?
調べた限りIEでのプロパティは取得できても各タブでのプロパティは取得できない。
47:デフォルトの名無しさん
16/04/30 19:56:35.13 /rgv18x0.net
コードの書き方として、変数の宣言は関数の頭でまとめてやるのがいいのか、それとも使う直前にやるのがいいのかどちらでしょうか
また、使い終わった変数をもう使わないと明示する処理はありますか?
48:デフォルトの名無しさん
16/04/30 21:09:42.54 XEqomZlq.net
というかVBAでは各プロシジャや関数の先頭でないとダメだったんじゃ。あるいはモジュールの先頭とか
49:デフォルトの名無しさん
16/04/30 21:10:40.96 XEqomZlq.net
後、「使い終わった変数をもう使わないと明示する処理」なんて無い
50:デフォルトの名無しさん
16/04/30 21:11:57.74 XEqomZlq.net
あっオブジェクトにnothingを入れること言ってんの?
set sxxx = nothing
とか
51:デフォルトの名無しさん
16/04/30 21:23:19.94 O7pF7Dyv.net
>>48
途中でも宣言できるよ
52:48
16/04/30 21:43:17.18 XEqomZlq.net
>>51
出来たんだ。へぇ後で確認してみるよ ありがと。
53:デフォルトの名無しさん
16/04/30 21:51:28.33 22Ts1M1X.net
>>48
知らないなら黙ってろよ...
54:デフォルトの名無しさん
16/04/30 22:00:44.42 v/yWAGpr.net
いつでもできるっていいよな~勃起する~
55:デフォルトの名無しさん
16/04/30 22:40:18.96 bQzkVaJ6.net
知らなくても思ったことは言えばいいじゃん
56:デフォルトの名無しさん
16/05/01 06:11:15.76 N+mY7DPn.net
>>47
.NetみたいにIf文の中やFor文の中で宣言したところでその中でのみスコープが効くって訳でなくて
あくまでモジュールか関数単位でのスコープだから
やっぱりその単位で纏めて書いておいた方がいいだろな
57:デフォルトの名無しさん
16/05/01 06:38:17.62 e/Hse44L.net
>>53
バカ発見
58:デフォルトの名無しさん
16/05/01 06:48:30.10 FGPo8aL5.net
ああ、最初の方に宣言書いとけってのはCライク言語しか扱えない人間が勘違いするのを防止する為か。
前スレに貼ってあったブログの記事見たときも思ったけど、
今は自分が触ってるツールがなんなのかすらよく分かってないのがプログラマ名乗る時代になっちゃったな。
59:デフォルトの名無しさん
16/05/01 06:55:17.20 4tDBI2/Z.net
>>57
なにか悔しいことでもあったのか?
60:デフォルトの名無しさん
16/05/01 08:55:20.52 e/Hse44L.net
>>59
バカ発見
61:デフォルトの名無しさん
16/05/01 10:01:02.93 EKtQwo7Z.net
>>46
Excelとなんの関係があるの?
62:デフォルトの名無しさん
16/05/01 10:38:14.78 pgSGezQj.net
初期化のコストなんて無視できるんだし、普通のプログラムで宣言位置にこだわる理由はあんまりない
63:デフォルトの名無しさん
16/05/01 11:22:51.97 etCluhyU.net
>>62
その考え方だと、ソースコードをインデントする事に意味はない、ってことになる
実行コストの問題じゃないからな
こだわる理由は薄いけど、お作法だと思っておけば良いんじゃない
64:デフォルトの名無しさん
16/05/01 12:36:30.20 26Cdb2A4.net
>>62
最初にまとめて宣言するとどこで宣言されてるのかわかりやすい反面、どこで使われているのかがわかりにくくなる
65:デフォルトの名無しさん
16/05/01 13:28:31.99 Jk9067FT.net
BASICはスコープの頭で宣言するのが基本と教わったよ
局所スコープなんて邪道w
66:デフォルトの名無しさん
16/05/01 13:37:50.19 X/eAHaZZ.net
邪道でもなんでもないけど、 プログラムの規模が大きくなっていくに従ってそういう問題は発生しなくなるとは思う。
67:デフォルトの名無しさん
16/05/01 13:55:38.98 hsr/yOpl.net
宣言位置も大事だけど変数名も大事だよ。
普通に、ハンガリアン記法を使うよな?
68:デフォルトの名無しさん
16/05/01 13:59:54.67 cTEU13RB.net
VBAしか知らないが、まとめて宣言じゃなく使う前に宣言する派だな
69:デフォルトの名無しさん
16/05/01 14:16:23.37 ejxts/3y.net
変数名は
Dim 変数As ○○
で安定
70:デフォルトの名無しさん
16/05/01 14:30:45.34 X/eAHaZZ.net
>>69
それもまあ、、、いいか
71:デフォルトの名無しさん
16/05/01 14:35:03.78 4tDBI2/Z.net
>>68
まあどっちにせよポリシーを決めておけばいいと思う
俺も使う直前で定義する派
72:デフォルトの名無しさん
16/05/01 14:38:28.86 26Cdb2A4.net
ハンガリアン使うとかねえわ
いつの時代だよおっさん
73:デフォルトの名無しさん
16/05/01 15:03:34.65 FGPo8aL5.net
メモリ容量さえ許せば全部Variant型で十分だし、
それ以前に同関数内で異なる型の変数(引数除く)を使うのはあまりよろしくない。機能が分かれてない。
74:デフォルトの名無しさん
16/05/01 15:15:10.83 X/eAHaZZ.net
>>73
前半と後半が食い違ってる
75:デフォルトの名無しさん
16/05/01 15:19:30.78 26Cdb2A4.net
まともに教育を受けてない適当な人間が使うであろうVBAだからこそ型はきっちり付けるべきだと思うんだけどなぁ
76:デフォルトの名無しさん
16/05/01 15:34:29.56 X/eAHaZZ.net
~する派~しない派みたいなのって例外を認めにくくなっちゃうからなあ
77:デフォルトの名無しさん
16/05/01 16:38:53.50 FGPo8aL5.net
型宣言しちゃうと出来ない事もあるから、下手に宣言するクセつけない方がいいけどな。
78:デフォルトの名無しさん
16/05/01 17:01:16.67 4tDBI2/Z.net
>>77
> 型宣言しちゃうと出来ない事
なんのこっちゃ
79:デフォルトの名無しさん
16/05/01 17:06:37.92 FGPo8aL5.net
>>78
たとえばVariant型で受けて関数内部で型によって処理を変える事で多態性を確保するとか、
返却用の引数に渡された型に合わせて返値を変えるとか、
同じ名前のプロパティを持つ別のクラスを入れて異なる処理が同一関数で行われる様にするとか。
でも考えたらVariant型も型宣言するから「Variant型以外では出来ない事」って言わないと語弊があったな。
80:デフォルトの名無しさん
16/05/01 17:14:32.74 X/eAHaZZ.net
>>79
最後の一行で終わっとるじゃん。
あとEmptyやNullを受け取ったり返したり。
ライブラリ的な関数はVariantになりがちだ。
81:デフォルトの名無しさん
16/05/01 17:35:31.90 sRpB4XMF.net
セルの数字が、文字型になったり数字型になったりするから、
Variantが楽なんだよな。
82:デフォルトの名無しさん
16/05/01 18:29:04.37 FGPo8aL5.net
>>80
だ、だって宣言しないで使える変数はVariant型だけだし(震え声
83:デフォルトの名無しさん
16/05/01 18:36:29.17 pOSQMib2.net
>>79
まぁね。本当はクラス作ってインターフェースで多態性持たせたりする方が安全なんだけど、
VBAは1クラス1モジュールという制限があってぽこぽこ作ると分かり辛くなるから
結局程度の問題で、「Variantは実行時にしか型の違いによるエラーを確認出来ないことがある」という認識さえあれば
VBAで使うのは止むなしといったところがあると思う。
シートやレンジオブジェクトとの親和性も高いしね。
84:デフォルトの名無しさん
16/05/01 20:02:25.44 FGPo8aL5.net
>>83
Variant型はハグの元だっていうのは、単に理解が浅いだけだからな。
本当にバグの元ならJavaScriptなんて使えたもんじゃねぇだろうと。
85:デフォルトの名無しさん
16/05/01 20:24:15.84 4tDBI2/Z.net
>>79
いや、君の言ってる
> 下手に宣言するクセつけない方がいいけどな。
が意味不明なんだけど
86:デフォルトの名無しさん
16/05/01 20:36:58.58 pgSGezQj.net
引数の型と返り値の型はVariant
ローカル変数は、ない
これがオレの理想
87:デフォルトの名無しさん
16/05/01 20:37:38.51 pgSGezQj.net
理想は言い過ぎたな
スタンダードくらいか
88:デフォルトの名無しさん
16/05/01 20:41:05.62 ycnEliip.net
>>79
ID:FGPo8aL5
バカ発見
89:デフォルトの名無しさん
16/05/02 07:24:52.98 l4EfLYgv.net
>>86
えっどういうこと?
まさかスタティックおじさん?
90:デフォルトの名無しさん
16/05/02 07:32:53.88 IhhEj+7h.net
>>89
スタティックと>>86とどう繋がる?
91:デフォルトの名無しさん
16/05/02 10:17:18.36 3YV7E0Ft.net
スタティックおじさん
でググってこい
92:デフォルトの名無しさん
16/05/02 14:44:30.79 qnyBKwLu.net
下記マクロにてVBAのIE操作で自動ログインさせているのですが、ID,パスワードを自動入力後
ログインボタンを押すマクロですが、一定時間(10~20時間?)経過後、同じマクロを実行しても
ログインボタンが押せなくなっており、ログインできず処理が中断してかなり困っています。
一度手動でログイン後、再度マクロを実行すると問題なくログインボタンが押せるのようになるのですが、
何が問題なのでしょうか?
Sub ログイン()
Set objie = CreateObject("internetexplorer.application")
objie.Visible = True
objie.Navigate "URLリンク(s10.kabu.co.jp)
Do While objie.Busy = True Or objie.ReadyState <> 4
DoEvents
Loop
objie.Document.All.SsLogonUser.Value = "自分のID"
objie.Document.All.SsLogonPassword.Value = "パスワード"
Dim waitTime As Variant
waitTime = Now + TimeValue("0:00:1")
Application.Wait waitTime
Dim obj As Object 'objie.Document.forms(0).submitでも代替可
For Each obj In objie.Document.getElementsByTagName("input")
If obj.Value = "ログイン" Then
obj.Click
Exit For
End If
Next
End Sub
93:デフォルトの名無しさん
16/05/02 15:56:15.53 WvgoLY0A.net
「ログインボタンが押せなくなって」るんなら、VBA関係ないんじゃないの?
94:デフォルトの名無しさん
16/05/02 18:35:24.79 tBJRQx2n.net
>>92
ドキュメントの中を操作するときは、
objie.Busy = True Or objie.ReadyState <> 4
のループの後に、
objIE.document.ReadyState が "complete"になるまで待った方がいい。
95:デフォルトの名無しさん
16/05/02 18:46:14.55 8Cx+VcMT.net
>>92
Excelのバージョンの問題ですね
96:デフォルトの名無しさん
16/05/02 18:58:03.00 rgztSLD4.net
>>84
>>>83
>Variant型はハグの元
今後可愛い女性に対してなら必ず使わせてもらおう
男が使ったら顔の形が分からなくなるくらいまでぶん殴るかも知れない
97:デフォルトの名無しさん
16/05/02 20:02:50.58 xcJ43A0J.net
>>94
これかな
試しにループ除いて、2,3秒待ってからクリックするようしてみたらできないか?
98:デフォルトの名無しさん
16/05/02 20:53:03.32 Xt0DxDQ3.net
高度なことがしたくて
Visual Basic
Visual C#
の2つを平行で勉強はじめたけどそっくりすぎやしないか?
これどっちか1つにしぼるとしたらどっちがいい?
99:デフォルトの名無しさん
16/05/02 20:57:35.14 xZrjNArl.net
なぜここで聞く
100:デフォルトの名無しさん
16/05/02 21:08:12.40 3bYl7aeD.net
>>98
そんなのVBAに決まってるだろ
101:92
16/05/02 21:08:53.84 qnyBKwLu.net
>>93-95,>>97
レスありがとうございました。ちなみにExcelのバージョンは2016です。
調べてみたら、確かに94氏の言う通り、objIE.document.ReadyState = "Complete"
のループを追加しないとエラーの原因になるんですね。一定時間が経過してから
上記を追加して検証してみます。ありがとうございました。
102:デフォルトの名無しさん
16/05/02 21:22:28.55 4tcpikla.net
>>98
勉強したらオレにLINQを教えてくれ
103:デフォルトの名無しさん
16/05/02 21:55:58.22 l4EfLYgv.net
高度なことってなんだよ
CかC++をやれよ高度だぞ
104:デフォルトの名無しさん
16/05/02 22:00:15.92 4tcpikla.net
C#の方がモテる
105:デフォルトの名無しさん
16/05/02 22:06:27.11 RcDnq76T.net
よし!C#を勉強しよう!
106:デフォルトの名無しさん
16/05/02 22:48:52.56 RnthQ0WY.net
.netでエクセルは茨の道やで
107:デフォルトの名無しさん
16/05/02 23:57:45.81 xuf7icL/.net
どこの現場いってもExcel仕事ばっか。
俺はプログラマだっての。
108:デフォルトの名無しさん
16/05/02 23:58:44.90 4tcpikla.net
俺が若い頃はさー、VBAの貧弱な言語機能を補うためにライブラリを書いて配布して文句言われて一つ一つ苦労してデバッグしたりとかさー、
そういう苦労が山ほどあったわけよー、分かる? それを今は .Net連携だとかで済ますっていうのがさー、心がこもってないっていうかさー
109:デフォルトの名無しさん
16/05/03 00:04:12.47 VOABePut.net
しょうがねぇからpaizaにVBAの実務経験入れようとしたら、
プログラム言語とみなされてなかった。死にたい。
110:デフォルトの名無しさん
16/05/03 04:29:40.49 K2cMa6s9.net
EXCELてvb.netが組み込まれてればいいのに
111:デフォルトの名無しさん
16/05/03 06:21:01.33 m0WSkRh/.net
>>106
確かに
仕方なく vbs でやってたけど最近 PowerShell の方が楽だと気づいた
112:デフォルトの名無しさん
16/05/03 08:57:22.05 +0pS9A2f.net
>>98
多分VBから入ってObject指向の考え方を押さえてからC#の文法を押さえるといいかも
VBAやってる人がいきなり考え方も文法も違うのをやるとかえってキツいかもよ
113:デフォルトの名無しさん
16/05/03 09:43:53.02 yyfQ64gm.net
VBAは.NETと混同される事が多い。
114:デフォルトの名無しさん
16/05/03 11:50:04.12 WpiLU58G.net
エクセル2013だけど、グループボックスに表示されている文字の
大きさや色を変えることはできないですか?
115:デフォルトの名無しさん
16/05/03 12:23:18.09 F7Orkgnr.net
>>111
いやそれやったらvbsのが楽や言っとんのやでw
116:デフォルトの名無しさん
16/05/03 12:37:00.12 TF5VRcqZ.net
>>109
COBOLはあるのになw
117:デフォルトの名無しさん
16/05/03 12:49:05.33 IJoN7jmc.net
X vbsのが
O vbsの方が
O vbsが
日本語は正確にね。
118:デフォルトの名無しさん
16/05/03 13:09:39.65 TF5VRcqZ.net
>>117
関西弁であること自体はスルーなのか?
119:デフォルトの名無しさん
16/05/03 19:29:08.93 G9XEXQGe.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrent(Covenant)が活発な情報交換・交流コミュニティでオープンソース開発されています(プログラマー募集中)
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise氏)がそういう人と話したいそうなので、よろしければツイートお願いします<(_ _)>
URLリンク(twitter.com)
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできない情報発信好きアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
3
120:デフォルトの名無しさん
16/05/03 19:46:05.17 TF5VRcqZ.net
マルチ死ね
121:デフォルトの名無しさん
16/05/03 21:52:26.24 yyfQ64gm.net
VBAで通信・・・地獄かな?
122:デフォルトの名無しさん
16/05/03 21:55:40.94 H0kUs87y.net
色んなところで見るけどマジもののキチガイっぽくて怖い
123:デフォルトの名無しさん
16/05/04 07:47:26.67 699UW8S3.net
Vbaでバージョン管理ってどうやるんです?
124:デフォルトの名無しさん
16/05/04 09:51:25.99 PaYYDWD9.net
Public Cosnt Version = "x.xx"
125:デフォルトの名無しさん
16/05/04 12:09:43.80 v4t0cuU7.net
>>123
普通にモジュール単位でGitとかで?
126:デフォルトの名無しさん
16/05/04 12:20:35.13 oenZgVkw.net
ファイル名に日付でええやん
それで困るようなマクロ作ってるとしたら、その方が大問題やで
127:デフォルトの名無しさん
16/05/04 13:17:25.90 6R2nO+Ch.net
>>126
うーん、君はプログラマなのか、それともVBAジジイなのかどちらなのかな
128:デフォルトの名無しさん
16/05/04 15:49:03.52 kgGBLx4K.net
A1に AA1へ、B1に BB1へジャンプするボタンを作成したいです。
マクロお願いします。
129:デフォルトの名無しさん
16/05/04 16:34:05.11 vhNrbATP.net
>>128
ボタンの作成もVBAでってことよね?
各セルのサイズのボタンでいいのね?
130:デフォルトの名無しさん
16/05/04 20:47:54.52 kgGBLx4K.net
>>129
よろしくお願いします!
131:デフォルトの名無しさん
16/05/04 21:28:07.96 RttM+uYJ.net
>>128
「ハイパーリンクを追加」
132:デフォルトの名無しさん
16/05/04 21:53:24.10 Z9f5Mv8i.net
>>127
なんやVBAジジイて?俺はハゲとらんで
133:デフォルトの名無しさん
16/05/04 23:57:31.15 UxdZjK7v.net
あ
134:デフォルトの名無しさん
16/05/05 00:07:18.30 MXj1Omkp.net
>>128
'***通常公開マクロ(ボタン作成用なのでボタン追加後不要なら消してもいい)
'指定位置に指定範囲へのジャンプボタンを作成
Sub InitializeJumpButton()
Call AddJumpButton(Range("a1"), Range("aa1"))
Call AddJumpButton(Range("b1"), Range("bb1"))
End Sub
'ActiveSheetにあるジャンプボタンをすべて削除(ボタン作成のやり直し用として)
Sub DeleteJumpButtons()
Dim btn As Object
For Each btn In ActiveSheet.Buttons
'OnActionに"JumpButton_Click"を含むボタン
If btn.OnAction Like "*JumpButton_Click*" Then btn.Delete
Next
End Sub
'指定セル範囲にボタン配置
Private Function AddJumpButton(TargetRange As Range, JumpRange As Range) As Object
With TargetRange
Set AddJumpButton = .Worksheet.Buttons.Add(Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
End With
With AddJumpButton
.Caption = "ジャンプ"
.OnAction = "'JumpButton_Click """ & JumpRange.AddressLocal(External:=True) & """'"
End With
End Function
'***内部処理マクロ(ボタンクリック時の処理なのでボタン追加後は削除してはだめ)
'Jumpボタンクリック時のFunction(各ボタンで共通)
Public Sub JumpButton_Click(JumpAddress As String)
Call Application.Goto(Range(JumpAddress))
End Sub
135:デフォルトの名無しさん
16/05/05 09:53:33.08 wVu1dK4o.net
おみくじ 0953 大吉 → ♒ 水瓶座
.... 吉 → ♌ 獅子座 ♍ 乙女座
.... 中吉 → ♎ 天秤座
.... 小吉 → ♈ 牡羊座 ♉ 牡牛座 ♊ 双子座 ♑ 山羊座
.... 末吉 → ♋ 蟹座 ♐ 射手座 ♓ 魚座
.... 凶 →
.... 大凶 → ♏ 蠍座
136:デフォルトの名無しさん
16/05/06 12:27:37.21 9WuDa+H7.net
新書版のVBA入門書って意識高い系なの?
137:デフォルトの名無しさん
16/05/06 15:32:29.40 jeM8Wxz0.net
いまだに紙の本なんか読んでるやつ、って思われるだけの時代遅れ
仕事もできなさそうなイメージしかない
138:デフォルトの名無しさん
16/05/06 15:47:33.28 7cHuoK0Q.net
紙の本を無駄に否定する奴の方が馬鹿
お互いに利点はある
139:デフォルトの名無しさん
16/05/06 19:35:21.05 MWUQQppA.net
意外と手に感じる厚みから、どの内容がどこにあるのかすぐ分かるし、
ちょっと違うページ見たい場合に指挟んでおけばすぐ戻れるし、
ただ読むだけなら電子書籍でいいけど、専門書とかは紙の方がまだ使い勝手がいい。
なんか最初に期待されていた「辞書の様な厚みの本を軽々持ち運べる」っていう方面の利便性とは逆行ってるけど。
140:デフォルトの名無しさん
16/05/06 19:49:09.28 VrRBN5VM.net
別に紙だろうがネットだろうがどっちでもいいと思う。
本人にとって分かり易くて使い易ければ。
それは手段であって目的ではない。
141:デフォルトの名無しさん
16/05/06 21:47:39.28 UUicjikB.net
紙媒体だと全文検索できないだろ
そういうことだよ
142:デフォルトの名無しさん
16/05/06 21:55:45.06 WGsHbg0z.net
全文検索したくなる時点で、「書籍」としては三級品だがな
143:デフォルトの名無しさん
16/05/06 22:03:07.91 jeM8Wxz0.net
そのりくつはおかしい
さすがに俺でも気付くレベル
144:デフォルトの名無しさん
16/05/06 22:31:34.28 nS8waJnA.net
ライトノベルとか漫画しか読まない(読めない)人には検索は必要ないんじゃない?
技術書こそ電子書籍の本領発揮する場所だし。
ブックマークやブラウズ機能使えば指の数以上の働きできるし。
もはや、「分厚い辞書を持ち運べる」レベルではなく「司書つきの私設図書館を持ち運べる」レベルだよ。
ちゃんと使えばね。
145:デフォルトの名無しさん
16/05/06 22:34:13.21 3OzCd6+q.net
電子書籍って恥じらいながらちんこしゃぶってくれたりするんか?
146:デフォルトの名無しさん
16/05/07 00:37:16.06 znoXDAwn.net
スレチなのでスルーで
147:デフォルトの名無しさん
16/05/07 02:36:05.94 doNSv0Rb.net
ブックマーク張るのに、全文検索してブックマーク張るのか?
普通は目次や索引からあたりをつけるか、読み進めて行ってマークするんだぜ
検索するにしても、見出しを優先して検索する方が効率的なわけで
全文検索するという事は、まともな編集がされてないって事だぜ
148:デフォルトの名無しさん
16/05/07 04:00:08.68 15PuB45p.net
重たい技術書なんか持ち歩けるか!
ってタブレットとスキャンスナップも
買ったんだけどどうも合わなかった。
なんか頭に入ってこない感じで。
漫画なら全然いいんだけど技術書は
結局紙媒体買ってるわ。
149:デフォルトの名無しさん
16/05/07 10:25:44.21 1wAcRjrQ.net
入門書がどうのこうのって話から始まったのに。全文検索が必要な本ってその次のレベルだろ。
150:デフォルトの名無しさん
16/05/07 11:15:06.02 RCS6miPN.net
両方利点があるに決まっとる
151:デフォルトの名無しさん
16/05/07 11:42:59.57 98qiMegf.net
書籍という形態がもう古い
プレゼンスライドのように短時間で要点を得る事が出来る媒体が現代的
152:デフォルトの名無しさん
16/05/07 11:48:35.34 Nq/4SgpV.net
どういう知識なんだそれ
153:デフォルトの名無しさん
16/05/07 11:53:03.45 8kiHQWJT.net
さすがエクセルVBAの達人だけあってどれもこれもピントがずれたレスばかりだなw
154:デフォルトの名無しさん
16/05/07 15:00:10.35 1wAcRjrQ.net
>>153
んじゃ、ここでピントの合ったレスをID:8kiHQWJTがどうぞ
155:デフォルトの名無しさん
16/05/07 15:35:39.10 nzotyd+v.net
プロならMSDNやオンラインヘルプだけで十分
紙だろうが電子だろうが書籍の出番なし
156:デフォルトの名無しさん
16/05/07 16:20:40.94 PC4ZOeic.net
そんなことより
オフラインのヘルプ日本語
157:版が欲しい
158:デフォルトの名無しさん
16/05/07 16:27:15.49 6qCtvFTs.net
初級者ならオフラインヘルプ書籍だけで十分
電子オンラインヘルパーさんの出番なし
159:デフォルトの名無しさん
16/05/07 17:34:52.23 sN4H5bv9.net
>>155
ドン引き
160:デフォルトの名無しさん
16/05/07 17:49:10.43 1Difn6h5.net
プロのくせに独力解決できず、オンラインでヘルプミーするとかどうよ
161:デフォルトの名無しさん
16/05/07 18:04:13.20 QutgNX3W.net
>>156
Office 2013 VBA用オフライン ヘルプ ファイルが欲しい場合~開発時に役立ちます! - 元「なんでもエンジニ屋」のダメ日記
URLリンク(nasunoblog.blogspot.jp)
これではダメ?
162:デフォルトの名無しさん
16/05/07 22:11:16.28 sN4H5bv9.net
>>159
出ていってくれ
163:デフォルトの名無しさん
16/05/08 00:54:50.32 ikF8GjeW.net
>>160それ英語版や~ん
164:デフォルトの名無しさん
16/05/08 01:10:44.31 HXCktBbn.net
えっこの程度の簡単な英語も読めなでプログラミングしてるの
日本語ヘルプなんて誤訳だらけで役に立たないのに
165:デフォルトの名無しさん
16/05/08 04:17:19.71 ikF8GjeW.net
じゃぁさ、>>163の文章を英語で書いてみてよ?!
166:デフォルトの名無しさん
16/05/08 06:04:10.40 d67L2ADZ.net
書いてみてよだって ププ
167:デフォルトの名無しさん
16/05/08 08:58:00.55 7UXL6x+W.net
Oh, English with this easy degree can also be read, and is it being stroked and programed?
Japanese help isn't useful full of mistranslation.
168:デフォルトの名無しさん
16/05/08 09:40:20.29 cY3IZjLs.net
Hey, you dare work on programming
with poor ability not to read this easy English?
The MSDN document in Japanese translation doesn't help!
169:デフォルトの名無しさん
16/05/08 10:20:00.62 MurkxjfX.net
英語初心者は、Oh を文頭につけたがる
こなれた感を必死に出そうとして滑稽
Oh 坊やと英語板では呼ばれている
170:デフォルトの名無しさん
16/05/08 10:45:47.51 NRyLEpvc.net
>>166
>>168
ですってyo
171:デフォルトの名無しさん
16/05/08 11:33:31.06 rP7gnQo6.net
CellのメンバーであるFormulaについて調べようと思って英語の記事読んでたら
最後の方で「セルに書く方の関数の事やんけ!」ってなった事はある。
172:デフォルトの名無しさん
16/05/08 11:35:57.16 7UXL6x+W.net
>>168
文句はエキサイト翻訳に言えばいいと思うよ...
恥ずかしい奴 w
173:デフォルトの名無しさん
16/05/08 13:08:20.31 cY3IZjLs.net
>>171
Hey, you dare work on programming
with poor ability not to WRITE this easy English?
The translation service of Excite doesn't help!
174:デフォルトの名無しさん
16/05/08 14:12:42.71 6KbaYcKf.net
クラスを使って、その集合をあるプロパティの値でソートして、どういう形にせよ順番にならべるにはどうしたらいいでしょうか?
具体的なたとえで言いますと
Personというクラスからたくさんオブジェクトをつくり
その1つのプロパティであるBirthDayで生年月日順で人を並べたいのです。
175:デフォルトの名無しさん
16/05/08 14:29:53.33 QvSZMceu.net
いきなり質問で申し訳無いのですが、
With Sheet3
Sheet1.Range(
176:デフォルトの名無しさん
16/05/08 14:30:54.84 QvSZMceu.net
いきなり質問で申し訳無いのですが、
With Sheet3
Sheet1.Range("A1").CurrentRegion.Copy .Range("A1")
With .Range("A1").CurrentRegion
.AdvancedFilter xlFilterInPlace,Sheet2.Range("A1").CurrentRegion
.SpecialCells(xlCellTypeVisible).Clear
End With
.ShowAllData
For a=.Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
177: If .Range("A" & a)="" Then .Rows(a).RntireRow.Delete End If Next a End With Sheet1とSheet2を比較し、変更があったところをSheet3にコピーしているのですが、 変更箇所がわかるようにセルの色を変えたいのですが、どうしたらよいかわからず 困っています。わかる方いらっしゃいますでしょうか?
178:デフォルトの名無しさん
16/05/08 14:35:59.31 QvSZMceu.net
Rntire⇒Entire です。失礼しました。
179:デフォルトの名無しさん
16/05/08 14:36:08.66 ZUgYOGn0.net
>>173
インデックス[0~n-1]の配列をプロパティ順にソートしておく。
対象のクラスオブジェクトの配列を、先ほど作っておいたインデックスに沿ってpermutateする。
180:デフォルトの名無しさん
16/05/08 15:05:36.92 E74hVYZW.net
>>173
シートにインスタンスオブジェクトを識別するIDと
プロパティをA列、B列に入力して
プロパティの列目でソートする
ID列の値でアクセスする
インスタンスオブジェクトはdictionaryに格納してIDをキーにしておく
181:デフォルトの名無しさん
16/05/08 15:08:58.84 E74hVYZW.net
>>175
if文で比較して違ったらrange.interior.colorプロパティを変えるとか
書き方が判らないのはマクロを記録してみたら判ると思うけど?
182:デフォルトの名無しさん
16/05/08 15:12:38.09 rP7gnQo6.net
>>173
Sub Test(Person, Collection)
i = 1
If Collection.Count Then
For i = i To Collection.Count
If Person.BirthDay < Collection(i).BirthDay Then Exit For
Next
End If
Collection.Add Person, , i
End Sub
>>175
Sub Test(Sheet1, Sheet2, Sheet3)
s1d = Sheet1.UsedRange.Value
s2d = Sheet2.UsedRange.Value
For i = LBound(s1d, 1) To UBound(s1d, 1)
For j = LBound(s1d, 2) To UBound(s1d, 2)
If s1d(i, j) <> s2d(i, j) Then
Sheet1.Cells(i, j).Interior.Color = RGB(255, 0, 0)
Sheet1.Cells(i, j).Copy Sheet3.Cells(i, j)
End If
Next
Next
End Sub
183:デフォルトの名無しさん
16/05/08 15:12:56.95 QvSZMceu.net
>>175
おそらく
With .Range("A1").CurrentRegion
.AdvancedFilter xlFilterInPlace,Sheet2.Range("A1").CurrentRegion
.SpecialCells(xlCellTypeVisible).Clear
End With
の間に入れるのだろうとは思ったのですが、うまくいきません。
if文で比較というのは、ShowAllDataの前に入れるってことですか?
184:デフォルトの名無しさん
16/05/08 15:44:19.75 QvSZMceu.net
>>180
ありがとうございます。
Sub Test(Sheet1, Sheet2, Sheet3)
の部分は、シート名をいれるのでしょうか?
185:デフォルトの名無しさん
16/05/08 15:47:12.37 rP7gnQo6.net
>>182
Worksheetオブジェクトを入れる。
186:デフォルトの名無しさん
16/05/08 16:01:33.95 QvSZMceu.net
>>182
one=Worksheet("Sheet1").UsedRange.Value
としているのに、For分のLBound(one,1)の所で配列がありませんと出てしまいます。
187:デフォルトの名無しさん
16/05/08 16:45:05.73 MWz94FDA.net
リンクの埋め込みについてですが
自動記録で試したところ
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="Sheet2!A1"
このようなコードが出てきたのですが
選択中のセルに実行する命令では無くセル番地で実行する場所を指定したいのですが、一体どう書けばいいのでしょうか?
188:デフォルトの名無しさん
16/05/08 17:43:54.77 Uh7lvDUN.net
>>185
excel vba セル 番地 指定 でググる
189:デフォルトの名無しさん
16/05/08 17:49:35.23 B17gXYq2.net
>>185
ActiveSheet.Hyperlinks.Add Anchor:=ActiveSheet.Range("B1"), Address:="", SubAddress:="Sheet2!A1"
190:デフォルトの名無しさん
16/05/08 18:50:05.07 LbMOyLBe.net
>>187
>>186
ありがとうございます。
191:デフォルトの名無しさん
16/05/08 21:28:50.28 Mc3+72Z/.net
丸投げのお願いで申し訳ありませんが、下記の作業ができるVBAプログラムが欲しいです。
隣り合ったふたつのセルを結合したいのですが、
1.セルA1とB1を結合
2.セルA2とB2を結合
3.以降、任意の行まで同じ作業を繰り返し
4.AB列で作業が終わったら次はCD列でも同じ作業
5.CD列が終了したらEF列に移動
6.以降、任意の列まで同じ作業を繰り返し
です。
その際結合させるふたつのセルにはそれぞれ値が入っていますが、活かすのは左のセルの値です。
結合の際の「右上のデータが~」というメッセージは無視したいです。
どなたかお分かりの方がいらっしゃいましたらお願いします。
192:デフォルトの名無しさん
16/05/08 22:06:12.34 to9qHxlC.net
結合って文字列の結合じゃなくてセルの結合か
193:デフォルトの名無しさん
16/05/08 22:14:16.85 to9qHxlC.net
>>189
こんな感じ?
For cc = 1 To Selection.Columns.Count Step 2
For rr = 1 To Selection.Rows.Count
Selection.Cells(rr, cc + 1).Value = ""
Selection.Range(Cells(rr, cc), Cells(rr, cc + 1)).MergeCells = True
Next
Next
194:デフォルトの名無しさん
16/05/08 22:47:03.73 Mc3+72Z/.net
>>191
さっそくのご回答ありがとうございます。
今から試してみます。
195:デフォルトの名無しさん
16/05/08 23:07:29.52 Mc3+72Z/.net
>>191
書いていただいたVBAをコピペして試しましたが、セルをひとつ結合しただけで終わってしまいました。
196:デフォルトの名無しさん
16/05/08 23:09:23.84 Mc3+72Z/.net
結合したい範囲を選択して実行したら希望通り動きました。
ありがとうございます!
197:デフォルトの名無しさん
16/05/10 01:32:49.02 IdRScl5y.net
以前全く別の場所で教えてもらったExcelのVBAで意味が理解できないところがあり、おわかりに
なられるのであれば、意味を教えていただきたいのですが、
For a = 2 To Lastrow1 ※Lastrow1はSheet1の最終行
①Set fnd =(Sheet2.Columns(14).Find(Sheet1.Cells(a,4).Value)
if Not (fnd Is Nothing) Then
Day=DateSerial(2000,1,1)
num=Sheet2.Cells(fnd.Row,14).Value
fad=fnd.Address
Do
If Sheet2.Cells(fnd.Row,12).Value > Day Then
a2=fnd.Row
Day=Sheet2.Cells(a2,12).Value
End If
Set fnd = Sheet2.Columns(14).FindNext(fnd)
Loop While Not fnd Is Nothing And fnd.Address <> fad And Sheet2.Cells(a2,14).Value=num
Sheet2の12列目には日付が入っており、14列目には番号が入っています。
それを一致させているのはわかるのですが、特にLoopを抜ける条件のところが
理解できません。おわかりになる方はいらっしゃいますでしょうか?
198:デフォルトの名無しさん
16/05/10 02:05:42.50 wnAOqKt0.net
以下の条件の時はLoopし続ける
Not (fnd Is Nothing) → fnd変数がNothingでは無い
And (fnd.Address <> fad) → かつ fndセルのアドレスがfadと一致しない
And (Sheet2.Cells(a2,14).Value=num) → かつ Sheet2.Cells(a2,14).Valueとnumが一致
つまり以下の場合にLoopから抜ける
・fndがNothingになった時
・または fndセルのアドレスがfadと一致した時
・または Sheet2.Cells(a2,14).Valueとnumが一致しない
199:デフォルトの名無しさん
16/05/10 02:21:30.80 IdRScl5y.net
>196
ありがとうございます。
Set fnd = Sheet2.Columns(14).FindNext(fnd)
で最初の検索から、更に同じ番号のセルがないかを検索して、
見つかった場合は、fnd内にその見つかった番号が入ると思うのですが、
そうなると、検索で番号が見つかっているので既に番号の一致はとれていて、
更にSheet2.Cells(a2,14).Valueとnumの番号の一致をとっているのは、
2重で一致をとっていることになるのでしょうか?
文章が下手ですみません。
200:デフォルトの名無しさん
16/05/10 03:51:15.80 wnAOqKt0.net
>>197
そうなるかも・・・加えて言えば、(Not fnd Is Nothing) と (fnd.Address <> fad)の
条件部分もVBだと両立しないのでNothingの判定はいらないかも
※fnd変数のNothing 判定を並列のIF条件に書くと fndがNothing の時にたぶん実行時エラーが出る
ループの条件はたぶん以下のように省略できる
Do
~(ループ処理)
Set fnd = Sheet2.Columns(14).FindNext(fnd)
Loop While (fnd.Address <> fad)
201:デフォルトの名無しさん
16/05/10 04:06:59.93 IdRScl5y.net
>>198
ありがとうございます。
Sheet2の14列目に同じ番号が複数あり、番号だけで比較すると、
古い行がヒットしてしまうので、12列目に日付も書いてあり、
最新の状態の行を確認して、その結果を反映させたかったのですが、
アドレスの不一致だけで大丈夫なのでしょうか?
202:デフォルトの名無しさん
16/05/10 04:43:26.31 pT7b4QGj.net
試してみれば?
203:デフォルトの名無しさん
16/05/10 04:46:33.24 IdRScl5y.net
>>200
試してはいるのですが、少し行数も多く確認に時間がかかってしまっています。
すみません。
204:デフォルトの名無しさん
16/05/10 05:27:34.40 IdRScl5y.net
>>198
すみません。うかがいたいのですが、
Set fnd = Sheet2.Columns(14).FindNext(fnd)
Loop While (fnd.Address <> fad)
の場合、アドレスが一致するまでループを繰り返す、
一致したらループを出る、という事だと思うのですが、
例えば、同じ番号の行が2行あったとして、
その2行目の方が新しい日付の行だとして、その行をこの後に続く
条件式に当てはめていきたいのです。
で、一致するまでという事は、最初の検索で1行、FindNextで更に検索で
日付の新しい番号の一致するもう1行、でまた検索で
最初の1行でアドレスが一致してループが抜ける・・・合計3回検索することになると思うのですが、
最終的にループを出る時は、最初の行で抜けてしまう気がするのですが、
その解釈は間違ってますでしょうか?
205:デフォルトの名無しさん
16/05/10 06:06:50.39 wnAOqKt0.net
>>202
fndの値は確かに最初の行に戻って抜けてしまうが、
FindNext直前のIf文の所で 変数 a2 に最新日付の行番号を取得しているようだし
Loopを抜けた後はそれを使えば欲しい行は持ってこれると思う
Sheet2.Rows(a2)
Sheet2.Cells(a2, [列番号])
206:デフォルトの名無しさん
16/05/10 06:19:28.37 wnAOqKt0.net
Range.Find , FindNext は検索の終端を検知できずループしてしまうから
最初のアドレスと比較することでループを抜ける条件にしてるんじゃないかな
207:デフォルトの名無しさん
16/05/10 06:21:27.00 IdRScl5y.net
>>202
本当にありがとうございます!
なるほど、確かにループは抜けてもa2にはその前の状態ですね!
やっと意味がある程度わかりましたw
208:デフォルトの名無しさん
16/05/10 06:26:04.87 pT7b4QGj.net
試す場合は、一旦そのソースコードから離れて、
要点だけを抜き出した、短く新しいソースコードで試す
複雑なソースコードで、検証しない
なぜなら別の要因が混じってくるから、
そういうものを排除した環境で、テストする
209:デフォルトの名無しさん
16/05/10 06:26:26.62 IdRScl5y.net
>>204
あ、なるほど。Findだけだと検索し続けてしまうのですね。
210:デフォルトの名無しさん
16/05/10 06:28:47.47 IdRScl5y.net
>>206
了解しました。ありがとうございます。
211:デフォルトの名無しさん
16/05/13 03:32:37.47 mSOPxExz.net
ExcelVBAで、ieの制御を行っているのですが、Linkをクリックしてページ移動したらその後、何も制御できません。
例えば、Aというサイトを開き、そのサイト内のリンクから、Bというサイトに移動します。そして、BというサイトのリンクからCというサイトに移動したいのに、Bというサイトに移動したまま何の制御もできません。
OSはwindows8.1
excelは2013
ieは11です。
212:デフォルトの名無しさん
16/05/13 04:50:10.69 xGtILQbg.net
>>209
人間がマウス操作してリンクをクリックするの?
そもそもIE11では、ReadyStateの値がちゃんと変わらないので、ちょっと工夫しないとうまく制御できない
画面がチラチラしてもいいんなら、こうやれば読み込みの完了が旧バージョンと同じように判定できるようになるけど
objIE.Visible = False ' 一度ブラウザを消して
objIE.Navigate sURL ' 指定のURLにジャンプしてから
objIE.Visible = True ' もう一度表示する
213:デフォルトの名無しさん
16/05/13 07:45:26.02 bIkr/ix1.net
>>209
どんなコードになってるのか、何でIEを操作してるのか、俺たちにはわからない
214:デフォルトの名無しさん
16/05/13 18:46:19.38 1DtqwGMj.net
FindNextをFindに置き換えて検索って可能なんでしょうか?
215:デフォルトの名無しさん
16/05/13 19:05:27.31 4KmN92Wm.net
可能です
216:デフォルトの名無しさん
16/05/13 19:05:40.89 1DtqwGMj.net
Find(検索対象,After:=検索したいもの,SearchDirection:=xlNext)
としたらFindNextと同意なのでしょうか?
217:デフォルトの名無しさん
16/05/13 19:07:09.71 1DtqwGMj.net
>>213
ありがとうございます。
返信がかぶってしまったのですが、上記と同意なのでしょうか?
218:デフォルトの名無しさん
16/05/13 19:39:21.98 quiTtpKe.net
得られる結果が同じだったとしても、処理が異なるから同意ではないじゃない?
219:209
16/05/13 19:41:39.39 mSOPxExz.net
すみません。以下ソースです。
Dim objIE As InternetExplorer
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.navigate "URLリンク(hogehoge.jp")
Do While objIE.Busy = True Or objIE.readyState <> 4
DoEvents
Sleep 1
If Now > timeOut Then
objIE.Refresh
timeOut = Now + TimeSerial(0, 0, 20)
End If
Loop
timeOut = Now + TimeSerial(0, 0, 20)
Do While objIE.document.readyState <> "complete"
DoEvents
Sleep 1
If Now > timeOut Then
objIE.Refresh
timeOut = Now + TimeSerial(0, 0, 20)
End If
Loop
Sleep 10000
For Each objtag In objIE.document.getElementsByTagName("a")
If InStr(objtag.outerHTML, "○○") > 0 Then
objtag.Click
Exit For
End If
Next
同ページ内の○○というリンクをクリックしてそのページに移動します。そして、移動したページから次のページに移動させるにもieの制御ができないのです。
上記の objtag.ClickやobjIE.document.Links(1).Clickを使っても無反応です。
220:デフォルトの名無しさん
16/05/13 19:42:21.35 1DtqwGMj.net
>>216
申し訳ないです。処理が異なるというのは、
Find(検索対象,After:=検索したいもの,SearchDirection:=xlNext)
では、FindNextのように下まで検索した後、最初の一致セルに戻ってこない
という事でしょうか?
221:209
16/05/13 19:44:35.73 mSOPxExz.net
>>210様
任意のキーワードを入力して、自動でクリックさせています。
>>211様
言葉足らずですみません。
ExcelVBAでサイト内のaタグを自動でクリックするマクロを作っています。
222:デフォルトの名無しさん
16/05/13 21:32:30.68 4amCJiHY.net
>>218
どっちが使いやすいか自分で判断するといい
Sub macro()
Dim srcRng As Range, fnd As Range
Dim firstAddr As String
Set srcRng = ActiveSheet.UsedRange
Debug.Print "■Findのみ"
Set fnd = srcRng.Find("test", LookAt:=xlWhole, SearchDirection:=xlNext)
If Not (fnd Is Nothing) Then
firstAddr = fnd.Address
Do
Debug.Print fnd.Address
Set fnd = srcRng.Find("test", After:=fnd, LookAt:=xlWhole, SearchDirection:=xlNext)
If (fnd Is Nothing) Then Exit Do
Loop While (fnd.Address <> firstAddr)
End If
Debug.Print "■FindNextあり"
Set fnd = srcRng.Find("test", LookAt:=xlWhole, SearchDirection:=xlNext)
If Not (fnd Is Nothing) Then
firstAddr = fnd.Address
Do
Debug.Print fnd.Address
Set fnd = srcRng.FindNext(After:=fnd)
If (fnd Is Nothing) Then Exit Do
Loop While (fnd.Address <> firstAddr)
End If
End Sub
223:デフォルトの名無しさん
16/05/13 21:52:33.49 1DtqwGMj.net
>>220
上の
Set fnd = srcRng.Find("test", LookAt:=xlWhole, SearchDirection:=xlNext)
のところで、実行時エラー91 オブジェクト変数または With ブロック変数
が設定されていません。 とでてしまいます。
224:デフォルトの名無しさん
16/05/13 21:57:00.89 1DtqwGMj.net
>>220
申し訳ありません。文字の打ち間違いでした。
225:デフォルトの名無しさん
16/05/13 22:05:27.55 1DtqwGMj.net
>>220
何個かのセルにtestといれて試してみたのですが、違いがよくわかりませんでした。
226:デフォルトの名無しさん
16/05/13 22:21:28.96 KRWocFnH.net
>>223
書き方が違う
動きは同じ
227:デフォルトの名無しさん
16/05/13 22:22:28.17 KRWocFnH.net
目的を達成する正解は一つじゃないってことだな
228:デフォルトの名無しさん
16/05/13 22:24:18.61 1DtqwGMj.net
>>223
動きが同じなら
FindNextの方が文が短くてすむ・・・くらいの認識でよいという事ですね?
229:デフォルトの名無しさん
16/05/13 22:28:41.38 1DtqwGMj.net
>>225
なるほど。ありがとうございます。
どちらの方法でも目的が達成できれば書きやすい方でという事ですね。
どちらも、testをアドレスが一致するまで検索するループという認識で
よいんですよね?
230:デフォルトの名無しさん
16/05/14 00:02:13.05 KpaRNRq2.net
別でもう1点伺いたいのですが、
With Sheet3.Range("A1").CurrentRegion
.AdvancedFilter xlFilterInPlace,Sheet2.Range("A1").CurrentRegion
.SpecialCells(xlCellTypeVisible).Clear
End With
という文で、Sheet3の空白で囲まれている表の範囲と
Sheet2の空白で囲まれている表の範囲が比較出来、
Sheet3の不一致の部分だけが残るというのはわかるのですが、
何故比較できているのかが理解できません。
わかる方がいたら教えて下さい。
231:デフォルトの名無しさん
16/05/14 01:59:54.31 KpaRNRq2.net
フィルタオプションでマクロを記録し見てみたのですが、
どう比較しているのかがやはりわかりませんでした。
どなたかご存知でしょうか?
232:デフォルトの名無しさん
16/05/14 02:00:00.21 TfiX7v5Q.net
>>228
Excelのフィルタ機能があるのは知ってると思うけど
列毎に表示する基準を設定できるだろ
その設定をシート2に記述してるだけ
でspecialcellsでclearしてるから消える
clearをinterior.color=rgb(255,255,0)とか変えてみたら?
233:デフォルトの名無しさん
16/05/14 02:19:13.82 KpaRNRq2.net
>>230
Sheet3とSheet2の行(レコード)同士を比較しているとは思うのですが、
Sheet3とSheet2で同じ行はあっても、何行目とか位置が違ったりしているのに、
どういう流れで比較をした結果が可視セルとしてみなされているのだろうと
思ってしまいました。
色は変えてみて、可視セルだけだけが色を塗られました。
234:デフォルトの名無しさん
16/05/14 02:27:15.10 TfiX7v5Q.net
>>231
比較というより
フィルタ機能で列毎に表示または非表示にする条件を
シートにまとめて書いてるだけだって
試しにシート2で1列だけ残して他の列を全部消して動かしてみたら?
235:デフォルトの名無しさん
16/05/14 02:36:02.98 TfiX7v5Q.net
Sheet4を追加して、下のように変えて実行してみたらわかるかも
With Sheet3.Range(
236:デフォルトの名無しさん
16/05/14 02:37:26.14 TfiX7v5Q.net
Sheet4を追加して、下のように変えて実行してみたらわかるかも
With Sheet3.Range("A1").CurrentRegion
.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheet2.Range("A1").CurrentRegion, copytorange:=Sheet4.Range("A1")
End With
xlFilterInPlace→xlFilterCopy に変えて
コピー先をSheet4.Range("A1")に指定
Sheet3の表に、Sheet2のフィルタ条件で、フィルタした結果をSheet4にコピーする
237:デフォルトの名無しさん
16/05/14 02:40:15.99 KpaRNRq2.net
>>232
Sheet3にしか存在しない行だけ色無しになりました。
238:デフォルトの名無しさん
16/05/14 02:42:52.92 TfiX7v5Q.net
フィルタが掛かっている状態かもしれないから
フィルタをクリアしてから実行した方が良い
239:デフォルトの名無しさん
16/05/14 02:49:28.56 TfiX7v5Q.net
シート2の1行目はシート3の列名と等しくなっているはず
シート2の列名の下にフィルタ条件が書かれる
コードを実行すると
シート3の表にフィルタが掛けられる
その条件はシート2に書いた列でその下の値を持つ行だけが表示される
.SpecialCells(xlCellTypeVisible).Clear
をしているから、フィルタを掛けた後表示されているセルはクリアされる
その後、showallしてるからフィルタがクリアされる
結果として、フィルタ条件に合わなかった行が残る
240:デフォルトの名無しさん
16/05/14 02:50:25.32 NImZCMbB.net
表示 > マクロ > マクロの表示
で開いているブックのsubが一覧表示されますが、
ここにaddinしているxlaの関数を表示させることはできないでしょうか。
fileName.xla!subName形式で直接入力すれば起動できることは知っています。
241:デフォルトの名無しさん
16/05/14 02:50:51.66 KpaRNRq2.net
>>234
.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheet2.Range("A1").CurrentRegion, copytorange:=Sheet4.Range("A1")
で型が一致しませんとでます。
242:デフォルトの名無しさん
16/05/14 03:04:50.16 KpaRNRq2.net
>>237
フィルターはかかってなかったのでそのまま実行できました。
入力間違いがありました。失礼しました。
243:デフォルトの名無しさん
16/05/14 03:12:37.15 TfiX7v5Q.net
>>235
元のコードで
clearしてるコードをコメントアウトして実行すると
フィルタした後に、showalldataするから何も変化しないはず
今度は、showalldataをコメントアウトしたらフィルタが掛かった状態のままになるはず
244:デフォルトの名無しさん
16/05/14 03:15:34.80 KpaRNRq2.net
>>237
なんとなくわかった気がします。
Sheet2の見出しより下が検索条件になり、
Sheet3の中のSheet2にある行だけがSheet4にコピーされました。
それが可視セルになりSheet3の中のそれを消せば、Sheet2に無い行が残るわけですね。
245:デフォルトの名無しさん
16/05/14 03:21:50.26 TfiX7v5Q.net
>>238
public sub xlacall()
call fileName.xla!subName
end sub
みたいなのを作るとか
246:デフォルトの名無しさん
16/05/14 03:32:07.92 KpaRNRq2.net
>>241
.ShowAllDataをコメントアウトして実行してから、またコメントアウトをとったら、
実行時エラー 1004 ShowAllDataメソッドは失敗しました。Worksheetオブジェクト
と出るようになてしまいました。
247:デフォルトの名無しさん
16/05/14 07:39:07.00 hiszDsJf.net
>>217
エスパー回答してみると
イントラとインターネットゾーン等でのIE8以降機能の整合性レベルが切り替えにたいする考慮をしていない
対策:Set objIE = CreateObject("InternetExplorer.Application")を
Set objIE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")にする。
248:デフォルトの名無しさん
16/05/14 10:13:09.39 NImZCMbB.net
>>243
せっかくいろんなファイルで利用できるようにライブラリ化したのに、
毎回それつくるっていうのが面倒で質問に来ました。
xla化せずに必要な関数をすべて入れたブックを毎回開けばよくはあるのですが、
xlaってこんなに不便なものか?何かやりようがあるんじゃないか?と思って
調べたもののまったく見つからずにいます。
249:デフォルトの名無しさん
16/05/14 10:17:33.94 TfiX7v5Q.net
>>246
xlaの方でアドイン先のブックにxlaのプロシージャを呼び出すボタンとかを作る様にすれば良いのでは?
ブックにアドインしたら、そのブックにボタンが作成される感じ
250:デフォルトの名無しさん
16/05/14 10:57:07.14 psfsGv+B.net
>>246
VBE窓からだったら
ツール (T) > マクロ (M) > マクロの場所(A) で アドインを選べばいいんだけどね
シートからだとわからん
251:デフォルトの名無しさん
16/05/14 12:37:14.30 GIbFGwdT.net
>>246
俺はアドインに関数を呼び出すフォームのリボンを作ってる
252:246
16/05/15 00:45:01.97 YpwUXGuD.net
みなさんありがとうございます。
>>249
こういう方法があったんですね。
調べてみましたが、これで希望通りの挙動にできそうです。
ありがとうございました。
253:デフォルトの名無しさん
16/05/15 14:26:01.12 WcH5yz8P.net
特定のセルに
2016/05/15
という年月日が入っています。
このセルを含むシートをVBAを使ってCSVに吐き出すと
#2016-05-15#
この様に表示されてしまうのですが、
そのまま年月日で吐き出されるようにコントロールできませんでしょうか。
254:デフォルトの名無しさん
16/05/15 15:19:13.14 CrVPkhRD.net
>>251
何を使ってCSV出力しているか知らないから
Write ステートメントを使用していると仮定して・・・
日付型 (Date) のデータは、共通日付形式を使用して
書き込まれるので日付型を文字列にする必要がある
セル表示形式のテキストをそのまま出力したいなら
Range.ValueではなくRange.Textプロパティを使う
FileNumber = FreeFile
Open "d:\test.csv" For Output As #FileNumber
Write #FileNumber, Cells(1, 1).Text
Close #FileNumber
255:デフォルトの名無しさん
16/05/15 15:19:48.19 ghf3z0AO.net
そりあえずそのコードを貼ってよ
256:デフォルトの名無しさん
16/05/15 15:38:07.34 WcH5yz8P.net
>>252-253
ネットにあったコードをコピペをそのまま使って試してみました。
Cells(i, 3)が年月日で、上手く表示されません。
Sub writeCSVFile_Click()
'変数宣言
Dim filePath As String
Dim i As Long
Dim maxRow As Long
Dim fileNo As Integer
'初期値設定
filePath = ActiveWorkbook.Path & "\data.csv"
maxRow = Range("A1").End(xlDown).Row '最終行取得
fileNo = FreeFile 'FreeFile関数で使用可能なファイル番号取得
'ファイル開く
Open filePath For Output As #fileNo
'最終行までループ
For i = 1 To maxRow
'列の数は決め打ち
Write #fileNo, Cells(i, 1), Cells(i, 2), Cells(i, 3)
Next i
'ファイル閉じる
Close #fileNo
End Sub
257:デフォルトの名無しさん
16/05/15 15:44:13.67 tUFMlsQK.net
>>254
出力じゃなくて表示なの?
意味がわからない
258:デフォルトの名無しさん
16/05/15 15:47:23.68 WcH5yz8P.net
>>255
わかりにくくてすみません。
上記でExcelからCSVに書き出した時に # が入ってしまいます。
259:デフォルトの名無しさん
16/05/15 15:53:44.82 6V2nRwSD.net
>>254
>>252で答えが出てる
260:デフォルトの名無しさん
16/05/15 16:09:42.68 UAuTMPBr.net
ところがTextプロパティには致命的な弱点が
261:デフォルトの名無しさん
16/05/15 16:13:29.08 WcH5yz8P.net
>>257
ありがとうございました。
Cells(i, 3).Text
該当箇所をこの様に書き換えただけで直りました!
262:デフォルトの名無しさん
16/05/15 20:06:14.39 ghf3z0AO.net
Excelで機械のデータシート表を作っていましてカッコ付きに変換するマクロを書きましたが
数字だとマイナスに ex. 123 -> -123
和暦だと西暦に
263:デフォルトの名無しさん
16/05/15 20:10:37.37 ghf3z0AO.net
Excelで機械のデータシート表を作っていまして楽をするためにカッコ付きに変換するマクロを書きましたが
数字だとマイナスに ex. 123 -> -123
和暦だと西暦に ex.平成28年1月1日 -> (2016/01/01)
なってしまいます
文章文字列などならうまくいくのですがどのようにマクロを書いたらいいのでしょうか
Sub 括弧()
ActiveCell.Value = "(" & ActiveCell.Value & ")"
End Sub
264:デフォルトの名無しさん
16/05/15 21:15:44.76 +ceGV5qA.net
>>261
Sub 括弧()
With ActiveCell
txt = .Text '書式変更前の表示テキスト確保(通貨など)
If IsNumeric(.Value) Then
.NumberFormat = "@"
End If
.Value = "(" & txt & ")"
End With
End Sub
265:デフォルトの名無しさん
16/05/15 21:26:13.47 ghf3z0AO.net
>>262
めっちゃスマートに書いてくださってありがとうございます
日付の場合数字の場合など複雑に考えて手をこまねいていました
266:デフォルトの名無しさん
16/05/15 21:33:39.41 iEYIRe/o.net
すいませんエスパーの方お願いします。
ボタンをクリックしたらあるセルをハイパーリンクにしたいのですが
Cells(2, "B") = "=HYPERLINK('test')"
これだけで400エラーが出ます。なぜなのでしょうか
267:デフォルトの名無しさん
16/05/15 21:39:01.79 U6OCYZVH.net
B2セルに直接 =HYPERLINK('test') と入力してもエラーになりませんか
268:デフォルトの名無しさん
16/05/15 22:09:37.23 iEYIRe/o.net
>>265
ありがとうございますm(__)m
シングルクォーテーションがいけなかったんですね
ほんとは変数を付けてURL作ってたので他言語の癖でダブルとシングル両方使わないといけないと思ってました
269:デフォルトの名無しさん
16/05/17 19:14:32.23 Ju7Z8cl/.net
If文が大量になってしまいまとめたいのですが、
For i To Lastrow ※Sheet3の最終行
Set fnd = (Sheet2.Columns(2).Find(Sheet3.Cells(i,2)))
if Not (fnd Is Nothing) Then
if Sheet3.Cells(i,1) = Sheet2.Cells(fnd.Row,1) Then
Else
Sheet3.Cells(i,1)interior.ColorIndex = 3
End if
if Sheet3.Cells(i,2) = Sheet2.Cells(fnd.Row,2) Then
Else
Sheet3.Cells(i,2)interior.ColorIndex = 3
End if
if Sheet3.Cells(i,3) = Sheet2.Cells(fnd.Row,3) Then
Else
Sheet3.Cells(i,3)interior.ColorIndex = 3
End if
・
・
・
if Sheet3.Cells(i,20) = Sheet2.Cells(fnd.Row,20) Then
Else
Sheet3.Cells(i,20)interior.ColorIndex = 3
End if
Else
Sheet3.Cells(i,2).EntireRow.Interior.ColorIndex = 4
End If
Next i
という風にしているのですが、もう少しまとめらないかと思いました。
まとめられるのでしょうか?
270:デフォルトの名無しさん
16/05/17 19:17:20.83 Ju7Z8cl/.net
if Sheet3.Cells(i,2) = Sheet2.Cells(fnd.Row,2) Then
Else
Sheet3.Cells(i,2)interior.ColorIndex = 3
End If
はいらなかったです。失礼しました。
271:デフォルトの名無しさん
16/05/17 20:15:20.61 YEbHD3bH.net
switch文使うとか?
272:デフォルトの名無しさん
16/05/17 20:24:22.15 Ju7Z8cl/.net
>>269
switch文とはどのように使うのでしょうか?
今調べて見てるのですが・・・
273:デフォルトの名無しさん
16/05/17 20:33:31.31 uw1YLM9D.net
>>267
せめて Then Else は条件逆にしたら?
> For i = ? To Lastrow ※Sheet3の最終行
> Set fnd = Sheet2.Columns(2).Find(Sheet3.Cells(i,2))
> If Not (fnd Is Nothing) Then
> If Sheet3.Cells(i,1) <> Sheet2.Cells(fnd.Row,1) Then
> Sheet3.Cells(i,1).Interior.ColorIndex = 3
> End If
> If Sheet3.Cells(i,2) <> Sheet2.Cells(fnd.Row,2) Then
> Sheet3.Cells(i,2).Interior.ColorIndex = 3
> End If
> If Sheet3.Cells(i,3) <> Sheet2.Cells(fnd.Row,3) Then
> Sheet3.Cells(i,3).Interior.ColorIndex = 3
> End if
> ・
> ・
> ・
> If Sheet3.Cells(i,20) <> Sheet2.Cells(fnd.Row,20) Then
> Sheet3.Cells(i,20).Interior.ColorIndex = 3
> End if
> Else
> Sheet3.Cells(i,2).EntireRow.Interior.ColorIndex = 4
> End If
> Next i
274:デフォルトの名無しさん
16/05/17 20:35:42.07 Ju7Z8cl/.net
>>271
そうでした。申し訳ありません。
わざわざ=で、Elseを入れる意味はないですね。
その上で、このIf文をもう少しまとめる方法はないでしょうか?
275:デフォルトの名無しさん
16/05/17 21:09:16.27 Bh5kVr4X.net
この内容だと単純にループで回せば出来そうだけど
For i = 1 To Lastrow '※Sheet3の最終行
Set fnd = (Sheet2.Columns(2).Find(Sheet3.Cells(i, 2)))
If Not (fnd Is Nothing) Then
For j = 1 To 20 '★1列目から20列目まで?
If Sheet3.Cells(i, j) <> Sheet2.Cells(fnd.Row, j) Then
Sheet3.Cells(i, j).Interior.ColorIndex = 3
End If
Next
Else
Sheet3.Cells(i, 2).EntireRow.Interior.ColorIndex = 4
End If
Next i
276:デフォルトの名無しさん
16/05/17 21:29:43.68 kv5Z22Gc.net
>>270
switch文はif then elsif elsif ...
に相当するものだった
列も2~20までforで回�
277:オたら? for i to lastrow for j = 2 to 20 if 条件 then endif next j next i
278:デフォルトの名無しさん
16/05/17 21:35:27.61 Ju7Z8cl/.net
>>273
Set fnd = (Sheet2.Columns(2).Find(Sheet3.Cells(i, 2)))
If Not (fnd Is Nothing) Then
の部分をFor j = 1 To 20 の中に入れてましたが、
よく考えたら、一度検索して見つかったらその行を確認していってるので、
中に入れてたら、何度もヒットさせる余計な処理になってしまってました。
ありがとうございました。
279:デフォルトの名無しさん
16/05/17 21:42:55.17 Ju7Z8cl/.net
>>274
ありがとうございました。
それだけでよかったですね。
280:デフォルトの名無しさん
16/05/19 15:21:44.50 hJ/G9SOx.net
FindのAfterという引数を変数で指定した場合、変数にはセルの値が入っているとして、
その値が入っているセルの位置情報が記憶され、そこから検索がかかるという認識で
よいのでしょうか?
281:デフォルトの名無しさん
16/05/19 16:33:50.64 oZsWPLv6.net
ここに書いてある通り
URLリンク(msdn.microsoft.com)
google とかでexcel vba find とか検索すれば出てくる
282:デフォルトの名無しさん
16/05/20 17:13:57.06 P6F1ZDVP.net
>>278
ID変わりましたが、返信遅くなりました。
そこは見ているのですが、何故変数にはセルの値が入っているのに、セルの場所を指定した事になるのかと思いまして、質問させていただきました。
283:デフォルトの名無しさん
16/05/20 18:50:53.92 gsWAgsom.net
>>279
FindのAfterは値じゃなくて、セル範囲の情報なども含むRangeオブジェクトだよ
Findの戻り値も同じくRangeオブジェクトになる
Rangeオブジェクト
URLリンク(msdn.microsoft.com)
284:デフォルトの名無しさん
16/05/20 21:49:54.04 d/ZNR8o9.net
コンソールで
?"a"&"b"
は
ab
と出力されますが
?"a"&1
は
a 1
と出力されます
なぜ半角スペースが交じるのでしょうか?
285:デフォルトの名無しさん
16/05/20 22:04:33.27 RvnBIaae.net
>>281
? "a"&10
a 8
? "a"&100
a 64
? "a"&1000
a 512
後はわかるな?
286:デフォルトの名無しさん
16/05/20 22:14:31.20 d/ZNR8o9.net
>>282
すいません、さっぱりわかりません。
? 100
100
? "a" & 100
a100
?"a"&100
a 64
?"a100"
a100
?"b"&100
b 64
?"x"&100
x 64
010が2byteで64かなーというのは想像できますが、
何故こうなるのでしょうか
287:デフォルトの名無しさん
16/05/20 22:20:25.08 Pie8/Dil.net
>>281
?"a"&1 を
?"a" & 1 のように
&の前後に空白を入れてやれば"a1"と出力される
試しにコード上で
Debug.Print "a"&1 と&の前後に空白なしで記述すると
Debug.Print "a"; &O1 に自動変換されるので
おそらく文字型と数値型の2つの型のデータが出力されている
数値型データの場合、先頭に空白が入る模様
288:デフォルトの名無しさん
16/05/20 22:33:41.48 d/ZNR8o9.net
>>284
なるほど
&N01
&P01
ではだめで
&O01
でいいのは何ででしょう?
289:デフォルトの名無しさん
16/05/20 22:39:11.93 Pie8/Dil.net
先頭 &O の数値は8進数
先頭 &H の数値は16進数
290:デフォルトの名無しさん
16/05/20 22:39:59.19 RMEVZVQK.net
>>285
&O は8進数
291:デフォルトの名無しさん
16/05/20 22:50:42.69 d/ZNR8o9.net
>>286-287
ありがとうございます!
こういうのは数値リテラルというのでしょうか?
292:デフォルトの名無しさん
16/05/20 23:18:49.15 V/0gJxiW.net
?"a"&100*-1
a-64
293:デフォルトの名無しさん
16/05/21 01:56:41.84 DHWj1BOs.net
>>284
>数値型データの場合、先頭に空白が入る模様
先頭は符号。正の符号が空白で表されてる
294:デフォルトの名無しさん
16/05/21 18:06:47.94 8UwytgDT.net
質問です。
Min,max関数で最小、最大値を求める作業を複数のcsvファイルで行いたい場合どのようにすべきでしょうか?
具体的には=max(a2:a56)という動作をを1000個のcsvファイルに対してまとめて行い、各csvファイルの最大値を1つのファイルにまとめる動作を行いたいです。
1000個csvファイルのデータの位置(a2:a56)は同じです。
このような動作を行うマクロは組むことができるのでしょうか?
Vba始めてばかりなので間違いなどあればすみません。
295:デフォルトの名無しさん
16/05/21 18:31:55.59 3PJd0Iym.net
>>291
マクロの記録をしてそれを繰り返せば良い
296:デフォルトの名無しさん
16/05/21 19:00:55.32 2DvXotsF.net
>>280
またIDが変わってしまったのですが質問者です。
申し訳ありません。そのセル範囲を含む情報が含まれるということは、
どういうことなのでしょうか?
例えば、1列目を指定してFindで検索し、
検索した結果見つかったセルの値をaに入れたとします。
1列目に検索したいものが複数あり再検索したい場合、
再度、Findを記述するかFindNextでAfterにaを指定すると思いますが、
そのaのセル範囲を含む情報というのは、何を示しているのでしょうか?
297:デフォルトの名無しさん
16/05/21 21:23:45.26 a3pocFu9.net
>>293 ('A`)
Dim a As Range
Set a = Range("A1:A10").Find("検索文字列")
↑で、A1のセルがヒットしたとする場合
↓下記と同義のRangeオブジェクトが変数aに設定される
Set a = Range("A1")
Range プロパティ (Excel)
URLリンク(msdn.microsoft.com)
で、Rangeオブジェクトにはセルに関するいろんなプロパティを保持している
a.Value '<-セルの値(既定プロパティ)
a.Address '<-セルの参照範囲
a.Row '<-セルの行番号
a.Column '<-セルの列番号
…
Findメソッドがどのプロパティを参照しているかは知らないが
Afterに指定されたセル(※Rangeオブジェクト)の行番号、列番号
もしくはアドレスから次の検索セルを判断していると思われる
298:デフォルトの名無しさん
16/05/21 21:53:40.84 2DvXotsF.net
>>294
F8やF5で実行を止めながら確認しても、aには値しか見えないですが、
実はRangeオブジェクトが入っているという事なのですね。
それはExcelの仕様という事なのでしょうか?
299:デフォルトの名無しさん
16/05/21 22:46:05.51 a3pocFu9.net
>>295
変数の詳細な内容が見たいなら
ローカルウィンドウ なり ウォッチウィンドウ で確認するといい
Excel VBA 入門講座 ローカルウィンドウ
URLリンク(excelvba.pc-users.net)
Excel VBA 入門講座 ウォッチウィンドウ
URLリンク(excelvba.pc-users.net)
300:デフォルトの名無しさん
16/05/21 22:47:52.19 DHWj1BOs.net
>>295
それデフォルトプロパティが見えてるだけ
ちゃんとウォッチ式追加してウォッチウィンドウで見てみろ
301:デフォルトの名無しさん
16/05/21 23:20:54.65 2DvXotsF.net
>>296
>>297
了解しました。ありがとうございます。
今確認してみてるのですが、
列指定してFindし、その結果を元に再検索に再度FindのAfterで
最初の検索結果を指定しその次から検索していますが、
空白が指定された場合、ちゃんと表の範囲内を検索し、
先頭に戻ってくれているのは確認できました。
結果としては非常にありがたいのですが、何故そうなるのかがわかりません。
列は指定しましたが、表の範囲は指定していないのに・・・
302:デフォルトの名無しさん
16/05/22 01:20:39.82 RVVHScN0.net
この先延々と質問が続くのかな
303:デフォルトの名無しさん
16/05/22 01:38:56.00 vMk8bbvq.net
もちのロン
304:デフォルトの名無しさん
16/05/22 02:16:59.30 aOwEm8Rg.net
>>299
>>300
質問者ですが、この件に関してはこれで最後にします。
申し訳ありません。
305:デフォルトの名無しさん
16/05/22 09:40:44.20 vMk8bbvq.net
質問スレなんだから、
質問すればよろし
回答するスレではないんで、
回答するのは気分次第だけどな
306:デフォルトの名無しさん
16/05/22 10:36:35.32 F3XVlBde.net
ググったり色んな本読んで調べたんですが、解決しなかったんで質問させてください
Application.Dialogs(xlDialogSendMail).~
でアクティブブックをそのまま.xlsmとして添付メールすることはできるのですが、送り先にxlsに変換して送りたいです
FileFormat的な処理をしてワンクッション無しでそういった事を、するのは可能でしょうか?
宜しくお願いします
307:デフォルトの名無しさん
16/05/22 11:40:55.24 viRK9kIz.net
>FileFormat的な処理をして
>xlsに変換して
>アクティブブックを~ことはできる
>ワンクッション無しで
ワンクッションとは?
308:デフォルトの名無しさん
16/05/22 12:37:39.34 F3XVlBde.net
>>304
コマンドボタンワンクリックで済ませたいので、一つのイベントプロシージャに収めたいという事です
もし別の処理をしないと不可能だという事でしたら、もう一つボタンを追加したりして対応したいと思いますが、何かいい方法がありましたらご教授お願いします
309:デフォルトの名無しさん
16/05/22 12:55:07.15 MkPG05kK.net
>>291
素人だけど書いてみた Excel2003/Vistaで動作確認
URLリンク(codepad.org)
1列目のある範囲の最大値だけなんでCSVをワークシートへは取り込んでない
動作おかしかったらリスト読んで適当に直して
310:デフォルトの名無しさん
16/05/22 14:00:36.34 uwOrwjCq.net
>>305
SaveAsで一旦.xls(xlExcel8形式あたり)で保存してから送信すれば行けるんじゃね
311:デフォルトの名無しさん
16/05/23 19:14:37.25 +L6Gybj9.net
ExcelでInterfaceを使用して多重実装って行うことは出来ますか?
312:デフォルトの名無しさん
16/05/23 20:04:34.59 fFz6fB8+.net
>>308
あんた・・・それは
やめた方が
いいな!
313:デフォルトの名無しさん
16/05/23 23:02:51.54 EBQbKa6e.net
>>309
自己解決したのですが
ちなみに止めた方がいい理由って何ですか?
気になります
314:デフォルトの名無しさん
16/05/23 23:05:46.46 OgrQhKAM.net
どう解決したかの方が気になります
315:デフォルトの名無しさん
16/05/23 23:40:18.70 fFz6fB8+.net
>>310
もう考えない方がいい
どうしてもだ!
スレの住人として
忠告する!
じゃあ俺は
これで・・・またな
316:デフォルトの名無しさん
16/05/23 23:44:12.90 zjNqCcoU.net
>>311
結論からいうとできました
Implements は複数設定できるので
後はそれぞれのインターフェースを
実装すれば良いだけでした
317:デフォルトの名無しさん
16/05/25 19:58:38.92 vZFTiHPJ.net
>>292
亀レスすみません。
マクロの記憶だと作業中のファイルのみしかマクロが機能しないのでは無いでしょうか?
また、1000個のファイルに対して一つ一つマクロ実行するのは大変なので、1000個のcsvファイルの最大値を一つのファイルにまとめる作業を、一度に出来る方法は無いのでしょうか?
318:デフォルトの名無しさん
16/05/25 20:22:35.58 tfoRBKUB.net
>>314
対象が同じフォルダに入っているファイル全部とかだったら別にどうってことなくね?
319:デフォルトの名無しさん
16/05/25 20:48:22.69 RqoGasre.net
作りの簡単なcsvっぽいしExcel使うよりJSとかVBSとかPoweSellとかPythonとかRuby使った方が早そう
320:デフォルトの名無しさん
16/05/25 21:45:43.06 1qBlGVzr.net
>>315
レスありがとうございます。
315さんの言う通り、対象は同じフォルダに入ってるファイルすべてです。
どうってこと無いというのは、やり方が簡単という事でしょうか?
宜しければ、マクロの記憶を繰り返す以外にもう少し具体的に教えていただければ幸いです。簡単な例文や使用すればいい関数など...
最近vbaを始めたばかりで、まだrangeやif文を習った程度の知識でして...
あと、拡張子にcsvが付いてたのでcsvファイルと言ってたのですが、対象となるのは普通のエクセルのファイルです。
>>316
ありがとうございます。
検討してみます。
321:デフォルトの名無しさん
16/05/25 22:41:50.45 enDBv6qD.net
>>317
拡張子がcsvのファイルをテキストエディタで開いてみたら?
excel vba for
をググって繰り返しのやり方を調べる
試しに3個のファイルを対象にして作ってみる
322:デフォルトの名無しさん
16/05/25 23:17:20.71 CznCF+TX.net
>>314
1度にやる方法は無いかと言われれば
無いこともないけど、本当にその方法が有効かはまた別問題。
例えばADO接続でCSVファイルからSQLで値を取得するときは
フォルダがDB、その中にある各CSVファイルがテーブル扱いになるので、
そのフォルダ内の対象になるCSVファイル名を先に全て取得しておいて
SQLでUNIONで繋げておけばできるけど、
本当にそれが速くて簡単かは相当疑問が残るよね。
323:デフォルトの名無しさん
16/05/25 23:21:01.56 Uf48Qhpg.net
>>317
とりあえず、1つのファイルに対する処理を完成させる
後はループ処理で更新するファイルを変えつつ↑の処理を繰り返す
ところでループ処理は判ってんの?
do until とか
324:デフォルトの名無しさん
16/05/25 23:39:18.00 tfoRBKUB.net
> そのフォルダ内の対象になるCSVファイル名を先に全て取得
もしかしてこれがネック?
325:317
16/05/25 23:42:26.41 1qBlGVzr.net
レス頂いた方々、ありがとうございます。
ご回答いただいた方法で試してみます。
326:デフォルトの名無しさん
16/05/26 00:10:51.15 tOkM+sU0.net
>>314
306に書いたんだけど動かなかったの?
ファイル名の取得は306のプロシージャでできるはず
csvじゃなくてxlsを読むならfunctionのところを自分なりに書き換えろ
327:デフォルトの名無しさん
16/05/26 03:19:58.19 tOkM+sU0.net
>>314
xls読込みの追加と306でのcsv読込関数の訂正をあげとく
URLリンク(codepad.org)
ExecuteExcel4Macro って命令使うともっと早くなるらしいけど
俺にはうまく使えなかった
CSVの方が早いので用意できるならCSVファイルで処理した方がいいと思う
他の人も言ってる様にスクリプトなんかも使いやすいし
328:デフォルトの名無しさん
16/05/26 07:35:57.45 yzIVgV2w.net
>>324
>ExecuteExcel4Macro って命令使うともっと早くなるらしいけど
Microsoftからとっくにサポート打ち切られているようなの持ち出すのやめれ
329:デフォルトの名無しさん
16/05/26 08:48:16.33 EV8ndBzb.net
2007あたりでマクロの記録で一部ExecuteExcel4Macroが記録される
ってあったようだけど、今は無くなってる?
330:デフォルトの名無しさん
16/05/26 10:01:25.13 tOkM+sU0.net
>>325
>Microsoftからとっくにサポート打ち切られているようなの
ここなんかは Office 2013 and later って書いてるけど今は打ち切られたのか?
URLリンク(msdn.microsoft.com)
331:デフォルトの名無しさん
16/05/26 14:46:41.03 TLCYm3V6.net
最近VBAを勉強し始めた初心者です。
参考書に、離れた行や列を非表示にするにはRangeプロパティのあとにEntireを使いましょうとあります。
RangeプロパティのあとにいきなりRows.Hidden=Trueとしても意図していた作業ができるのですが、Entireはなぜ必要なのでしょうか。
332:デフォルトの名無しさん
16/05/26 15:31:24.30 UrTJJdUS.net
>>325
>>327書いたんだけど ExecuteExcel4Macro って互換性維持の為だけにあるみたいなんだね
後々使えなくなるって意味で言ってたって事がようやく理解できた
変な事書いてすまんかった
333:デフォルトの名無しさん
16/05/26 15:44:42.47 Dvh4dhBn.net
>>328
安全のためだからできるんならいらないんじゃね
334:デフォルトの名無しさん
16/05/26 20:16:50.15 lgiuDAuh.net
>>328
Rowsは連続した行しか指定できないけど、EntireRowsは離れた行を指定できるからじゃね。
335:デフォルトの名無しさん
16/05/27 01:04:42.25 gB8QuuHH.net
>>328
Hiddenに関しては特に問題ないだろうけど、
部分的なセル範囲を含む“行全体”を厳密に扱いたいなら
EntireRowの方が安全かな
Debug.Print Range("A1:A3").EntireRow.Address
→ $1:$3
Debug.Print Range("A1:A3").Rows.Address
→ $A$1:$A$3
Debug.Print Rows("1:3").Address
→ $1:$3
336:デフォルトの名無しさん
16/05/27 23:11:50.47 4UuWR9R4.net
>>330-332
遅くなりましたが、皆さんありがとうございます!
なにぶん初心者なもので、下手にオリジナリティを出さずに慣れるまでは公式に則ってきちんと学ばなければと思いました
またお世話になるかもしれませんが、そのときは何卒よろしくお願いします
337:デフォルトの名無しさん
16/05/28 00:22:34.85 MsTgKpLn.net
Application.OnTime TimeSerial(Hour(Now()), Minute(Now()), 59.99),
338:334
16/05/28 00:24:50.50 MsTgKpLn.net
23:59分台に入るとバグって更新を続けてしまうのですが、原因はなんでしょうか?
339:デフォルトの名無しさん
16/05/28 01:38:03.64 GZWeia2p.net
>>334-335
試しにデータを以下のように確認してみると、
時刻じゃない日付値が返ってくるのが原因かも
Debug.Print TimeSerial(23, 59, 59.99)
→ 1899/12/31
TimeValue関数で時刻部分だけ取り出すようにしてみては?
Application.OnTime TimeValue(TimeSerial(Hour(Now()), Minute(Now()), 59.99)), "a"
340:デフォルトの名無しさん
16/05/28 03:56:22.62 z46njfbn.net
>>334
まずTimeSerialの秒に59以上を渡したときの動作は未定義だな
これは繰り上がった00秒を返してるっぽいので、23:59:59.99は繰り上がって翌日の日付のある時刻を返してる
Application.OnTimeは、指定された時刻が日付持ってるかどうかで動作を変えてる
日付を持ってないときは当日の指定時刻、日付を持ってるときは指定日付の指定時刻に処理実行
23時59分のときだけ、日付付きの時刻を渡してるが、その日付は過去の日付なので
処理が即実行されてる
まあ多分こういう事じゃないかと
341:デフォルトの名無しさん
16/05/28 08:26:40.26 CHU6gzT2.net
現在vbaの勉強中なのですが、クラスモジュールを使ったプログラム方法を学べる書籍やサイトはありませんか?
342:デフォルトの名無しさん
16/05/28 10:45:40.89 +66MKZ0q.net
>>338
あんまり新しい情報はなさそうだからAriawaseのコードでも読めばどうだろう
343:デフォルトの名無しさん
16/05/28 15:04:42.16 gKP/LNYF.net
オルト+F11 を押とVBEが開きますが
コントロール+F11 を間違えて押と変なタブが作られますがこれは一体何ですか?!!!
344:デフォルトの名無しさん
16/05/28 15:15:08.16 g8NfG/nK.net
>>340
マクロ4.0
vba以前についていたマクロ機能。化石なので使う事はまず無い
ただevaluateだけは何度かこのスレの質問で見たな。使ったことはないけどな
URLリンク(officetanaka.net)
345:デフォルトの名無しさん
16/05/28 16:10:52.16 gKP/LNYF.net
>>341
ありがとうございます。
346:334
16/05/28 20:18:24.66 MsTgKpLn.net
遅れましたが回答ありがとうございます!
修正頑張ります!
347:デフォルトの名無しさん
16/05/29 09:38:21.80 AwN+e4jt.net
Excel2007、2010から2013に移行したんですが、仕様変更?という事でこれまでできていた下記の事ができなくなりました
ユーザーフォームのコマンドボタンを押す→マクロ実行→Application.Visible = True で
ユーザーフォームを非アクティブにして、わざわざシートを一度クリックしなくてもすぐにシートのセルに入力出来るようにしてました
もう2013で再現する事は不可能なのでしょうか?
または違う方法で再現できないでしょうか?
よろしくお願いします
348:デフォルトの名無しさん
16/05/29 13:46:01.40 9s1DeJLc.net
作成依頼です。
シートAのA列にJANコード、B列に商品名が並んでいます。
JANと商品名はA1とB1、A2とB2…と対応しており、データの個数は都度変わります。
欲しいのは以下のVBAプログラムです。
1.シートBのA1のセルにシートAのA1のJANコードを入力し、シートの見出しを「当日の日付+商品名B1」にする。
2.以下、JANコードの数だけシートBをコピーして同じ作業を繰り返す。
です。
その際、
1.シートAとBは同じファイル内にあります。
2.シートBにはA1を検索値としたvlookup関数が入っている。
3.見出しに記載される商品名はJANと対応する商品名。
4.日付は、出来れば「2016年05月29日」なら「160529」と表記させたい。
無理ならどのような表記でも大丈夫ですが、なるべく短く表記したい。
上のファイル自体を今から作るので、シートA、Bの名前は実際には変わります。
またシートBのJANを入力するセルも実際にはA1ではありません。
なので後から変えられるように、プログラムのどこがシートABの名前の部分でどこがシートBのA1を表しているのかも教えてもらえるとありがたいです。
分かる方いらっしゃいましたらよろしくお願いいたします。
349:デフォルトの名無しさん
16/05/29 13:52:33.92 m6zFG5bY.net
>>345
報酬は?
350:デフォルトの名無しさん
16/05/29 17:38:02.13 OB5e45ZS.net
>>345
amazonのせどり関係?
ここまで、やりたい事が具体的に分かれば、この通りすれば出来るんじゃない?
この程度でつまずくなら、厳しいと思うが
データ個数が変わる場合も含めてロジックを組むなら、VLOOKUPは使わない方が良いのでは?
配列なども勉強した方が良いよ
351:デフォルトの名無しさん
16/05/29 17:55:57.68 8akYxdWk.net
>>345
1万でどう?
352:デフォルトの名無しさん
16/05/29 19:22:22.37 GTS7K4/T.net
>>348
お前の半日~1日分の給料に該当するだろ
ざっと作って30分~1時間くらいのものに
どれだけ手入れるつもりだよ
353:デフォルトの名無しさん
16/05/29 19:37:22.60 DU/FdEem.net
>>349じゃあ、15分あたり¥8,000でどないでしょう?
延長、指名、同伴オプションも相談のります
354:デフォルトの名無しさん
16/05/29 19:51:23.53 IL/FFzdQ.net
チェンジで
355:デフォルトの名無しさん
16/05/29 19:56:44.56 iENwe/Jr.net
チェンジだってよ
356:デフォルトの名無しさん
16/05/29 20:02:58.52 l+XEODYT.net
スイッチオンで
357:デフォルトの名無しさん
16/05/29 20:52:32.53 qZvodTNY.net
>>349
そんな発想が出るってどんな安い単価の世界で生きてるんだ…
358:デフォルトの名無しさん
16/05/29 20:53:43.81 GCJVxvYj.net
>>345 こんな感じ? URLリンク(codepad.org)
359:デフォルトの名無しさん
16/05/29 21:02:37.79 O2TO5DJ7.net
ワン・ツー・スリー
360:デフォルトの名無しさん
16/05/29 21:29:17.79 PpnqKVZy.net
>>349
バカ発見
361:デフォルトの名無しさん
16/05/29 21:31:54.50 IxwT55oU.net
>>349
学生は気楽でいいな