113:デフォルトの名無しさん (ドコグロ MMa9-y/Rq)
17/07/04 05:36:03.11 JPw87neNM.net
これって今何行あるの?
何万行もあって列数50あれば大分重くなると思うけど
114:デフォルトの名無しさん (ワッチョイ 0111-0bL8)
17/07/04 06:53:55.04 SZEZ7cdP0.net
6000回もselectとcopyしてりゃ遅くなるの当たり前
115:デフォルトの名無しさん (オッペケ Sr71-nSMp)
17/07/04 08:12:48.47 n1qpisHfr.net
田のクラッカー
116:デフォルトの名無しさん (アウアウエー Sa4a-Znx3)
17/07/04 10:15:18.62 hKxheJiwa.net
セレクトなくしたら2/3ぐらいにはなりそうだな
まあどう考えてもコピペはロスがでかい
指定する書式はマクロの記録か大抵ググりゃ出てくるから調べんさい
117:デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
17/07/04 20:20:52.61 aFK9C0z90.net
>>89>>102です。
>>103 図形のオブジェクトはありませんでした。でも変なオブジェクトが多量に残っていたという経験は過去にありました。確認してみます。
>>110 Unionでまとめて処理ですか。試してみます。>>97と比較してみます。
>>111 実際の行は数千行ありますが、実際には最終行から200行しか処理してません。後出しになりますが>>102ではその部分を省きました。ごちゃごちゃするかなと思い・・・
118:デフォルトの名無しさん (ワッチョイ 62ec-nP2k)
17/07/04 20:21:31.96 aFK9C0z90.net
>>89>>102です。
>>112 直接書式を設定したほうがよさそうですね
>>114 >>97を試してみます
みなさまありがとうございました。土日に試してみます。諸事情で今は試せないので。
119:デフォルトの名無しさん (ワッチョイ 1911-Znx3)
17/07/04 23:04:48.45 n6RB6fUl0.net
>>116
頑張ってベターな方法探してね!
120:デフォルトの名無しさん (ワッチョイ c179-9Mth)
17/07/05 00:29:10.07 VBidwpfq0.net
ベタな方法を探す?
121:デフォルトの名無しさん (アウアウウー Sa25-k1q/)
17/07/05 10:23:55.19 jMcI5nQfa.net
ダブルクリックとシングルクリックを区別する処理を考えましたがあまり
美しくないです。もっとスマートな方法はありますか?
VDim isDoubleClick As Boolean
Dim cancelClick As Boolean
Private Sub CommandButton1_Click()
____Dim i As Long
____For i = 0 To 2048
________DoEvents
________If isDoubleClick = True Then
____________Exit Sub
________End If
____Next i
____If (cancelClick = False) Then
________' シングルクリック時の処理はここ
________Worksheets(1).Range("a1").Value = "シングルクリック"
____End If
____cancelClick = False
End Sub
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
____isDoubleClick = True
____' ダブルクリック時の処理はここ
____Worksheets(1).Range("a1").Value = "ダブルクリック"
____isDoubleClick = False
____cancelClick = True
End Sub
Private Sub UserForm_Initialize()
____isDoubleClick = False
____cancelClick = False
End Sub
122:デフォルトの名無しさん (アウアウエー Sa4a-Znx3)
17/07/05 11:03:35.66 bK7Vkfgva.net
>>119
vba クラス コントロール イベント
とかでググれば
123:デフォルトの名無しさん (JP 0H16-CicO)
17/07/05 13:18:10.58 r0cXYB/2H.net
>>119
内容と全然関係ないけど、全角スペースでインデントすれば削除されないよ
124:デフォルトの名無しさん (アウアウウー Sa25-k1q/)
17/07/05 16:49:43.67 F7dOY4NYa.net
>>120
ありがとうございます。質問そのものについてはタイマー張ることで実現
できることがわかりました。
また、イベントハンドラをまとめる方法もついでに知ったので助かりました!
>>121
次からそうします。ありがとうございます。
125:デフォルトの名無しさん (ワッチョイ c26f-CicO)
17/07/05 22:43:43.51 kJzSrAyN0.net
セルの値を配列に入れる時、
セルが1つだけだと、一次元配列になっちゃうってひどくね。
126:デフォルトの名無しさん (ワッチョイ 066d-Opov)
17/07/05 22:47:37.84 VdD8AIen0.net
次元数が変化するとめんどくさい時は、常に同じ次元数になるようにfunctionを噛ませる
127:デフォルトの名無しさん (ワッチョイ bd8b-UM0m)
17/07/05 22:49:15.43 odMt6Ynp0.net
セルが2つだと二次元配列になっちゃうよ
128:デフォルトの名無しさん (アウアウウー Sa25-k1q/)
17/07/05 23:46:14.85 F7dOY4NYa.net
DAOとADOの使い分けを教えて!
129:デフォルトの名無しさん (ワッチョイ f73d-1B52)
17/07/06 00:36:18.68 in8T4yu80.net
使い分けというかADOはDAOに比べて何かと便利だからADOだけ使えばいいんじゃないかな。
AccessだとデフォがDAOなんで使う事も多いけどエクセルで使うときのメリットは特に思い浮かばない。
130:デフォルトの名無しさん (アウアウウー Sa5b-pw7F)
17/07/06 00:50:14.75 J3gAfYSVa.net
>>127
回答ありがとう。今はMySQLに接続しようとしているのでADOを選びます。
まだVBA始めて4日目なのでわからないことばかりですが
131:デフォルトの名無しさん (ブーイモ MMfb-MhHl)
17/07/06 02:37:48.69 2ggUG7GkM.net
>>123
Resizeで1行追加して、配列を1行減らせばいいんじゃないかと思った。
132:デフォルトの名無しさん (ワッチョイ d72b-KuRC)
17/07/07 06:50:33.44 k9X/9vlT0.net
すいません
パソコンのエクセル2016で作ったVBAをスマホで動かすことはできますか?
スマホでVBAの作成編集は無理のようなので
133:デフォルトの名無しさん (スプッッ Sd3f-nGAm)
17/07/07 07:44:52.11 6QLBDLc9d.net
>>130
むしろ教えてもらいたい
134:デフォルトの名無しさん (ワッチョイ 7773-zf8i)
17/07/07 08:54:05.14 KQxBqvcO0.net
関数でがんばれ
135:デフォルトの名無しさん (ワッチョイ bf23-M/n7)
17/07/07 21:24:02.96 IxSbuhab0.net
>>130
基本的に無理じゃね。
スマホ側OfficeがVBAサポ―トしてないと。
その上でWin32API使用してたら、更に無理だし。
136:デフォルトの名無しさん (スプッッ Sdbf-kebf)
17/07/07 21:25:43.56 t0FXhP6Gd.net
ノートでも画面狭く感じるのにスマホでなんてストイック過ぎる
137:デフォルトの名無しさん (ワッチョイ ff8f-KuRC)
17/07/07 22:19:46.83 02peKi+J0.net
アリエッティだから…
138:デフォルトの名無しさん (ワッチョイ 778b-QU0D)
17/07/07 23:07:11.35 tdv0VtnU0.net
ネゴシックスだから…
139:デフォルトの名無しさん (ワッチョイ 97ea-okny)
17/07/07 23:13:49.66 q3zfwuJv0.net
vbaってエクセル用の言語?
他にも使えるの?
140:デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
17/07/07 23:24:32.16 IHJ5BTGs0.net
アクセスやワードでも使えるよ
アクセスvbaはたまによく使う。SQL覚えたほうがいいけど
ワードはワード自体使わん
141:デフォルトの名無しさん (ワッチョイ d701-LW04)
17/07/07 23:41:29.01 cLxiai6C0.net
初歩的な質問で、すみません。
vbaの公式本で独学で勉強中なのですが、
なぜこうなるのかわかりません。
よければ教えてほしいです。
不明点:
①なぜnumがセルa1~a3だと認識されるのか。
b1~b3も記述しているので、b1~b3と認識されないのはなぜか。
②こういうもんだと言われればそれまでなのですが、
ほかにもnum以外に自動認識されるような用語はあるのでしょうか。
Sub sampel()
Range("b1") = percent(Range("a1"))
Range("b2") = percent(Range("a2"))
Range("b3") = percent(Range("a3"))
End Sub
Function percent(num) As String
percent = num / 100 & "%"
End Function
142:デフォルトの名無しさん (ワッチョイ ff8f-KuRC)
17/07/07 23:52:29.75 02peKi+J0.net
関数 percent(num) で呼び出しもとで
引数 numに Range("a1") をセット(厳密には違うか)してるから
って釣りだよな
143:デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
17/07/07 23:55:59.29 IHJ5BTGs0.net
>>13
144:9 残念ながらかなり根本的な事がわかっていない function~はユーザー定義関数っつって、処理をひとまとめにしたもの numってのは変数名。これは自分で決めるもので、 「num」でも「namu」でも「ナンバー」でもなんでもいい。 「sub」「if」みたいな単語は予約語と言ってそれらは使えないんだけど、まぁ何となく分かるだろう 毎回'こう書くのがめんどくさいから Range("b1") = Range("a1") / 100 & "%" 'functionを定義して、使い回しできるようにしているだけの話 Range("b1") = percent(Range("a1")) function作るのめんどくさくね? と思ったかもしれないけど、それは何もわかっていないだけ 素直にこういうもんだと覚えてくれ
145:デフォルトの名無しさん (ワッチョイ d701-LW04)
17/07/07 23:57:08.34 cLxiai6C0.net
すみません。意味が分かりました。
146:デフォルトの名無しさん (ワッチョイ 9f06-1B52)
17/07/07 23:58:31.41 J/by2x1N0.net
>num以外に自動認識されるような用語
自動認識されるような用語って何?初めて聞いた
147:デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
17/07/08 00:00:19.52 lNWyFXj50.net
>>142
良かった、頑張ってねぇ~
148:デフォルトの名無しさん (ワッチョイ ff8f-KuRC)
17/07/08 00:06:47.50 13H3LMpq0.net
>>143
AレジスタとかBレジスタとかと想像してみる
>>142 ほ、ほんとに初心者だったのかスマン
149:デフォルトの名無しさん (ワッチョイ f791-nB+A)
17/07/08 00:07:48.82 ieaMtMqy0.net
>>143
多分だが、引数を理解できてなくて
numに勝手にマッピングされてる、みたいに思ったんじゃないか
なんか勉強の順番おかしいんじゃない?
もっと前のフェーズでの学習が抜け落ちたまま次進んでる気がする
150:デフォルトの名無しさん (ワッチョイ 9f06-1B52)
17/07/08 00:09:10.26 pa5RQPEd0.net
>>145
いやいや、いきなりアセンブラは無いだろとw
151:デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
17/07/08 00:11:00.51 lNWyFXj50.net
>>146
俺もそう感じた
ただ学習の本やサイトも「おまじない」とかアホなことぬかすからわけがわからなくなるんだと思う
152:デフォルトの名無しさん (スプッッ Sdbf-kebf)
17/07/08 01:17:01.28 5hrqvRHFd.net
俺何年もVBAつかってるけどオプションイクスプリシットとか読めないわ書けるけど
ただのおまじないだしないいよな別に
153:デフォルトの名無しさん (ワッチョイ 97ea-okny)
17/07/08 04:13:51.39 4CWa99QQ0.net
Private Sub Worksheet_Calculate()
If Worksheets("sheet1").Cells(3, 20) > 4000 Then
Worksheets("sheet1").Range("V4:AP4").Insert
End If
end sub
インサートがめっちゃ繰り返される。どうして?
154:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/08 08:57:15.58 YOB7IyKs0.net
>>150
ifが永遠にtrueになるからではないか
セル挿入→再計算→ifがtrue→セル挿入→再計算→ifが(略
Worksheets("sheet1").Cells(3, 20) がいつ4000以上になるのか
本当になるのかチェック
155:デフォルトの名無しさん (ワッチョイ bf6d-KuRC)
17/07/08 09:26:58.00 lNWyFXj50.net
>>150
Application.EnableEvents = False
で、eventを止める
そうしないと
>セル挿入→再計算→Worksheet_Calculate→ifがtrue→セル挿入→再計算→Worksheet_Calculate→ifが(略
が起こる
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
If Worksheets("sheet1").Cells(3, 20) > 4000 Then
Worksheets("sheet1").Range("V4:AP4").Insert
endif
Application.EnableEvents = True
End Sub
156:デフォルトの名無しさん (ワッチョイ 97ea-okny)
17/07/08 13:34:02.80 4CWa99QQ0.net
>>151,>>152
的確な指示ありがとう!!(笑)
すごいなここの人は
157:デフォルトの名無しさん (ワッチョイ b7e3-jTKI)
17/07/08 16:53:25.86 Z/1cPHhj0.net
>>149
別にいいよ、モジュールの一番上にそれを書くのを忘れなければ
158:デフォルトの名無しさん (スプッッ Sd3f-kebf)
17/07/08 17:53:16.70 lfjWBFMWd.net
モジュールの一番上に書くのは153でしょ
'2ちゃんねるの神様に教えてもらったコードです
'神様ありがとうございます
Option Explicit
Sub foo()
~
159:デフォルトの名無しさん (ワッチョイ ffb9-wcci)
17/07/09 00:06:53.03 8a4WwF270.net
こんばんは。
困ってます。
先日作成したマクロが動かなくなりました。
作成した日は動きました。
(特定のフォルダをコピーしてリネームするだけの動きです。)
プログラムを手動で実行したときは問題なく動くので、
プログラムの問題ではなさそうなのですが。
エクセルのセキュリティは、「警告を表示してすべてのマクロを無効にする」
にしています。
エクセルの再起動・PC再起動は試しましたが、だめでした。
C:\...Local\Temp\Excel8.0のMSForms.exdも消してみたりしましたがダメでした。
原因は何でしょうか・・・?
160:デフォルトの名無しさん (ワッチョイ ffb9-wcci)
17/07/09 00:08:43.90 8a4WwF270.net
スペック全然書いてなかった。
Windows8.1
Excel2013 です。
161:デフォルトの名無しさん (ワッチョイ ffb9-wcci)
17/07/09 00:14:34.37 8a4WwF270.net
すみません。
書き込んですぐに自己解決しました。
コマンドボタンのオブジェクト名が違ってた・・・。
162:デフォルトの名無しさん (ワッチョイ bf23-SyLM)
17/07/09 03:04:28.53 EKrowZUC0.net
>>158
良いんだけどさ、最低限デバッグ出来るようになってくれ。
163:デフォルトの名無しさん (ドコグロ MMbf-d65a)
17/07/09 10:34:39.10 ouwdb2hLM.net
まあ、解決したことを書いてくれたのはよかった
164:デフォルトの名無しさん (ワッチョイ 9f4e-cnUH)
17/07/09 12:02:55.24 P74F/v7B0.net
デバッグ始めにtypoを疑って問題ないと確認して、
さんざん調べてやっぱりtypoの時の脱力感
165:デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
17/07/09 12:34:26.09 XJb9KLmK0.net
optionexplititをつけよう(typo)
166:デフォルトの名無しさん (ドコグロ MMdf-d65a)
17/07/09 13:33:12.66 Uu/MlKNRM.net
>>161
他人のtypoはすぐにわかるのになぜかわからない自分のtypo
167:デフォルトの名無しさん (アウアウカー Sa2b-nSBM)
17/07/09 19:05:53.04 WoCQL3Mea.net
初心者的な内容ですいません。
よければ教えてください。
1はなぜactivesheetでなくshが回答となるのでしょうか。
shがworksheetsとして定義されていないのになぜ、worksheetsとして考えられるのかわかりません。
---------
次のイベントプロシージャはブックに新しいシートを挿入したときに実行される。
挿入されたシートのシート名を、ユーザーがダイアログボックスから入力した名前に変更させたい。
このとき、【 1 】に入る適切な命令を解答欄に入力しなさい。
ただし、シート名の重複などのエラー処理は省略しているものとする。
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim strSheetName As String
strSheetName = InputBox("新しいシートの名前を入力してください")
If strSheetName <> "" Then
【 1 】.Name = strSheetName
End If
End Sub
168:デフォルトの名無しさん (ワッチョイ 9f6f-rvkC)
17/07/09 19:17:48.71 IxMSo5tD0.net
Sh As Objectって何だよ。
Sh As Worksheetじゃないのか。
問題に突っ込んでもしょうがないけど。
169:デフォルトの名無しさん (アウアウカー Sa2b-nSBM)
17/07/09 19:25:01.06 WoCQL3Mea.net
スタンダード公式ページの模擬問題3に書いてありました。
問題がおかしいのでしょうか?
170:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 19:29:29.32 e2g8wwYr0.net
>>164
新しくできたシートが引数Shで渡されている。
(ByVal Sh As Object)の部分。
Workbook_NewSheetのイベントプロシージャの仕様。
たいてい、どのイベントプロシージャも自分自身の参照を引数で渡されている。
ので、この場合、新しくできたシート自身を操作したければ
引数で渡ってきているShを操作すればよい。
171:デフォルトの名無しさん (ワッチョイ 9743-ClOc)
17/07/09 19:33:19.71 aVb+3v1/0.net
挿入された新規シートが必ずActiveSheetだとは限らないんじゃない?
イベントプロシージャに新規シートが引数として渡されるのだから、それを使うのが確実
ちなみに問題が As Object なのは間違ってない
URLリンク(msdn.microsoft.com)
172:デフォルトの名無しさん (アウアウカー Sa2b-nSBM)
17/07/09 19:35:24.63 WoCQL3Mea.net
こういう仕様があったんですね‼
ありがとうございます。
スタンダード合格出来るよう頑張ります。
173:デフォルトの名無しさん (ワッチョイ bf6d-gkD3)
17/07/09 19:42:48.30 XJb9KLmK0.net
worksheetでもいいだろ、と思ったらエラーになった
確かにobjectであって、worksheetではない
URLリンク(stamp-uploda.com)
ってかこれ、一体なんなんだ?参照だろうけど、中身が全くないobjectが渡されてる。意味がわからない
174:デフォルトの名無しさん (ワッチョイ bf6d-gkD3)
17/07/09 19:44:44.18 XJb9KLmK0.net
ウォッチ式では
sh.name
はウォッチ式が不正です
イミディエイトウィンドウでは
?sh.name
Sheet4
とシート名が返ってくる
なんだこりゃ??
175:デフォルトの名無しさん (アウアウカー Sa2b-M/n7)
17/07/09 19:56:26.06 B1MJdm2Aa.net
>>171
ウォッチ式にsh.nameが指定されてる?
shじゃ無くて?
176:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 20:10:27.05 e2g8wwYr0.net
ためしに別の変数にShを突っ込んでみたら
中身が見られるようになった。
どっかで、オブジェクト変数は利用されるまで中身が入らないよ
みたいな話を聞いたような・・・。
177:デフォルトの名無しさん (ワッチョイ bf6d-LaqR)
17/07/09 20:17:33.00 XJb9KLmK0.net
>>172
試してみたら、ウォッチ式でもイミディエイトウィンドウでもsh.nameはうまく取れた。
ウォッチ式のshは取れない。
なんかバグの温床になりそうで、このshあんまり使いたくないなぁ…
環境はwindows7 エクセル2010
vbaコード
Private Sub Workbook_NewSheet(ByVal Sh As Object)
MsgBox 1 'ブレークポイントを設定している
End Sub
ウォッチ式に
sh
sh.name
を追加
shは図のとおり、変な状態になる。プロパティなどが表示されない
sh.nameはシート名が表示される
イミディエイトウィンドウは正常
?sh.name
Sheet5
URLリンク(stamp-uploda.com)
>>173
プロパティ(sh.name)を呼び出してみた後の状態
(メッセージボックスにはsheeet6と正常に表示された)
やっぱりダメだった。
URLリンク(stamp-uploda.com)
なんらかの理由でウォッチ式が正常に機能してないだけならいいけど、正常な状態でこれだとどういう状況なんだろう
178:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 20:42:05.40 e2g8wwYr0.net
>>174
Dim sheet as Worksheet
Set sheet = Sh
これをmsgboxの前に追加すると全部の変数がウォッチで見られると思う。
ググってみたらNewで作ったオブジェクトは初めて利用するまで空ですよ
らしいので、新シートのオブジェクトは内部的にNewで作成している?
Sh.nameが引けるのは何ででしょう?
179:デフォルトの名無しさん (スップ Sdbf-Yl52)
17/07/09 20:43:00.97 vBmV/XSmd.net
それよりも改行しないコードかく人は何を考えてコード書いてるのか気になる
180:デフォルトの名無しさん (ワッチョイ 9791-9DAm)
17/07/09 20:43:34.76 BT4+59vh0.net
>>174
objectで受け取ってるからshのままでは何のクラスなのかわからないからどんなプロパティがあるかわからない
Nameプロパティを指定したら
Nameプロパティを持っているクラスとして解釈して
Nameプロパティの位置を文字列として表示しただけ
worksheetクラスのデフォルトプロパティがNameだからかな
countプロパティとかとして解釈させたら想定外の値になると予想
181:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 20:46:50.81 e2g8wwYr0.net
>>177
VBAマスター現る。
なっとく。
182:デフォルトの名無しさん (ワッチョイ 9791-9DAm)
17/07/09 20:49:10.77 BT4+59vh0.net
>>178
VBAだけじゃなくて他のプログラミング言語C言語とかと共通の考え方
メモリ確保とかキャストとか
183:デフォルトの名無しさん (ワッチョイ 9791-9DAm)
17/07/09 20:54:20.52 BT4+59vh0.net
>>164
1が実行されるまでの間にactivesheetが変わるかもしれないからactivesheetでは不正解だと思う
出来るだけactivesheetを使わない方が想定外の動作にならないと思う
184:デフォルトの名無しさん (ワッチョイ 778b-utq/)
17/07/09 20:55:59.71 oI2zN/et0.net
てかお前らそんなに一か八かでactivesheet使ってんのかよw
185:デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
17/07/09 21:19:51.98 XJb9KLmK0.net
これが通るけど、ウォッチ式には現れない
多分ウォッチ式の不具合だと思う
そう考えないと気持ち悪くて仕方ないし疲れてきた・・・
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Calculate
MsgBox Sh.Index
End Sub
URLリンク(stamp-uploda.com)
>>175
sheetでもShでも見れるようになりました
Shの参照をコピーしたのでインスタンスが生成されたのかな
>>177
indexプロパティでも通りましたし
Sh.Calculateメソッドでも通りました
>>181
使ってないよ。sheetの指定はsetした変数を使ってる
昔はactive~やselect~を使ってたけどね
186:デフォルトの名無しさん (ワッチョイ 9791-9DAm)
17/07/09 21:38:18.71 BT4+59vh0.net
>>182
worksheetクラスではないクラスのプロパティを指定したらどうなると予想する?
例えばRangeクラスのプロパティとか
もしかしたらサイズとかを見ていてサイズが異なる場合はキャスト出来ないかもしれないど
メモリ領域には値が格納されているけどそれをどう解釈するかはクラスが決まらないと特定できない
187:デフォルトの名無しさん (ワッチョイ bf6d-U373)
17/07/09 21:45:51.77 XJb9KLmK0.net
>>183
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Debug.Print Sh.Range("a1").Address
End Sub
で
$A$1
が返ってきたわ
URLリンク(stamp-uploda.com)
188:デフォルトの名無しさん (ワッチョイ bf6d-U373)
17/07/09 21:47:17.93 XJb9KLmK0.net
写ってないけどウォッチ式のshのプロパティは不明なままね
ウォッチ式がおかしい以外考えにくい
189:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 22:03:56.91 e2g8wwYr0.net
Private Sub Workbook_NewSheet(ByVal sh As Object)
Dim obj As Object
Set obj = sh
MsgBox obj.Name
End Sub
これだと中身が見られないけど通る。
やっぱり>>183の型キャスト説じゃないかなぁ。
ローカルウィンドウでも見られないし。
obj.Value = "aaa" で実行時エラーになる。
「ん~何か知らないけどValueに入れるよ?あっねえわw」 ってことでは?
.Nameや.Range().Addressはあったんで通る。
190:デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
17/07/09 22:23:32.11 XJb9KLmK0.net
>>186
それはrange指定してないっす・・・
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Cells(1, 1).Value = "aaa"
End Sub
で通ったよ
191:デフォルトの名無しさん (ワッチョイ 9791-Razr)
17/07/09 22:31:30.92 BT4+59vh0.net
>>184
Debug.Print Sh.Range("a1").Address
ではなくて
Debug.print sh.address
だったらどうなるかって意図だったけど
ためしたら実行時エラーになる
これはtypename(Sh)を表示したらわかるけど
Shという変数自体にクラス(型)に関する情報を持っているから
無理矢理Rangeクラスのプロパティを表示させようとするとエラーになる
dim rng as Range
set rng = Sh
とかやっても実行時エラーになる
文法的にはエラーじゃないからコンパイルは通る
VBAが型チェックしてバグにならないようにしていると思う
他の言語だとこれができるものもある
192:デフォルトの名無しさん (ワッチョイ 9791-Razr)
17/07/09 22:35:23.27 BT4+59vh0.net
>>187
ShがWorksheetクラスだっていうのが判ってるからRangeを指定するってわかるけど
Objectクラスだったら何のプロパティを持っているかわからなくない?
Objectクラスはすべてのクラスのスーパークラスだから何でも参照できる
Sh as Objectと宣言されているShが実態はRangeクラスである場合もある
その場合は、Sh.Value = "a"でも実行時エラーにはならない
193:デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
17/07/09 22:50:14.83 XJb9KLmK0.net
>>188-189
なるほど、意図が分かりました。コンパイルエラーになる意味もわかりました、ありがとうございます
以下の状態だと、shの型はobject/Sheet5としてウォッチ式に認識されます
この「Sheet5」というのは何でしょうか?
デフォルトプロパティでしょうか?
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim sheet As Worksheet
Set sheet = Sh
Debug.Print 1 'ここでブレークポイント
End Sub
194:デフォルトの名無しさん (ワッチョイ bf6d-J8Ag)
17/07/09 22:58:28.17 XJb9KLmK0.net
しかし>>175がどうしてもわかりません
object型をobject型に渡してもプロパティは分からない、それは分かります
URLリンク(stamp-uploda.com)
object型をworksheet型に渡すと、ウォッチ式で見れるようになる、それがわからない
URLリンク(stamp-uploda.com)
全部のプロパティ・メソッド見たら全部一致してたからworksheetとしてコピーしますね~ということ?
195:デフォルトの名無しさん (ワッチョイ 9791-Razr)
17/07/09 23:03:28.23 BT4+59vh0.net
>>190
Set sheet = Sh
を実行した時点で、Sh = sheet = Worksheetクラスのオブジェクトと特定可能
なのでworksheetクラスのデフォルトプロパティを表示しているのではないか
ウォッチ式にsheet変数も追加すると、そのタイミングで
Shの他のプロパティも見えるようになった
196:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/09 23:06:31.26 e2g8wwYr0.net
>>191
型キャストで
Shがワークシートだと判明したので
Shとsheetは同じ物なので
両方のプロパティが同じで表示されるのではと思うが。
詳しくはマスターにまかせる。
と思ったらもう回答されていた。
すごい勉強になった。
197:デフォルトの名無しさん (ワッチョイ 9791-Razr)
17/07/09 23:09:27.92 BT4+59vh0.net
>>191
ウォッチ式の表示更新タイミングはその内容が特定されたときに
即座に表示更新されるとは限らない
つまり表示更新されるよりもずっと前に表示すべき内容が特定されていた可能性もある
198:デフォルトの名無しさん (アウアウエー Sadf-thUc)
17/07/10 09:22:58.03 HOfsyLJOa.net
activesheet使うのはworksheets.copy使うときぐらいだな
真面目に作るときは書式とか直で指定するように頑張るけど
199:デフォルトの名無しさん (ワッチョイ 7773-zf8i)
17/07/10 12:08:47.45 G+8qCprO0.net
レコードセットをそのままシートに張り付けると、元の型を継承して数字のみのカラムも文字列として貼られるんだけど、さすがにどうしようもない?
200:デフォルトの名無しさん (スップ Sd3f-nGAm)
17/07/10 12:39:11.04 okOc14zTd.net
>>196
あとで一括して和0すりゃいいじゃん
201:デフォルトの名無しさん (ササクッテロロ Spcb-9DAm)
17/07/10 12:47:22.77 8dcdQUy6p.net
>>197
和は加算の結果を表す言葉
0を加算とか足す0じゃないと意味が違ってくる
因みにレコードセットの型はcolumnの最初の7行分のデータから推測されるとかだったと思うから
目的の型になるようにソートすればいいかも
202:デフォルトの名無しさん (ドコグロ MM2b-jxDt)
17/07/10 13:37:23.50 WkincIndM.net
関数の引数にbyval ws as Worksheetってやるとどうなるの?
worksheetに対しては、byrefしか使ったことない
203:デフォルトの名無しさん (ワンミングク MM7f-jTKI)
17/07/10 14:25:22.38 /gGZBLtxM.net
オブジェクト型はbyval渡し出来ないんじゃなかったっけ?
204:デフォルトの名無しさん (スップ Sd3f-nGAm)
17/07/10 14:36:15.11 okOc14zTd.net
>>198
なるほどそうだぬ
「ゼロを一括して加算(D)すりゃいい」と言い直させてもらう
もともと具体的に書かず曖昧な表現を目指していた
205:デフォルトの名無しさん (スップ Sd3f-nGAm)
17/07/10 14:38:53.50 okOc14zTd.net
>>200
できるよ。
メソッド呼び出しもそのオブジェクトに対するものとなる。
違いが出るのは代入(=)演算の意味だけだと思う。
206:デフォルトの名無しさん (ブーイモ MMbf-MhHl)
17/07/10 15:15:06.40 UwxUnls6M.net
>>199
たぶんプロシージャ内の set ws=hoge が引数に反映されるかされないかが変わってくる
207:デフォルトの名無しさん (ドコグロ MMdf-jxDt)
17/07/10 16:10:50.58 1UBLPYX0M.net
>>203
ありがとうございます。
時間あるときに試してみます!
208:デフォルトの名無しさん (スッップ Sdbf-Yl52)
17/07/10 17:19:20.24 1LvSwn3ad.net
thisworkbookをoptionalな引数のデフォルト値にしたいんだけどできない
何かいい方法知りませんか
209:デフォルトの名無しさん (スップ Sd3f-nGAm)
17/07/10 18:34:12.31 okOc14zTd.net
>>205
確認せずに答えるけど、できないならOptionalのデフォルト値をNothingにして、
モジュール内で判断・分岐する
If a Is Nothing Then Set a = ActiveWorkBook
とか
210:デフォルトの名無しさん (ワッチョイ bf6d-KuRC)
17/07/10 18:40:40.88 9dSXLq4x0.net
デフォルト値は定数式で、って言われるな
デフォルト値を文字列にして"thisworkbook"、evalで…とか考えたけど2013持ってないから試せない
そこまでしても読みにくくなるだけなので、素直に>>206みたいに条件分岐させたほうが良いと思う
211:デフォルトの名無しさん (ブーイモ MMdb-MhHl)
17/07/10 19:04:18.69 fjsjDBbbM.net
質問です。
ユーザーフォームをShowModal=Falseで表示しており、フォームを表示したまま、フォーカスをフォームからセルに移動することは可能でしょうか?
cells(1,1).select や application.goto cells(1,1) ではフォーカスがフォームから動きませんでした。
212:デフォルトの名無しさん (ワッチョイ bf6d-gkD3)
17/07/10 19:17:57.83 9dSXLq4x0.net
>>208
昔やったことあるなぁ
と思って試したら、仕様変更でできなくなってるっぽい
URLリンク(www.vbalab.net)
2010は無理だった
213:208 (ブーイモ MMdb-MhHl)
17/07/10 19:26:18.02 fjsjDBbbM.net
>>209
回答ありがとうございます。
後出しで申し訳ないですがバージョンは2007です。
試せるのが明日になりますが、appactivate試してみます。
214:デフォルトの名無しさん (スッップ Sdbf-Yl52)
17/07/10 20:52:31.16 93pFc0tnd.net
>>206
やっぱりそうなるか
でもなんでできないんだろうインスタンスとして実体化されてないから?
そんなことないよな
215:デフォルトの名無しさん (ワッチョイ 9791-9DAm)
17/07/10 21:00:26.90 N/fNiVFC0.net
>>211
コンパイル時点で決まってないからかな~
216:208 (ブーイモ MMdb-MhHl)
17/07/11 12:39:40.24 fzHCV1ljM.net
>>209
AppActivateもApplication.Visible=Trueでもいけました!
ちなみに以下のも試しましたが全部ダメでした。
ActiveWindow.Activate
ActiveWorkBook.Activate
ActivateSheet.Activate
2010以降だとWIN32APIとかでシートのマウスクリックを挟まないとダメかもですね。
217:デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
17/07/11 19:59:21.82 L+/Hncu30.net
>>213
良かったね
2007と2010でそんなとこに差があるとは驚いた
218:デフォルトの名無しさん (ワッチョイ 9f6f-rvkC)
17/07/12 19:38:42.24 qkF1IqO80.net
Sh As Object
Sh
219:デフォルトの名無しさん (ワッチョイ 9f6f-rvkC)
17/07/12 19:41:14.38 qkF1IqO80.net
↑誤送信すまん。
Sh As Object
Sh As Worksheet
どちらでも動くのは分かる。
Objectにするのって、
どんな値が入るかわからないから、
Variantでいいやって考えるのと同じ?
220:デフォルトの名無しさん (ワッチョイ bf6d-KuRC)
17/07/12 19:46:47.71 xxYqMu/90.net
どんな値が入るかわからないコードってどんなコード?
デバッグ用にエラーで分岐させた先とか?
221:デフォルトの名無しさん (ワッチョイ 778b-utq/)
17/07/12 19:50:58.17 vG3FHDEt0.net
つっこむならせめて値と型の違いぐらい分かっていて欲しかったなあ
222:デフォルトの名無しさん (ワッチョイ 9723-zf8i)
17/07/12 19:53:10.98 +y58Cois0.net
>>217
variantさんディスってるの?
223:デフォルトの名無しさん (ワッチョイ bf6d-pHDl)
17/07/12 20:00:38.68 xxYqMu/90.net
>>218
普通にすまん
>>219
あってもなくても一緒では?
variantを書くのは「どんな型が入るか分からない」と明示する以外に利点があるのだろうか
224:デフォルトの名無しさん (ワッチョイ bf23-KuRC)
17/07/12 20:10:18.44 agdmn3RR0.net
NewSheetイベントの引数の場合、Shには
「Worksheet オブジェクトまたは Chart オブジェクトが渡されます」
と書いてあるので
どっちが渡されてもいいようにObjectなのでしょう
225:デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
17/07/12 21:14:58.86 IZp09kNA0.net
俺の書くVBAはVariantばっかりだけど問題ないよね?
226:デフォルトの名無しさん (ワキゲー MMdf-R1hf)
17/07/12 21:19:09.13 Nu9oIAfCM.net
個人利用である限りはね
227:デフォルトの名無しさん (ワッチョイ 976f-KuRC)
17/07/12 21:27:49.15 M2bsHFCW0.net
書籍にさえ糞みたいなコードが平然と書かれてるVBA
どんなコードだってヘーキヘーキ
228:デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
17/07/12 21:28:35.71 xxYqMu/90.net
そもそも宣言しなくても特に問題はない
vbaの型なんてやわらかすぎてあってないようなもん、死にはせん
229:デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
17/07/12 21:34:45.69 IZp09kNA0.net
>>223
もちろんさ!
ちょっと単体テストすりゃ全然平気!
唯一気をつけるのはNULLが来た時の扱いだけど、「NULLがあり得る」場合は結局避けられない問題だし
230:デフォルトの名無しさん (ワキゲー MMdf-R1hf)
17/07/12 21:40:21.42 Nu9oIAfCM.net
ただこーゆー所でVariantプログラムって言うとなんやかんやめんどくさいので胸の内に秘めとくことをオススメする
231:デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
17/07/12 21:47:21.99 IZp09kNA0.net
俺がそのVariantを全部なくしてやるよ!
↓
232:デフォルトの名無しさん (ワッチョイ bf6d-Rm1X)
17/07/12 21:48:46.29 xxYqMu/90.net
NULLじゃなくてnothingでは
233:デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
17/07/12 21:54:45.14 IZp09kNA0.net
>>229
まあNothingが来れば気を付けなきゃいけないだろうけど、NULLはDBから読んだデータソースに含まれている場合が多いから。
234:デフォルトの名無しさん (ワッチョイ 778b-utq/)
17/07/12 21:55:54.59 vG3FHDEt0.net
She As Object
Set She = New LoveDoll
She.DressUp(MaidCostume)
She.Attach(SilliconVagina)
I.Fuck(She)
I.FinishAlone()
She.Detach(SilliconVagina)
I.Wash(SilliconVagina)
235:デフォルトの名無しさん (ワッチョイ 9faa-KuRC)
17/07/12 22:01:13.24 IZp09kNA0.net
5行目にSet her = She があればよかった
236:デフォルトの名無しさん (アウアウウー Sa5b-pw7F)
17/07/12 22:40:32.03 ybKMfalIa.net
VBEのインテリセンスを止める方法教えてください
237:デフォルトの名無しさん (アークセー Sx39-y19a)
17/07/13 06:37:01.82 zrnYEEn3x.net
NewSheetイベントの引数ShがObject型なのは、WorkSheetクラスとChartObjectクラスの両方でNewSheetイベントの呼び出しが定義されていて、実行時にしかShの型が決まらないからだと思うが
Workbook.Sheets(Index)の戻り値がObject型なのと一緒
238:デフォルトの名無しさん (アウアウエー Sa66-PUpa)
17/07/13 12:57:05.14 vRW6wkrFa.net
variantとかobject形はコンパイルエラーで止めてくれないからめん
239:どい 今ちょうど使いたい場面出てきてるんだが二の足踏んでる
240:デフォルトの名無しさん (ワッチョイ 6e1b-MRQN)
17/07/13 13:12:36.23 9SrccZi40.net
指定日(A)から現時点(B)までの経過時間をミリ秒で取得したい場合、
どのようにしたら上手く取れるでしょうか?
VB.NETの時はGetTimeMillisecondsがあったので、(B-A).GetTimeMillisecondsで取得出来たんですが。
241:デフォルトの名無しさん (ワッチョイ 1d54-pdrj)
17/07/13 13:25:10.65 T6Wx4mwg0.net
APIのGetTickCountを使う
242:デフォルトの名無しさん (ワッチョイ 6e1b-MRQN)
17/07/13 13:36:43.69 9SrccZi40.net
>>237
ありがとうございます。
GetTickCountも試してはみたんですが、システム稼働してからの時間だからか
自分では上手く取得できませんでした。
「指定日」(今回やりたいのは1970/1/1)からの経過時間をミリ秒取得するには
どのようにしたら良いでしょうか?
243:デフォルトの名無しさん (アウアウエー Sa66-PUpa)
17/07/13 14:33:52.00 hn5wvxLda.net
>>236
doubleに変換して計算してまた変換するとか
244:デフォルトの名無しさん (アークセー Sx5f-I8+U)
17/07/13 17:11:00.53 mgpP2Dmux.net
>>238
ミリ秒に換算しろ
245:デフォルトの名無しさん (ワッチョイ 006f-z+eH)
17/07/13 18:03:16.52 etRke/LM0.net
>>238
どうせそんな長いスパンならミリ秒はなんちゃってでいいんでしょ
Application.WorksheetFunction.RoundDown((Date - CDate("1970/1/1")) * 86400000 + Timer * 1000, 0)
246:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/13 20:31:54.44 kGwztgTZ0.net
>>236
timediff()関数だかdifftime()があったはず
247:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/13 20:34:22.33 kGwztgTZ0.net
datediff()だった
ただ秒単位が最小だった
248:デフォルトの名無しさん (ドコグロ MM36-OTuW)
17/07/13 21:05:07.35 WT5N9OT5M.net
Win32API の GetSystemTime( ) を呼び出して後は頑張って差を計算するなりすればいいだけでしょ
249:デフォルトの名無しさん (ワッチョイ 0a23-z+eH)
17/07/13 21:30:25.15 kQSmD3CQ0.net
そもそもソースがクソ精度のシステム時刻だからmsecなんてあてにならない気がする
直前にNTPで同期をとるとか?
250:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/13 21:37:03.54 kGwztgTZ0.net
指定日から当日までをdatediffの秒単位で取得して
当日からその時刻までをmsで取得して
足し合わせればいいんじゃね
251:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/13 21:47:59.63 OJpyM90P0.net
ミリ秒の精度が求められる操作をVBAでって嫌だなぁw
252:デフォルトの名無しさん (ワッチョイ 006f-z+eH)
17/07/13 22:44:18.16 etRke/LM0.net
作成するファイルやデータの一意な命名、識別とかに使うんじゃないの
だいたいでいいと思うわ
253:デフォルトの名無しさん (ワッチョイ aa11-OTuW)
17/07/14 06:02:22.03 bYrN3J/p0.net
要件推理大会は終わった?
254:デフォルトの名無しさん (JP 0H32-v2r+)
17/07/14 10:03:16.31 ak+4FQ9QH.net
要件って喪前らは横浜のシューマイ屋さんか!!!!
(´・ω・`)b
255:デフォルトの名無しさん (ワッチョイ 0a23-z+eH)
17/07/14 10:25:11.37 P3iXCzVv0.net
Range("250").ClearContents
256:デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
17/07/14 22:15:23.51 ont4yiQP0.net
!!!?
その手があったか!!
今まで、真面目に名前を付けることしか考えなかったわ。
Dim Sh As Worksheet
Set Sh = Thisworkbook.Worksheets("(´・ω・`)b")
こんなのもありだな。
257:デフォルトの名無しさん (ワッチョイ c491-BaGs)
17/07/14 22:29:36.70 Ry5eHGcV0.net
そういやみなさん
その場限りの適当マクロじゃなくて
ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます?
自分はまずセルに名前をつけて
Const hoge = "セルにつけた名前"
Range(hoge).value = "うんこ"
みたいなことやってます
ちなみに、シート名でもこれやってるんですが‥
シート名やセル名が変わる可能性を前提にしたら
こういうアプローチになるとは思うんですけど
結局凄く無駄なことをやってる気がして…(結局変えることあんまないし)
特にセルの名前に関しては、どうせその文字列をConstのところにハードコードするなら
名前つけずに
Const hoge ="A1:B5"
でもええやんけとか思ってるんですが
行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり…
258:デフォルトの名無しさん (ワッチョイ e66d-TdFn)
17/07/14 22:44:26.51 YONW9HHx0.net
>>252
こういうのもあるよ
URLリンク(github.com)
259:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/14 23:03:04.97 QoWI5XEA0.net
>>253
セルに文字列で意味をつけて
その文字列を検索して特定する
そのセルからのオフセットを固定しておく
例えば列名とか行名とか
260:デフォルトの名無しさん (ワッチョイ 0a23-z+eH)
17/07/14 23:10:22.98 P3iXCzVv0.net
>>253
よくある表の列の増減対応する場合は
列挙体で列名を定義しておいて
Cellsで列名を参照させてる。
途中にぶっこんでも列挙体のほうをちょろっと書き換えればいい。
行にも対応させると、面倒かも。
261:デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
17/07/14 23:41:07.46 ont4yiQP0.net
>列の増減
会社のやつ、一切弄れないようにしたわwwwww
セルを保護するとかじゃなくて、
データの更新時に、全消しして再描画するのwwwwwwwwww
列挿入とかしても無駄ですよってwwwwwww
262:デフォルトの名無しさん (ワッチョイ e66d-qA4N)
17/07/15 00:03:43.14 fdp++JjU0.net
そういうの、このスレだと基本だと思う
・正規化したデータを引っ張ってくる
・ボタン押したらvbaで構築。シートすら削除して再作成
こんなんばっかだろ。誰もさわれなくて非難轟々だけど、どうかんがえてもこっちのほうが安全なんだよな
263:デフォルトの名無しさん (ワッチョイ e251-X5vM)
17/07/15 00:11:34.38 CxBosAMp0.net
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
264:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/15 00:12:14.92 kt01pjYOM.net
学ぶ気のない人からとても怒られるやつ
265:デフォルトの名無しさん (スッップ Sd70-QKFr)
17/07/15 00:49:22.52 K6V0aa5ld.net
>>253
普通にやってるしシート名とかも定義する
あとは汎用的なクラスや関数いくつも作っておいて雛形エクセルにしてる
266:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/15 04:37:45.96 7LAckzVN0.net
>>256
コードをいじらないといけないじゃないか
267:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/15 04:53:42.10 7LAckzVN0.net
>>258
データの更新自分しか出来ないんじゃね
参照しか出来ないならwebシステムにすればいいんじゃね
268:デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
17/07/15 08:42:06.63 tWt2y1Te0.net
>参照しか出来ないならwebシステムにすればいいんじゃね
ヒント:権限
269:デフォルトの名無しさん (ワッチョイ aa11-OTuW)
17/07/15 09:43:36.21 jhhap/jh0.net
>>253
> ずっと使い続けてメンテも必要なVBAでセルにアクセスするなら名前経由でやってます?
状況次第だけどよくアクセスするとか重要なセルは適当なところでまとめて変数に代入してる
Dim hoge As Range
Set hoge = Range("A1")
...
hoge.value = "うんこ"
> 行挿入とかに追従してくれる名前の方を使うべきかなぁとか思ったり…
行とか列の挿入を想定するなら名前をつけてそれで参照する
ユーザーが作成するようなシートなら特定の文字列を検索して場所を特定するとかもやる
270:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/15 09:44:21.75 7LAckzVN0.net
>>264
自分に権限がないなら権限を持ってる人に許可貰えばいいだけじゃね?
なんの権限か不明だが
271:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/15 10:08:30.41 7LAckzVN0.net
>>258
批難がでるって事は不便な点とかがあるって事で
仮にそれが商品だとしたら売れない可能性があるってこと
競争相手がいたら使われなくなる商品
272:デフォルトの名無しさん (ドコグロ MM36-OTuW)
17/07/15 11:40:57.26 aW477mPhM.net
>>267
売れてるiPhoneのスレでも見てこいよ
売れない/使われないものをいちいち非難するほど人は暇じゃない
273:デフォルトの名無しさん (ササクッテロラ Sp72-+gV6)
17/07/15 11:48:46.46 CRqbHh/Cp.net
>>268
売れないなら批難は出ないと言う主張なら
批難轟々なら売れるって事だよな
じゃ売ってみればいいんじゃね?
274:デフォルトの名無しさん (ササクッテロラ Sp72-+gV6)
17/07/15 11:50:44.37 CRqbHh/Cp.net
>>268
それは代替品がある場合だ
その代替品に乗り換えれば済むから
社内とかの代替品がなければ嫌々でもそれを使うしかない
275:デフォルトの名無しさん (ドコグロ MM2e-OTuW)
17/07/15 12:33:52.46 hu77KrcYM.net
>>269-270
レスを分けて書く奴はもれなくバカの法則 w
276:デフォルトの名無しさん (ワッチョイ e66d-z+eH)
17/07/15 16:36:10.60 fdp++JjU0.net
>>271
それ面白いか?
別に面白くないけどなぁ
277:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/15 17:34:03.53 0urlci1o0.net
VBAのマクロって
・マクロ制作者本人の操作を補助する為のものであり、他人に使わせる事は想定されていない
・オフィス製品の操作を補助する為のものであり、アプリケーションの本来の振る舞いを超えた動作は想定されていない
・ユーザーフォームはマクロの操作を容易にする為のものであり、別のアプリケーションであるかの様に振る舞う事は想定されていない
なので想定されていないものを作ろうとしたら不便さを感じるのは当然
どんな言語もそうだけど、想定された使い方なら便利だし、そうでないなら不便だよ
278:デフォルトの名無しさん (ワッチョイ c491-BaGs)
17/07/15 17:40:17.3
279:4 ID:Id32lc0P0.net
280:デフォルトの名無しさん (ワッチョイ c491-BaGs)
17/07/15 17:47:17.89 Id32lc0P0.net
>>273
>他人に使わせる事は想定されていない
これは本当に思いますね
Accessなんかはフォームでの入出力が基本だし
各データの型も指定するから
出来ること出来ないことを設計者が細かく指定しやすいですが
Excelは書式や入力データを限定させようとすると
そのノウハウの習得のことも考えたら相当な時間がかかる気が…
以前「値のみの切り取り・コピーしかできない」ようにしようとして
えらい苦労しました
281:デフォルトの名無しさん (ワッチョイ 926f-MRQN)
17/07/15 20:37:21.43 VxLYhzBT0.net
所詮道具 しかし便利な道具 それをよりによってなんで使い辛くするのか 神経を疑うわ
改変、改ざん、変更がダメならそっちに注力すべきだろ
バックアップなりPDF出力なり変更者・変更ヶ所の記録なりなんなり
余計な仕事して会社の利益を浪費すんなよ
282:デフォルトの名無しさん (アウアウウー Sa08-6eVw)
17/07/15 20:57:08.80 4AnbxIb9a.net
Excel VBA一本で家族養って食っていけてる人いる?
283:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/15 21:01:14.05 +h55DWxyM.net
ねーよ
284:デフォルトの名無しさん (アウアウエー Sa66-PUpa)
17/07/15 21:06:42.25 DU1ghimfa.net
>>277
vbaしか扱わない仕事なんて無いよ
必ず何かのついで
vbaあると事務作業の確実性は上がるけどね
285:デフォルトの名無しさん (ワッチョイ 2623-KaH7)
17/07/16 05:14:50.82 QwczUPDI0.net
>>279
プログラマー志望でvbaの仕事しかやったことないんだが。
286:デフォルトの名無しさん (ワッチョイ d071-1CH6)
17/07/16 05:59:58.39 K064oJPl0.net
>>280
クルマで言えば「1車種しか運転できない」のと同じ
プログラマになろうなど論外
287:デフォルトの名無しさん (ワッチョイ 2623-KaH7)
17/07/16 06:33:45.85 QwczUPDI0.net
>>281
別の言語の方が得意なんですけどね。。
他言語のキャリアないから呼ばれない。
288:デフォルトの名無しさん (ドコグロ MM40-OTuW)
17/07/16 07:32:23.57 xeCnao79M.net
>>277
半年ぐらいならあるよ
社内システムの一部を担当しててVBAだけずっとやってた
もちろんそれに付随する仕様書とかマニュアル作りとかも含むけど
289:デフォルトの名無しさん (アウアウウー Sa08-6eVw)
17/07/16 16:35:01.30 u74giIrqa.net
自分は業界デビューがAccessVBAで、そのうちC/C++もやるようになった。
で、今PHPとかJavaとか知らなくて仕事減ってきてる。
290:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/16 16:40:12.30 /sDyct4MM.net
ならVB.NETを経由してjavaへ向かえばよい
291:デフォルトの名無しさん (ワッチョイ e66d-c7D+)
17/07/16 16:42:28.30 D4hbmADJ0.net
PHPは言語は楽ちんだけどネットワーク周りがキツイ
専サバならどうでもいいけどレンタルサーバーだと制限多くて何もできん
292:デフォルトの名無しさん (ワッチョイ ce11-PUpa)
17/07/16 17:31:35.42 TYIh6T1E0.net
>>280
vbaでシステム開発してんの?
293:デフォルトの名無しさん (バットンキン MM32-v2r+)
17/07/16 19:11:10.92 x6N2dGq3M.net
VBA4とかの時代はなぜかユーザー定義型のリファレンスをクラスモジュールに渡せなくて悩んだ覚えがあるけど最近は大丈夫なのねと
294:デフォルトの名無しさん (ドコグロ MM02-KaH7)
17/07/16 19:14:48.07 zK8m4MiwM.net
>>287
うん。
50万ぐらいのレコードを扱う、MySqlをバックエンドとしたC/S型のシステム作ったよ。
vbaは例外ハンドラが弱すぎて、自作スタックトレースみたいな仕組みを作ったりとか、バージョン管理大変だし、vbaでシステム開発は怖すぎてやりたくないっす。
初速はいいけど、規模が大きくなってくると生産性が著しく落ちるねー。
295:デフォルトの名無しさん (ワッチョイ ce11-PUpa)
17/07/16 21:17:30.80 TYIh6T1E0.net
>>289
クレイジーだな
VBAでやるの間違ってね
296:デフォルトの名無しさん (ワッチョイ aa11-OTuW)
17/07/16 21:52:55.66 ZbG5GhXO0.net
>>290
バックエンドがMySQLなら50万レコード程度は楽勝だろうしフロントエンドにExcel VBAはたいして珍しくないぞ
297:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 17:06:22.75 7pjXcMGRr.net
そもそも、VBA使いってエンジニアじゃないよね。
なので、エンジニア目線での会話はしないほうがいいよ。
298:デフォルトの名無しさん (オッペケ Srd7-OYLW)
17/07/17 18:01:49.57 eqSf35i7r.net
はぁ?
299:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 18:28:51.63 3BLwA/g5M.net
方言で喋るヤツは日本人じゃないよねみたいな言い回しは嫌い
300:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 19:25:12.99 7pjXcMGRr.net
エンジニア畑の出身ではないということ。
エンジニア畑を歩いてきた人はVBAなんかには染まらないよ。
301:デフォルトの名無しさん (ワッチョイ 626f-S4qQ)
17/07/17 19:31:25.65 25jot5xr0.net
スネオみたいなやつだな。
302:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 19:34:15.32 3BLwA/g5M.net
じゃあ東京出身以外は日本人じゃないんだね
哀れな見識の狭さだな
303:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 19:41:09.32 7pjXcMGRr.net
東京出身で大阪に住んでる人は関西人じゃないし、大阪出身で東京に住んでる人は江戸っ子ではない。
304:デフォルトの名無しさん (ドコグロ MM40-OTuW)
17/07/17 20:03:54.32 8yOMdWeDM.net
他の言語をバリバリ使うエンジニアがVBA使うなんていくらでもあるだろ
305:デフォルトの名無しさん (アークセー Sx88-I8+U)
17/07/17 20:05:31.04 KYGC98nRx.net
ID:7pjXcMGRr
スゲー承認します
306:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 20:12:26.22 7pjXcMGRr.net
馬鹿の一つ覚えみたいに、なんでもかんでも変数に入れちゃうし、しかもいまだにハンガリアン記法だったりする。
エラー対策もバッチリですと言わんばかりにエラー処理が延々と続くコードを晒す。
ただでさえ冗長な言語なのに輪をかけて冗長なコードを書く。
誰もお前のコードなんかコピペしねーからコアな部分だけを簡潔にかけ、と言いたくなる。
VBAが書けるぐらいでエンジニアづらするな。
307:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 20:14:06.57 7pjXcMGRr.net
>>299
VBAメインという人はいないよね。
308:デフォルトの名無しさん (ワッチョイ e66d-z+eH)
17/07/17 20:19:25.98 ZwJXO/8Y0.net
vbaメインは事務職だろう
309:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 20:21:12.48 7pjXcMGRr.net
>>303
そうそう。エンジニアじゃないのよ。
310:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 20:22:42.87 3BLwA/g5M.net
>>302
あれ?
VBA使いはエンジニアじゃないんじゃなかったっけ
311:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 20:25:53.47 7pjXcMGRr.net
>>305
つまみ食いするエンジニアはいるでしょ。
312:デフォルトの名無しさん (ワッチョイ aa11-OTuW)
17/07/17 20:34:45.10 U2FIHXXv0.net
>>302
VBAメイン縛りなの?
313:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 20:37:52.24 3BLwA/g5M.net
お前の中ではVBAからプログラムに入り今は別言語メインってやつは存在しないんだね
314:デフォルトの名無しさん (ワッチョイ ef11-+gV6)
17/07/17 20:54:22.06 ZHV5JA270.net
エンジニアかどうかってプログラム言語に依存する概念だっけ?
実現手段なんかコロコロ変わるのに
315:デフォルトの名無しさん (ワッチョイ e66d-rON2)
17/07/17 20:56:09.78 ZwJXO/8Y0.net
vbaからhtml・phpに行ってなんか社内SEみたいなことやってるわ
割りと楽
316:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 21:13:30.47 7pjXcMGRr.net
>>307
うん、縛り。
>>308
多くのエンジニアの中で揉まれた経験があるかどうか、だよね。
>>310
ありがちだよね。「みたいなこと」止まり。
いわゆる「エンジニアもどき」ってやつw
317:デフォルトの名無しさん (ワッチョイ 12aa-z+eH)
17/07/17 21:14:47.84 K9hU24AK0.net
エンジニアは2ちゃんねるに来ないだろう
318:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 21:32:12.23 3BLwA/g5M.net
>>311
揉まれた経験からだと言う割にメイン言語で縛ってたりVBA出身は違うとか言ったり
主張は明確に頼む
319:デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
17/07/17 21:38:42.01 xDa7p7Qa0.net
ExcelVBAの挙動が謎すぎて困る
IF xx IS NOT NULL AND xx.value = 100
みたいので例外出たときは目を疑った
nullのときも両辺評価するって決まってるならまだしも
普段は何事もなく動いてるのに
急に気まぐれに両方評価するのやめーや…
320:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/17 21:39:52.50 7pjXcMGRr.net
>>313
君こそ何が言いたいのかよくわからないけど、
まぁ、コードは簡潔に、ということ。
321:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/17 21:45:47.60 3BLwA/g5M.net
>>315
俺の言いたいことは「方言で喋るヤツは日本人じゃないよねみたいな言い回しは嫌い」ってだけ
コードは簡潔にって所は同意見だな
322:デフォルトの名無しさん (ワッチョイ e66d-qA4N)
17/07/17 21:50:52.95 ZwJXO/8Y0.net
>>314
今更だろう
longな数値同士を文字列結合できるぐらいなんだし、何が起こっても驚かん
Sub foo()
Dim a As Long
Dim b As Long
a = 1
b = 2
Debug.Print a & "|" & b
End Sub
323:デフォルトの名無しさん (ワッチョイ e66d-SAgI)
17/07/17 21:51:23.92 ZwJXO/8Y0.net
ってかvbaって実は内部的に全部variantで処理してない?と思うことがたまによくある
324:デフォルトの名無しさん (ワッチョイ aa11-OTuW)
17/07/17 22:01:54.76 U2FIHXXv0.net
>>314
短絡評価が保証されてない言語で
> IF xx IS NOT NULL AND xx.value = 100
なんて書く奴の方が謎
NothingじゃなくてNULLなのも謎
あとNULLならIsNull( )じゃないのも謎
325:デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
17/07/17 22:05:39.05 xDa7p7Qa0.net
知らんがな!そんな詳しくない
環境制限されて使わざるをえずに使って
ちょっとカルチャーショック受けただけ
326:デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
17/07/17 22:09:42.75 xDa7p7Qa0.net
まえ2chでEXCELVBAが挙動アバウトだから使いたくないって言ったら
お前の頭がアバウトなだけでVBAはアバウトじゃないって返された
ほんとにアバウトやん
327:デフォルトの名無しさん (ワッチョイ 9e06-1CH6)
17/07/17 22:11:29.92 5wPRLPZU0.net
いつもながらの仲間内のどうでもいい戯言が続いているだけなんで、質問者の方は気になさらずにどうぞ~
328:デフォルトの名無しさん (ワッチョイ 12aa-z+eH)
17/07/17 22:13:55.47 K9hU24AK0.net
>>314
>「nullのときも」
Nullかどうか関係なく AND 演算子がつねに両辺評価だってだけよ
329:デフォルトの名無しさん (ワッチョイ 12aa-z+eH)
17/07/17 22:16:50.48 K9hU24AK0.net
>>320
ところでちょっと興味あるんだけど「環境制限」て何がNGなの?
330:デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
17/07/17 22:18:26.02 xDa7p7Qa0.net
うんそれならまだわかる、たぶんそんな気がしてきた
Nullのとき正常終了してるケースがあるように見えたんだ
たぶん見間違いだ
331:デフォルトの名無しさん (ワッチョイ 5ce3-z+eH)
17/07/17 22:19:24.38 xDa7p7Qa0.net
>>324
アドイン
332:デフォルトの名無しさん (ワッチョイ 968f-z+eH)
17/07/17 22:46:19.63 1pUgrDrQ0.net
>>326
だっふんだ
333:デフォルトの名無しさん (アウアウエー Sa66-PUpa)
17/07/17 23:33:07.69 2vYuRvlWa.net
まあ、VBAが言語としてクソなのは認めざるを得ないよな
最近javascriptつまみ食いしてるけど、これはこれで魔境とは言え進化してるしさ、常に
334:デフォルトの名無しさん (ブーイモ MMed-6ouG)
17/07/17 23:33:44.68 PT2PKaQfM.net
>>319
短絡評価が保証されてないというか無いものだと思ってたけど、短絡評価される状況ってあるの?
あるなら活用したいもんだけど。
335:デフォルトの名無しさん (スッップ Sd70-QKFr)
17/07/18 00:17:38.11 kpygt+jXd.net
nullの話出たから聞きたいんだけどnullとかnothingの判定を完結にやるいい方法ってないの?
やりたいのはnull,vbnull,nothing,emptyなどなど値が入ってない状態を検知したい
全部if elseifでやるのは汚すぎるからあまりやりたくない
336:デフォルトの名無しさん (ワッチョイ f191-+gV6)
17/07/18 00:18:33.82 sD2l3tVa0.net
>>330
全部調べる関数を作ればいいのでは?
337:デフォルトの名無しさん (ワキゲー MM6e-FZLt)
17/07/18 00:19:09.03 zLdSm0oAM.net
判定メソッド作って呼ぶ
338:デフォルトの名無しさん (ワッチョイ 4b3d-1CH6)
17/07/18 00:40:40.16 j/Xwl1qG0.net
If文を可能な限り避けるとなると
Function foo(hoge) As Boolean
Select Case VarType(hoge)
Case 0,1
...
Case 9
If hoge Is Nothing Then
End Select
End Function
みたいな書き方かな
339:デフォルトの名無しさん (アークセー Sxc1-y19a)
17/07/18 00:43:00.33 8EqWFNQax.net
データの値の状態を判定するならif elseif よりも
Select Case Expressionの方が無駄なく綺麗に書ける
340:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/18 06:17:21.84 StSxL3ktr.net
>>333
ていうか、このコードは何を返すの?
341:デフォルトの名無しさん (ドコグロ MMa8-OTuW)
17/07/18 06:18:50.83 qfl2YypxM.net
>>329
保証されてない ≒ 動作する場合があるかも知れないけど面倒だしどうでもいいから調べてない
342:デフォルトの名無しさん (ドコグロ MMa8-OTuW)
17/07/18 06:20:35.94 qfl2YypxM.net
>>335
「値が入ってない状態」かどうかだろ
343:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/18 06:30:18.74 StSxL3ktr.net
>>337
なるほど。
null判定は自分で関数作っちゃうのが早いよってことね。
344:デフォルトの名無しさん (アークセー Sx72-y19a)
17/07/18 07:14:01.44 9/pR+lH4x.net
>>333
コンパイルエラー出るコードでワロタ
345:デフォルトの名無しさん (オッペケ Srd7-Ucbr)
17/07/18 07:42:58.67 StSxL3ktr.net
こんな感じかな。
Function IsNone(hoge) as Boolean
Select case True
Case IsNull(hoge)
IsNone = True
Case IsEmpty(hoge)
IsNone = True
Case hoge is Nothing
IsNone = True
Case hoge = ""
IsNone = True
Case hoge = vbnullstring
IsNone = True
Case Else
IsNone = False
End Select
End Function
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
列名も取れる