トップページtech
1001コメント350KB

Excel VBA 質問スレ Part32

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2013/10/07(月) 22:19:55.86
ExcelのVBAに関する質問スレです

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Applications』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

前スレ:Excel VBA 質問スレ Part31
http://toro.2ch.net/test/read.cgi/tech/1376371376/

関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0951デフォルトの名無しさん2014/06/13(金) 14:29:39.15ID:QETwEf+A
>>949-950
本スレとマルチだし、向こうでかなり暴れてたから
もうこっちには来ないと思う。
0952デフォルトの名無しさん2014/06/14(土) 13:12:04.56ID:i5Ueiwm/
プリンターの無い家で印刷に関するマクロを組みたいのですが
印刷の代わりに使える分かりやすい言葉はないですか?
0953デフォルトの名無しさん2014/06/14(土) 14:15:23.09ID:NIfTAMoH
>>952
バーチャルプリント
0954デフォルトの名無しさん2014/06/14(土) 14:54:03.19ID:i5Ueiwm/
>>953
如何にもな言葉してますね…
ありがとうございます助かりました!
0955デフォルトの名無しさん2014/06/24(火) 08:53:44.32ID:A58N03NN
セルに「hoge hoge、huga huga」みたいに入力されていて、
先頭の文字と「、」の後の一文字だけ大文字にすることってできるかな?

PROPERを使うと、Hoge Hoge、Huga Hugaみたいになるし、
UPPERは特定の文字だけ変換する方法わからんし、
できれば関数で簡単に処理したいんですが、無理かな?
0956デフォルトの名無しさん2014/06/24(火) 09:44:48.41ID:qWqYgHU9
>>955
普通に「、」でSplitして、ループ内で1文字目だけ大文字に変換して、Joinで再連結すればいいんじゃね?
関数にしたいなら、それを関数として定義すれば良いだけのことだし

1文字目だけ大文字にする方法はいくつかあるが
Midの関数ではなくステートメントの方を使うのが簡単かもな
0957デフォルトの名無しさん2014/06/24(火) 11:03:40.25ID:A58N03NN
>>956
そっかー。
簡単にできる関数が用意されてないかな?と思ったんだけど、無いんだね。

わざわざVBA作るほど沢山あるわけじゃないから、手で治すことにするよ。
アドバイスごち
0958デフォルトの名無しさん2014/06/28(土) 22:46:48.16ID:SUZfbKz3
規定回数をFor文で回したい時って
EXCELは0行0列がないから1スタートにしてるんだけど
For文は変数を0と1のどっちでスタートさせてる?
0959デフォルトの名無しさん2014/06/28(土) 23:05:08.46ID:++0JMPiR
ケースバイケース
FORループ内でアクセスするオブジェクトに依存するんじゃね
オブジェクトに依存しない時は 1スタートの方が分かりやすいと思うが
0960デフォルトの名無しさん2014/06/28(土) 23:08:57.04ID:SUZfbKz3
>>959
さんくす
セルを参照したり、書きこむ場合は1スタートの方が便利だよぁ
C言語では0スタートが当たり前だから、FORの性質間違え易いんだよね
0961デフォルトの名無しさん2014/06/28(土) 23:19:53.58ID:vnVg5isx
Forの開始値なんて、言語に関係なく0でも1でも100でも-1でもなんでもいい
ケースバイケースで処理内容に合わせて適切な値を選ぶだけ
Forの性質とか意味不明
0962デフォルトの名無しさん2014/06/28(土) 23:19:55.85ID:++0JMPiR
C言語だろうと VBAだろうと アクセスするオブジェクトに依存する事は変わらないと思うが

0スタートになれてるなら
オブジェクトに依存しない時も 0スタートの方が混乱しないと思うぞ
0963デフォルトの名無しさん2014/06/28(土) 23:26:55.43ID:vnVg5isx
セル操作の時はFor Each
0964デフォルトの名無しさん2014/06/28(土) 23:29:21.75ID:xYrnaOxY
ケースバイケースとかやめて統一してくれよ
0965デフォルトの名無しさん2014/06/29(日) 00:10:17.76ID:r3ERVTwD
>>964
じゃあお前はお前のルールで統一しとけ
0966デフォルトの名無しさん2014/06/29(日) 00:14:35.94ID:obj95/HS
Forの範囲なんてどうやって統一すんだよ
0967デフォルトの名無しさん2014/06/29(日) 00:18:23.91ID:CZI2SpAG
慣れていない言語だと、ループを抜けた後、条件に対して変数がどう変わるか不安で仕方ない
0968デフォルトの名無しさん2014/06/29(日) 00:24:34.10ID:c8G3vdag
0スタートに統一したいならこうするwwwwww
1スタートに統一するなら他言語を wwwwww

'0スタート
'(A1:A10まてイミディエイトへ表示)
For I = 0 To 9
Debug.Print Cells(I + 1, "A")
Next
0969デフォルトの名無しさん2014/06/29(日) 00:36:45.71ID:7WQEgw+o
+1の計算コストwwww
0970デフォルトの名無しさん2014/06/29(日) 00:46:16.93ID:c8G3vdag
統一する為なら コストや 分かりやすさ なんて
関係ないねwwwww
0971デフォルトの名無しさん2014/06/29(日) 01:39:14.46ID:obj95/HS
アホか
こんなのはどうやって統一すんだよ

For i = -2.73 To 6.58 Step 0.52

いちいち0スタート増分1に書き直してたらコーディングの手間も増えるしバグの元だろ
0972デフォルトの名無しさん2014/06/29(日) 01:54:33.08ID:ojuPNtQE
>>971
何の目的でそんなバカコード書いてんだよw
0973デフォルトの名無しさん2014/06/29(日) 02:10:25.03ID:c8G3vdag
>>971
遊んでるならいいけどwwwww

マジレスならアホ

ID:xYrnaOxY のはただの煽りだから
0974デフォルトの名無しさん2014/06/29(日) 05:01:33.62ID:r3ERVTwD
>>971
増分は問題にしてないからな
開始値を1しか認めない教、または、0しか認めない教の人がいるだけ
ループ前にオフセット計算してループ内でオフセット足せばできる
0975デフォルトの名無しさん2014/06/29(日) 07:06:48.40ID:7WQEgw+o
>>971
それ本当に0.52ずつ増える?w
0976デフォルトの名無しさん2014/06/29(日) 07:44:51.13ID:r3ERVTwD
>>975
iの型による
0977デフォルトの名無しさん2014/06/29(日) 10:40:18.41ID:Pc4scBT7
荒れてるな
0978デフォルトの名無しさん2014/06/29(日) 10:48:45.73ID:37p3Fs6h
初期値とカウントアップする値が
特殊な値の場合は外出しするか
ループの中の計算式に入れるな、
自分なら。
0979デフォルトの名無しさん2014/06/29(日) 11:09:04.04ID:37p3Fs6h
Cの場合はfor(i=0;i<nArray;i++)で小なり
条件で書くと無駄な計算式が入って
なくて読みやすい。

Vbaの場合は馴染まないな。
0980デフォルトの名無しさん2014/06/29(日) 12:22:28.79ID:d4tnsDO5
>>958
> 規定回数をFor文で回したい時って

VBA は、For I = ... To 10 で 10 まで回るから、1 スタートの方がいいと思う。
10回回すのに For I = 0 To 9 だと、ちょっと分かりにくいかと。
0981デフォルトの名無しさん2014/06/29(日) 14:25:54.82ID:nMuEys5f
ゼロスタートじゃないと余りの計算が厄介なんだな
0982デフォルトの名無しさん2014/06/29(日) 15:16:49.14ID:U5JNCkXQ
Excelに限ってはセルの開始が1からだからなあ
配列もArray(10)で宣言してインデックス0は使わないとかしちゃう

VB.NETのβ版でC系と同じにしようとして
Array(10)で宣言したら(0)〜(9)の要素10になる仕様にしたら
世界中のVB6プログラマからクレームがきて
Array(10)で0から10の要素11個という謎仕様継続になったそうな
0983デフォルトの名無しさん2014/06/29(日) 16:40:26.72ID:tO69Jiz2
最近 Google Apps の Spreadsheet の Google Apps Script を勉強し始めたのですが
こちらも 1, 1 から開始ですよ
0984デフォルトの名無しさん2014/06/29(日) 21:25:17.92ID:ojuPNtQE
ループカウンタはあくまで単なるカウンタ。ループの回数が分かればいい。
それ以上の意味を持たせようとするのは、変数を使いまわすようなもんだよ。
あまりいい習慣じゃないね。
0985デフォルトの名無しさん2014/06/29(日) 21:35:24.84ID:brs7RvOR
気軽に聞いたんだけど、荒らしてしまったようで申し訳ない
答えてくれた人ありがとう
EXCEL VBAきちんと勉強せずにC言語の知識を引き出しつつ書いてるから、ここの人の宣言方法が気になったんだけど、十人十色みたいだな
きちんと本読んで学習します
0986デフォルトの名無しさん2014/06/29(日) 21:53:09.64ID:r3ERVTwD
>>984
ループカウンタを使わないループについてどう思ってる?
Forで使う変数はループカウンタでしか使えないと思ってる?
0987デフォルトの名無しさん2014/06/29(日) 21:54:16.59ID:r3ERVTwD
>>985
大丈夫だ。どうせみんな、単なる暇つぶしだから
0988デフォルトの名無しさん2014/06/29(日) 22:00:41.18ID:ojuPNtQE
>>986
For Each の事?カウンタ使わないですむなら、その方がいいと思ってるけど?
For文で単なるカウンタ以外の用途に使うのは、あまりいい習慣じゃない。
というのが俺のスタンス。
0989デフォルトの名無しさん2014/06/29(日) 22:26:05.04ID:TEKyyc0a
0990デフォルトの名無しさん2014/06/29(日) 23:34:53.93ID:/f6OgjXt
for i = 1 to 10 を抜けた後、iは11になってるんだっけ
0991デフォルトの名無しさん2014/06/30(月) 00:09:32.16ID:kvKysRCz
>>990
なる
勘違いして酷い目にあった
0992デフォルトの名無しさん2014/06/30(月) 00:46:04.55ID:7oaDBF3M
やっぱそうだよね、俺も酷い目あった
0993デフォルトの名無しさん2014/06/30(月) 00:46:21.14ID:GUDWX1C/
うめ
0994デフォルトの名無しさん2014/06/30(月) 00:58:56.95ID:20WNNlQl
俺は逆にそれで
ループ終了で抜けたか Exit For で抜けたか判断してる
0995デフォルトの名無しさん2014/06/30(月) 01:07:12.44ID:iijp9ipF
>>990
ここ2chではレス番号はfor文を1から1000で回してるため
1000番目の書き込みの後、自動的に1001番のレスでレス終了のメッセージを表示してる。
0996デフォルトの名無しさん2014/06/30(月) 01:51:06.95ID:DNhhFBBa
>>994
Exit For の直前で i = 11 ってやってしまう可能性があるのでおすすめできない
ループに終了条件がある時はWhileとか使った方が安全
0997デフォルトの名無しさん2014/06/30(月) 01:54:50.86ID:BzHZeElB
sx
0998デフォルトの名無しさん2014/06/30(月) 02:07:33.39ID:f17tdAtr
>>996
そんなこと言い出したらWhileの直前で終了条件いじることだって有り得るじゃん。

For Next でExit Forで抜け出すか正常にループが終了したかを
カウンタの値で判別するという処理を書いてるのに
Exit For の前でカウンタの値を変更するような馬鹿げたコードを書く奴は
そもそもプログラミングに向いてない。
0999デフォルトの名無しさん2014/06/30(月) 02:17:18.34ID:20WNNlQl
>>996
その可能性はWhileでも同じ
1000デフォルトの名無しさん2014/06/30(月) 02:25:18.53ID:zp+CalxP
ループ終了後のカウンタ値はドキュメントに明示されてない(保証されてない)から、いつ仕様が変わるかわからない
処理系によっても異なるので、思い込みバグの元になる

試行錯誤で裏技テクニックを発見するのはいいけど、そういうのは大々的に使うべきじゃない
この危険性が理解できない人は、それこそプログラミングに向いてない
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。