Excel VBA 質問スレ Part55at TECH
Excel VBA 質問スレ Part55 - 暇つぶし2ch2:デフォルトの名無しさん
18/07/22 14:19:08.78 F/x1cwuJ.net
>>1
すれ立て乙
そして前スレ976のリストビューがずれる現象は
splitしてる結果を比較してみろとエスパー
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
以下、知ったかぶりがVBAにマウントをとる長文と
VBA老害が見当外れのレスをする長文をお楽しみください

3:デフォルトの名無しさん
18/07/22 14:22:10.86 8ZEdBsEN.net
>>2
それな!
アハハハ、腹いて

4:デフォルトの名無しさん
18/07/22 16:10:37.90 /S62SzuU.net
>>2
その解説はマクラーにやらせるわ

5:デフォルトの名無しさん
18/07/23 18:46:22.51 drz7RaL2.net
クラスモジュールの正しい使い方わからん
コレクションとかディクショナリとかそれらにぶっこむ変数定義して関数かましてMEをぶっこんで行くのって使い方として正しいん?
コレクションは標準側にもったり別のクラスに持つべき?

6:デフォルトの名無しさん
18/07/23 19:21:59.18 Q2zG7cPg.net
>>5
そんな事が知りたい?
オッケー
じゃあそれもマクラーに解説させるわ

7:わ
18/07/23 20:09:48.91 wdqn61b0.net
別に使わなくても良いよ。
コンストラクタ引数が使えないし、オーバーロードないしで読みづらくなるだけ。

8:デフォルトの名無しさん
18/07/23 22:37:38.24 AQkTIfCC.net
oopになりきれてないんだよね
正しいかどうかは状況によるけど俺は何度も繰り返す処理を自作クラスにしておく程度かな
vbaの文字列操作は遅いから自前でjavaのstringbuilderみたいなのつくったりとか

9:デフォルトの名無しさん
18/07/24 06:54:57.86 KA6Loe2t.net
マクラーがPSスレで大暴れしたけど反応薄くてワロタwww

10:デフォルトの名無しさん
18/07/25 12:44:56.02 xnPg1Ikh.net
たしかにYahoo知恵遅れのPGカテ見てると
なぜそれをVBAでやろうとする?て質問だらけでウンザリするな

11:デフォルトの名無しさん
18/07/25 13:42:04.43 ELoTVjgZ.net
VisualStudioとか他の開発環境はダウンロードもインスコも面倒だで
慣れてる人から見れば簡単だろうけど、未経験者には敷居がかなり高い

12:デフォルトの名無しさん
18/07/25 14:49:05.99 xnPg1Ikh.net
テキストファイルのコピー/マージ/分割、Webスクレイピングもどき
に貧弱で重いコーディングしかできないVBAですか?という…
せめてPowerShellもバッチも使えよという

13:デフォルトの名無しさん
18/07/25 15:28:26.94 EptEn42e.net
>>12
死ねや

14:デフォルトの名無しさん
18/07/25 23:29:59.75 GlwT5bgj.net
意識してスクレイピングという言葉を使っていないんだろうけど、Web操作なら分かるがスクレイピングにPowerShellは向かない。
取ってきたデータをどうするんだよ。
取ってきて終わりで、それをExcelの絡まない他のシステムに渡すだけというなら分かるけどな。
でもそれだったらそもそもExcel関係ないから俺でもそうするかも。
でもその場合でもPowerShellじゃなくて別の言語にするかも知れない。
多分VB.NetかC#とかの方が有力だな。
PowerShellからExcel起動してデータを表示するようなの作ってきたらセンスが無いの一言で終わりだね。
それにユーザーの使い勝手より自分のコードの書きやすさを優先するような奴は使えない。

15:デフォルトの名無しさん
18/07/25 23:35:58.97 GlwT5bgj.net
一緒に働いてたら、同じ動作するVBAのコードを提示して俺のが採用されるだろうな。
何でPS1とxlsxの2つのファイルを扱わなきゃならんと言われて。

16:デフォルトの名無しさん
18/07/25 23:41:43.01 UzfdtR0J.net
もうおまえら好きなの使えよwwwNGワード登録めんどくせーんだよ
ただここはExcel VBAスレだ

17:デフォルトの名無しさん
18/07/26 00:36:25.38 9WKx7EUj.net
ろくなパーサーもない、正規表現すら覚束ないVBAでスクレイピングとかマゾかよ
PowerShell以上に向いないのに
データ取り込んでVBA有利な作業したいって条件でも、
Excelからスクレイピングツール(psでもrbでもcsでもなんでもいい)呼び出すのが正解だろ
使い分けというの言葉を知らんのか
ほんとマクラーは何でもかんでもVBAだけでやろうとするのが好きだな
もしかしてそれしか出来ないのか?

18:デフォルトの名無しさん
18/07/26 00:44:22.92 9WKx7EUj.net
標準入力すら素直に受け取れないVBAじゃ他のツール呼び出すの難しかったね
ごめんね俺が間違ってた
全部VBAでやるのが正解だよ
それしかできないもん

19:デフォルトの名無しさん
18/07/26 01:05:48.00 LoTOwKr6.net
俺マクリスト

20:デフォルトの名無しさん
18/07/26 01:06:28.33 UMEAXP+A.net
お先マックラー

21:デフォルトの名無しさん
18/07/26 04:09:18.23 i54gzLVo.net
再び降臨 パワーシェルキチガイ

22:デフォルトの名無しさん
18/07/26 08:14:35.04 OM9s1u3H.net
>>17
>>18
それでもお前のコードは採用されない。
2ファイルになった時点で埋めようが無い差だ。
VBAで出来ないことなら別だがな。
VBAで標準入出力使うことはあまり無いなあ。
それで困ったことも無い。
そういう環境だと思うが。

23:デフォルトの名無しさん
18/07/26 12:22:39.07 ghkF5wqN.net
powershellは起動するためにもう一工程要る

24:デフォルトの名無しさん
18/07/26 14:34:42.45 dRpGxBDU.net
PSなんて使う必要ないだろ
PSこそ中途半端な機能だわ
こんなの使うくらいならVSとかのIDEで良いよね

25:デフォルトの名無しさん
18/07/26 14:36:40.80 2gS9pFwI.net
一般的な環境ならVSぐらい入ってるしな

26:デフォルトの名無しさん
18/07/26 20:38:34.08 eYfujGzi.net
vbaだと云々かんぬんはまぁ分からんでもないけどあーするといいこうしろよとか無くps勧めてくるのはありえんわ
知識そこで止まってる化石かなんかかよ

27:デフォルトの名無しさん
18/07/26 23:24:39.34 8XjexWHE.net
使いにくい言語を使い本来不要な問題を作り出す
その問題を工夫して回避することが大事なんだ
便利なツールを手軽に作りたいだけの軟弱者は別の言語を使えばいい

28:デフォルトの名無しさん
18/07/27 00:34:59.37 3FMr3f7+.net
VBAを否定するつもりはないが固執する理由もない
どの言語も向き不向きはあるしExcel周りはやっぱVBAが一番手軽で楽なんだよ
ただ行番号くらいはデフォルトで設定設けろ

29:デフォルトの名無しさん
18/07/27 00:37:19.63 Npi7GBC0.net
VBAはWindow10になってさらにクソ化した

30:デフォルトの名無しさん
18/07/27 00:40:17.66 mbQIXxf8.net
VBA質問スレなんだからVBAに固執してくれよ
逆に固執したくないならこのスレに固執するなよ
てかなんでVBA質問スレで最適言語談義が延々続いてるのかさっぱりわからない

31:デフォルトの名無しさん
18/07/27 00:50:20.39 zTP90E1i.net
それがマウンター

32:デフォルトの名無しさん
18/07/27 02:38:29.13 Aw8biuWY.net
Colloctionに入ってる要素をランダムに並べ替えたいんですが
どういうコード書けばよいですか?

33:デフォルトの名無しさん
18/07/27 06:08:47.10 zsHsTZpP.net
>>32
やりたいのはこういうこと?
Key1 → Value1
Key2 → Value2
Key3 → Value3

Key1 → Value3
Key2 → Value1
Key3 → Value2

34:デフォルトの名無しさん
18/07/27 06:20:20.47 Z7cB5M3n.net
>>28
これってVBAの言語的な優位性というかランタイムがエクセルに乗っかってるからってだけだよね
Pythonが乗っかったら急速に消え去りそう
VBAでおまんま食ってる人達は怯えてるだろうね

35:デフォルトの名無しさん
18/07/27 07:46:13.68 Aw8biuWY.net
>>33
いえこういうことです
>>32
やりたいのはこういうこと?
Key1 → Value1
Key2 → Value2
Key3 → Value3

Key3→ Value3
Key1 → Value1
Key2 → Value2

36:デフォルトの名無しさん
18/07/27 07:53:09.32 R37VLMlI.net
collectionは順番って概念がないからあまり意味ないけど。。
目的次第だけど一度配列にぶっ込んで
インデックス乱数で作ってその順でcollection作り直したら?

37:デフォルトの名無しさん
18/07/27 08:03:27.23 7rMzYIsO.net
inputboxにde


38:faultを設定すると選択状態になりますが、 これを選択しない状態にすることは可能でしょうか?



39:わ
18/07/27 08:20:43.06 VN9LlfpU.net
>>37
VBAにはinputboxは無いし、text boxにはdefaultプロパティもないんだが、一体なんの話だ?

40:デフォルトの名無しさん
18/07/27 08:21:57.58 hpcoy/E6.net
>>34
いや、あのね...
与えられた環境でどうするかって話で、そんなの当たり前だろ。
VBAも同時に使えるなら消えないだろうし、pythonに置き換わってVBAが使えないならpython覚えるだけだろ。

41:デフォルトの名無しさん
18/07/27 08:24:28.31 hpcoy/E6.net
>>35
もう1個Collection作ってランダムに入れれば良いんじゃね?

42:デフォルトの名無しさん
18/07/27 08:50:15.62 WxuEvi1L.net
VBAを.net対応にすれば良いのに

43:デフォルトの名無しさん
18/07/27 09:41:22.77 7Lss2z2K.net
>>34
VBAでおまんま食ってるPython未経験だけど
Python移行を熱烈に希望します

44:デフォルトの名無しさん
18/07/27 09:43:45.36 7Lss2z2K.net
>>41
せめてそれくらいはしてほしいよな
理想はC#AだがVB.netAでもいいわ

45:デフォルトの名無しさん
18/07/27 12:10:40.85 Aw8biuWY.net
>>40
なるほど。
テストでこういうコードを「アホレ スイスイスーダララッタ スラスラスイスイスイ」と一瞬で作ったら一発で成功した。
あらためてオレは頭がいいな。
------------------------------
Sub test()
Dim i As Integer
Dim r As Integer
Dim c1 As Collection
Dim c2 As Collection
Dim c As Class1
Set c1 = New Collection
Set c2 = New Collection
For i = 1 To 100
Set c = New Class1
c.i = i
c1.Add c
Next i
For i = 1 To 100
r = Int(Rnd * (100 - i + 1)) + 1
c2.Add c1(r)
c1.Remove r
Next i
For i = 1 To 100
Debug.Print c2(i).i
Next i
End Sub
------------------------------
Class1
Public i As Integer
------------------------------

46:デフォルトの名無しさん
18/07/27 12:24:17.95 9o30Opw+.net
Vbaってコレクションのランダムソートごときにすごい行数を使うんだなあ驚いた

47:デフォルトの名無しさん
18/07/27 13:22:27.47 W1pWGgrd.net
1、2、3、たくさん、すごい、って数える部族の人コンニチワ

48:デフォルトの名無しさん
18/07/27 14:10:45.72 /pOg/k3/.net
VBAのIDEには行数が書いてないから致し方ない

49:デフォルトの名無しさん
18/07/27 17:04:08.64 ferZ4IGy.net
VBAもBASICの一種だから行番号は付けられるんだけどね
Sub Foo()
10 Dim i As Integer
20 Debug.Print i
30 i = i + 1: GoTo 20
40 End Sub

50:デフォルトの名無しさん
18/07/27 20:35:05.00 7rMzYIsO.net
>>37
inputbox関数のことです
引数defaultに文字を入力した時、選択されないようにしたいのです
Sub foo()
bar = InputBox("", "", "選択されてしまう")
baz = Application.InputBox("", "", "選択されてしまう")
End Sub

51:デフォルトの名無しさん
18/07/27 22:41:24.03 R37VLMlI.net
選択されてしまうって、文字が?
inputboxの仕様だから難しいね
vbsだけど
URLリンク(stackoverflow.com)

52:デフォルトの名無しさん
18/07/27 23:09:03.86 7rMzYIsO.net
>>50
そうです、文字が選択されてしまいます
フォームでも作るしかないみたいですね
ただ、右キーで選択解除できるのは大きな収穫でした(endキー使っていました)
ありがとうございました

53:デフォルトの名無しさん
18/07/28 00:48:56.31 kTSYe+MH.net
おれはテキストボックスにフォーカスが当たったらテキストが選択されてない方が嫌だけどな
ダイアログボックスのUIに対するガイドラインみたいなのなかったかな

54:デフォルトの名無しさん
18/07/28 01:05:32.0


55:9 ID:YviSsm89.net



56:デフォルトの名無しさん
18/07/28 01:21:56.22 kTSYe+MH.net
また偏った知識で変なUIがVBによって作られてしまうのかと思うと忍びなくてな

57:デフォルトの名無しさん
18/07/28 05:02:40.84 DudWgeWo.net
>>48
Integerオーバーフローまで無限ループw

58:デフォルトの名無しさん
18/07/28 06:27:05.92 Q0sE5Usk.net
16bitだからすぐにオーバーフローするけどね

59:デフォルトの名無しさん
18/07/28 07:31:07.15 rUA3L/4N.net
クラスインスタンスをJSONにシリアライズしたいのですがどうすればいいでしょうか
クラスの種類が1000種類ぐらいあるので個別に作ると工数が足りません

60:デフォルトの名無しさん
18/07/28 07:32:26.75 LmAaizbn.net
それVBAでやるの??

61:デフォルトの名無しさん
18/07/28 07:44:25.29 rUA3L/4N.net
>>58
そうです
エクセルVBAの使用以外の開発は全て禁止されています

62:デフォルトの名無しさん
18/07/28 07:51:40.54 Q0sE5Usk.net
VBAでクラスを1,000種類?
バカなのかネタなのかはっきりしてくれ w

63:デフォルトの名無しさん
18/07/28 07:57:28.10 rUA3L/4N.net
>>60
要件を満たすには必要なのです

64:デフォルトの名無しさん
18/07/28 08:35:55.74 RecypDDO.net
ならバカ決定

65:デフォルトの名無しさん
18/07/28 08:37:47.02 Q0sE5Usk.net
ならお前の工数見積もりのミスだな
おとなしく謝って人員投入してもらえ

66:デフォルトの名無しさん
18/07/28 09:15:35.74 rUA3L/4N.net
そこをなんとか
バカは承知なのですが他の選択肢は禁止されているんです
工夫でどうにかなりませんかね?

67:デフォルトの名無しさん
18/07/28 09:59:39.84 mUQBcLm1.net
出来ませんって言えば?
実際出来ないんだし
正直に言えば済むだろ

68:デフォルトの名無しさん
18/07/28 10:13:43.19 rUA3L/4N.net
こんな簡単なことがVBAではできないのでしょうか?

69:デフォルトの名無しさん
18/07/28 10:15:03.35 LmAaizbn.net
出来る出来ないじゃなく
出来るけど工数がかかるだけだろ…馬鹿か?

70:デフォルトの名無しさん
18/07/28 10:21:59.57 rUA3L/4N.net
>>67
もしできるなら工数はほとんどかかりませんよ
できないから工数がかかって大変なのでなんとか工夫してできませんか?という話をしてます
人にバカという前に自分の理解力の程度を自覚したほうが良いのでは?

71:デフォルトの名無しさん
18/07/28 10:30:26.33 fRhkCVmt.net
apiでメッセ送れば未選択状態に出来なかったかな?

72:デフォルトの名無しさん
18/07/28 10:45:40.00 LmAaizbn.net
クラス定義はテキストだし、JSONもテキストだし、変換しようと思えばできるじゃない
まさかそこの手法レベルで悩んでたの?
クラス定義が1000種類もあり、変換定義を書く工数が足りないって話だとばかり思っていたよ…

73:デフォルトの名無しさん
18/07/28 10:48:20.08 a+XCE/dC.net
何の禅問答だよ

74:デフォルトの名無しさん
18/07/28 11:18:14.54 bzfoDHBV.net
クラスのソースからコンバータ自動生成するプログラム作れば解決
つかクラス1000個とか、VBAに向いてないのを差し引いても、どう考えても設計間違ってるわ

75:デフォルトの名無しさん
18/07/28 12:09:18.04 IX5bbTr/.net
VBAではJSONシリアライズのようなちょっとした処理のためにVBAパーサーを書かなければならないんですか?
他の言語だと基本ライブラリを使って1行で出来る処理なのでにわかには信じられません
経験上、コード生成は資源管理や後々のメンテナンスでトラブルが発生することが多いのでできれば避けたいです
VBAは工夫しだいで何でも出来る言語だと思います
もっと工夫して実行時に解決することはできませんかね?
>>72
小さいオフィスの事務作業ではどうか知りませんが1000クラスは業務システムでは少ない方ですよ
1つのシステムでプロジェクト(機能)が100以上、それぞれのプロジェクトに画面がいくつか、クラスが10〜、なんてことは別に珍


76:しくもないです



77:デフォルトの名無しさん
18/07/28 12:11:55.65 LmAaizbn.net
しゃあないやん、VBAてそうなんだもん

78:デフォルトの名無しさん
18/07/28 12:12:24.12 ZzrKjuqy.net
見積甘かったのを言語のせいにされても

79:デフォルトの名無しさん
18/07/28 12:17:55.21 IX5bbTr/.net
VBAはRuby、Python、.NETと比較されるほどの優れた高級言語なので
他の言語で当たり前のようにできることがまさか出来ないとは思いませんでした
こんなことで見積もりを誤ったなんてまるで交通事故にでもあったような気分です

80:デフォルトの名無しさん
18/07/28 12:28:41.80 V98tNPxX.net
使った事ないけどリフレクションぐらいあるに決まってんだろwww
それ使えば簡単に実装できるわ

81:デフォルトの名無しさん
18/07/28 12:39:19.60 ZzrKjuqy.net
上司だかお客だかにそう説明すりゃええやん

82:デフォルトの名無しさん
18/07/28 12:39:27.77 V98tNPxX.net
オブジェクトブラウザにクラス一覧やメソッド一覧が表示される
という事はメタデータの取得方法が存在するって事だ
詳しい方法はいつもの達人VBAerが教えてくれるだろう

83:デフォルトの名無しさん
18/07/28 12:43:27.54 +RGOdKJa.net
>>76
>他の言語で当たり前のようにできることがまさか出来ないとは思いませんでした
>こんなことで見積もりを誤ったなんてまるで交通事故にでもあったような気分です
ただの無能じゃん。部下がこんなしょぼいミスしたらブチ切れるわ

84:デフォルトの名無しさん
18/07/28 12:47:45.60 LmAaizbn.net
> VBAはRuby、Python、.NETと比較されるほどの優れた高級言語なので
その認識からしておかしい、ネタだろ?w

85:デフォルトの名無しさん
18/07/28 13:06:03.00 mUQBcLm1.net
>>66
実際、貴方が出来ないんだから僕には無理でした
って言えば?って事ですよ
カッコ付けて安請け合いするから変な事になる

86:デフォルトの名無しさん
18/07/28 13:19:57.21 HiD8uqsQ.net
皮肉質問にまじめに取り合うのはギャグなのか?

87:デフォルトの名無しさん
18/07/28 14:11:14.29 bzfoDHBV.net
>>79
あれは定義が見れるだけで
実際のインスタンスから値が取れることにはならん
>>80
俺ならVBAに対する理解がこの程度の部下に
1000を超えるクラスが必要な規模のVBA案件見積させた上司にもブチ切れるわw

88:デフォルトの名無しさん
18/07/28 14:21:37.86 HsLGqaOr.net
>>57
そpれっぽいものはあるよ
jsに投げてjsからもらう
URLリンク(outofmem.tumblr.com)
ぱーっとよんだけどすげーめんどくさそうだった
まぁ0から作るよりかはなんぼかマシ
がんば~

89:デフォルトの名無しさん
18/07/28 14:49:36.36 LmAaizbn.net
>>85
それJSONをVBAで解析するやり方で、
クラスをJSONに出力する方法じゃないから

90:デフォルトの名無しさん
18/07/28 14:57:08.90 LmAaizbn.net
「つづき」の方は一応シリアライズだけど

91:デフォルトの名無しさん
18/07/28 17:16:54.38 HsLGqaOr.net
>>86-87
あぁごめん、その続きの方貼ったつもりだったけど前のページ貼ってた
検証する気も起きないけど、ちょっとでも役に立てば

92:デフォルトの名無しさん
18/07/29 14:59:24.56 ZjGxu4jc.net
バカは適材適所を知らないという見本のような質問だな。
俺の職場にバカがいなくて良かった。

93:デフォルトの名無しさん
18/07/29 18:03:41.01 3KthijbH.net
>>89
でもお前無職じゃん

94:デフォルトの名無しさん
18/07/30 20:07:26.47 L4iRteYk.net
シートからデータを抜き出して重複しないリストを作ろうとしています。
For
If Cells(i+1,1) = .List(i) then
中略
Next
で重複の判定をさせているのですが、エラーが出ます。
InStrで判定させると期待通りに動きます。
検索しているのは数字なのですが、エラーの原因がわかりません。
挙動としては問題ないので、ひとまず満足はしているのですが、もし原因エスパーして頂けるようなら教えてください。

95:デフォルトの名無しさん
18/07/30 20:33:15.09 d+TLGZef.net
このスレの質問らしいw
エラーが出てるってだけでどんなエラーがどこで出てるのか言わない www

96:91
18/07/30 20:40:42.50 L4iRteYk.net
>>91
今確認し直したらエラーが出ているのではなく、重複の判定ができていませんでした。
デバッグで変数を追っていましたが、表面上は同じ数字が入っているように見えるのですがifの中身を読みに行ってくれません。
例えば100~110の数字を重複なしでリスト化したいのですが、
100
100
101…
といった表示になってしまいます。
質問の仕方もわからないような有様で申し訳ありませんが、よろしくお願いします。

97:デフォルトの名無しさん
18/07/30 21:22:34.72 bLz+Q6Zv.net
>>91
重複なしのリストは、フィルタをうまく使えば一瞬でできるぞ

あと色々とめんどくさいから
・どういうリストを
・どうしたい
を書いてくれ
コードを書くから、それとどう違うかを照らし合わせると良い

98:デフォルトの名無しさん
18/07/30 21:27:58.45 MdDdO1Hd.net
まず質問する前にちゃんとデバッグしようぜ。。

99:デフォルトの名無しさん
18/07/30 21:33:24.66 mAgRmfNY.net
>>91
>検索しているのは数字なのですが
まずこれがあやしい
エクセルは表示されてる物と実際の値は違うぞ
そもそもそのコードで重複除去できると思えんけどな
1重ループで重複除去できるアルゴリズムあるなら教えて欲しいわ

100:91
18/07/30 22:26:44.11 L4iRteYk.net
>>94
         納入日…
納入先1 納入先1' 製品名 納入額
納入先1 製品名1'' 製品名 納入額
納入先2 納入先2' 製品名 納入額
このような元データから納入先1と2をそれぞれリスト化してUserFormのリストボックス1と2に表示、そこから納入先のデータを引き渡して別途データまとめるものを作ろうとしてました。
納入先については数字で管理されています。
納入先1にはさらに細かくいくつかの納入先2があり、リストボックス1に納入先1のリストを表示、選択された納入先1に紐付いている納入先1'を表示させるのが目標です。
ExcelVBA逆引き辞典とネット参考に関係しそうなコードを自分で打っていくと上記のようなコードが出てきたので使ってました。重複除外のコードは本から流用してます。
よろしくお願いします。
>>96
なんとなくそこが原因だとは思うのですが、具体的にどうなっているのかわかりません。
cellsでは数値を返して、listでは文字列として見ているような理解でいいのでしょうか。
>>95
一行ずつ動かしてみましたが、cellsと.listの中身は同じ表示をするのにifの中に入ってもらえなかったのでどうなっているのかもわかりませんでした。

101:デフォルトの名無しさん
18/07/30 22:28:08.17 lLAVt4bp.net
Dim d As New Dictionary(Of String, MyClass)
なぜかエラーが出るのですがなぜでしょうか???

102:デフォルトの名無しさん
18/07/31 06:55:09.36 hnMeVpcj.net
>>97
vba リストボックス 重複除去
辺りで検索すれば山程出てくるよ

103:デフォルトの名無しさん
18/07/31 07:13:22.38 hnMeVpcj.net
>>98
エラーの内容は書こう
多分参照設定してない
URLリンク(itref.fc2web.com)

104:デフォルトの名無しさん
18/07/31 07:15:42.13 viAsjoyM.net
やはりVBAばかりやるとプログラミングの基礎がおろそかになるね
見た目を意識したスプレッドシートをそのままデータとして使う、といった発想は基礎ができてないVBAer特有の現象
Excel VBAは入門用と宣伝されることが少なくないが


105:、正直、特殊な環境だから初心者は避けたほうがいい



106:デフォルトの名無しさん
18/07/31 07:18:36.03 9D920yGd.net
と、VBA利権にたかるウジ虫がほざいてます

107:デフォルトの名無しさん
18/07/31 07:21:50.77 hnMeVpcj.net
>>101
誰もvbaでプログラミングの基礎なんて覚えないでしょ
よっぽどで無い限りフレームワークは無料
vb6以前なら仕方ないけどね、あの頃は色々と有料だった

108:デフォルトの名無しさん
18/07/31 07:22:29.70 R/dSWHzC.net
VBAerて…また新語作りやがったな

109:デフォルトの名無しさん
18/07/31 08:10:41.76 QKgssm6F.net
どの言語でも言えることをさもVBAでのみ起こるかのように言うw
CだろうがPythonだろうが誰かが頓珍漢なことをした時に言えば良いんだから

110:デフォルトの名無しさん
18/07/31 08:25:14.43 JoTrRiyA.net
星持ちは荒らしてばっかりか

111:デフォルトの名無しさん
18/07/31 08:26:46.09 7/S9zeio.net
専ブラJune使ってるんだけど何の設定もしてないのにあぼーんされてるのってなんで?
デフォでNGワード登録されてる単語あるの?

112:デフォルトの名無しさん
18/07/31 08:46:49.23 CQebd+HR.net
>>107
> デフォでNGワード登録されてる単語あるの?
当然ある。 このスレで確認できる
NGワード絞り込みスレッド★117
スレリンク(mango板)
最後に「This is Original」と出ればOK
「Rock54ed.」とでればNGワードが含まれている

113:デフォルトの名無しさん
18/07/31 16:04:06.73 v6ZYNw/G.net
レベルが低いから質問しに来てるのに
質問者のレベルが低いとあざ笑うだけの書き込みしに来る人ってのは
やっぱりVBAプロなんでしょうか

114:デフォルトの名無しさん
18/07/31 16:07:23.76 +P8Kb7lC.net
>>109
え?質問をする理由はレベルが低いから「だけ」だと思ってるの?馬鹿なの?

115:デフォルトの名無しさん
18/07/31 19:23:40.75 9D920yGd.net
>>110
答えになってない!

116:デフォルトの名無しさん
18/07/31 21:26:26.03 viAsjoyM.net
セル関数だけで今開かれているWorkbookのWorksheetの一覧を作れるかい?

117:デフォルトの名無しさん
18/07/31 21:29:34.12 hnMeVpcj.net
>>109
質問内容を変に隠すのが嫌われてるだけだよ
あと、わかったフリ

118:デフォルトの名無しさん
18/07/31 21:29:56.81 hnMeVpcj.net
>>112
セル関数って何?

119:デフォルトの名無しさん
18/07/31 21:53:17.28 viAsjoyM.net
>>114
=aaa()みたいにセルに関数入力するやつ

120:デフォルトの名無しさん
18/07/31 22:34:16.53 HEdj3l67.net
>>112
できるっちゃできるし、現にSheet1をメニューのように使って
Sheet追加したりも可能 それはすぐにメニューに反映されるし
文字で説明するよか現物Upした方が早いだろうから あした

121:デフォルトの名無しさん
18/07/31 22:37:03.15 hnMeVpcj.net
これ?
URLリンク(www.tipsfound.com)

122:デフォルトの名無しさん
18/08/01 18:45:11.44 /7P6ICDY.net
質問です
画像みたいにSheet2の氏名と県名から数値を検索してSheet1の黄色セルを埋めることは関数でできますか?
URLリンク(i.imgur.com)

123:デフォルトの名無しさん
18/08/01 19:29:44.50 bLi+fVsi.net
できる。

124:118
18/08/01 19:37:48.99 CrgSL/Mw.net
>>119
アホ。
やり方を聞いておるんじゃ。

125:デフォルトの名無しさん
18/08/01 20:05:31.66 KK2iEEgZ.net
「できますか?」としか聞いていないだろ

126:デフォルトの名無しさん
18/08/01 20:09:04.73 SDXNPz2D.net
お金を頂きます

127:デフォルトの名無しさん
18/08/01 20:47:02.77 Cx2XTKqG.net
あの説明じゃ何したいんだかさっぱり判らんけど出来るかってんなら出来るんだろうなぁ w

128:デフォルトの名無しさん
18/08/01 20:49:54.52 atM50NE9.net
>>121
日本語に不慣れな外人ならその言い訳は通用かもだね
(普�


129:ハの常識というか社会経験があれば、外人であっても通用しないと思うけど)



130:デフォルトの名無しさん
18/08/01 20:58:32.29 ADJFw6Sc.net
( )の中が長すぎる

131:デフォルトの名無しさん
18/08/01 21:01:06.09 sbkooZWR.net
>>118
vlookup キー 2つ
とかで検索するといい
ただ、普通に作業列作ったほうが良い

132:デフォルトの名無しさん
18/08/01 21:14:43.63 dwiwmIsf.net
つーかVBAスレで関数とはどういうことよ
WorksheetFunction?

133:デフォルトの名無しさん
18/08/01 21:16:08.42 htMziwx3.net
pivotじゃだめなのん?

134:デフォルトの名無しさん
18/08/01 21:56:40.95 714hG0Tb.net
>>121
文は文脈に関係なく不変の意味を持つという形式意味論の立場ですね
一方で、自然言語の解釈は文脈や発話者の意図と密接に関係しているという
立場をとるのが語用論です
夏目漱石は「I love you」を「月が綺麗ですね」と訳しなさいと
言ったらしいですがこれなんかは文脈を考えないとわからない言葉です
それでは問題です
最初にりんごが3個あります、あと2個りんごを買ったらいくつになるでしょう?

135:デフォルトの名無しさん
18/08/01 23:19:06.30 sbkooZWR.net
>>129
スレチなんでそろそろ帰って

136:デフォルトの名無しさん
18/08/01 23:56:36.26 sS7kLAAW.net
>>129
お前みたいな馬鹿が質問するとおかしくなる
馬鹿なら何をしてもいいわけじゃない

137:デフォルトの名無しさん
18/08/02 07:19:05.05 M9+gUzRN.net
>>131
文脈を理解してないあなたの方が馬鹿です
死んでどうぞ

138:デフォルトの名無しさん
18/08/02 07:19:41.69 M9+gUzRN.net
>>130
ただいま

139:デフォルトの名無しさん
18/08/02 08:12:15.27 2BgkbQH+.net
こうして回答も得られず、何も叶わず、¥無駄な人生を歩むのでした

140:デフォルトの名無しさん
18/08/02 10:09:33.51 kHzgrEZ3.net
>>118
の者です
なんだかお騒がせしてしまってすいません
Sheet2の別の列に検索キーとして氏名と県名の結合文字列を作ってvlookupで参照するようにしました
もっとスマートなやり方があれば一番良いのですが…

141:デフォルトの名無しさん
18/08/02 19:14:12.00 dYoMhZad.net
>>135
sheet1のデータの持ち方がはっきりしないとむずかしいかも
各人名でどれか1つの値しか持たないなら最初の表から簡単にできる

142:デフォルトの名無しさん
18/08/02 21:04:52.53 TLBzkUIv.net
複数シートのデータを3次元配列に格納する効率の良いコードを組みたいんだけど、
サンプルコードをお願いできない?
条件
・三次元配列は(シートのインデックス番号,行,列)を想定
・対象のシートはインデックスの二番目から最後までで、現状5シートだが10シート程度まで増える見込み
・一枚のシート内におけるデータ数は、列数は30程度で固定、行数はシート毎に可変で現状は100程度だが1000程度まで増える見込み

143:デフォルトの名無しさん
18/08/02 21:39:08.04 2BgkbQH+.net
>>137
行、列、シートで三次元になってるから、
sheets(1).cells(2,3)
みたいに配列にいれずそのまま扱うのは駄目なの?
効率がいいかどうかは知らんけど、
二次元配列ならセルを直接保折り込めばok
これをシートの数だけ回せば瞬殺
Sub foo()
a = Range("a1:b2")
End Sub

144:デフォルトの名無しさん
18/08/02 22:04:18.70 rqIgowuq.net
>>137
max_row = 0 : max_col = 0 : result = array() : jug = array()
for i = 1 to Worksheets.Count
buf = Worksheets(i).UsedRange.Value
Redim Preserve jug(ubound(jug) + 1) : jug(ubound(jug)


145:) = buf if max_row < ubound(buf, 1) then max_row = ubound(buf, 1) if max_col < ubound(buf, 2) then max_col = ubound(buf, 2) next redim result(ubound(jug) + 1, max_row, max_col) for i = 0 to ubound(jug) for row = 1 to max_row if row > ubound(jug(i), 1) then exit for for col = 1 to max_col if col > ubound(jug(i), 2) then exit for result(i + 1, row, col) = jug(i)(row, col) next next next これで result(1, 2, 3) で取り出せるし インデックスが0オリジンでよければ jug(0)(2, 3) でも取り出せる UsedRangeのとこは適当に書き換えてね



146:わ
18/08/02 23:16:22.80 XQFP0WAE.net
>>139
こういう感じになるから三次元配列に複数シートのデータを入れようと考えること自体が無駄。
素直に二次元配列をdictionaryにシート名つけて打っ込むのが一番効率的かと。

147:デフォルトの名無しさん
18/08/02 23:18:46.98 2BgkbQH+.net
>>140
綺麗

148:デフォルトの名無しさん
18/08/03 00:40:38.97 A1FDqy6b.net
>>139
こういう馬鹿はすぐにクビ

149:デフォルトの名無しさん
18/08/03 05:28:19.46 wa60SFcl.net
ユーザ定義型に対してforeach的なことってできないの?
Dictionaryやcollectionじゃないとだめかね

150:デフォルトの名無しさん
18/08/03 08:10:11.78 FdAoJ/Ly.net
>>143
クラスにすればええやん。

151:デフォルトの名無しさん
18/08/03 10:48:59.11 efvhV3fR.net
VBAで多態性(ポリフォーリズム)が実現できることを発見した。
ただし親オブジェクトはObjectクラスのみ。
これ以外に方法ないよね?
あとどうしてもコンストラクタを実現したいけど方法ある?
Class_Initializeのブロシージャは使えるんだけど引数が取れないという致命的な欠陥がある。

152:デフォルトの名無しさん
18/08/03 10:49:43.01 efvhV3fR.net
ポリモーフィズム

153:デフォルトの名無しさん
18/08/03 11:24:42.37 WNWnteXi.net
>>145
ないんじゃないの
諦めて初期化メソッド作ってそれを利用してるわ、面倒だけど
あー早く.NET化かPythonにならないかなあ

154:デフォルトの名無しさん
18/08/03 12:10:29.95 7xkrIrco.net
>>145
オブジェクトをNEWして初期化メソッドを呼ぶ
でオブジェクトを返す関数を作るぐらいしか回避策が思いつかない

155:デフォルトの名無しさん
18/08/03 18:29:30.81 Jes/PhJV.net
>>148
みんなそうしてると思う。
定番でしょ。

156:デフォルトの名無しさん
18/08/03 19:49:24.72 GOZ9L8DI.net
>>145
VBAはインターフェースを定義できたりするよ
オブジェクトの生成はオブジェクト指向らしくファクトリクラス作るとか

157:デフォルトの名無しさん
18/08/03 20:07:46.13 EY4tsGwx.net
VBAは手軽だって言ってた人いたけど上のような事をするならVBAでする必要ある?
VBAでするには面倒だよね

158:デフォルトの名無しさん
18/08/03 20:18:21.80 V7pxWvhe.net
そうだねPowerShellなら(ry

159:デフォルトの名無しさん
18/08/03 20:21:52.83 Jes/PhJV.net
インターフェースを定義するか、そこまではしなくても良いかと考えるかだな。
どっちもあり有り得るけど、大きなプログラムなら定義して小さなプログラムなら定義しないって感じ。
でも、クラス作るべきって思うこともそんなに多くない。
VBAでするのは面倒とか感じることは無いな。
VBAでクラス作るのにピッタリな時は作って得られる恩恵が多いから感じないし、ピッタリな時は少ないから普段は無理して作らん。

160:デフォルトの名無しさん
18/08/03 20:36:12.66 P22i9c3x.net
VBAでクラス設計ってなんかうさんくさい感じがして使わないんだけどC#みたいな感覚で設計出来るの?

161:デフォルトの名無しさん
18/08/03 20:54:03.97 TQSHsawm.net
>>145>>149
一体エクセルで何を作っているんだ?

162:デフォルトの名無しさん
18/08/03 20:55:51.99 EY4tsGwx.net
気になる
何作ってるの?

163:デフォルトの名無しさん
18/08/03 22:16:03.36 19fg4Hec.net
ひと昔前ならともかく今はいろんなツールが無料だからねぇ
excelはさくっと一覧表やグラフを作るときにしか使ってないや
ちょっとした作業が1週間くらいの見積もりで入ったけど、Redmine立てるのめんどくせーな、
一人作業だしタスク100以下ならエクセル一覧表で管理すりゃ、まあいーかポチポチー、みたいな感じ
こうなるともうVBAは大した役にはたたんのだな
プログラム書くほどの込み入った仕事なら、別の手段で楽に、収穫を大きくしようかってなる
何でも揃ってるこの時代に、あえてVBAを主力で使ってる人たちが、
普段Excelでどんな仕事してるのか興味ある

164:デフォルトの名無しさん
18/08/03 22:24:24.13 GOZ9L8DI.net
Excelより優れた表計算ソフトはいまだにないからのお

165:デフォルトの名無しさん
18/08/03 22:44:29.83 qP1+Mw6P.net
知らないだけかもよ

166:デフォルトの名無しさん
18/08/03 22:51:02.21 TQSHsawm.net
例えあったとしても、デファクトスタンダードという地位はもう揺るぎないものだろう

167:デフォルトの名無しさん
18/08/03 23:02:27.33 IVrK95Nj.net
ハンバーガーとコカコーラは世界で一番売れてるから一番優秀な食品だとかいう話を思い出した

168:デフォルトの名無しさん
18/08/03 23:05:21.62 19fg4Hec.net
バーガーとコーラだけじゃあっという間に病気だよ

169:デフォルトの名無しさん
18/08/03 23:50:22.61 19fg4Hec.net
相変わらず具体例でねえなぁこのスレ
お前らほんとにVBA使ってんのか?www

170:デフォルトの名無しさん
18/08/04 00:14:17.09 HKzLzVCj.net
>>155
何作るってエクセル単独で何かするか
Accessに繋いでなんかするかぐらいだけど
Accessに繋ぐならクラス使った方がキレイにまとまるからクラス使うよ

171:デフォルトの名無しさん
18/08/04 07:34:19.25 h4pZIq0i.net
>>164
接続部分だけクラスにまとめるって感じ?
それならまぁ、わからんでもないけど・・・うーん

172:デフォルトの名無しさん
18/08/04 08:36:12.58 hMaWSw1n.net
エクセルは簡単な関数までで出来ることに使う
定期で使ってコードを書くような事ならC#でWinアプリかWebアプリにする
そんな使い分けです

173:デフォルトの名無しさん
18/08/04 08:59:40.72 Pz55ajO/.net
ある文字が文字配列の要素の中に存在するかどうかを調べるには
for i = 0 to Ubound(配列)~のようにして
添え字を使ったループで一個ずつ比較するしかないですかね?
Pythonなどのように、 値 in 配列 とかで一発で判定できると楽なのだが

174:デフォルトの名無しさん
18/08/04 09:27:21.51 iY2bfIdC.net
for eachあるよ

175:デフォルトの名無しさん
18/08/04 14:03:53.24 d9q3+5Xm.net
Worksheet Functionのmatchなら一発でしょ、インデックスはわからんけど
filter関数のほうが早いんだっけ?
てか職場の老害が作るコードがいちいちforでぶん回すコード書いててイライラ

176:デフォルトの名無しさん
18/08/04 14:10:44.90 AEBP847j.net
filterやmatchも中でforでぶん回してるよ

177:デフォルトの名無しさん
18/08/04 14:20:20.63 vm6Y2AFh.net
パフォーマンス無視でコードをシンプルにしたいだけなら Instr(Join( ))

178:デフォルトの名無しさん
18/08/04 14:50:32.42 MinsDCPQ.net
>>164
自分はAccessに繋ぐ所はクラス作らないからどんな所が上手くまとまると思うのか知りたいな。
自分はマ―クシートの管理と実際の用紙との比較をしやすいように管理上の結果(Excelシート)をForm上の用紙レイアウトに再現するようなプログラムでクラスを使ったのが良かった。
用紙上に配置するのはImageコントロールを使ったラジオボタンのようなものとテキストボックス、ラべル、他でユーザーが使う用紙にあわせて好きな位置に配置出来る編集モ―ドと配置後にデ―タにあわせてチェック状態を表示編集できる運用モードを持ったもの。
種類の違う可変個数のコントロールを同じように扱うのに便利。

179:デフォルトの名無しさん
18/08/04 15:05:27.11 iY2bfIdC.net
>>172
普通に接続して切断する処理はクラス使った方がキレイにまとまるよ
ファイル処理も同じ。

180:デフォルトの名無しさん
18/08/04 15:43:02.15 rFYImZyl.net
質問なのだが、エクセル関数とvba の使い分ける基準ってどうしてる?

181:デフォルトの名無しさん
18/08/04 16:55:00.51 K8sTmQ88.net
>>174
シート上で使うとき?
なければ作る。
コード上で使うとき?
簡潔に書けるほう、またはパフォーマンスのいい方。
>>174

182:デフォルトの名無しさん
18/08/04 17:18:02.49 /poCSM2A.net
>>167
文字配列ってなに?
Stringのことですか?

183:デフォルトの名無しさん
18/08/04 17:43:58.28 Pz55ajO/.net
>>176
このコードでいう test_string のことです
複数の値を取りうる入力項目のチェックなんかはいつもこうしています
Sub test()
Dim test_string As Variant
test_string = Array("one", "two", "three")
Dim i As Integer
For i = 0 To UBound(test_string)
If "one" = test_string(i) Then
MsgBox "one" & "はありまーす"
End If
Next
End Sub

184:デフォルトの名無しさん
18/08/04 17:49:50.34 rFYImZyl.net
シート上で使うとき!

185:デフォルトの名無しさん
18/08/04 17:51:01.98 /poCSM2A.net
>>177
ループで検索する、でいいじゃないですか。
一致(=)だけじゃなく Like での合致とかも選べるように汎用化しとくとなおよい

186:デフォルトの名無しさん
18/08/04 19:29:54.74 h4pZIq0i.net
>>174
重い時やミスしそうな処理が絡む時はvba
もちろん関数で実現できない時もvba
関数を使うのはビジュアルで見たい時
まぁ基本的には関数だな

187:デフォルトの名無しさん
18/08/04 19:58:42.71 FI6ie7QF.net
>>177
こういう処理は関数化した方がよい
Sub test()
  Dim test_string As Variant
  test_string = Array("one", "two", "three")
  If あるかな(test_string, "one") Then
    MsgBox "one" & "はありまーす"
  End If
End Sub
Function あるかな(a, b)
  If InStr(Join(a, "&"), b) Then
    あるかな = True
  Else
    あるかな = False
  End If
End Function

188:デフォルトの名無しさん
18/08/04 20:00:16.54 FI6ie7QF.net
バグ修正
Function あるかな(a, b)
If InStr("&" & Join(a, "&") & "&", "&" & b & "&") Then
あるかな = True
Else
あるかな = False
End If
End Function

189:デフォルトの名無しさん
18/08/04 20:08:45.16 ClJJf5ah.net
Functionの戻り値を関数名に代入する構文が最高に気持ち悪いんだけどどうにかならんの?

190:デフォルトの名無しさん
18/08/04 20:39:40.48 A9MJ7JgF.net
はじめまして。
下記のようなマクロを組もうと考えています。
x人の生徒がいます。
この生徒を1グループあたりy人となるようにzグループにわけます。
このときグループ毎の生徒のテストの平均点の差が小さく、またグループ毎の標準偏差の差も小さくしたいです。
このようなマクロを作るのにあたって、どのような方向性で作成していけば良いでしょうか。

191:デフォルトの名無しさん
18/08/04 21:04:07.47 nAdkHQiH.net
>>184
マクロ?

192:デフォルトの名無しさん
18/08/04 21:04:16.50 u8rcbYXZ.net
>>184
→→→
←←←
→→→
こう割り振ればいんじゃないかな
A B C
-----
9 8 7
4 5 6
3 2 1

193:デフォルトの名無しさん
18/08/04 21:22:04.15 AH7fLvgn.net
>>177
> Dim test_string As Variant
> test_string = Array("one", "two", "three")
なんとなくだが名前はtest_stringsにして欲しいな
>>181
> If InStr(Join(a, "&"), b) Then
>  あるかな = True
> Else
>  あるかな = False
> End If
なんで
あるかな = InStr(Join(a, "&"), b)
って書かないんだろう…

194:デフォルトの名無しさん
18/08/04 21:33:22.58 BuSBdH9D.net
>>187
ほんこれ
ture/falseしか代入しないのに分岐する必要性がわからない。

195:デフォルトの名無しさん
18/08/04 21:38:34.48 h4pZIq0i.net
>>183
グローバル変数にでも代入してみるとか?
他の言語にも気持ち悪いとこいっぱいあるから気にしなくていいよ
C言語のint main()もそのint 0はどこへ


196:返すんだよって気になるし



197:184
18/08/04 21:44:58.48 VLm3wLVC.net
>>186
レスありがとうございます。
しかし、その方法だと点数のばらつきが大きいときに、各グループごとの平均と標準偏差が均等にならずに使えないんですよね、、、
私としては下記の手順でできるのではないかと考えています。
①コンボボックスでグループ数と、グループ毎の生徒数を選択してもらう。
②エクセルに新しいシートを作る
③既存のシートに記入されている学生について、1の条件のすべての組み合わせを、2で作成した新しいシートのセルに列挙する
④3で書き出したそれぞれの組み合わせについて既存のシートの点数を参照し、average関数およびstdev関数を用いて平均及び標準偏差を2で作成した新しいシートに書き出す
⑤3の各組み合わせについて、グループ毎の平均のばらつきの少ないものを上位 何%かのみを抽出
⑥5で抽出した組み合わせについてさらに、グループ毎の標準偏差のばらつきの少ないものを上位 何%かのみ抽出
質問としては
a)他に良い方法があるか
b)組み合わせを書き出す際に重複を作り出さないようにするためにはどのようにすれば良いか
の2点です。
これらについて特に詳しく教えていただけないでしょうか。
よろしくお願いいたします。

198:デフォルトの名無しさん
18/08/04 21:47:53.70 AH7fLvgn.net
>>183
Pascal由来の構文だからいまさらどうしようもない

199:デフォルトの名無しさん
18/08/04 21:55:39.30 ClJJf5ah.net
>>187
VBA専門の人って変な常識で固まってるからしょうがない

200:デフォルトの名無しさん
18/08/04 21:56:58.85 ClJJf5ah.net
>>189
???
グローバル?
まじでいみわからんどういうことなんだ
VBA職人の思考パターンほんと異次元なんだけど

201:デフォルトの名無しさん
18/08/04 22:05:27.29 h4pZIq0i.net
>>187>>192
多少冗長でもエクセルがうまく動いて正しい結果が得られるなら問題ない
手作業で10分かかるものが10秒になればそれでいいって世界
最適化すれば0.1秒になるところでも10秒かけていいのだよ
その10秒を最適化する時間で、別の5分の仕事を3秒に短縮する方がよっぽど大事
>>193
Public g
Sub s()
Debug.Print f
Debug.Print g
End Sub
Function f()
'これが嫌なら
f = "return f"
'こう書けば
g = "return g"
End Function

202:デフォルトの名無しさん
18/08/04 22:07:10.27 h4pZIq0i.net
>>190
大体でいいならrand()で時間かけて総当たりして、最も偏差が少ない物で良いと思う

203:デフォルトの名無しさん
18/08/04 22:29:32.76 ZYatmaNb.net
>>189
>C言語のint main()もそのint 0はどこへ返すんだよって気になるし
OSになんじゃないのか?

204:デフォルトの名無しさん
18/08/04 22:42:04.41 qDTSwX/K.net
>>184
ソルバーアドインのエボリューショナリーエンジンで解決できそう
生徒のグループ分けをなるべく少ない変数で表すモデル作るのが難しそうだが
バイトのシフト表作ってみるみたいなサイトあった気がするから参考に
頑張れば数理的に最適解も求まりそう

205:デフォルトの名無しさん
18/08/04 22:43:45.76 h4pZIq0i.net
>>196
いやまぁそうなんだけど、理解が浅い時はそう感じてたよ

206:デフォルトの名無しさん
18/08/04 23:00:54.48 ClJJf5ah.net
>>194
なんでグローバルにしたの?

207:デフォルトの名無しさん
18/08/04 23:15:34.93 vm6Y2AFh.net
instr(join(だと部分一致で誤爆する

208:デフォルトの名無しさん
18/08/04 23:17:23.65 h4pZIq0i.net
>>199
>Functionの戻り値を関数名に代入する構文が最高に気持ち悪い
って言ってる人がいたので回避策を提示しただけ
勿論こんなコード俺は書かないよ

209:184
18/08/04 23:26:11.15 A9MJ7JgF.net
>>195
>>197
レスありがとうございます。
私がしようとしていたすべての組み合わせを試す方法だと、(仮に生徒48人を1グループあたり8人の6グループに分ける場合だと組み合わせの総数が4×10^30になってしまい、)かなり効率が


210:悪いということですね。 アドバイスしていただいたソルバーを用いた方法とrand関数を用いた方法の双方について調査し、検討してみようと思います。 また行き詰まったら質問させてください! その際はどうぞよろしくお願いいたします。



211:デフォルトの名無しさん
18/08/04 23:26:28.61 ClJJf5ah.net
>>201
いやぜんぜん回避策になってないじゃん
そもそも戻り値として返してないんだが
VBAコミュニティだとグローバル変数に入れると戻り値として返したことになるって風習でもあんの?

212:デフォルトの名無しさん
18/08/04 23:27:52.91 u3c/0jtm.net
ref使えばいいってなるわな

213:デフォルトの名無しさん
18/08/05 00:06:17.04 VayD9W7b.net
>>203
知るかボケ

214:デフォルトの名無しさん
18/08/05 00:32:29.81 iOJlEZ6A.net
>>202
ここは何のスレだかわかっているか?低脳

215:デフォルトの名無しさん
18/08/05 01:06:08.74 TorrOw0p.net
>>184
例えば、40人を、5グループ8人毎
min(最大平均点 - 最小平均点)
min(最大標準偏差 - 最小標準偏差)
こういう問題は、Ruby のアルゴリズムの問題だろ。
combination, permutation とか
こんな問題は、一筋縄ではいかない。
ものすごい組み合わせ爆発が起こるから、vba なら、何日も掛かる

216:デフォルトの名無しさん
18/08/05 01:14:27.29 jrr7Gub0.net
そんなん言語関係ないやん、アルゴリズムの問題だろ
Rubyの関数で短時間で解ける問題なら、VBAでも数倍ぐらいの時間で同じ結果は出せる

217:207
18/08/05 01:17:12.67 TorrOw0p.net
>48人を、1グループあたり8人の6グループ
グループA は、48*47*46*45* 44*43*42*41 / 8!
グループB は、40*39*38*37* 36*35*34*33 / 8!
...
グループF は、8! / 8! = 1
ここから、A~F のグループ名を変えるだけで、
同一になるものを省くから、6! で割る

218:207
18/08/05 01:22:35.24 TorrOw0p.net
48人分のデータを作って「プログラミングのお題スレ」にでも書き込んでみ。
誰か解けるか、計算時間が掛かりすぎて解けないか
こういうのはプログラミングコンテストの問題だから、
vba で解くような問題ではない!

219:デフォルトの名無しさん
18/08/05 01:28:53.98 88RY240q.net
だからソルバー使えって
数理計画法とか大学でやらなかったのか?

220:デフォルトの名無しさん
18/08/05 02:38:17.19 Gfvh6gaU.net
夏休みの宿題は自分でやれ

221:デフォルトの名無しさん
18/08/05 08:28:04.96 jOOhioBF.net
>>200
その通りだよね
それにJoinなんて例に出た短い配列にしか通用しないし

222:デフォルトの名無しさん
18/08/05 08:47:11.10 fib/Q9e8.net
>>203
戻り値を使わないという回避策なんじゃないの?
そもそも何が気持ち悪いのか分からない。
プログラミング経験無ければReturn 0よりVBAの方が感覚的にぴったり来るわ。
気持ち悪いという人はa=a+1を気持ち悪いと思う人?
関数名に代入する?
関数名じゃない。
関数そのものに代入してるというか、関数そのものを定義しているんでしょ。
俺は初めて見た時にすんなり頭に入ったね。

223:デフォルトの名無しさん
18/08/05 09:53:33.07 DQLB2G4w.net
何故関数名に代入するのが気持ち悪く感じるのかというと、後に述べるような危険性を無視しているからだと思う。
1.戻り値を関数名に代入しなければならない。
プロシャージャ中に何度も関数名が出てくるため、関数名を変更した時に変え忘れてエラーになることがある。
例えばhoge()全体をコピーして挙動の異なるhoge2を作ったとき、hoge2の中のhoge=***はコンパイルエラーにならないめ、テストするまでエラーを発見できない。
※コピペ直後に「完全に一一致」でプロシージャ内置換すれば良いのは分かっているが、そういう問題ではない。
対処法としては、関数の最初に


224:Dim Retしておき、文中ではRetに戻り値を代入、End Sub直前に関数名にRetを代入する。 2.戻り値を設定していないのにExit Subできてしまう。 せっかく1の対処法実施しても途中でExit Subされたら意味がない。 せめてExit Sub 戻り値 という書き方ができればよかったのだが。 対処法としてはExit Subを禁止して、そもそもExitが必要ない書き方に変えるかEnd Function直前までワープするGoToを使用する。 よって、関数を定義するときの推奨テンプレ Function hoge() As Variant Dim Ret As Variant '----- '処理 'Exit Subは禁止。GoTo ExitSubを使うこと '----- ExitSub: hoge = Ret End Function もちろん異論は認める。



225:デフォルトの名無しさん
18/08/05 09:56:54.93 d78e98dl.net
>>214
a=a+1
これのどこら辺が気持ち悪くなる部分なの?

226:デフォルトの名無しさん
18/08/05 10:15:24.82 C8NdcnMU.net
>>192
いやCとかでも
if(foo() == 0){
 return 1;
} else {
 return 0;
}
とか書くアホはいる

227:デフォルトの名無しさん
18/08/05 10:15:26.66 88RY240q.net
>>216
さてはまじめに数学やってなかったな?

228:デフォルトの名無しさん
18/08/05 10:19:10.37 C8NdcnMU.net
>>215
> 対処法としては、関数の最初にDim Retしておき、文中ではRetに戻り値を代入、End Sub直前に関数名にRetを代入する。
手間を増やしてバグの確率上げるとか最悪の対処法だな w
そもそも2.の対処ができるなら書き換える個所は1箇所になるからこんなアホな対処法は意味がない

229:デフォルトの名無しさん
18/08/05 10:20:36.92 C8NdcnMU.net
>>216
数学の等式としては成り立たん云々だろ
どうでもいいからスルーしとけ

230:デフォルトの名無しさん
18/08/05 10:27:17.45 88RY240q.net
決め事だからどうでもいいけど代入が=なのに名前付き引数に渡すときは:=なのが統一感なくて気持ち悪い

231:デフォルトの名無しさん
18/08/05 10:37:44.10 R+WsVzw5.net
If文とか
冗長になっても数年後に見ても簡単に分かるようにしとく事も大事だと思うけど

232:デフォルトの名無しさん
18/08/05 10:58:15.16 VayD9W7b.net
>>215
エラー処理がめんどくさくなりそう

233:デフォルトの名無しさん
18/08/05 11:02:08.70 lCYlyBjK.net
>>219
関数名は普通の変数と同等には扱えないからRetを使うのが必須な場面はある。
だから別に悪手ではない

234:デフォルトの名無しさん
18/08/05 11:10:34.73 vw7t6kWc.net
>>221
= だと式と区別がつかないから

235:デフォルトの名無しさん
18/08/05 11:12:01.18 vw7t6kWc.net
>>224
> 関数名は普通の変数と同等には扱えないからRetを使うのが必須な場面はある。
そういう場合はそうすればいいだけ
そういう前提がない場合にまでそうする奴は単なるバカ

236:デフォルトの名無しさん
18/08/05 11:18:09.78 DQLB2G4w.net
>>219
バグの確率が上がる状況ってどんな時?具体例を上げてくれ。
>そもそも2.の対処ができるなら書き換える個所は1箇所になるからこんなアホな対処法は意味がない
2の対処によって関数名に代入するのを1回にしてるんだが。どういう意味?
>>223
エラー対処を組み込んでも特に違和感ないと思うのだけど、どういう時?
Function hoge() As Variant
Dim Ret As Variant
'-----
On Error GoTo err1
Ret = 1 + "a"
If True Then GoTo ExitSub
'-----
GoTo ExitSub
err1:
Debug.Print Err.Number & Err.Description
Resume Next
ExitSub:
hoge = Ret
End Function
そもそもこの書き方って、自然と起こりうるものでコーディングルールとして定めるか臨機応変に使うかって話だと思うのだけどどうなん。

237:デフォルトの名無しさん
18/08/05 11:31:30.01 7RpOjRbA.net
変数宣言強制にしてれば関数名変えた時、戻り値返すための関数名も変更しないとエラーになるんじゃないの?

238:デフォルトの名無しさん
18/08/05 11:42:23.57 VayD9W7b.net
>>227
ごめん、なにか勘違いしてた
別にややこしくなかったね

239:デフォルトの名無しさん
18/08/05 12:01:55.81 jOOhioBF.net
>>226
Retを使うという方法について>>219
> 手間を増やしてバグの確率上げるとか最悪の対処法だな w
と言い出したことから出ている話だが、
「手間が増える」とか「バグの確率上げる」という主張自体に根拠が無いよね。
>>224に書いた理由によりRetを使う方法は皆


240:が習熟してるわけだから。 だからあんたの言う >そういう前提がない場合にまでそうする奴は単なるバカ も根拠薄弱。



241:デフォルトの名無しさん
18/08/05 12:06:39.32 DQLB2G4w.net
>>228
関数名変えるだけなら、コンパイルエラー出るから問題ないよ。
ただあまりたくさん使ってると次々とコンパイルエラー出てイラっとするだけで・・・。

242:デフォルトの名無しさん
18/08/05 12:11:44.20 C8NdcnMU.net
>>227
> バグの確率が上がる状況ってどんな時?具体例を上げてくれ。
記述量が増えればバグは増える、常識
> 2の対処によって関数名に代入するのを1回にしてるんだが。どういう意味?
だからそれなら1.の対処の意味がない
無駄なGoto増えるだけ
>>228の言うように関数名の変更忘れてたらOption Explicitでその関数に入る時にエラーになる

243:デフォルトの名無しさん
18/08/05 12:13:45.38 C8NdcnMU.net
>>230
>> そういう前提がない場合にまでそうする奴は単なるバカ
> も根拠薄弱。
必要もないのにコード量増やす奴はバカ
って書かないとわからんの? w

244:デフォルトの名無しさん
18/08/05 12:22:01.77 C8NdcnMU.net
> ※コピペ直後に「完全に一一致」でプロシージャ内置換すれば良いのは分かっているが、そういう問題ではない。
> ただあまりたくさん使ってると次々とコンパイルエラー出てイラっとするだけで・・・。
わかってるけどやりたくない
でもいらつくとかちょっと病院に行った方がいいレベル

245:デフォルトの名無しさん
18/08/05 12:32:44.13 jOOhioBF.net
>>233
最初の>>215の段階からRetが有効に使える場合のことしか書いてないよ
その前提を無視して>>219が変なこと言うから悪い
つまり>>219>>226>>233が悪い

246:デフォルトの名無しさん
18/08/05 12:39:05.42 DQLB2G4w.net
>>232
>記述量が増えればバグは増える、常識
そういう考え方もよく分かるよ。
だが途中で関数名代入を多様するのと、コーディングルールで途中でExitするというテンプレを定めるのとでは、バグの発生率は前者のほうが高いと自分は評価している。
実際この運用でうまく行ってるし意味がないなんてことはない。
そもそもは関数名代入が気持ち悪いと感じる原因と、自分がやってる対処法を上げて有用な異論がないか知りたかっただけだし。

247:デフォルトの名無しさん
18/08/05 12:46:59.88 jOOhioBF.net
記述量が増えるったって Dim ret と 最後の代入の2行だけじゃん。
途中の 「関数名 = ~ 」 という代入の記述を減らせるんだったら大した害悪じゃない。
最初からそういう話をしているのにね。

248:デフォルトの名無しさん
18/08/05 12:58:38.58 d6sOKofu.net
>>190
平均はできた、けど標準偏差はわからない
URLリンク(paiza.io)

249:デフォルトの名無しさん
18/08/05 13:00:05.97 d6sOKofu.net
>>238
ヒープ使って合計の少ないものに足してます

250:デフォルトの名無しさん
18/08/05 13:30:42.82 VayD9W7b.net
行き違いがあるんじゃない?
コーディングルールとして決められていれば、多少記述が増えてもそんなもん何の問題もない
コーディングルールがない状態でいきなり>>227みたいな記述が出てくれば、ボンクラは意味がわからずに戸惑うだろう

251:デフォルトの名無しさん
18/08/05 13:51:42.51 7Eiwzs5v.net
な?
たかが返り値を返すだけの話なのに
グローバルにするだのRetに一時保存するだのExit Sub禁止するだの
名前を変えるときは注意深く使ってるとこ全部変えるだの
謎のオレオレルールが一気に湧き出してきた
これが関数名に代入方式の弊害だよ
VBAに染まってない一般的なプログラマなら
「関数名に戻り値代入ってなんかキモくね?」「せやなぁなんでreturn文ないんやろねぇ」
こう一瞬で同意を得られるはずなんだがVBAワールドだとこうなってしまう
まるで異世界に迷い込んだような感覚

252:デフォルトの名無しさん
18/08/05 13:57:46.59 7RpOjRbA.net
VB.netもreturnなんだな

253:デフォルトの名無しさん
18/08/05 14:22:10.24 C8NdcnMU.net
>>235
> 最初の>>215の段階からRetが有効に使える場合のことしか書いてないよ
>>215が有効とか思ってるのはお前らだけ
>>236
> 実際この運用でうまく行ってるし意味がないなんてことはない。
お前らは勝手にやってればいい。
>>237
> 途中の 「関数名 = ~ 」 という代入の記述を減らせるんだったら大した害悪じゃない。
記述は減ってない
関数名を変更した時の変更量が減るだけ
しかも本人が書いてる通り
> ※コピペ直後に「完全に一一致」でプロシージャ内置換すれば良い
だけなのに、何故はそれはやりたくないらしい w

254:デフォルトの名無しさん
18/08/05 15:39:03.72 fib/Q9e8.net
そもそも、仮に何度も関数名?に代入し�


255:スとしてもその関数が長く無ければ混乱することも無い。 長い関数はそもそもダメるわけで最初から混乱することは無い。 関数を100行程度にするってのは常識だろ。



256:デフォルトの名無しさん
18/08/05 16:14:10.59 7Eiwzs5v.net
100は長すぎだろ

257:デフォルトの名無しさん
18/08/05 16:31:24.96 OTeO2/4+.net
>>245
そうか?
Cプログラミング診断室の人が許容される限界は100行までと言ってたからそれに準じたまでだが。
それに、だったらお前さんは短い関数で混乱してたということ?

258:デフォルトの名無しさん
18/08/05 16:32:17.90 lCYlyBjK.net
書き間違えでしょwww
俺は最長でも60行くらいだ。
それはともかく、関数名は最終的な答えを代入するためのものであって、
途中の値なんか決して代入したくないよって理由じゃないの?
少なくとも俺はそうだ。

259:デフォルトの名無しさん
18/08/05 16:33:09.91 lCYlyBjK.net
書き間違えじゃないのかよ

260:デフォルトの名無しさん
18/08/05 16:39:11.36 OTeO2/4+.net
returnのある言語から入ってきたから違和感を感じるのかも知れないがreturnよりは自然だろ。
そもそも俺は関数名?に代入するということを習ったことが無い。
最初にFunctionプロシージャを見て全てを理解した。
自然に理解出来た。

261:デフォルトの名無しさん
18/08/05 16:53:49.71 DQLB2G4w.net
>>246,245
限界が100行なのであって、普段は50行とかに抑えるべきだと言いたかったんだと思う。
それを100行程度が常識だと勘違いしただけじゃないかな?

262:デフォルトの名無しさん
18/08/05 17:02:35.19 C8NdcnMU.net
> 関数を100行程度にするってのは常識だろ。
って言うのを限界と言うのは苦しいだろ w

263:デフォルトの名無しさん
18/08/05 17:40:35.93 FkgLp/sd.net
ちょっと待ってほしい
他の言語なら50行で書ける関数もVBAだと100行に膨れ上がるから仕方ないのではないだろうか

264:デフォルトの名無しさん
18/08/05 18:38:48.57 FpUB4uXn.net
Cプログラミング診断室の人がVBAに言及するのか?
VBAを使ってはいけない原理主義者の人は相変わらずこじつけがスゴイなw

265:デフォルトの名無しさん
18/08/05 19:19:38.85 OTeO2/4+.net
なんじゃそりゃ。
どんな言語でも短くすべきなのは常識だろ。
50行だろうが100行だろうが関数名?代入しても混乱しないだろ。

266:デフォルトの名無しさん
18/08/05 19:21:07.38 OTeO2/4+.net
>>251
何だ?
10行じゃマズい何かがあるとでも思ってるのか?
それはさすがにプログラミング知らなすぎ。

267:デフォルトの名無しさん
18/08/05 19:23:39.26 NFAVCAdx.net
手続き型だとそこまで細分化してもかえってわかりにくいけどな

268:デフォルトの名無しさん
18/08/05 19:31:00.06 C8NdcnMU.net
>>255
プログラミングの前に日本語の勉強しなよ…

269:デフォルトの名無しさん
18/08/05 20:48:23.33 xg7vFkon.net
質問です
他のBookから元bookの"テーブル1"を参照するになやんで
Range(myBook.Name & "!テーブル1")
としましたがもうちょっといい方法はないのでしょうか

Sub 元WBのテーブル範囲を名前から参照したい()
Dim myBook As Workbook
Set myBook = ActiveWorkbook
Debug.Print Range("テーブル1").Address
'
Dim TempWB As Workbook
Set TempWB = Workbooks.Add
Debug.Print Range(myBook.Name & "!テーブル1").Address  ’これ
End Sub

270:デフォルトの名無しさん
18/08/05 20:48:50.34 VayD9W7b.net
他の言語ならともかくvbaなんてスクリプトなんだから多少行が増えても普通でしょ

271:デフォルトの名無しさん
18/08/05 21:46:30.28 x6CWYB22.net
Workbook.worksheet.listobject("テーブル名")とか

272:デフォルトの名無しさん
18/08/06 18:40:21.72 srsn67Ss.net
基本vbaは良くも悪くもやっつけ仕事片付ける用途だからなぁ
いっそ他人が読んだりメンテしたりすることを全く考慮しないのも手っていう記事見たことがあるけど
極論とはいえ、適材適所って意味ではそれも手だなとおもた

273:デフォルトの名無しさん
18/08/06 21:02:33.88 nuq1zyN5.net
vbaは使い捨てのマクロとかしょっちゅうだし


274:ね 他の言語とはかなり正確が異なる



275:デフォルトの名無しさん
18/08/06 21:57:34.50 DlUo5dI6.net
・誰かが質問をする
 ↓
・とりあえず誰かが質問にダメ出しをする
 ↓
・そのうち誰かが回答する
 ↓
・俺の方が上と違う人が別の回答をする
 ↓
・どちらの回答も的外れなためにダメ出し合戦が始まる
 ↓
・不利になってきた方がそもそもVBA自体が糞と論点をそらす
 ↓
・とことん荒れる
 ↓
・各自「やっぱり俺の知識が至上だったな」と思い矛を収める

・質問者「で、俺の質問は…」

276:デフォルトの名無しさん
18/08/06 22:05:07.55 HWRT0k/I.net
・変なキチガイが唐突に持論を展開する

277:デフォルトの名無しさん
18/08/06 22:09:50.77 1zJm1iav.net
>>261
自分しか使わない書き捨てツールと社内に配布して他の人に使ってもらうツールじゃ組み方は違うわな
別にVBAに限った話じゃないけど

278:デフォルトの名無しさん
18/08/07 01:29:58.65 8F5FPkZy.net
質問に対してこんな感じでいいんじゃね~って教えるのと、
仕事で残すコードでも組み方は全然違ったりする

279:デフォルトの名無しさん
18/08/07 12:27:46.44 o04k1oyM.net
変数を宣言したら直ぐに初期化するように、と解説サイトにはよく書かれているのですが、
ループカウンタも初期化する必要があるのでしょうか

280:デフォルトの名無しさん
18/08/07 12:50:25.25 Hr4AgTw6.net
vbaレベルならいらないんじゃねて思うけどね
グローバルとかオブジェクト変数はやるけどそれ以外はして無いわ

281:デフォルトの名無しさん
18/08/07 12:58:23.99 zpIkHTy8.net
>>267
VBAの変数には既定値というのがちゃんと定義されているので、初期化は必ずしも必要ない
VBAの仕様を知らない人にコードを見せる可能性があるなら初期化してもいいけど、
俺個人の考えでは、宣言と初期値の代入は分けて書くべき
質問の文脈から判断して、ループカウンタとはFor文で使うカウンタ変数のことだろうけど、これは初期化しなくていい
しかし「ループカウンタ」はもっと広い概念を表すので、初期化が必要なケースも多々存在する

282:デフォルトの名無しさん
18/08/07 15:43:33.88 JsLgKgln.net
>>267
VBAではそもそも初期化できない。

283:デフォルトの名無しさん
18/08/07 18:35:06.29 o04k1oyM.net
ありがとうございます。
特に初期値は設定せずにそのまま使うことにします。
ところで、VBAを触り始めてから他のプログラミング言語にも興味が出てきました。
使い勝手や習得時間を省みて、VBAを習得している者にとって一番コスパがいい言語は何でしょうか。
やはりVB.NETでしょうか。
スレチでしたら無視してください。

284:デフォルトの名無しさん
18/08/07 19:02:13.91 kevEyuIc.net
なんかの言語をひとつ習得できる人なら何でもいいよ
言語別の利用者数、給与、分野、いろいろ調べてみ

285:デフォルトの名無しさん
18/08/07 20:12:05.34 BqQIYASV.net
>>271言語よりIDEの開発環境が充実してる方が覚えやすい
VisualStudioがおススメ
C#の方が圧倒的にサンプルも多いし解説Webページも多いので良いのでは

286:デフォルトの名無しさん
18/08/07 20:40:19.29 50B7Hyqk.net
>>271
VB.NETとC#のコードを見比べて自分が分かりやすいと思った方かな
または、こっちの方が好きだと思える方

287:デフォルトの名無しさん
18/08/07 20:44:08.52 BqQIYASV.net
それにC#ならA


288:ndroidアプリも作れるしiOSアプリも作れる



289:デフォルトの名無しさん
18/08/07 20:56:18.42 i+W8MTkr.net
>>271
日常的な小手先の処理したいならPythonやNode.jsみたいなスクリプト言語
がっつりアプリ作りたいなら最近流行りのGoやSwiftやkotlin

290:デフォルトの名無しさん
18/08/07 21:13:08.98 zpIkHTy8.net
20代までならC#ぐらいは覚えておいたら転職で役に立つかも知れない

291:デフォルトの名無しさん
18/08/07 21:33:21.73 eM6c9wNK.net
仕事で社内サイトの検索結果を数十ページ出して
その中から必要なデータをExcelに貼り付けるVBAをCreateObject(" InternetExplorer.Application"を使って作ったのだけど
社内ネットワークが重すぎて1ページあたり1分以上、つまり20ページあると20分以上というものすごい時間がかかります。
これ各ページの平行作業かなにかで、どんなにページ数があっても1分強くらいですます方法はないのですか?

292:デフォルトの名無しさん
18/08/07 21:44:50.55 eM6c9wNK.net
ちなみに今は
1ページ開いて、そのページを完全に読み取ったら(●ここに時間がかかっている。30秒~60秒くらいか)、IEオブジェクトを利用してGetIdByIDなどでデータを読み込み、そのページを閉じ、
それをページ数だけ繰り返しています。

293:デフォルトの名無しさん
18/08/07 21:58:48.99 zEgIKMkK.net
無いです
シス管に糞サイトが遅いぞって文句言いましょう

294:デフォルトの名無しさん
18/08/07 22:03:53.33 eM6c9wNK.net
いや、あるのでは?
他言語ではマルチスレッドというやつかな?

295:デフォルトの名無しさん
18/08/07 22:07:46.26 zpIkHTy8.net
IEオブジェクトを配列にしてWEBページの同時読み込みに挑戦してみたことあるけど、なぜかVBAではうまくいかなかった
これはいまだに理由がよくわからん

296:デフォルトの名無しさん
18/08/07 22:52:34.26 Ylf+FX0e.net
VBScriptで処理を書いて
マルチプロセスでやってみるのはどうだろう
ネットワークが遅いのが原因だとすると
変わらないかもしれないけど
2/3 ~ 1/2 くらいは期待できるんじゃないかな
社内DBに直結してデータぶっこ抜けないかな

297:デフォルトの名無しさん
18/08/07 23:01:00.74 WUtnzCvr.net
>>246
マーティン・ファウラーはメソッド平均6行ぐらいだってさ
俺もC#やJavaを使うときはだいたいそれと同じぐらいに自然と落ち着く
VBAは冗長で書きにくいから10行〜20行ぐらいになっても我慢するけどね(どうせすぐ破棄するってのもあるが)
100行ってのはおそらくだが速度最適化のために可読性保守性を無視したコードならそれぐらいまでOKってことではないかな
C言語は何よりもまず速度みたいなところがあるからね

298:デフォルトの名無しさん
18/08/07 23:10:51.13 50B7Hyqk.net
>>284
俺もC#では平均だと6,7行くらいだな
Javaも最近やってないがそんくらいだったと思う

299:デフォルトの名無しさん
18/08/07 23:14:03.05 zEgIKMkK.net
>>281
エスパーすると社内サイトの検索処理がダメダメで異様に時間食ってると思うのでクライアントでいくら頑張っても無理

300:デフォルトの名無しさん
18/08/07 23:19:30.40 EHUuk9/6.net
ネットワーク越しの処理ってVBA異常に遅かった記憶があるなぁ

301:デフォルトの名無しさん
18/08/07 23:44:33.38 +TFKzcWv.net
6,7行とか本当?
明らかに保守よりも作成する頻度の方が高いから、結構雑になる
下はディレクトリの一覧ファイル作るマクロ。確か5.6回しか使っていない
※数万ファイルのファイル名を一覧にしたかったらしい
Sub main()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
strPath = InputBox("調べたいフォルダを絶対パスで入力してください。", "ファイル一覧", "c:\")
Cells(3, 2) = " "
Range("A3", ActiveCell.SpecialCells(xlLastCell)).ClearContents
Range("A3").Select
i = 3
FileDisp strPath, i
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

302:デフォルトの名無しさん
18/08/07 23:44:40.74 +TFKzcWv.net
Private Sub FileDisp(strPath, i)
Set objFs = CreateObject("Scripting.FileSystemObject")
Set objFld = objFs.GetFolder(strPath)
'folder
Cells(i, 2) = objFs.GetBaseName(objFld.Name)
Cells(i, 3) = objFld.ParentFolder.Path
Cells(i, 4) = Int(objFld.Size / 1024)
Cells(i, 5) = "folder"
Cells(i, 6) = objFld.DateCreated
Cells(i, 7) = objFld.DateLastAccessed
Cells(i, 8) = objFld.DateLastModified
i = i + 1
For Each objFl In objFld.Files
Cells(i, 2) = objFs.GetBaseName(objFl.Path)
Cells(i, 3) = objFl.ParentFolder.Path
Cells(i, 4) = Int(objFl.Size / 1024)
Cells(i, 5) = objFl.Type
Cells(i, 6) = objFl.DateCreated
Cells(i, 7) = objFl.DateLastAccessed
Cells(i, 8) = objFl.DateLastModified
i = i + 1
Next
For Each objSub In objFld.SubFolders
FileDisp objSub.Path, i
Next
End Sub

303:デフォルトの名無しさん
18/08/07 23:46:49.50 +TFKzcWv.net
この辺は配列に入れようかと思ったけどもういいやってなった
使い捨てじゃなければもう少し綺麗にまとめたいんだけど、
そんな暇は、ない
Cells(i, 2) = objFs.GetBaseName(objFld.Name)
Cells(i, 3) = objFld.ParentFolder.Path
Cells(i, 4) = ・・・

304:デフォルトの名無しさん
18/08/08 00:43:07.64 vvQmCMQJ.net
扱うプログラミング言語によるエンジニアの年収差「Go」が1位に 2018年8月7日
 ・スタンバイが「プログラミング言語別年収ランキング2018」を発表した
 ・1位に輝いたのは、さまざまな分野で利用されている「Go」
 ・年収中央値は600万円で、10位の「C言語」と比べて75万円高いという
 URLリンク(image.news.livedoor.com)
URLリンク(news.livedoor.com)
Goってなんやねん…
って言うてたらアカンのんか…

305:デフォルトの名無しさん
18/08/08 02:42:12.63 bsMqBICX.net
ポケモンだろ

306:デフォルトの名無しさん
18/08/08 03:02:57.55 vtZ7Dair.net
>>282
複数のIE インスタンスがあっても、1つしか実体化されていないとか?
それか、それらが共有化されているとか?
すべてのインスタンスを、別々に実体化したか?

307:デフォルトの名無しさん
18/08/08 05:59:42.24 1w8vuJFc.net
>>293
インスタンスとは実体化されてるそのもののことだと思うけど。どういうこと?

308:デフォルトの名無しさん
18/08/08 06:57:52.22 QCGkbsMF.net
カップヌードルにお湯を入れます、これがインスタンス化です
カップヌードルにお湯を注いでいたとしても、それが同じカップヌードル
だったらできあがるカップヌードルは1つだけですよね、そういうことです

309:デフォルトの名無しさん
18/08/08 08:10:17.80 Ot2gBzQj.net
>>279
InternetExplorer.Applicationは遅い。
ページにもよるけどMSXML2.XMLhttpとかhtmlflle使った方が全然速い。
ページにもよるのは遷移後にJavaScriptなどでページ内容が変わる場合等は対応出来ない場合があるから。

310:デフォルトの名無しさん
18/08/08 09:27:23.26 wHDW8dSe.net
Webアプリを作って取得したデータをエクセルで読み込めば早いのでは?

311:デフォルトの名無しさん
18/08/08 11:19:22.65 wMtMcgI8.net
社内サイトなら>>283の言うとおりDBを直接アクセスするのが正解なんだが、
「そういう想定で作ってません」てパターンもありそう。

312:デフォルトの名無しさん
18/08/08 12:44:02.26 fnpjJPlP.net
一般社員用クライアント - WEBサーバ - DBサーバ - 管理者用クライアント
WEB経由じゃないと、DBには直接アクセスできないってケースもよくある

313:デフォルトの名無しさん
18/08/08 13:19:28.34 hYvxbMfU.net
以前データをCSVに書き出す社内Webがクソすぎて
解析したらページ内のパラメータjoinしてSQL文作ってPOSTで投げて取得してただけだったので
XmlHTTPで直接取るようにしたことあるわ

314:デフォルトの名無しさん
18/08/08 19:07:51.20 wMtMcgI8.net
>>299
つまらんことするよなあ

315:デフォルトの名無しさん
18/08/08 19:14:31.05 woeaWRrx.net
DBに無制限で直接アクセスってヤバくね?

316:デフォルトの名無しさん
18/08/08 20:01:33.99 5XCxVkf/.net
無制限のアクセスはやばいけど
このテーブルだけ許可しますとか
SELECTだけ許可しますとか
このIPからだけ許可しますとか
できるっしょ

317:デフォルトの名無しさん
18/08/08 21:58:07.18 F+QXSseb.net
社内DB全開放して自由にクエリ投げれるようにしたら事務の人間半分くらいいらなくなりそう
というかVBAなんかよりSQL勉強したほうが手っ取り早く幸せになれる人多いんじゃないかと前々から思ってる

318:デフォルトの名無しさん
18/08/08 22:05:47.67 XDTEOjvF.net
webで良いからurlがapiとして完成してれば何も言うことは無い

319:デフォルトの名無しさん
18/08/08 22:22:03.67 +Hip1o5f.net
>>304
報酬次第だね
事務のコストを圧縮するごとにシステム部の報酬が上がるなら、
システムは本気で頑張り続けるだろうね
現実的にはなぜかそれが行われないので、いつまで経っても事務が事務事務している

320:デフォルトの名無しさん
18/08/08 22:23:00.50 +Hip1o5f.net
ただ、下手にアクセスで作ると自分以外触れなくなって何かあったら即死する
中小企業なら、エクセル+エクセルvbaが最強だと思っている

321:デフォルトの名無しさん
18/08/08 22:49:37.58 jNIJWXgx.net
>>307
アクセス専門業者を呼べばいいだけじゃん

322:デフォルトの名無しさん
18/08/08 23:28:48.50 +Hip1o5f.net
>>308
死ぬほど高い

323:デフォルトの名無しさん
18/08/09 00:59:24.50 JCoC1JfU.net
1から開発で今更Accessも無いだろう。データベースシステムでスタンドアロンのシングルユーザーというのがそもそも想定しにくい

324:デフォルトの名無しさん
18/08/09 01:02:04.53 cF5SxCfL.net
当たり前のことなんだけど、これまでなかなか上手いたとえが思い付かなかったが…
Manabu Ueno @manabuueno 16:46 - 2018年8月1日
 ユーザーの要求をそのまま機能にすると役立たない物になってしまいます。
 デザイナーはユーザーの要求を抽象化して本来的な原理を見つける必要があるのです。
 例えば「直進したい」「左折したい」「右折したい」という要求に対して、3つのボタンではなく、
 1つのハンドルを提案できなければいけません。
 URLリンク(pbs.twimg.com)
URLリンク(twitter.com)
この例えは現場の人と話すときにも使えそうだな
URLリンク(twitter.com) (5ch newer account)

325:デフォルトの名無しさん
18/08/09 06:36:39.58 Uz7F5Yyf.net
真の欲求って奴だな
これを知らないとデスマーチからいつまで経っても抜け出せなし

326:デフォルトの名無しさん
18/08/09 07:59:59.62 TQ/3uoG6.net
ソフトごとに違う使い方やI/F覚えるよりSQL覚えた方が早いしずっと役立つんじゃね?

327:デフォルトの名無しさん
18/08/09 08:16:05.94 XQnUSO4S.net
>>313
なるほど!
じゃあ社内DBに直接アクセスしたいのですが、その方法はどうしますか?
HTMLのフォ


328:ームに入力してSubmitすれば次のページでいろんなデータが見れるようになっているのですが そのHTMLフォームがあるページのHTMLソースを見ればその中のどこかに社内DBのアドレスやログイン方法みたいなのが書いてあるのですか?



329:デフォルトの名無しさん
18/08/09 08:22:15.68 0WK0pW+2.net
>>314
そんなバカな
HTMLから投げるのはサーバーサイド処理のスクリプト
ASPだったりCGIやPHP
ページのソースに書いてあったら怖いだろ

330:デフォルトの名無しさん
18/08/09 08:24:20.68 nqTz3IyX.net
>>314
お前には無理だから諦めろ

331:デフォルトの名無しさん
18/08/09 08:38:23.31 sKYMgflt.net
そういやExcel VBAでもADO使えばSQL使えるみたいだけど、どれくらい制限あるの?

332:デフォルトの名無しさん
18/08/09 09:09:17.52 BeIAvoie.net
???
そもそも何に接続したいの?
SQLといってもそれによるでしょ。
接続できるアカウント用意してもらって、
接続用ODBCドライバ入れて良いかどうかとか、情シスに聞いてみれば?

333:デフォルトの名無しさん
18/08/09 10:14:25.51 yeHg7T00.net
>>317
機能に制限はない
運用側で接続やアクセスを制限するのが普通のやり方

334:デフォルトの名無しさん
18/08/09 12:17:46.94 TQ/3uoG6.net
>>317
SELECTとかINSERTとかのSQLを実行する分にはvbaだからどうこうっていう制約は何もないよ。

335:デフォルトの名無しさん
18/08/09 18:30:51.09 sKYMgflt.net
>>319
>>320
え、そうなんだ
じゃあ単にシート内を検索するときもDictionary使わずに、ADOで接続してSQL使った方がシンプルで応用がききそうだね
もっともExcelでSQLの命令書くのが簡単なのなのかはわからないけれども

336:デフォルトの名無しさん
18/08/09 18:39:29.03 XQnUSO4S.net
ところで新バージョンExcelで「游ゴシック」がうざくてしかたがない。
これ地獄の底へ抹消する方法ない?
しかも「游」ってなんだ?「遊園地」の「遊」でもないし。

337:デフォルトの名無しさん
18/08/09 18:47:08.22 JCoC1JfU.net
Web制作では游ゴシは福音なんだがな...嫌いならフォントだけアンインストールすりゃいんじゃね?

338:デフォルトの名無しさん
18/08/09 19:24:43.48 YxGb3uhT.net
>>311
たとえおかしくね?
ユーザーが右折したい左折したいっていってるならボタンが正解だろ
コーナーが90度だけじゃなくてたくさんあるっていう状況まで汲めってそりゃ無茶ぶりだろ

339:デフォルトの名無しさん
18/08/09 19:26:31.27 FjggVehY.net
既定のフォント設定で簡単に変更は出来るけど、他人の作るブックはどうにもならんからな…

340:わ
18/08/09 19:29:47.37 Iu9wUSgQ.net
>>325
それだけでは足りないぞ

341:デフォルトの名無しさん
18/08/09 20:56:51.04 cF5SxCfL.net
>>324
「コーナーが90度だけ『じゃなくてたくさんある』っていう状況」まで汲め
まずは、要求を抽象化してその可能性に気づき
次に、こちらから質問してそういうケースが起きうるのかを確認する
それだけの話で超能力でも忖度でもムチャぶりでもないよ
(あ、でも確かに最初の抽象化ができない人にやれというのはムチャぶりになるかもね)

342:デフォルトの名無しさん
18/08/09 21:10:58.19 ou4vsgQB.net
ヒアリングしても具体的な典型例のみが挙がるかレアケースばかり挙がることが多い気がする
実務やってる人間にとって当たり前すぎることは出てこなくて、試作段階で出来なくてもいいのかの確認とったら出来ないと話にならんとか
俺は自部署以外だと多部署からの依頼を受けて作る程度だからある程度実務がわかる分マシだけど、プロは畑違いの仕事の他社とやりとりするんだから大変だろうな

343:デフォルトの名無しさん
18/08/09 21:23:36.18 Uz7F5Yyf.net
レアケース挙げてくれるならありがたいジャン

344:デフォルトの名無しさん
18/08/09 21:32:44.33 s67NkejU.net
そのためのOOPだ
なんの問題ないよ

345:デフォルトの名無しさん
18/08/10 00:05:32.03 Xmz6l8g0.net
>>321
ODBCだったら
Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
というドライバを使うことになるけど、これの機能が貧弱だから凝ったSQLは受け付けてくれない。
単純なWHERE文での抽出だったらできるから、形式が決まったシートなら便利に使える可能性はある。

346:デフォルトの名無しさん
18/08/10 00:07:31.23 Xmz6l8g0.net
>>327
大変だねえ、委託業務は

347:デフォルトの名無しさん
18/08/10 00:07:58.29 buW+ivGR.net
>>323
具体的にはなにがどう良いんだ?

348:デフォルトの名無しさん
18/08/10 00:13:58.45 KVMpRfYs.net
あらゆることを想定したお見積がこちらです

なんでそんなかかるの?と

349:デフォルトの名無しさん
18/08/10 00:36:24.65 GY+5Xvxa.net
>>327
いや、ハンドルとコーナーの話だから抽象化やらも考えやすいだけじゃね?っていう
車とか曲がる行為とかがある程度普遍的だから敷衍できる
でも普段やってる仕事ってそのレベルで進んでるか?ってことよ
抽象化しろっていうのも一見正論だしある程度はしてるけど
曲がるを実装するためにハンドルは俺には飛躍が激しく思える

350:デフォルトの名無しさん
18/08/10 00:45:08.80 nHU64y35.net
抽象化が苦手そうなのがよく伝わってくる
アレはアレ、コレはコレで別モンとして対処するのが得意そうだな

351:デフォルトの名無しさん
18/08/10 00:51:11.37 GY+5Xvxa.net
幸運な>>336はそのレベルででなんだな
どういう仕事してんだ?web系とかか?

352:デフォルトの名無しさん
18/08/10 04:05:42.61 3Gbr2Rmh.net
>>314
そういうのは、Rails とか
無料のRails チュートリアルでも勉強すれば?

353:デフォルトの名無しさん
18/08/10 04:22:01.75 8SROxuQV.net
>>333
游ゴシックはMacとWindowsの両方に搭載されているのでCSSの手間が減る

354:デフォルトの名無しさん
18/08/10 07:12:17.59 hEgtpW6D.net
出ましたRubyヴァカ

355:デフォルトの名無しさん
18/08/10 07:42:41.23 gxVIX6OQ.net
20年遅れくらいでオブジェクト指向に出会った感じがよくでてる

356:デフォルトの名無しさん
18/08/10 13:30:13.92 u/kCZrV9.net
あるクラスのインスタンスをいっぱい作ってそれをCollectionに入れてて
それをその1つの要素でソートするためにはどうしたらいいですか?
VBAにはソート関数みたいなのはないのですか?
イメージとしては人間クラスがあって、年令でソートする感じ。

357:デフォルトの名無しさん
18/08/10 13:40:04.94 PoJQ6i5f.net
rubberduck入れたらCall使うなって怒られた
なんでダメなの?

358:デフォルトの名無しさん
18/08/10 14:51:32.56 gxVIX6OQ.net
>>342
1 年齢と連番を入れた配列を別に作る
2 その配列を年齢でソートして順位を出す
3 インスタンス列をその順番で引っこ抜いて新しいcolllectionとする

359:デフォルトの名無しさん
18/08/10 16:02:16.73 ZQbSW7gd.net
列のソート時に行を崩さない方法について質問させてください。
手作業では成功してます。
一列オートフィルタ→ソートのカスタムから指定文字列選択→完。
マクロだと指定した行のみソートになってしまいデータが壊れてしまいます。
ご回答よろしくお願いします。

360:デフォルトの名無しさん
18/08/10 18:20:14.79 u/kCZrV9.net
>>344
2にもソートが入ってるけど
そのソートの方法が知りたいのですが。
VBAにはもともとの機能としてソートは入っていないかな?
作業シート作って、そこにデータ入れて、Excelの並べ替えの機能を使ってやる方法は思いついたけど
それはダサい、作業シート作るなんてスマート�


361:カゃない、等の理由で好きじゃないのですが。



362:デフォルトの名無しさん
18/08/10 18:55:47.50 9rAsrzZF.net
VBA自体がダサくてスマートじゃないから諦めましょう
生粋のVBAerはこういうとき自作のソートサブルーチンをコピペするらしいです

363:デフォルトの名無しさん
18/08/10 19:00:51.38 hEgtpW6D.net
お前の「ダサい、スマートじゃない、好きじゃない」なんて知ったこっちゃない

364:デフォルトの名無しさん
18/08/10 20:01:43.47 u/kCZrV9.net
VBAってソート関数ないの?
ほんとウンチみたいな言語ですね

365:デフォルトの名無しさん
18/08/10 20:09:31.68 t0FQp9fT.net
>>349
これが言いたばかりに半日スレ更新繰り返してたと思うとクソ笑え?

366:デフォルトの名無しさん
18/08/10 20:26:39.07 u/kCZrV9.net
>>350
あまりわたしを怒らせないほうがいいぞ

367:デフォルトの名無しさん
18/08/10 20:27:17.52 u/kCZrV9.net
わたしは怒ったら怖いんだぞ

368:デフォルトの名無しさん
18/08/10 20:43:22.07 TzsaHsn2.net
自分でクイックソートでも組んでクソしながら寝とけ

369:デフォルトの名無しさん
18/08/10 20:53:13.90 cfNcxUIl.net
ソートってお前ら、せっかくのエクセルvbaなんだから
セルに一度いれたらいいだけじゃないか?
何万行かあってもエクセルのソートはそこまで遅くないだろう

370:デフォルトの名無しさん
18/08/10 20:54:14.30 EZ4av1qU.net
そういやSortがkeyが三つまでしか指定できない仕様は変わらんのかな
Excelだと四つ以上指定できるのに、VBAだと複数回に分けてやる必要があるとかいうよくわからない状態になってるし

371:デフォルトの名無しさん
18/08/10 21:13:10.19 DHT31mYJ.net
>>352
どうかこれで怒りをお鎮めください
Sub Sort(a)
 Dim i, j, t
 i = 0
 Do
  If UBound(a) <= i Then
   Exit Do
  End If
  j = 0
  Do
   If UBound(a) <= j Then
    Exit Do
   End If
   If a(j) > a(j + 1) Then
    t = a(j)
    a(j) = a(j + 1)
    a(j + 1) = t
   End If
   j = j + 1
  Loop
  i = i + 1
 Loop
End Sub

372:デフォルトの名無しさん
18/08/10 21:18:56.66 hElUeWw3.net
>>346
数値のソートは自分で頑張って実装しなさいよ
順序づけインデックスを使って任意のコレクションを並べ替えるロジックは汎用性のあるものだから
自作する意義は十分にある。

373:デフォルトの名無しさん
18/08/10 21:21:33.75 hElUeWw3.net
汎用性があるってだけでなく、
ひとつの順序づけインデックスを使って複数のコレクションを同じ順に並べ替えることが出来るからね

374:デフォルトの名無しさん
18/08/10 21:59:32.18 CvQqUFge.net
順序付けインデックスって何?

375:デフォルトの名無しさん
18/08/10 22:19:22.24 BBFwYEVu.net
>>359
ごめん一般的にどう呼ぶか知らんからテキトーな名前で言った
ソート対象のデータの横にナンバーが振ってあったとして、データと一緒にそいつもソートすると思ってください。
その後、ナンバー部分を取り出したもの。

376:デフォルトの名無しさん
18/08/10 23:26:19.27 swVL64k5.net
別にVBAでもソート出来るでしょ。
調べ方が足りないんじゃね?

377:デフォルトの名無しさん
18/08/10 23:42:39.74 tKZj7bhP.net
ソートが出来るコレクションは限られてる
目的にあった使用ができるか調べればいい

378:デフォルトの名無しさん
18/08/10 23:52:22.63 CvQqUFge.net
>>360
そんなことしなくても比較する関数を渡して直接ソートするのが一般的だし汎用的では

379:デフォルトの名無しさん
18/08/10 23:56:04.31 Xmz6l8g0.net
>>363
そうだけど>>358のメリットががが

380:デフォルトの名無しさん
18/08/11 01:03:51.43 niUEedr6.net
.NET APIのArrayList使えばコレクションのソートもできるじゃん
VBAでも使えるぞ

381:デフォルトの名無しさん
18/08/11 11:39:39.78 K8a9DxhQ.net
>>365
それどうやって使えるようにするの?

382:デフォルトの名無しさん
18/08/11 11:46:17.07 KSv2Sz3+.net
>>366
CreateObject("System.Collections.ArrayList")で普通にオブジェクト生成できる
あとはググってどうぞ

383:デフォルトの名無しさん
18/08/11 12:05:04.95 YyI+aygL.net
λもLinqもないVBAに.NETコレクションを渡されてもあんまり嬉しくないでしょう
Private app As New MyDotNetComLib.MyApp
Sub イベントハンドラ()
 app.DoSomething ThisWorkbook
End Sub
こっちのほうが楽だよ
コレクションのソートはC#サイドで好きなだけできる

384:デフォルトの名無しさん
18/08/11 12:20:08.44 cu5jnq2r.net
>>368
比較関数は渡せるの?

385:デフォルトの名無しさん
18/08/11 12:42:46.23 YyI+aygL.net
>>369
C#サイドで好きなだけ渡せるよ

386:デフォルトの名無しさん
18/08/11 12:50:48.93 Tdr5W98e.net
>>370
VBA側で定義できるかが課題

387:デフォルトの名無しさん
18/08/11 12:56:28.26 YyI+aygL.net
>>371
わざわざVBA側でする意味がないじゃん?

388:デフォルトの名無しさん
18/08/11 13:11:49.02 0HQvSoaX.net
>>370
楽といっても、C#スキルのある人限定の話でしょ
VBAのメイン利用層は、現場のエンドユーザーであり
本職のプログラマーじゃないんだよ

389:デフォルトの名無しさん
18/08/11 13:13:13.81 XUOVQ5jM.net
そのC#側のコードはどう書くんだ
メモ帳か?HTMLタグ手打ちでホームページ作るのよりしんどそうだが
ああ、今はオンラインIDEってのもあるのか
IE11が使用環境に入ってなきゃ意味ないけど

390:デフォルトの名無しさん
18/08/11 13:15:21.09 K8a9DxhQ.net
>>367
ありがとうでガンス。
なんだかよさげザマスね。
ところでこのCreateObject("System.Collections.ArrayList")を収納する変数の型はなににしたらよいザマしょうか?
F2で出るオブジェクトブラウザに表示されてそんなメソッドが使えるか調べたいでガンスが、それにはどうしたらいいでしょうか?フンガー

391:デフォルトの名無しさん
18/08/11 13:38:17.51 KSv2Sz3+.net
>>375
受け手の変数をVariant型かObject型で定義しとけば処理実行時にArrayListオブジェクトを受け入れる
Scripting Runtimeとかのオブジェクトを実行時バインディングで使用するときとまったく同じ
.NETライブラリのパスを参照先に設定すれば、ArrayList型変数の宣言、インテリセンス入力、オブジェクトブラウザでのオブジェクトモデルのブラウジングも有効になるよ
ライブラリパスは自分で調べてね

392:デフォルトの名無しさん
18/08/11 13:53:32.73 cu5jnq2r.net
>>372
C#側をライブラリとして固定できなくなっちゃう

393:デフォルトの名無しさん
18/08/11 14:18:44.31 YyI+aygL.net
>>377
すまない
MyDotNetComLibと書いたのが悪かったようだね
これはライブラリじゃなくアプリケーションのつもりで書いた(MyApp)
キミが考えているだろう一般的な意味でのライブラリはアプリケーション内部で好きに参照してくれればいい

394:デフォルトの名無しさん
18/08/11 14:34:57.92 cu5jnq2r.net
>>378
ちょっと意味がわからん
比較関数をとっかえひっかえしたいときどうするの?

395:デフォルトの名無しさん
18/08/11 14:38:33.82 YyI+aygL.net
>>379
C#側でとっかえひっかえすればいい
互いのイメージに齟齬があるのかもしれない
まずVBAで書いたらどうなる?


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