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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(´・ω・`)b

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


279:4 ID:Id32lc0P0.net



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

346:デフォルトの名無しさん (オイコラミネオ MMb6-hcOc)
17/07/18 08:48:10.34 XjshxdE9M.net
なんでこんな初心者用のスレでVBAはゴミだのカスだのドヤ顔でほざいてるの?
どうせ普段は別の言語で仕事してる奴が、ちょっと頼まれたVBAが解らなくてファビョってるんだろ?w

347:デフォルトの名無しさん (ワッチョイ e66d-z+eH)
17/07/18 08:49:43.17 adssaMMv0.net
ファビョるって何?

348:デフォルトの名無しさん (ワッチョイ 622e-S4qQ)
17/07/18 10:01:29.10 gw3uuz5O0.net
先ずはググればいいんでないかな

349:デフォルトの名無しさん (スップ Sd02-y/ao)
17/07/18 11:27:07.20 LmZYlO3Ud.net
>>341
その状況なら確かに愚痴りたくなるだろうね

350:デフォルトの名無しさん (オッペケ Sr39-nv+z)
17/07/18 12:19:29.42 1XJz7Xgqr.net
どうせ自称VBAに詳しいクズと自称メインは他言語のクズしかいないんだから仲良くしろよ

351:デフォルトの名無しさん (ワッチョイ ce11-PUpa)
17/07/18 18:53:43.35 QCvagJCl0.net
>>341
他の言語出来るやつなら自分で調べられるし聞き方も賢くできると思うぞ

352:デフォルトの名無しさん (ワッチョイ e66d-z+eH)
17/07/18 18:57:17.26 adssaMMv0.net
>>341
vbaで仕事は暇になるも、ひたすらすることがない。
コミュニケーション能力のほうが大事と気づくのに、そう時間はかからなかった
コミュ力も高まる言語、それがvba

353:デフォルトの名無しさん (ワッチョイ 974b-+vhE)
17/07/18 19:02:27.52 FECT5IdT0.net
>>340
横からですが、借りてってもいいですか?

354:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/18 20:30:12.85 StSxL3ktr.net
>>348
もちろん自由に使えばいいけど、スマホで書いてるのでPCテストしてない。自己責任でよろしく。
読み返したら、Is Nothing のところは明らかにエラーになると思うので、こんな感じのほうがいいかも。(PCテストしてないので自信はない。あしからず)
Function IsNone(hoge) as Boolean
  If IsObject(hoge) Then
    If hoge Is Nothing Then IsNone = True
  End If
  Select case True
    Case IsNull(hoge)
      IsNone = True
    Case IsEmpty(hoge)
      IsNone = True
    Case hoge = ""
      IsNone = True
    Case hoge = vbnullstring
      IsNone = True
    Case Else
      IsNone = False
  End Select
End Function
なんか美しくないね。
ま、好きなように書き換えて。

355:デフォルトの名無しさん (ワッチョイ 974b-+vhE)
17/07/18 21:03:49.93 FECT5IdT0.net
>>349
ありがとうございます。
エラーの度に色々悩んでたもので。
この辺を美しく書けるのが理想ですが、なかなか難しい。

356:デフォルトの名無しさん (ワッチョイ e66d-lquy)
17/07/18 21:10:08.24 adssaMMv0.net
僕は唱える 魔法の言葉 on error resume next
みんなで歌おう 魔法の言葉 on error resume next

357:デフォルトの名無しさん (ワッチョイ 974b-+vhE)
17/07/18 21:12:18.15 FECT5IdT0.net
>>349
objectを掴めてないときのemptyとか、開放できないときのオートメーションエラーとかに悩まされて、ある程度解決してたんですが、これで最終解脱できそうな予感。
ありがたや。

358:デフォルトの名無しさん (ワッチョイ 6fea-N0vF)
17/07/18 21:59:56.82 jNcdEVA90.net
ExcelからOutlookを起動し、予定表から会議依頼を作成するマクロを作成しています
あらかた思っていたものは作れたのですが、自分の予定表ではなく共有の予定表に保存する場合のコードがさっぱり分かりません
共有の予定表での作成方法をご教示頂けますでしょうか

359:デフォルトの名無しさん (アークセー Sx39-y19a)
17/07/18 23:28:16.64 PXBpilE0x.net
>>349
IsObject(Expression)の判定をしてるIfブロックの終了間際にExit Function入れないとダメなんじゃね?

360:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/19 00:59:23.29 r34rJ2pSr.net
>>354
おっしゃるとおり。
あるいは、Select以下をElseでつなげるか。
でも美しくないので書き換えてみた。
結構いいんじゃね?(軽くテスト済み)
結局、>>333 が最適解だったわけね。
なかなかの実力者とみた。
Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty, vbNull
      IsNone = True
    Case vbObject
      If hoge Is Nothing Then IsNone = True
    Case vbString
      If hoge = vbNullString Or hoge = "" Then IsNone = True
    Case Else
      IsNone = False
  End Select
End Function

361:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/19 02:45:10.33 3ENxF81t0.net
>>355
isNoneが未定になるパスがあるんじゃね

362:デフォルトの名無しさん (ワッチョイ e211-1CH6)
17/07/19 03:16:22.21 QlVhZGqo0.net
値とかオブジェクトが普通に入っている場合がすっぽり抜けてるんですがそれは

363:デフォルトの名無しさん (ワッチョイ 974b-+vhE)
17/07/19 05:14:51.84 uwa7S77b0.net
>>355
Sub buf()
On Error Resume Next
For i = 1 to n
Set MyObj = SPAM
If Err then
If not IsNone(SPAM) then Brake
Else
Goto


364:Continue End if Else ここで処理。 Continue: Err.clear Set MyObj = Nothing End if Next End sub みたいな使い方を考えたんですが、全然美しくない・・・ どうすれば良いでしょうか。



365:デフォルトの名無しさん (スップ Sd02-y/ao)
17/07/19 07:05:15.04 n0rSSeVEd.net
空の配列チェックも必要だと思うな

366:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/19 08:00:32.56 r34rJ2pSr.net
>>357
IsNoneの初期値をFalseにすればいいんじゃね?

367:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/19 08:37:45.43 pHR1WedN0.net
As Booleanで指定した場合はデフォルトがFalseだからTrueになる条件だけ書いていけばいい。

368:357 (ブーイモ MM5e-Xf9t)
17/07/19 09:22:45.29 hbRH2SWGM.net
ああなるほど、初期化って頭が全くなかった。サンクスです。

369:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/19 11:14:00.22 r34rJ2pSr.net
>>359
Case vbarray を加えればいいだけじゃね?
…って思ったら、配列の空判定は結構やっかいかも。
配列判定いる?

370:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/19 12:01:18.52 pHR1WedN0.net
どういうものを実装するかにもよるけど経験から言うと配列の判定は別の方がいい。
アプローチの仕方が違うから、変数単体で認識させていたものを配列突っ込める様にした時なんかにバグの温床になる。

371:デフォルトの名無しさん (スップ Sd02-y/ao)
17/07/19 12:23:01.26 n0rSSeVEd.net
>>364
もちろん目的によるけどね。
個人的には空の文字列は正常側だと思うし

372:デフォルトの名無しさん (スップ Sd02-y/ao)
17/07/19 12:24:14.19 n0rSSeVEd.net
あと空の配列チェックはIsMissingと同等

373:デフォルトの名無しさん (オッペケ Sr5f-nv+z)
17/07/19 12:28:40.18 oLf4rjVBr.net
variant型は脊髄反射で否定するくせにvariantみたいなヤリマン関数が大好きなお前らってw

374:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/19 12:36:53.61 kmkgyzX6M.net
variantのみを使うor絶対variantは使わない
みたいな論争は見たこと無いな

375:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/19 14:51:31.77 pHR1WedN0.net
前スレかその前かの最後の方でVariant型絶対使わないマン出てきていた様な気がするけど。
そういう信条自体は別に良いんだけど、Variant型使えば解決出来る事を信条のせいで解決出来ず、
その結果として「VBAは欠陥」って言い出す変な人はこのスレでよく見かける。

376:デフォルトの名無しさん (ワッチョイ ad73-hcOc)
17/07/19 15:28:03.09 GaPiK1nh0.net
便利な道具を使いこなせないドンくさい奴ってことだよ

377:デフォルトの名無しさん (スッップ Sd70-N0vF)
17/07/19 18:00:12.50 3A2F1Rqpd.net
すいません、353ですが自決しましたのでスルーで結構です
コピペだけでなく内容も理解できるようもっと勉強します

378:デフォルトの名無しさん (スップ Sd02-y/ao)
17/07/19 18:04:33.44 n0rSSeVEd.net
自決

379:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/19 18:31:39.20 r34rJ2pSr.net
>>364-365
配列は要素数の空判定でお茶を濁そう。
これ以上のブラッシュアップは断念。
コードとしてはそこそこ美しいと思う。
Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty
      IsNone = True
    Case vbNull
      IsNone = True
    Case vbObject
      If hoge Is Nothing Then IsNone = True
    Case vbString
      If hoge = vbNullString Or hoge = "" Then IsNone = True
    Case vbArray + vbVariant
      If Ubound(hoge) = -1 Then IsNone = False
  End Select
End Function

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

381:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/19 18:47:58.49 pHR1WedN0.net
>>373
Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty,vbNull
      IsNone = True
    Case vbObject
      If hoge Is Nothing Then IsNone = True
    Case vbString
      If Len(Trim(hoge)) = 0 Then IsNone = True
    Case Is >= vbArray
      IsNone = True
  End Select
End Function
ArrayはVariant型以外の場合もあるから、この方がいい。

382:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/19 19:22:16.26 r34rJ2pSr.net
>>375
おおー、まだブラッシュアップできたか。
素晴らしい。
それなりに使える関数になったかもね。

383:デフォルトの名無しさん (ワッチョイ 974b-+vhE)
17/07/19 19:26:12.74 uwa7S77b0.net
素晴らしい。

384:デフォルトの名無しさん (ワッチョイ e66d-z+eH)
17/07/19 19:29:01.56 +D5BELFr0.net
配列と型のチェックを同時にする時はとりあえず一次元配列に直せば楽ってばっちゃが言ってた

385:デフォルトの名無しさん (スップ Sd02-QKFr)
17/07/19 20:01:06.21 bbPNdV8fd.net
書いてから気づいたけどvbnullは型ではなくてただの列挙体なので判定しなくてもいいよな
あと““はなんかダサいからvbnullstring使うのがいいかも

386:デフォルトの名無しさん (スップ Sd02-y/ao)
17/07/19 20:04:24.02 n0rSSeVEd.net
判定としては UBound < LBound にしなくちゃね

387:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/19 20:16:48.04 r34rJ2pSr.net
>>379
たとえば、InputBoxでキャンセルを押すとvbnullstringが返る。
何も入力せずにOKを押すと "" が返る。
つまり、vbnullstringと "" は別物なのでそれぞれに判定する必要がある。

388:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/19 20:20:16.17 r34rJ2pSr.net
>>380
たしかにそのほうがきれいだね。
いや、いろいろ出てくるもんだなぁw
美しいコード書きへの道のりは遠い…

389:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/19 20:20:56.04 pHR1WedN0.net
>>379
vbNullStringと""は判定としては別なので、片方だけにすると抜けが起きる。

390:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/19 20:28:12.28 pHR1WedN0.net
>>382
うろ覚えだけどVarTypeでvbArrayとして返ってきた場合でもUboundするとエラーになるケースがあったはずなので、
Uboundを使う場合は別関数でOn Error Gotoで飛ばせるようにしておきたい。
Function SafeUBound(hoge, Optional div As Long) As Long
On Error GoTo fin
If div = 0 Then div = 1
SafeUBound = -1
SafeUBound = UBound(hoge, div)
fin:
End Function
Function SafeLBound(hoge, Optional div As Long) As Long
On Error GoTo fin
If div = 0 Then div = 1
SafeLBound = 0
SafeLBound = LBound(hoge, div)
fin:
End Function
と置いてSafeUbound < SafeLBoundで判定したい。

391:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/19 20:38:22.51 r34rJ2pSr.net
一応簡単なテストコード的な…
hoge = Range("A1").Value: Debug.Print IsNone(hoge) & ":" & VarType(hoge)
hoge = InputBox("値を入力してください。"): Debug.Print IsNone(hoge) & ":" & VarType(hoge)
Set hoge = Sheets(1): Debug.Print IsNone(hoge) & ":" & VarType(hoge)
Set hoge = Nothing: Debug.Print IsNone(hoge) & ":" & VarType(hoge)
Set hoge = CreateObject("InternetExplorer.Application"): Debug.Print IsNone(hoge) & ":" & VarType(hoge)
hoge.Quit
Set hoge = Nothing: Debug.Print IsNone(hoge) & ":" & VarType(hoge)
hoge = Array(): Debug.Print IsNone(hoge) & ":" & VarType(hoge)

392:デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
17/07/19 21:08:04.97 WMMf4PqS0.net
エクセルでLISTAGGに相当するものは何ですか?
ソートしてForで上下比較して足してけとか言わないでください。

393:デフォルトの名無しさん (アークセー Sx88-I8+U)
17/07/19 21:53:52.63 UJWjDrSmx.net
>>371
成仏しなされ

394:デフォルトの名無しさん (ドコグロ MM36-OTuW)
17/07/19 22:03:31.20 54vs2xq7M.net
>>373
> 配列は要素数の空判定でお茶を濁そう。
それが簡単にできれば>>363とかがわざわざレスせんよ
>>375
> ArrayはVariant型以外の場合もあるから、この方がいい。
アホか、ビットマスクなんだから And VbArray で判断しろよ

395:デフォルトの名無しさん (イモイモ Se3a-S4qQ)
17/07/19 22:03:54.68 uC8D1QH+e.net
vbNullString を厳密に判定する場合、StrPtr()使わないと判定できないと思ふ
If StrPtr(vbNullString) = 0 Then ’~ Null Pointer

396:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/19 22:36:12.42 pHR1WedN0.net
>>388
Select文だとAnd vbArrayって使えないと思うんだけど、例文出してくれる?

397:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/19 23:08:15.46 3ENxF81t0.net
>>386
無い
作れば?

398:デフォルトの名無しさん (ドコグロ MM36-OTuW)
17/07/19 23:33:45.07 54vs2xq7M.net
>>390
ひょっとして応用力ないとか?
Selectにこだわる必要ないし
どうしてもやりたきゃ
Select Case True
Case (VarType(hoge) And VbArray) <> 0
...
でいいだろ

399:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/19 23:39:04.83 pHR1WedN0.net
>>392
ああ、やっぱりそういう方法しかないのね。
元々がIf文を可能な限り使わないというところから出発しているし、
それだとIf Else使った方が処理も速いしSelect文で読みやすくするっていう利点も潰してるんだよな。

400:デフォルトの名無しさん (ワッチョイ 47e4-trcG)
17/07/20 01:20:53.05 CiXoybJd0.net
>>38


401:1,383 たしかにvbNullStringと""は別物なんだが vbNullString=""の比較はTrue返すはず 単に空チェックだけなら""とだけ比較しとけば良いんじゃね



402:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 01:36:37.21 IzREkzShr.net
やはり、配列の空判定は別関数にしたほうが良さそうだね。
Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty, vbNull
      IsNone = True
    Case vbObject
      If hoge Is Nothing Then IsNone = True
    Case vbString
      If Len(Trim(hoge)) = 0 Then IsNone = True
    Case Is >= vbArray
      If ArrayEmpty(hoge) Then IsNone = True
  End Select
End Function
Function ArrayEmpty(hoge) As Boolean
  美しいコード
End Function

403:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 01:50:57.43 IzREkzShr.net
>>384を使って、
Function ArrayEmpty(hoge) As Boolean
  If SafeUbound < SafeLBound Then ArrayEmpty = True
End Function
Function SafeUBound(hoge, Optional div As Long) As Long
On Error GoTo fin
If div = 0 Then div = 1
SafeUBound = -1
SafeUBound = UBound(hoge, div)
fin:
End Function
Function SafeLBound(hoge, Optional div As Long) As Long
On Error GoTo fin
If div = 0 Then div = 1
SafeLBound = 0
SafeLBound = LBound(hoge, div)
fin:
End Function
う~~ん、、、いまいち美しくない…orz

404:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 02:11:18.92 IzREkzShr.net
>>394
> 単に空チェックだけなら
Len(Trim(hoge)) = 0
で事足りてるような気はする。
イミディエイトウィンドウでテストしてみて。
? Len(Trim(InputBox("値を入力してね"))) = 0
[OK][キャンセル]どちらでも True が返る。

405:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/20 02:46:26.38 2lo8GEfG0.net
>>396
Function RBound(hoge, Optional div As Long) As Long
On Error Resume Next
If div = 0 Then div = 1
RBound = UBound(hoge, div) - LBound(hoge, div) + 1
End Function
あくまで配列要素数があるかどうかだけ判断したいなら、こういう関数でもいいと思うけど。

406:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 07:38:01.83 IzREkzShr.net
>>398
おおー、だいぶスッキリしたね。
ひとつ残念なのは、引数の次元指定が美しくないんだよなー。
つか、1次元の要素が空の配列なんて使う?
1次元が空かどうかだけ判定すればいいんじゃね?

407:デフォルトの名無しさん (スッップ Sdff-AsiQ)
17/07/20 08:01:18.50 fTGUueKRd.net
関係ないけど配列の次元を求めるWin32APIがあるのに、いつまでたってもVBAから使えないのは何なの?

408:デフォルトの名無しさん (ブーイモ MM8b-yxn4)
17/07/20 08:08:10.03 izganQUxM.net
>>399
Optionalをわかってないのは美しい美しくないとか言う以前の問題。

409:デフォルトの名無しさん (ワッチョイ c773-XR5Y)
17/07/20 08:34:30.46 fh0pKX4k0.net
その理屈だと、大抵の事はC++で出来るから他の言語は不要ということになるな

410:デフォルトの名無しさん (スッップ Sdff-AsiQ)
17/07/20 09:48:29.70 fTGUueKRd.net
>>402
VBAから使えるようになればC++の必要性が減る、と解釈するのが自然だと思うけどな?

411:デフォルトの名無しさん (ドコグロ MMfb-efHF)
17/07/20 12:39:43.62 qV+ymKYWM.net
>>393
速いとか読み易いの前に正しいコードを書きましょう
って話
動けばOkでいいじゃんと言うなら返す言葉はないけど

412:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 12:51:59.09 IzREkzShr.net
>>401
optionalはわかるよ。
仮に引数指定するとして、どの時点で指定するのかな、って。

413:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 12:55:10.23 IzREkzShr.net
>>404
つか、正しくないコードは動かないでしょ。

414:デフォルトの名無しさん (スッップ Sdff-AsiQ)
17/07/20 13:34:31.13 fTGUueKRd.net
>>398のは
配列要素数があるかどうか「だけ」判断するというのとOptional引数で
次元を指定させる点がちぐはぐなんだよね。

415:デフォルトの名無しさん (スッップ Sdff-AsiQ)
17/07/20 13:40:13.76 fTGUueKRd.net
それとも手持ちの関数をまんまコピペしたのかな?

416:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 18:17:53.32.net
ま、配列の空判定関数は各自で書くということでこの話題は完結かな。
ちなみに俺は、
Function ArrayEmpty(hoge) As Boolean
  On Error Resume Next
If UBound(hoge) - LBound(hoge) < 0 Then ArrayEmpty = True
End Function
って感じ。
空判定関数を書くというだけの話題だったけど、いろいろ勉強になったね。
おつかれさまー。ノシ

417:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 18:32:35.34.net
3行目は
If UBound(hoge) < LBound(hoge) Then ArrayEmpty = True
のほうが美しいな。

418:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/20 18:53:02.67.net
そしたら
ArrayEmpty = UBound(hoge) < LBound(hoge)
でもいける。

419:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 18:56:56.64.net
>>411
素晴らしい!!
頭が柔らかくて羨ましいよ。

420:デフォルトの名無しさん (スップ Sd7f-dGk5)
17/07/20 19:42:53.19.net
完成した関数テンプレにのこしておいてよ
vbaの良質なコードはすごく希少だし

421:デフォルトの名無しさん (ドコグロ MMfb-efHF)
17/07/20 19:58:58.45.net
>>406
たまたま動いてるだけのコードも正しいと言い張るの?

422:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 20:06:31.90.net
>>414
つか、いったい何が悔しかったの?
君ほどの実力者が。

423:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/20 20:27:30.52.net
>>413
どこに残せばいいの?
完成品はこれでいいかな。
Function IsNone(hoge) As Boolean
  Select Case VarType(hoge)
    Case vbEmpty, vbNull
      IsNone = True
    Case vbObject
      IsNone = hoge Is Nothing
    Case vbString
      IsNone = Len(Trim(hoge)) = 0
    Case Is >= vbArray
      On Error Resume Next
      IsNone = UBound(hoge) < LBound(hoge)
  End Select
End Function
簡潔で美しいね。みんなの力の結晶だ。

424:デフォルトの名無しさん (ワッチョイ df06-pqVL)
17/07/20 22:00:04.12.net
>関数テンプレにのこしておいてよ
どこにあんだよ、そんなの
ここで知った人間で保存しておきたいって奴が保存しておけば良いだろ

425:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/20 23:07:38.62.net
スレッドのテンプレに残しておいてほしいって事なんじゃないの。
でも残し始めたら際限無くなるし、コピペで済ませずに理論と意図を理解して同じものを一から書けるようになってほしいなぁ。

426:デフォルトの名無しさん (ワッチョイ df11-efHF)
17/07/21 05:39:07.68.net
>>415
えっ?
なにか悔しいことでもあったの? w

427:デフォルトの名無しさん (オッペケ Sr1b-8ndb)
17/07/21 12:22:10.00.net
こんなコードテンプレに残したらますます初心者が初心者を惑わすスレに拍車がかかるなw
本当に仕事でエクセルマクロを必要としてる人には迷惑かけんなよw

428:デフォルトの名無しさん (アウーイモ MM6b-Z4r9)
17/07/21 12:42:41.45.net
残せというやつがwikiでも立てて残していきなよ

429:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/21 14:22:43.43.net
> 初心者が初心者を惑わすスレ
言い得て妙だww
いいんだよ、それで。
VBA使いはエンジニアじゃないから。

430:デフォルトの名無しさん (アークセー Sx1b-fDNv)
17/07/21 14:37:29.87.net
>>422
さーせん
lsi engっす

431:デフォルトの名無しさん (ワキゲー MM9f-rceg)
17/07/21 14:46:06.01.net
>>422
まだVBA使い≠エンジニアとか言ってるの?
エンジニアでもVBA使いは居るってのに

432:デフォルトの名無しさん (オイコラミネオ MM4f-XR5Y)
17/07/21 15:00:26.78.net
低スキルにありがちな下らないレッテル張り

433:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/21 15:28:32.09.net
どの言語の質問スレも初心者が初心者を惑わすスレ化してるのが悲しい。
「よくある質問と回答」レベルなら問題ないんだけど、ちょっと突っ込んだ質問になるととたんに雲行きが怪しくなる。
ある程度の実力を身につけたら2chじゃなくてちゃんとしたコミュニティか何かに参加するべきなんだろうけど、
だいたい見つからないし、見つけても2chほど気軽に質問投げられるような場所じゃなかったりするんだよな。

434:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/21 17:53:53.00 WPcJx8Myr.net
>>426
知恵袋とか、もっと酷いよ。

435:デフォルトの名無しさん (ドコグロ MM9f-efHF)
17/07/21 19:35:15.46 tSBq1lkVM.net
>>426
ネットの情報なんだから裏を取ればいいだけ
今時書いてあるキーワードでググれば調べるのもそんなに苦労しないしな
惑わされるより過疎化してまともな回答が少なくなってる方が問題だわ

436:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/21 19:48:27.62 xN3mSVPqr.net
>>424
エンジニアでもVBA使いは居るけど、
VBA使いになりたいエンジニアはいない。

437:デフォルトの名無しさん (ワッチョイ e711-MZAo)
17/07/21 19:55:14.10 BM2lcFDS0.net
>>429
これな
いやいやだわ
javascriptのほうが楽しいし

438:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/21 19:56:51.84 xN3mSVPqr.net
>>430
JavaScriptのほうが楽しい理由は?

439:デフォルトの名無しさん (ワッチョイ bf6d-Brs8)
17/07/21 19:57:13.96 /kK1+YO60.net
>javascript
お、おう

440:デフォルトの名無しさん (ワッチョイ bf23-FdGq)
17/07/21 20:01:12.83 cakM1ik60.net
javascriptってvbaの次に底辺やんwww

441:デフォルトの名無しさん (ワッチョイ a779-ijYd)
17/07/21 20:05:21.15 ZXE38ZHX0.net
そりゃていへん(大変)だ

(´・ω・`)b

442:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/21 20:10:04.71 xN3mSVPqr.net
>>433
使ったことある人が多い言語って底辺扱いされやすいよね。
おそらく、C や Java の比じゃないと思うよ。>VBA
でも、Java は使う人が多くなりつつあるから、底辺扱いされるのは時間の問題かもね。

443:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/21 20:58:10.67 4zV211iR0.net
新興の言語って利用者全員が似たような習熟度だから意思疎通が図りやすいし、
どんなにクソみたいなコード書いても判断材料が無くて効率的なコードって言ってもらえるからな。

444:デフォルトの名無しさん (ワッチョイ 674f-ygJY)
17/07/21 21:00:52.93 Byrlump20.net
>>369
欠陥なんじゃなくて、馬鹿ほどvariantを使う法則なだけ

445:デフォルトの名無しさん (スプッッ Sd7f-AsiQ)
17/07/21 21:04:33.39 mLcSl7GWd.net
何の話だっけ?

446:デフォルトの名無しさん (ワッチョイ bf6d-p/Ft)
17/07/21 21:21:32.57 /kK1+YO60.net
西中島南方北口の話

447:デフォルトの名無しさん (ワッチョイ df6f-QK4i)
17/07/21 21:54:13.22 xestLY0Q0.net
長い間SQL触ってたので、
SelectがVBAにもあったのを完全に忘れていた、という話。

448:デフォルトの名無しさん (ワッチョイ bf6d-p/Ft)
17/07/21 21:57:47.01 /kK1+YO60.net
複数の言語を使うとselectとswitchは妙に間違える
俺だけかねー?

449:デフォルトの名無しさん (スプッッ Sd7f-AsiQ)
17/07/21 22:03:49.06 mLcSl7GWd.net
>>441
わかる

450:デフォルトの名無しさん (ワッチョイ bf23-E/h9)
17/07/21 22:16:02.62 gUUF92OH0.net
JavascriptにおけるjQuery的な
VBAのクラスってどっかにないのかな
Set class = New class
class.lastRowAdd(Range("a1"),array)
ってやったら最終行に配列の内容をぶっ込んでくれる
とか
よくある操作をパラメーター渡せばやってくれるような

451:デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
17/07/21 22:20:47.57 zOHs/jgU0.net
>>443
それって結果は何になるの?

452:デフォルトの名無しさん (ワッチョイ bf23-E/h9)
17/07/21 22:30:00.89 gUUF92OH0.net
>>444
このコードは妄想クラスメソッドなのでエラーになるけど
もし、いろんな汎用処理を詰め込んだクラスなりを
誰か作ってたら欲しいなーと思いましたとさ、という話

453:デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
17/07/21 23:32:25.33 zOHs/jgU0.net
>>445
そうじゃなくて1次元配列が出来上がるとか2次元配列が出来上がるとか
もちょっと具体的に
あと第二引数はなんだ?

454:デフォルトの名無しさん (ワッチョイ bf6d-p/Ft)
17/07/21 23:36:11.83 /kK1+YO60.net
そこまで引っ張る話題でもなくね?と思うけど確かにどうしたいのかわからんのもあってちょっと聞きたくもあり

455:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/21 23:41:52.51 4zV211iR0.net
見た目からするとSQLで解決しそうな感じがする。

456:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/22 00:08:10.36 AfU+LLGPr.net
科学計算が爆速でできるVBAのフレームワークができれば、VBAの価値は一気に上がる。

457:デフォルトの名無しさん (ワッチョイ bf23-E/h9)
17/07/22 00:08:20.61 6zQAY8zL0.net
データベースな表で
第一引数のセルから下に見ていって一番下に
第二引数の配列をズドンと書き込む
という想定
たしかにそこまで引っ張るネタでもないです

458:デフォルトの名無しさん (ワッチョイ c78b-8ndb)
17/07/22 00:10:10.03 uAFmR2/H0.net
そんな事言わずにもう少しひっぱろうぜ

459:デフォルトの名無しさん (ワッチョイ a723-XR5Y)
17/07/22 07:42:45.82 SunxEu+00.net
>>450
ネタで言ってるなら申し訳ないが、それその通りに書くだけで良くね?

460:デフォルトの名無しさん (ワッチョイ df11-pqVL)
17/07/22 10:25:51.44 8D42j0aL0.net
>>452
そういう話ではない。
まあでもVBA用の色んな処理の検索はしてきたけど、アドイン化されてるものは全然見かけないなあ。
汎用的な機能を詰め込んだアドインってこれくらい?
URLリンク(software.opensquare.net)
>>443の求めるものとは違うんだろうけど。
結局は自作クラスってことになりそう。

461:デフォルトの名無しさん (ワッチョイ df06-pqVL)
17/07/22 10:32:33.05 //x1WvHm0.net
>>451
お前の下らん雑談ネタのためにこのスレが有るわけじゃないんだyo

462:デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
17/07/22 10:39:13.62 kiQvn5e/0.net
あぁarrayは横向きの配列ってことか、なるほど
VBAで汎用ライブラリ作るとしたらどんな名前になるだろう
tyっと作ってみたくもあるな

463:デフォルトの名無しさん (スプッッ Sd7f-AsiQ)
17/07/22 10:51:06.27 c13VlgOtd.net
ブログ検索すれば色々出てくるから好きなのを使う。
製品的なやつが欲しいなら知らん

464:デフォルトの名無しさん (スップ Sdff-dGk5)
17/07/22 12:11:05.98 I23HDuqEd.net
完成した関数テンプレにのこしておいてよ
vbaの良質なコードはすごく希少だしアドインってメンテナンス大変じゃないか?
用途としてはいろんな人に使わせる用だと思うんだけど誰かが使ってる最中に変更できないじゃん
やたらにバージョン上げると某ライブラリみたいな顛末になるし

465:デフォルトの名無しさん (ワッチョイ 4754-ZLoG)
17/07/22 12:15:52.49 1BwCflG80.net
じゃあコピーしたもん編集して誰もいないときに上書きすればいいじゃん

466:デフォルトの名無しさん (ワッチョイ bf6d-rftu)
17/07/22 12:17:43.62 kiQvn5e/0.net
テンプレなんかに残すと肥大化して仕方ない

467:デフォルトの名無しさん (ワッチョイ e711-MZAo)
17/07/22 12:26:21.19 DjK3yBdG0.net
>>431
新しい昨日が追加されるところ
まだクソなのはクソだけどvbaは一切進歩せんからなあ

468:デフォルトの名無しさん (ワッチョイ bf6d-/bFE)
17/07/22 12:38:20.99 kiQvn5e/0.net
新しい昨日って言葉が心に刺さった

469:デフォルトの名無しさん (スプッッ Sd7f-AsiQ)
17/07/22 13:17:27.76 c13VlgOtd.net
某ライブラリの悪口はやめろ

470:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/22 17:08:46.19 AfU+LLGPr.net
>>460
> vbaは一切進歩せんからなあ
エンジニアのための言語じゃないからね。
Dim だの Set だの If Then だの、
うんざりするのはしょうがないとしても、
objFSO
なんていう変数を見た日にゃ、
ぶっ殺したくなるね。

471:デフォルトの名無しさん (ワッチョイ e711-MZAo)
17/07/22 18:29:44.93 DjK3yBdG0.net
>>463
継承もサポートしてないしね
だから初心者の入口としても不向き
マイクロソフト的にもお荷物だろうな
はよ.net framework対応してほしいわね

472:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/22 18:50:19.82 WdXeAKAr0.net
そもそも継承が必要になるほどの大規模な開発をVBAでやる事自体が間違い定期。

473:デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
17/07/22 19:09:15.96 mlphh3ze0.net
いまさら継承はいらないよ

474:デフォルトの名無しさん (ワッチョイ e711-MZAo)
17/07/22 19:22:53.47 DjK3yBdG0.net
まあ継承より配列周りの強化してほしいかな
わざわざ自分でコレクションもどき作ってるけどめんどいわ

475:デフォルトの名無しさん (ワッチョイ df6f-QK4i)
17/07/22 21:16:12.56 yBUCBb6t0.net
初めてADOっての使ったけど、なんだこりゃ。
MSQueryと違って、列名が出ないじゃん。
いや、ヘッダのON・OFFで無理矢理出せるけど、
そうするとUnionした時に、レコードの途中に列名が出やがる。(列名扱いされないから?)
列名は、出力位置の上に、予め書いとかなきゃいけないの?

476:デフォルトの名無しさん (アークセー Sx1b-SP9G)
17/07/22 21:48:53.95 juX4uYOOx.net
>>467
コレクションもどきって何?
配列もどきのコレクションとは違う何かかな?

477:デフォルトの名無しさん (アークセー Sx1b-SP9G)
17/07/22 21:51:30.60 juX4uYOOx.net
フォームを作ってるとき、同種のパーツのオブジェクト配列が簡単に作れたら良いのにって思うわ

478:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/22 22:39:49.33 WdXeAKAr0.net
>>470
For Each x In Userform.Controls
    Select Case Typename(x)
        Case "Label"
            ...
    End Select
Next
みたいなのじゃなくて?

479:デフォルトの名無しさん (ワッチョイ a791-8s/R)
17/07/22 23:56:17.15 IXNocUxm0.net
>>468
列名も取れる

480:デフォルトの名無しさん (アークセー Sx1b-SP9G)
17/07/23 01:19:51.07 Lr396bh+x.net
>>471
VBだとフォームパーツの型のオブジェクト変数として配列変数が宣言できる
何かと便利

481:デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
17/07/23 07:50:57.33 Ecz0kxoE0.net
>>470みたいな需要は確かにありそうだ。
さっそくオレ様ライブラリに取り入れよう。

482:デフォルトの名無しさん (ワッチョイ e711-MZAo)
17/07/23 11:44:10.83 MDDS7K/i0.net
>>469
コレクションて値の出し入れできなかったりするじゃん?
値の追加、挿入、削除、入れ替え、ソートあたりメソッドにしたクラスだね
型は安全に出来ないけどなかなか便利
objectにも対応させたいけどやや面倒だから手を付けてない

483:デフォルトの名無しさん (ワッチョイ df6f-QK4i)
17/07/23 22:46:54.50 EbUz/UVB0.net
>>472
Forで1つずつ取る方法しかなかったわ。
CopyFromRecordsetみたいに一撃弾平なのはないのね。

484:デフォルトの名無しさん (アークセー Sx1b-SP9G)
17/07/23 23:32:34.17 O7lPo0j+x.net
>>475
コレクションもどきって表現はミスリーディングだな
コレクションの拡張クラスだそれは
アイテムのソートと入れ替えは便利そう

485:デフォルトの名無しさん (ワッチョイ e711-MZAo)
17/07/24 02:14:49.51 mhaeOVx/0.net
>>477
for eachできないからコレクションもどきとした
中身はただの配列だし

486:デフォルトの名無しさん (アークセー Sx1b-SP9G)
17/07/24 06:50:21.77 t6cPW3USx.net
>>478
コレクションをラップしてるんじゃなくて中身が配列なのか
確かにそれだとコレクションもどきだな

487:デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
17/07/24 08:13:01.75 2edahxxPa.net
>>479
継承できればコレクションからゴニョゴニョした方がいいんだろうけど
どうでも良いけど値の入れ替えのメソッド名をRepracementにしてるんだけどなんかしっくりこないんだよね
なんかいいのないかな

488:デフォルトの名無しさん (スッップ Sdff-AsiQ)
17/07/24 08:16:32.78 6zzYsskzd.net
そりゃ違和感あるだろな

489:デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
17/07/24 08:53:04.80 2edahxxPa.net
>>481
入れ替えで辞書ツール突っ込んだらそれでてきたからしゃーない

490:デフォルトの名無しさん (ワッチョイ bf23-E/h9)
17/07/24 09:00:24.88 vx6bYcmg0.net
配列の話題になってから調べて初めて知ったけど
ArrayListをVBAで使えるんだね
一通りメソッドもそろってるみたいだし、どうかな
実際に使ってみたわけではないけど

491:デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
17/07/24 09:18:31.28 2edahxxPa.net
>>483
便利は便利だけど遅い
三桁四桁の配列なら大差無いだろうけどね
大抵はコレクションで事足りちゃうしね

492:デフォルトの名無しさん (アウアウアー Sa4f-Z4r9)
17/07/24 13:58:09.64 n0AZ+pfTa.net
使い勝手はArrayListのほうが便利そうだね
まぁ確かに自分も使ったことないけど

493:デフォルトの名無しさん (ワッチョイ df6f-QK4i)
17/07/24 21:11:53.14 nIPnkEuj0.net
ちゃんとしたやつがあるのかよwww
自作配列にArrayListって変数名付けたわwwww

494:デフォルトの名無しさん (ワッチョイ 7faa-A43S)
17/07/25 15:00:10.14 1af6ROG50.net
VBAのArrayListって何よ?

495:デフォルトの名無しさん (アウーイモ MM6b-Z4r9)
17/07/25 15:01:06.45 WO88e3uDM.net
.NETのライブラリが使えるて話なんじゃないの?

496:デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
17/07/25 16:38:16.45 k4b2Lxa9a.net
.netライブラリの話で思い出したけどコンストラクタに引数渡せないのクソ不便だよな
渡せるようになれば使えるライブラリも増えそうだが

497:デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
17/07/25 19:00:27.87 cmKKN7nU0.net
>コンストラクタに引数渡す場面ってある?
シートの名前ぐらいなら返り値の.nameを変えるけど、何とも思わん

498:デフォルトの名無しさん (スッップ Sdff-AsiQ)
17/07/25 19:39:14.04 RB4NOmYpd.net
コンストラクタでしか初期化できない(他の初期化用メソッドを持たない)クラスがあれば困るけど、
そういうものって.Netにあるの?

499:デフォルトの名無しさん (ワッチョイ bf6d-xeeJ)
17/07/25 20:05:49.03 cmKKN7nU0.net
>>491
const
vbaでconstが必要な用途が良くわからんけど

500:デフォルトの名無しさん (ドコグロ MM9f-efHF)
17/07/25 20:19:25.50 KNlosRFTM.net
>>488
えっ、そんな機能いつ実装されたん?

501:デフォルトの名無しさん (ドコグロ MM9f-efHF)
17/07/25 20:27:13.52 KNlosRFTM.net
>>491
VBA から使うとは思えないけど Exception の Message はコンストラクタでしか設定できないよ
そもそも>>489はそういう話じゃないような気がするけど

502:デフォルトの名無しさん (ワッチョイ 4791-2faK)
17/07/25 22:08:51.03 8cBHpzox0.net
>>493
.netのクラス使えないのかな?って以前ググったときに
URLリンク(officetanaka.net)
が引っかかって
えらい簡単に使えるんだなぁと思ったんだけど
思っただけで使ったことないし
細かいことも知らない…
ていうか、本当にいろいろ便利に使えるなら
ググるだけでバンバン情報引っかかっていいと思うんだけど
ArrayListのことくらいしか出てこんかった

503:デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
17/07/25 22:30:18.63 k4b2Lxa9a.net
>>490
ブックをそのままラップしたクラスとか作りたいときにパス指定するためのメソッドわざわざ実装するのとかクソめんどくさいじゃん
結構引数指定したい場面あるよ
逆になんで引数渡せないのかという

504:デフォルトの名無しさん (ワッチョイ bf6d-fQyQ)
17/07/25 22:39:21.79 cmKKN7nU0.net
>>496
そういうのは諦めた
エクセルに限らず、IEやら何もかもインスタンス作成してから、プロパティを変更している
言語仕様を嘆いても始まらん

505:デフォルトの名無しさん (ワッチョイ 4791-2faK)
17/07/25 22:46:52.90 8cBHpzox0.net
話の流れで思い出したけど
これ使ったことある人いる?
マクロをC#で書けますよっていうやつ
URLリンク(mokumokucsharp.hateblo.jp)
Visual Studio Codeとかいうのもインストして
サンプルは動くんだけど
インテリセンスがうまく効かんくて使い方がよくわからない

506:デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
17/07/25 23:01:14.52 Vr2PvTdG0.net
それもそうだけどクラスを含むプロジェクトを参照しているモジュールからそのクラスのインスタンスを
直接Newで作れないのにも困ってる。
Create~系の関数を書いて置き場所に迷う場合が特に。

507:デフォルトの名無しさん (ワッチョイ df6f-QK4i)
17/07/25 23:03:35.24 6CdgJbJQ0.net
仮にC#使いだったとしても、VBA覚えるわ。
VBAにある機能をどれくらいカバーしているのか。
99%以下ならイラネ。
ていうか、そもそもどういう仕様だろう。
C#で書いたのを、内部的にVBAに翻訳して標準モジュールに書き込むとかだったら笑う。

508:デフォルトの名無しさん (ワッチョイ df6f-QK4i)
17/07/25 23:05:23.65 6CdgJbJQ0.net
よく見たら、
全てのVBAコードを生まれる前に消し去りたいとか、凄いこと書いてる。
何かに憑りつかれてはいませんか。

509:デフォルトの名無しさん (ワッチョイ bf6d-fQyQ)
17/07/25 23:08:46.90 cmKKN7nU0.net
機能よりも言語仕様で
if()then
とかやっちゃう

510:デフォルトの名無しさん (ワッチョイ bf6d-fQyQ)
17/07/25 23:09:23.62 cmKKN7nU0.net
しかもうまく動くから消すか消すまいかで悩む

511:デフォルトの名無しさん (ワッチョイ a711-QK4i)
17/07/25 23:34:05.22 K76AsuLq0.net
重複した行を削除したいのですが、ググってみると
重複した下の行を削除するプログラムが殆どです。
上の行を消すプログラムはないでしょうか?

512:デフォルトの名無しさん (ワッチョイ a711-QK4i)
17/07/25 23:46:50.72 K76AsuLq0.net
自己解決しました。

513:デフォルトの名無しさん (ワッチョイ a76f-E/h9)
17/07/26 00:01:02.57 /aun+12z0.net
>>500
なんでこんな馬鹿なのに偉そうにできるんだろう

514:デフォルトの名無しさん (ワッチョイ df6f-QK4i)
17/07/26 00:08:54.58 7P86XL9W0.net
>>506
だって、要は、VBA使いこなせないからC#でとか言ってるわけだろ。
VBAに心の底から辟易って、使う人の能力の問題を、何で言語のせいにしてるのか。

515:デフォルトの名無しさん (ワッチョイ df11-pqVL)
17/07/26 00:11:51.48 U77Cst6m0.net
質問です。
Excel2007ですけど、複数のオートシェイプをグループ化せずに同時にカットできますか?
オートシェイプを選択してSelection.Cutメソッドを実行すると、なぜかセルがテカテカするのです。
ShapaRangeオブジェクトにはCutメソッドが無いみたいですし。
とりあえずSendKeys "^x"で対処してるけどなんだかなあ、という状況です。

516:デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
17/07/26 00:13:05.34 kYPrva630.net
RangeのUnion、初期値がNothingのときエラーになるのが残念だ

517:デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
17/07/26 00:13:33.72 kYPrva630.net
初期値つーか左辺

518:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/26 00:


519:21:08.24 ID:o5MQIZHRr.net



520:デフォルトの名無しさん (ワッチョイ dfaa-E/h9)
17/07/26 00:30:16.20 kYPrva630.net
自分の仕事が楽になるならいいんじゃないか
共有するやつは別

521:デフォルトの名無しさん (ワッチョイ bf1b-pqVL)
17/07/26 00:50:15.20 Fm0oLH560.net
VBAって基本、かならず自動でコンパイルされた上で実行されるんですか?
[デバッグ]-[コンパイル]ってやらずに実行するとえらく遅いんですが。

522:デフォルトの名無しさん (アウアウカー Safb-7zDD)
17/07/26 03:26:24.46 KTzuPZaba.net
日本語変じゃね

523:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/26 06:22:23.80 o5MQIZHRr.net
>>512
コード資産が共有できない(自分の中でも)、というプログラマにあるまじき行為。

524:デフォルトの名無しさん (ドコグロ MMfb-efHF)
17/07/26 07:04:52.98 2BL9ZNyZM.net
>>495
> URLリンク(officetanaka.net)
> が引っかかって
> えらい簡単に使えるんだなぁと思ったんだけど
これは知らなかったわ、教えてくれてありがとう
> ていうか、本当にいろいろ便利に使えるなら
> ググるだけでバンバン情報引っかかっていいと思うんだけど
> ArrayListのことくらいしか出てこんかった
ちょっとググったらCOM経由で動くみたいね(CreateObject で作成するんだから当たり前か)
URLリンク(qiita.com)

525:デフォルトの名無しさん (ドコグロ MMfb-efHF)
17/07/26 07:14:09.63 2BL9ZNyZM.net
>>498
これ使うぐらいならPowerShell使う

526:デフォルトの名無しさん (スッップ Sdff-AsiQ)
17/07/26 07:36:03.65 o8wFJ9U0d.net
>>515
環境の問題なら、自分のなかでは使い続けられるんじゃね?

527:デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
17/07/26 07:46:37.45 rbCQuCda0.net
>>511
中間言語があるんだよなぁ

528:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/26 07:52:21.56 o5MQIZHRr.net
>>518
既存のVBAコードに、C#で書いたプロシージャを呼び出すコードを追加することはできないよね。
VBAで書いたWinのExcelマクロはMacのExcelでも使えるけど、C#で書いたらMacでは使えないよね。

529:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/26 07:53:30.08 o5MQIZHRr.net
>>519
え? マジで? kwsk

530:デフォルトの名無しさん (ワッチョイ 4791-2faK)
17/07/26 07:58:49.22 PoLK+oD40.net
VBAはもう言語仕様をアップデートするつもりはないんだろうけど
せめてIDEくらいはもうちょっと便利にして欲しい
>>516
つまり相互運用の登録がされているライブラリは使えるってことか
でもいちいち自分でdll作ってまでは使わないかなぁ…

531:デフォルトの名無しさん (ワッチョイ c773-5QOx)
17/07/26 08:36:41.46 N2NJoKbw0.net
eclipseがVBA対応したらウケるね

532:デフォルトの名無しさん (アークセー Sx1b-SP9G)
2017/07/2


533:6(水) 09:23:17.61 ID:2KFV8mEox.net



534:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/26 09:40:24.60 19gyZHTT0.net
>>522
dllを作るってどういう状況で必要になるのかよく分からんよな。
別途用意する必要があるって事は他人に使わせるのに難があるし、
VSTO使えるならVSで他の言語使った方が早い場面が多いだろうし、
自作のdllが必要になるような処理をVBAに求める場面というのが想像出来ない。

535:デフォルトの名無しさん (スッップ Sdff-AsiQ)
17/07/26 10:40:08.38 FItiZl47d.net
「Macだと」とか「プログラマとして」とかちょっとこのスレの想定ユーザーからはかけ離れてるんじゃないか?

536:デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
17/07/26 10:40:27.92 nObVd20Fa.net
>>507
いや、vbaがクソ言語なのは避けようのない事実だろ
C♯erがわざわざ新しく覚える時間が無駄というのは分かるよ
オブジェクト指向にドップリしてたら使いにくいことこの上ないと思うし

537:デフォルトの名無しさん (スッップ Sdff-AsiQ)
17/07/26 11:27:30.63 FItiZl47d.net
そんなにクソ言語だとは思えない

538:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/26 11:43:09.73 19gyZHTT0.net
VBAをクソクソ言っている人たちはどういう立場なんだろうな。
クソだと思うなら近づかなければいいのに。
なんか他の言語でもメインで使い始めた途端にクソクソ言いそう。

539:デフォルトの名無しさん (スッップ Sdff-AsiQ)
17/07/26 11:49:10.59 FItiZl47d.net
作ったものを他人と共有しようとすると限界が低い。でも自分一人ツールと割り切れば相当なことができる。
Officeソフトにそれ以上求めてもしょうがないでしょ。

540:デフォルトの名無しさん (ワッチョイ c773-5QOx)
17/07/26 12:23:16.56 N2NJoKbw0.net
VBAは手軽さを重視してるんだから、高度な機能がないって意見は的外れなんだよ

541:デフォルトの名無しさん (ドコグロ MM9f-efHF)
17/07/26 12:43:21.28 0/Y/FM4fM.net
>>529
ん?
アマチュアの人かな?
お仕事ならクソだろうが使わざる得ない状況なんていくらでもあると思うが

542:デフォルトの名無しさん (ワキゲー MM9f-rceg)
17/07/26 12:47:32.19 aG45BvrzM.net
>>529
理解できない自分を正当化してるだけさ

543:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/26 12:57:07.83 19gyZHTT0.net
>>532
VBA言語をクソって言っちゃうくらいなのにVBAでお仕事取っちゃうの?
もう少し仕事は選んだ方がいいんじゃないか。

544:デフォルトの名無しさん (スップ Sdff-AsiQ)
17/07/26 13:05:35.40 ecs8OXuXd.net
そんなことだと底辺職業だと見なされるぞ

545:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/26 13:36:33.55 o5MQIZHRr.net
>>526
うん、そういうこと。
ExcelマクロをC#で書くような人は、このスレの想定ユーザーからはかけ離れてるよね、ってこと。

546:デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
17/07/26 13:40:18.49 nObVd20Fa.net
クソだけどofficeのマクロ言語はこれしかないから仕方なく使うしか無いだろ
プログラム言語としては時代遅れの化石なのはさすがに共通認識だと思ってたわ
現状くそなのもそうだし、これから先進化することも決してないこともクソ
あと、手軽さと高度な機能は別に共存できるでしょ

547:デフォルトの名無しさん (スップ Sdff-AsiQ)
17/07/26 14:23:28.25 ecs8OXuXd.net
>>536
それは別にかけ離れてはいないだろ
Macだとかプロのプログラマはかけ離れている

548:デフォルトの名無しさん (ワッチョイ a76f-E/h9)
17/07/26 14:25:46.34 /aun+12z0.net
プログラマとしてって言いだしたのって(オッペケ Sr1b-QbI6)だな
自演までして何がやりたいんだか・・・

549:デフォルトの名無しさん (JP 0H4f-QK4i)
17/07/26 14:27:35.77 +1cN/gIlH.net
>>527
> オブジェクト指向にドップリしてたら使いにくいことこの上ないと思うし
俺は逆だと思うよ
オブジェクト指向をよく知ってたほうが、VBAを使いこなせる
・クラスモジュールを使いこなす
・いわゆる「インタフェース継承」を使いこなす
・WithEventsを使いこなす
大抵の奴は「クラスモジュールっていつ使うんですか」レベルだから

550:デフォルトの名無しさん (アウアウエー Sa9f-MZAo)
17/07/26 15:11:24.07 ZPUGQ/usa.net
>>540
俺の言いたいことを一ミリも汲んでくれてないなw
そりゃオブジェクト指向的なプログラミングを知ってれば非オブジェクト指向言語でも構造的に自然と書くようになる
それとこれとは別の話
機能がないからわざわざ自分で作らにゃいかんから不便だって話をしてる

551:デフォルトの名無しさん (ワッチョイ df06-pqVL)
17/07/26 16:52:15.43 6VvQXdi20.net
この手の下らんやり取りはこれまでもあったし、これからもウンザリするほど続くんだろうなぁ┐(´д`)┌ヤレヤレ

552:デフォルトの名無しさん (オッペケ Sr1b-QbI6)
17/07/26 18:04:37.55 o5MQIZHRr.net
>>539みたいに、自演自演て騒ぐ奴をしばしば見かけるけど、彼は何がしたいの?
つか、そもそもここは自演ができないスレなんだよね?
こういうのはスルーしたほうがよいのでしょうか。

553:デフォルトの名無しさん (ササクッテロル Sp1b-8s/R)
17/07/26 18:16:40.16 VQAVDfi4p.net
>>541
オブジェクト指向と機能は別の概念だけどな
機能は言語がなんであっても追加出来るだろうし
オブジェクト指向は言語に関する概念だから

554:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/26 18:30:45.45 19gyZHTT0.net
オブジェクト指向は設計に対する概念

555:デフォルトの名無しさん (JP 0H4f-QK4i)
17/07/26 18:33:38.33 +1cN/gIlH.net
>>541
オブジェクト指向の一切を封じられてるから使いづらいというのなら、それはそうでもないってことさ
機能が足りないというんなら、先人が作ったライブラリでも探せば?
URLリンク(github.com) とか

556:デフォルトの名無しさん (ササクッテロル Sp1b-8s/R)
17/07/26 18:41:04.50 VQAVDfi4p.net
>>545
設計と言語両方じゃね?

557:デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
17/07/26 19:21:44.23 rbCQuCda0.net
>>540
自作クラスってどういう時に使うの?
excelが思いっきりオブジェクトだから、それに対する手続き的な操作しかしないわ

558:デフォルトの名無しさん (スップ Sdff-AsiQ)
17/07/26 19:28:41.05 ecs8OXuXd.net
>>548
状態を持ったモノを扱いたいときじゃね?
状態を持たないんだったら関数の組み合わせで表現するのは簡単だ。

559:デフォルトの名無しさん (ドコグロ MM9f-efHF)
17/07/26 19:39:55.05 pjdGyN9QM.net
>>534
言語で仕事選べるとか無職の発送は素晴らしいな w

560:デフォルトの名無しさん (ワッチョイ a791-8s/R)
17/07/26 19:42:18.93 W1HWCg900.net
>>549
状態を持つ⇒オブジェクトを使う
対偶は
オブジェクトを使わない⇒状態を持たない
対偶は必ず真とはいえなくない?

561:デフォルトの名無しさん (ドコグロ MM9f-efHF)
17/07/26 19:45:32.31 pjdGyN9QM.net
>>548
ログクラスとか作ってたな
書き込むシートと書き込む行を別々に管理するのは嫌だったから
でも継承もできないしコンストラクタの引数も持てない状況ではあまり使いやすくならないし結局クラスはほとんど使わない
そもそも俺がずっと保守するわけにもいかんから

562:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/26 19:45:44.80 19gyZHTT0.net
>>547
オブジェクト指向言語は「オブジェクト指向的な設計が可能な言語」の事だから、
言語によってオブジェクト指向が決まるわけではないし、言語に対する概念というと違うと思うなぁ。
>>550
募集要項に何の言語が出来るかとか普通書いてないか?
Javaで募集かけたけどC#での開発がメインですみたいなカオスな職場もあんまりないだろ。

563:デフォルトの名無しさん (ワッチョイ e711-MZAo)
17/07/26 19:46:32.77 +NZ2Dbuu0.net
>>544
オブジェクト指向をサポートしてるかって話だよ
なんとなく分かるべ
>>546
ことさ、じゃなくてさ
俺はそういうところがクソだと言ってるの
クソはクソでも使わなきゃいから使うだけで
ライター、チャッカマン、バーナーが他所であるのにマッチでも火をおこせるしこれはこれで良いもんだぞって言ってるようなもん

564:デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
17/07/26 19:52:11.21 rbCQuCda0.net
>>552
ログはfunctionだなぁ
コンストラクタ使えないと、わざわざNewしてクラス無いメソッド呼び出してって二度手間じゃね。
functionならいつでもどこでも一行で済む

565:デフォルトの名無しさん (スップ Sdff-AsiQ)
17/07/26 19:53:00.06 ecs8OXuXd.net
>>551
⇒(ならば)とは言ってないけどな
まあ、オブジェクトを使わない⇒状態を持たせづらい(グローバル変数を使うはめになる)
あくまでVBAでの話だよ

566:デフォルトの名無しさん (ワッチョイ bf6d-E/h9)
17/07/26 19:53:37.44 rbCQuCda0.net
>>549
例えば、具体的にどういう時に使うの?
状態って言っても初期値とかExcelから拾ってくるから、それをわざわざclassにほーり込むのもなー

567:デフォルトの名無しさん (ワッチョイ a791-8s/R)
17/07/26 19:56:29.43 W1HWCg900.net
>>553
オブジェクト指向言語は
オブジェクト指向設計したものを
そのまま実装し易い言語じゃないかな
言語の概念でもあると思うけどな
オブジェクト指向言語じゃなくても実装できるのは確かだけど
それならVBAでもオブジェクト指向設計を実装できるんじゃないかな

568:デフォルトの名無しさん (スップ Sdff-AsiQ)
17/07/26 19:57:08.36 ecs8OXuXd.net
>>557
初期値より途中の経緯を記憶しておかないと次の計算ができないものとか?
「ワークシートに書き出す」じゃ再利用性に欠ける

569:デフォルトの名無しさん (ワッチョイ bf6d-1kH5)
17/07/26 20:08:20.48 rbCQuCda0.net
>>559
だから具体的にどんなことをするんだよw
ゲームとかはナシでね

ちと思いつかない

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

例えば再帰関数みたいに状態を引数にするとか

571:デフォルトの名無しさん (ドコグロ MM9f-efHF)
17/07/26 20:11:22.90 pjdGyN9QM.net
>>553
> オブジェクト指向言語は「オブジェクト指向的な設計が可能な言語」の事だから
そんなことを言い出したらアセンブリ言語でもオブジェクト指向は可能だよ
そういう極端な話をしたい訳じゃないんだと思うよ
> >>550
> 募集要項に何の言語が出来るかとか普通書いてないか?
ああ、そういう働き方してるひとなのね
もっとでっかい案件レベルのつもりだったから話が噛み合わないのも無理ないな

572:デフォルトの名無しさん (ドコグロ MM9f-efHF)
17/07/26 20:12:48.62 pjdGyN9QM.net
>>555
書き込み行はどうやって覚えてるの?
複数のログを扱うとか面倒じゃね?

573:デフォルトの名無しさん (ドコグロ MM9f-efHF)
17/07/26 20:15:20.68 pjdGyN9QM.net
>>558
> それならVBAでもオブジェクト指向設計を実装できるんじゃないかな
関数ポインタがないから継承とか無理じゃね?

574:デフォルトの名無しさん (ワッチョイ a791-8s/R)
17/07/26 20:15:48.34 W1HWCg900.net
状態を持つ必要がある入出力関係が
独立に多数ある場合は
クラスを使うと比較的実装が簡単になるのかな?

575:デフォルトの名無しさん (ワッチョイ bf6d-1kH5)
17/07/26 20:17:56.75 rbCQuCda0.net
>>563
ログはlogシート一つ、3列
時間 / タイプ / 内容
7/26 20:00 log 作業開始
7/26 20:05 success 作業成功
7/26 20:07 error err.discriptionの内容
7/26 20:10 log 作業終了
で、書き込む時に毎回A列の最終行を取得し、そこに記録してる
覚える必要はないと思う

576:デフォルトの名無しさん (ワッチョイ e711-MZAo)
17/07/26 20:24:18.05 +NZ2Dbuu0.net
表の検索とかsqlでやる人もいるんだろうけど自分としてはクラスにしちゃうのがしっくりくるわ
配列の操作もクラスにしてると楽
あと、似たような処理で操作する対象が違うメソッドなんかは同じ名前にしても問題ないところとかも地味に便利だよ
関数だと命名に困ることがよくある

577:デフォルトの名無しさん (スップ Sdff-AsiQ)
17/07/26 20:30:27.76 ecs8OXuXd.net
>>560
さあ?いろいろあるでしょ
数値を放り込むとその度に回数をカウントアップし、最大値・最小値、合計、時刻を記録する、とか。
これくらいだったらワークシートでもできるけど、そういう対象が数多くなるとオブジェクト配列でやりたくなる。
どのワークシートのどこに?とか考える必要なくなるしエクセル以外のOfficeでも使えるし。

578:デフォルトの名無しさん (ワッチョイ a791-8s/R)
17/07/26 20:51:20.79 W1HWCg900.net
>>564
一般的な形では難しいかもしれないけど
サブクラスに相当する関数から
スーパークラスに相当する関数を呼べばいいんじゃね?
逆にスーパークラスに相当する関数に
スイッチみたいな引数を付けて
サブクラスに相当する関数に分岐するとか

579:デフォルトの名無しさん (ワッチョイ df6f-QK4i)
17/07/26 21:00:52.52 7P86XL9W0.net
>>567
SQLを使うのって速度的な理由。
自作クラスでSQL以上のスピードが出るなら、
みんなそうするわ。

580:デフォルトの名無しさん (ワッチョイ 473d-pqVL)
17/07/26 21:20:54.79 19gyZHTT0.net
>>558
VBAで出来ないと思っているならオブジェクト指向を何か勘違いしているからオブジェクト指向設計の本を読むといいよ。
他の言語みたいな書き方が出来ないだけで、VBAでもオブジェクト指向プログラミングは普通に出来るから。

581:デフォルトの名無しさん (ワッチョイ e711-MZAo)
17/07/26 21:34:48.38 +NZ2Dbuu0.net
>>570
まあ、あんまり大きなデータは扱わんからな
別に検索する形式が決まってるなら内部的にsqlで値抜き出してもいいわけだし
データの塊をオブジェクトとして扱っちゃったほうが何かまとまり感あってしっくり来るって感じかな

582:デフォルトの名無しさん (ワッチョイ e711-MZAo)
17/07/26 21:36:24.28 +NZ2Dbuu0.net
>>571
できるできないの話じゃないんだって
あとオーバーライドはちょっと厳しくないか
どうやって実装する?


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