トップページtech
1002コメント383KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/11/27(金) 20:36:45.35ID:9HV+ag/s
ExcelのVBAに関する質問スレです

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

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

コードが嫌な人・作成依頼が嫌な人は別スレ建ててください。

※前スレ
Excel VBA 質問スレ Part38 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1441619979/
0571デフォルトの名無しさん2016/01/23(土) 19:46:50.85ID:UyBsumDJ
>>568
他のループも合わせてからの推測ですが50msぐらいです。
0572デフォルトの名無しさん2016/01/23(土) 19:54:39.20ID:d6eRWlmR
質問です。

エクセルの1シートを1テーブルに見立ててデータの抽出、計算をしようと思っています。
ただデータの検索をクエリを書くのと同様に行えるのかが気になっています。
例えばSQLだとselect * from t where c < 10 and c > 0 と範囲検索が簡単に出来ますが、
エクセルvbaだとfind、findnext結果を順々に見ていくしかないんでしょうか?
access使えと言われるかも知れませんが自分も作ったものを使う人も
使ったことないので使う予定でないです。
0573デフォルトの名無しさん2016/01/23(土) 19:55:52.13ID:UyBsumDJ
>>543
サンプルで作ってみたのですが、思った通りの動作ができません・・・
改善点をお分かりになりますでしょうか?

Sub jikkou()
Dim Keyword As Range
Dim CheckList As Range
Dim Checkcolumn As Long

With ActiveWorkbook.Worksheets("Sheet1")

Set Keyword = .Range("F2:F4") '順に田中、山田、井上
Set CheckList = .Range("A2:C9")
Checkcolumn = 2

Call Test(Keyword, CheckList, Checkcolumn)

End With
End Sub
0574デフォルトの名無しさん2016/01/23(土) 20:12:01.85ID:9iIZKcSa
>>573
たぶんSheet1に書いてない
0575デフォルトの名無しさん2016/01/23(土) 22:41:50.10ID:rT+4QcAA
>>572
使ったことないけどODBCでExcel読めるんだから同じように出来るんじゃなかろうか
0576デフォルトの名無しさん2016/01/23(土) 22:56:00.52ID:VVSBE+9k
>>572
ODBCだけど
Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}
で普通にWHEREが効いたよ。
0577デフォルトの名無しさん2016/01/23(土) 23:11:55.10ID:Lyhv/FJb
選択した行の下に行を挿入したい
0578デフォルトの名無しさん2016/01/23(土) 23:31:40.97ID:d6eRWlmR
>>575
>>576
成る程!
エクセルからODBCする発想はありませんでした。
ありがとうございます。
0579デフォルトの名無しさん2016/01/24(日) 00:52:16.69ID:3BacWB5Q
質問
union(range("A1:A3"),range("A4:A6")).select
とすると A1:A6がセレクトされてしまいます
A1:A3,A4:A6とばらばらに選択させるにはどうしたらいいのでしょうか
0580デフォルトの名無しさん2016/01/24(日) 01:02:59.65ID:8yNc66kp
>>579
Range("A1:A3, A4:A6").Select
0581デフォルトの名無しさん2016/01/24(日) 01:24:07.69ID:3BacWB5Q
>>580
Rangeを使った場合
少ないとOKなのですが
Range("A1:A3,A4:A6,A7:A9,A10:A12,A13:A15,A16:A18,A19:A21,A22:A24,A25:A27,A28:A30,A31:A33,A34:A36,A37:A39,A40:A42,A43:A45,A46:A48,A49:A51,
A52:A54,A55:A57,A58:A60,A61:A63,A64:A66,A67:A69,A70:A72,A73:A75,A76:A78,A79:A81,A82:A84,A85:A87,A88:A90").Select

多いとエラーになってしまうんですよ
Range("A1:A3,A4:A6,A7:A9,A10:A12,A13:A15,A16:A18,A19:A21,A22:A24,A25:A27,A28:A30,A31:A33,A34:A36,A37:A39,A40:A42,A43:A45,A46:A48,A49:A51,
A52:A54,A55:A57,A58:A60,A61:A63,A64:A66,A67:A69,A70:A72,A73:A75,A76:A78,A79:A81,A82:A84,A85:A87,A88:A90,
A91:A93,A94:A96,A97:A99,A100:A102,A103:A105,A106:A108,A109:A111,A112:A114,A115:A117,A118:A120,A121:A123,A124:A126,A127:A129,A130:A132,
A133:A135,A136:A138,A139:A141,A142:A144,A145:A147,A148:A150,A151:A153,A154:A156,A157:A159,A160:A162,A163:A165,A166:A168").Select
0582デフォルトの名無しさん2016/01/24(日) 04:40:05.83ID:QDUQ11dL
文字列の長さが256文字以上はエラーになるからね
union使いたくないってことなら適当な長さで区切って処理していくしかないね
0583デフォルトの名無しさん2016/01/24(日) 08:31:19.18ID:P3FwbSRP
そもそもマクロでSelect使うのってユーザーに見せる場合だけだから広範囲選択しないよな
0584デフォルトの名無しさん2016/01/24(日) 08:43:14.19ID:OLLhmKw5
ばらばらに選択させなきゃならない理由がわからない
0585デフォルトの名無しさん2016/01/24(日) 10:14:46.19ID:EERzV+Td
セルの色変えるとか
0586デフォルトの名無しさん2016/01/24(日) 10:17:27.22ID:U2BkwJ1U
選択した行の下に行を挿入したい
0587デフォルトの名無しさん2016/01/24(日) 10:54:59.26ID:jAR/7hik
26 名前:名無しゲノムのクローンさん[] 投稿日:2015/05/07(木) 22:53:53.09 ID:dgLqosr8Q
理研の職員がwinnyでウィルス感染→個人情報流出?2
http://wc2014.2ch.net/test/read.cgi/rikei/1284822425/

27 名前:名無しゲノムのクローンさん[] 投稿日:2015/05/07(木) 22:59:50.36 ID:dgLqosr8Q
http://www.riken.jp/research/labs/bsi/behav_neurophysiol/

姓が変わってる
0588デフォルトの名無しさん2016/01/24(日) 11:50:42.56ID:OLLhmKw5
>>586
Selection.Offset(1).Insert
0589デフォルトの名無しさん2016/01/24(日) 12:16:54.98ID:CzW7EpCe
>>581
Range("A1:A168").Select
0590デフォルトの名無しさん2016/01/24(日) 13:20:11.62ID:9Re4pm4/
>>570
これ誰かわかりませんかね?
単純にループで要素をとって変換してるんですけどもっと効率よく書く方法知りたいんですけど
0591デフォルトの名無しさん2016/01/24(日) 14:43:43.40ID:kddwELVp
>>590
まず目的がわからない。Variant配列のままではできないことが何かあるの?
0592デフォルトの名無しさん2016/01/24(日) 14:48:25.07ID:Qp0DBCKE
>>590
それでいいだろ
型が全然違うものをどうやってキャストするつもりなんだよ?
0593デフォルトの名無しさん2016/01/24(日) 19:54:05.71ID:ZDzZlqZ2
ダブルからバリアントはできるから
なんでできないんだってクレームだろうね
0594デフォルトの名無しさん2016/01/24(日) 21:03:26.31ID:bw3MWu8t
>>593
> ダブルからバリアントはできるから
はあ?
0595デフォルトの名無しさん2016/01/24(日) 21:18:18.78ID:kddwELVp
たぶん質問者はいちいちコピーを取らずに一瞬でできる方法を求めているんだろう。
それは原理的に無理だ。
0596デフォルトの名無しさん2016/01/24(日) 21:31:15.52ID:LpWoFh+w
>>592
オブジェクト指向はそういうの普通にやりますけど。
あれですか?
C言語しかしらない人ですか?
0597デフォルトの名無しさん2016/01/24(日) 21:51:00.06ID:kddwELVp
>>596
つ 配列
0598デフォルトの名無しさん2016/01/24(日) 22:03:39.50ID:ZDzZlqZ2
オブジェクト指向のは
ポインタ渡すだけじゃないの
int型をオブジェクト指向のバリアントに渡すのは結局ループさせてると思うけどw
0599デフォルトの名無しさん2016/01/24(日) 22:39:14.22ID:ZDzZlqZ2
そもそも関心を持って>>570にキャストって何?って聞かないと
できるなら、そこからはじめよう
0600デフォルトの名無しさん2016/01/24(日) 22:42:25.30ID:vxhR0ZQc
やりたいこととしてはc++で作ったdllに配列を渡したいけどvariantの配列は呼び出し規約に引っかかって渡せないからdoubleの配列にキャストしたいということです

今やってるのはセルのレンジをvbaでvariant配列として受ける→doubleの配列に変更したいというわけです。
0601デフォルトの名無しさん2016/01/24(日) 22:46:42.39ID:kddwELVp
>>600
dllを改変してVariant配列を受け取るようにしなさい。
C++側で工夫すれば中身がdouble配列でもinteger配列でもハンドリングできる。
0602デフォルトの名無しさん2016/01/24(日) 22:49:15.03ID:kddwELVp
配列の先頭をByRefで渡しつつ長さも別に渡してるんでしょ?
0603デフォルトの名無しさん2016/01/24(日) 23:16:09.36ID:ZDzZlqZ2
dllでdoubleの配列受けるのは仕組みがわかればできるとして
valiantは仕組みがわかったとしてプログラムは難しいというか
メリットがあるのかどうか結局
doubleの配列に渡してdllに渡すプログラムになるだろ
正規ユーザーならマイクロソフトに聞いたらどうだ
0604デフォルトの名無しさん2016/01/24(日) 23:31:31.52ID:CzW7EpCe
配列の型を丸ごと変換なんて、ループで代入するしかない
それがVBAの決まり
0605デフォルトの名無しさん2016/01/25(月) 00:00:11.24ID:OVAwI95a
>>581
自己レス
名前機能を組み合わせて最大1291の連続するセル範囲を選択することに成功しました
連続する単一セルならば最大2788
マクロだとこれが限界なのかなぁ
0606デフォルトの名無しさん2016/01/25(月) 03:16:47.81ID:x8k2PtIT
マクロでやる意味あるのか?
0607デフォルトの名無しさん2016/01/25(月) 06:54:36.14ID:ZbEgu09E
>>604
そもそも変換どころか、キャストしたい
って話だしな
「自分のやりたいことは簡単に書ける方法が絶対あるはず教」の信者さんでしょ
0608デフォルトの名無しさん2016/01/25(月) 07:04:40.46ID:ZbEgu09E
>>603
Variant の仕様は MSDN に書いてあるし、API もあるから難しくはないよ
double しか渡されない(double 以外は保証しないよ)と言う仕様でいいなら double の配列の読み書きとたいして変わらん

お前は、それ以前に
> doubleの配列に渡してdllに渡すプログラムになるだろ
と言うワケわからん日本語書くのをやめれ
0609デフォルトの名無しさん2016/01/25(月) 07:25:28.63ID:kQZEtAkw
>>596
へえ。Object指向に普通にVariant型があると思ってるのか?
馬鹿だろお前。Object指向だろうがなんだろうがキャスト出来ないものはキャスト出来ねーよ。
Variant型変数にDouble型の配列を入れたと言うなら型変換しなくても使えるが、
Variant型の配列に突っ込んだ値をと言ってるんだろ?
て言うか、C++なんて糞言語ここで持ち出すなよ。ここ何のスレだか知ってて書いてるのか?
0610デフォルトの名無しさん2016/01/25(月) 07:58:42.36ID:PYOqNH8O
>>541
0611デフォルトの名無しさん2016/01/25(月) 08:16:46.72ID:Ymzzk2Ep
Java屋じゃね?
0612デフォルトの名無しさん2016/01/25(月) 10:30:52.42ID:Ymzzk2Ep
Variantだと中に何が入っているかのチェックもいるし、配列だとしても何の配列かによって処理を変えなきゃいけないなど多少は面倒。
でも一度作ってしまえばそれだけで対応できるから、型別に配列を扱うより結局ラクになる。
0613デフォルトの名無しさん2016/01/25(月) 19:45:11.59ID:h5WdPhTZ
解説書「Excelで学ぶ物理シミュレーション」が変数定義してなかったので、変数定義しながらやってるのですが、
以下の「ActiveSheet〜」のところで、を「変数が定義されていません」とエラーが出てしまいます。

ActiveSheetはどう変数定義すればよろしいのでしょうか?
--
Sub particles()
Worksheets(2).Activate

Dim x0, y0, x1, y1, x2, y2, r As Integer

x0 = 300
y0 = 300
x1 = 0
y1 = 0
x2 = 0
y2 = 100
r = 20

AcitiveSheet.Shapes.AddShape(msoShapeOval, x0 + x1 - r, y0 + y1 - r, 2 * r, 2 * r).Select
(以下略)
0614デフォルトの名無しさん2016/01/25(月) 20:20:34.36ID:tSs+i5nu
そのままのコードで円が表示されたけど
何かの理由でAddShapeが失敗してるとか
0615デフォルトの名無しさん2016/01/25(月) 20:20:39.23ID:EI0NNUYr
>>613
スペルミス よく見てみ
0616デフォルトの名無しさん2016/01/25(月) 20:30:20.64ID:S6u4QlwX
VBAなんてやめてHaskell使いなよ。
こんな数学的に説明できない糞言語使いにくいでしょ。
0617デフォルトの名無しさん2016/01/25(月) 20:32:24.39ID:h5WdPhTZ
>>615
バカでした。すみません。ありがとうございます。
0618デフォルトの名無しさん2016/01/25(月) 21:35:58.44ID:bhGrjqTq
苦労してやっとVBA覚えたのに、さらに他の言語を覚えるなんて嫌だ
言語を覚えるだけで人生終わっちまう
しかもHaskellって関数型ってヤツで、地球人でも特別な人間にしか理解できないヤツだろ
0619デフォルトの名無しさん2016/01/25(月) 21:39:21.69ID:6cjSwNuY
vbeで、「変数 = 」って入力して他の変数コピペしようって
カーソル移動するとエラーメッセージボックスがでてうっとうしいんですが
どうすればいいですか?
0620デフォルトの名無しさん2016/01/25(月) 21:43:55.44ID:tSs+i5nu
vbeで、他の変数コピーして「変数 = 」って入力してペーストすればどう
0621デフォルトの名無しさん2016/01/25(月) 21:44:00.33ID:EI0NNUYr
>>619
自動構文チェックを off にする
0622デフォルトの名無しさん2016/01/25(月) 22:02:38.95ID:zDVscmGV
やばいやばい
0623デフォルトの名無しさん2016/01/25(月) 22:06:25.75ID:xK2Lk5XQ
>>621
ありがとうございます!
0624デフォルトの名無しさん2016/01/25(月) 22:34:29.77ID:tSs+i5nu
とびぬけたベリー!ばか!アホ!
0625デフォルトの名無しさん2016/01/25(月) 23:39:17.97ID:zDVscmGV
>>616
Haskellでワークシートのデータに簡単にアクセスできてDBも読めるんなら使ってもいいぞ。
0626デフォルトの名無しさん2016/01/26(火) 03:57:19.80ID:iVTpdqcA
○○言語がクソっていうのは、対戦系のゲームで自分が勝てない事を根拠にクソゲーと言うのに似ている。
0627デフォルトの名無しさん2016/01/26(火) 08:43:18.81ID:qqVXY/GV
>>616
説明できないっけ。結構なレベルまで出来るけどなあ
0628デフォルトの名無しさん2016/01/26(火) 09:18:40.01ID:5vRCDG8F
>>616
使う環境が違うんだからそもそも比較の対象にならん。
純粋に言語部分だけで比較するんだと言うなら勝手だけど。
0629デフォルトの名無しさん2016/01/26(火) 18:43:46.24ID:ZKGLEkP4
If objtag.innertext = "≫|" Then

この特殊記号をVBEに書き込む方法を教えてください
0630デフォルトの名無しさん2016/01/26(火) 19:08:50.23ID:Le1AWrDO
そのままコピペしても文字化けせず 普通に書き込めるが?
0631デフォルトの名無しさん2016/01/26(火) 20:11:57.90ID:s2VOqCHE
?(ハート)はダメだけど♪はおk
0632デフォルトの名無しさん2016/01/26(火) 20:21:55.06ID:Ss3eGzB+
>>618
関数型が難しいとか嘘まき散らしてるのはF欄卒の低能だよ。
国立の情報系出てれば普通に使える。
0633デフォルトの名無しさん2016/01/26(火) 20:35:20.49ID:s2VOqCHE
最近じゃVBAでもできるみたいだし
0634デフォルトの名無しさん2016/01/26(火) 20:36:17.62ID:an9o+4d6
>>630
自分のVBAには貼り付けできないんです…
なんでだろう…
0635デフォルトの名無しさん2016/01/26(火) 20:44:20.93ID:s2VOqCHE
>>634
エディターの設定でフォントは何になってる?
0636デフォルトの名無しさん2016/01/26(火) 20:47:22.36ID:an9o+4d6
arial unicode MS(日本語)です。
まずいのでしょうか?
0637デフォルトの名無しさん2016/01/26(火) 20:53:14.53ID:s2VOqCHE
>>636
そのフォントだったら自分のとこでも大丈夫だなあ...
0638デフォルトの名無しさん2016/01/26(火) 23:13:32.78ID:XA1jjBiE
windowsがXPなんじゃね
0639デフォルトの名無しさん2016/01/26(火) 23:59:27.82ID:Ss3eGzB+
だからLinux使えと言ってるのにまったく。
0640デフォルトの名無しさん2016/01/27(水) 02:32:20.61ID:FFJgZUiX
Excelワークシート関数って参照透明性があるという点だけ見れば関数型言語っぽくね?
0641デフォルトの名無しさん2016/01/27(水) 09:55:13.64ID:AxnKqjSh
linuxて研究機関でもあるまいし
0642デフォルトの名無しさん2016/01/27(水) 16:56:55.10ID:M2nAG8/t
質問です。

cnt = 5 '(適当)
For n = 1 to cnt

if n = 1 then cnt = a + b


next n

このようにForLoopのcntをfor内で新たに出す場合、Forループの回数は新たに書き換えられるのでしょうか?
つまり、Forは5回で終わるか、新たに書き換えられるかという問題です。
私の実験で4回中1回書き換えが行われませんでした。詳しい方、ご教授お願いいたします。
0643デフォルトの名無しさん2016/01/27(水) 17:06:25.62ID:peQY74Nr
>>642
VBAでのドキュメントが見つからないが
Forの終了条件の変数ははじめに評価されたあと再評価されないはず
つまりその例ではcntを書き換えてもnは1から5までしかループしないはず
試してもそうなってるけど、そうならないようなら環境とそのコード教えてくれ
0644デフォルトの名無しさん2016/01/27(水) 21:23:26.05ID:Tz0t5sQ9
>>643
怪しかったので、cntを先に求めるよう修正しました。勘違いがあったかもしれません。
再評価をしないということがわかり勉強になりました。ありがとうございます。
0645デフォルトの名無しさん2016/01/27(水) 21:59:35.79ID:i9TI+OhT
再評価しないから安心して
For i = LBound(x) To UBound(x)
って書けるという面もある。
0646デフォルトの名無しさん2016/01/27(水) 23:03:39.45ID:8GEb3XG2
いやいや、終了条件をループの中で変えたいときはDo Loopを使うんだってばよ・・・
0647デフォルトの名無しさん2016/01/28(木) 00:16:58.40ID:w3bB+ovg
まぁ挙動を知っておくのは大事かも知れないけど、
実際使うかどうかはまた別だわな
0648デフォルトの名無しさん2016/01/28(木) 20:19:00.28ID:l8d43dgO
i = UBound(arr)
For i = 1 to i
Next

みたいにリサイクルしちゃう事はよくある。
0649デフォルトの名無しさん2016/01/28(木) 20:55:34.37ID:87VXcHuk
>>648
たまにあるならまだしもよくあるなら向いてない
特にループ変数に i とか使うのはまだわからんでもないが
> i = UBound(arr)
とか書く奴は単なるバカ
0650デフォルトの名無しさん2016/01/28(木) 21:00:56.80ID:YELEWwrc
i = UBound(arr) To 0 Step -1
はたまにやるけどな
0651デフォルトの名無しさん2016/01/28(木) 21:22:27.24ID:l8d43dgO
>>649
VBAは変数を宣言するともれなく初期化がついてくるから
これを抑制する為に可読性を損なわない様に工夫しつつリサイクルというのは割と普通だと思うんだけどな。

あとそれなりにVBAをいじってきて何か自負が芽生えてきた時期なんだとは思うけど
非常に限定された例でバカだの向いてないだの言うのは止めた方がいいぞ。
0652デフォルトの名無しさん2016/01/28(木) 21:22:55.28ID:9fWHkl7R
basicなんだから
メモリとか考えずにどういう仕様か注釈なくても
わかるように書け
i = UBound(arr) To LBound(arr) Step -1
と徹底してたら
i = UBound(arr) To 0 Step -1
が特別だと区別がつく
0653デフォルトの名無しさん2016/01/28(木) 21:27:03.38ID:NmcV3G4I
>>648
これって何かいいことあるの?何か悪いことあるの?>>651
0654デフォルトの名無しさん2016/01/28(木) 21:28:24.36ID:Px8oTJsB
basicでなければわからんように書いてもいいのか?と問いただしたい気持ち
0655デフォルトの名無しさん2016/01/28(木) 21:41:49.39ID:Og0hCXDt
VBAならたぶん正常に動く
他の言語だとループの終了値が再評価されてループ回数がおかしくなる場合があるし、
それを逆手に取るようなコードをわざと書く場合もある
言語仕様をいちいち確認しなきゃならんようなコードは悪手かなあ
0656デフォルトの名無しさん2016/01/28(木) 21:58:29.74ID:BRaPySJX
>>653
良いことなんて特に無い
だって普通に
For i = 1 To UBound(arr)
って書いたほうが読みやすいし行数も少ない
0657デフォルトの名無しさん2016/01/28(木) 22:11:22.26ID:w3bB+ovg
何かVB6じゃUsingが使えないから
With New とかやるって旧VBスレで言ってたのを思い出した
0658デフォルトの名無しさん2016/01/28(木) 22:36:03.92ID:zD2EcWsW
>>651
> VBAは変数を宣言するともれなく初期化がついてくるから
> これを抑制する為
抑制する理由書いてみ
君のアホさがわかると思う

> 非常に限定された例で
限定されてると思ってる時点で何も理解してないことが良くわかる w
0659デフォルトの名無しさん2016/01/28(木) 23:00:29.67ID:D0vEBF/4
すいません、
2つセルのアドレスを取得したのですが、
そこまで何列離れているかが知りたいのですが、
どうやって求めれば良いでしょうか?
0660デフォルトの名無しさん2016/01/28(木) 23:25:11.76ID:BRaPySJX
>>659
その二つのセルのColumnを引き算したら分かるんでないの?
0661デフォルトの名無しさん2016/01/28(木) 23:27:32.34ID:D0vEBF/4
>>660
ありがとうございます。
0662デフォルトの名無しさん2016/01/28(木) 23:32:05.18ID:YELEWwrc
まあ LBound も UBound は十分速いから気にする必要はもともとないけどな
0663デフォルトの名無しさん2016/01/28(木) 23:33:03.80ID:YELEWwrc
誤 LBound も UBound は
正 LBound も UBound も
0664デフォルトの名無しさん2016/01/29(金) 00:42:17.43ID:/cWmSx8U
そもそもVBAでは宣言と同時に代入するような構文はないし
宣言時の初期化を抑制する構文もないから
宣言と同時に変数を初期化するのを抑制なんてできないわけだが

まあ変数の数を減らす事によってその分のメモリと初期化時間を節約できるのは確かかもしれんが
それを当たり前にやらないとダメなような環境なら、VBA使うのがそもそも間違ってる
巨大な配列ならまだしも、可読性落としてまでやるような事じゃない
0665デフォルトの名無しさん2016/01/29(金) 00:47:48.27ID:/cWmSx8U
ああ
For i = 1 to i
なんてコード書いて可読性が落ちてないとか言う主張してるのか
俺とは完全に別次元の人だわ
俺の意見も、このスレのほとんどの人の意見も忘れてくれていいんじゃない
0666デフォルトの名無しさん2016/01/29(金) 00:52:17.65ID:u6PJbYuv
そもそもループカウンタ変数なんて使うのが時代遅れ
0667デフォルトの名無しさん2016/01/29(金) 00:57:19.20ID:mcgCrfPK
えっ
それ以外に効率的にやる方法あんの?
0668デフォルトの名無しさん2016/01/29(金) 01:38:47.60ID:u6PJbYuv
for each
0669デフォルトの名無しさん2016/01/29(金) 01:52:49.80ID:DJFadGs/
他の言語ではFor Each的なループが主流になってるが
VBAではその存在を知らない人さえいるんじゃないかな
0670デフォルトの名無しさん2016/01/29(金) 02:08:08.30ID:EuNL8AIn
はてさてFor EachはVBAではご存知の通り配列では使えない。

ループの対象がRangeとかであれば有効だろうけど、配列の中をガラガラと回す機会も少なくは無いだろう。
そうしたとき、配列の代わりにCollectionやScripting Dictionaryを使ってまでFor Eachを使うことによって
何の恩恵が受けられるのだろうか?

そもそもそれを言ってしまうのであればVBA自体が時代遅れの言語な訳だから
それに合わせて使い分けなければならないんじゃないかな。
■ このスレッドは過去ログ倉庫に格納されています