トップページ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/
0322デフォルトの名無しさん2016/01/09(土) 20:56:12.50ID:1IbXuGB2
>>321
文字列とかコメントとかまで考えると…
0323デフォルトの名無しさん2016/01/09(土) 22:01:41.40ID:sD5C6F8w
exportしてトークンに分解して全置換してimportし直すマクロを組むとか
VBAのエスケープやコメント処理って比較的楽な気がするし
既にそういうのありそうだけど
0324デフォルトの名無しさん2016/01/09(土) 22:02:50.59ID:h3R10OzO
そのクーポンってなんですか?
割引してくれるの?
0325デフォルトの名無しさん2016/01/09(土) 22:03:52.65ID:h3R10OzO
このExcelにもともとついてる開発エディタにそんな機能はついてないの?
0326デフォルトの名無しさん2016/01/09(土) 22:07:18.41ID:sD5C6F8w
そうVBAソースを字句解析するって意味
自分で書けば100%割引でお得だよ
03273122016/01/09(土) 22:16:44.24ID:CpCNnIMM
配列のLBoundを変更する機能はVBAでやるのはやめて、メモリを直接弄ることにしました。
お騒がせしましたがうまくいったみたいです。
0328デフォルトの名無しさん2016/01/09(土) 22:22:59.10ID:sD5C6F8w
つーかeclipseプラグインとかにVBA用のがあれば何も作らずに済むんじゃないの
探してみなよ
0329デフォルトの名無しさん2016/01/09(土) 22:29:04.87ID:1IbXuGB2
>>323
コメントが「グローバル変数や、Public Subの名前」の説明だったり、文字列を Eval( ) に渡してるとか…
変換しなきゃいいって訳でもなかったりするし
0330デフォルトの名無しさん2016/01/09(土) 22:32:15.76ID:h3R10OzO
eclipseプラグインにVBAはございますか?
なければ探してもしかたがないもんな。
Do Until 見つかる 〜 Loop の無限ループに入ってしまう。
0331デフォルトの名無しさん2016/01/09(土) 22:36:03.89ID:sD5C6F8w
>>329
コメントやEvalがあったら置換した上で警告でも出せばいいんだし
こういう場合どう処理するの?なんて本人にしか判らんこと気にしても仕方ない
0332デフォルトの名無しさん2016/01/09(土) 22:42:38.50ID:enMYG2pF
途中で仕様変更しちゃいけないというのがよく分かるな。
0333デフォルトの名無しさん2016/01/09(土) 22:43:54.04ID:sD5C6F8w
つーか適当なエディタで単語で全置換でいいんじゃないの
それで大きな問題が起きるとは思えないし
0334デフォルトの名無しさん2016/01/10(日) 00:31:35.36ID:hZikTLMs
忘れたけどvbaのプラグインでそういうのできるのあったはず。
てか、vba編集するのにeclipse立ちあげるとかキチガイにもほどがある
0335デフォルトの名無しさん2016/01/10(日) 10:18:26.27ID:MoheO9k0
つWinMerge
0336デフォルトの名無しさん2016/01/10(日) 13:09:04.97ID:2foMUWB4
>>333
> それで大きな問題が起きるとは思えないし
よほど小さなソフトしか組んだことないか、ぬるい仕事しかしたことないんだろうな…
うらやましい
0337デフォルトの名無しさん2016/01/10(日) 13:29:33.20ID:vlDN8AGa
VBAでデカいきついシステム組むのがまちがってるけどな
0338デフォルトの名無しさん2016/01/10(日) 13:34:42.61ID:AcnVMiQc
そもそも仕事の話に持ってくのがおかしいよな
0339デフォルトの名無しさん2016/01/10(日) 15:06:14.04ID:NoYOPUfs
え?おまえらVBA書くのに他のソフトで書いてるの?
普通にExcelで書くよな?背景とか文字色も一応変えられるし

ちなみにおまえらの配色構成どうしてる?俺はこんな感じの配色にしてるんだけど、目疲れに良いおすすめあったら教えて
http://uproda.2ch-library.com/913125j4t/lib913125.jpg
0340デフォルトの名無しさん2016/01/10(日) 15:21:55.12ID:VlwFWjx7
仕事じゃなけりゃVBAなんか使わねぇよ
0341デフォルトの名無しさん2016/01/10(日) 17:00:44.21ID:NoYOPUfs
むしろプライベートでしかVBA使ってない
0342デフォルトの名無しさん2016/01/10(日) 17:51:41.19ID:wKvoM5NG
おれはVBAしか使えない
他言語どころか
Excelのピボットテーブルも入力規則も使ったことが無い
それどころかワークシート関数すら覚束ない
でもVBAだけで給料もらえるから問題なし
0343デフォルトの名無しさん2016/01/10(日) 18:07:03.32ID:W+alusTR
まぁ本人がその給料で満足してるならそれでいいんじゃないだろうか。

幾ら貰ってるかは知らないけど。
0344デフォルトの名無しさん2016/01/10(日) 18:43:22.48ID:KeJgEHCD
プログラマー気取りで変なプログラミング講釈する人うざいです
0345デフォルトの名無しさん2016/01/10(日) 21:31:31.28ID:NoYOPUfs
プログラマー気取りっていうか、VBAをプログラムというと変にファビョる人いるよね
「VBAがプログラムwwあれをプログラムと呼んだら駄目っしょ笑」みたいな人たまにいる
0346デフォルトの名無しさん2016/01/10(日) 22:07:49.93ID:fKRpFEpV
まあVBAは便利だけど子供のおもちゃみたいに思われているからね
マイクロソフトは勿体ないよな
ビジネスに発展させるには素人にスゲーと思わせてナンボなのに、
新卒の研修にちょっくら使わせてみるかみたいなイメージになってしまっている
0347デフォルトの名無しさん2016/01/10(日) 22:08:12.25ID:xRSSZTjv
>>342
Excelは入出力のインタフェースに過ぎないっていう使い方かな?

>>345
一種のコンプレックスのあらわれなんだろうか。
VBAは言語としてダメな点は多いけどね。
0348デフォルトの名無しさん2016/01/10(日) 22:55:42.57ID:agiL7Ile
For Application ってだけあって付属言語だからね
エクセルがあればすごいんです(キリ って感じ?

OS上で直接動く言語から見たら頭ポンポンしたくなるだろ
0349デフォルトの名無しさん2016/01/10(日) 23:08:46.92ID:+vbjBZah
Excelの企業シェアにあぐらをかいてる言語だという認識は間違っていないと思う
0350デフォルトの名無しさん2016/01/10(日) 23:12:22.88ID:+vbjBZah
ExcelはVBAも含めて基本PC1台で使うもの その点を忘れてはいけない
0351デフォルトの名無しさん2016/01/10(日) 23:32:51.77ID:nfQKqPqr
>>350
>>344
0352デフォルトの名無しさん2016/01/11(月) 01:59:22.45ID:AWAF7CGx
目下の疑念はOS上で動くものを「直接」と表現していいのかどうかという事だ
0353デフォルトの名無しさん2016/01/11(月) 07:21:46.06ID:gsKg8O84
VBAのダメ出ししてる人ってIDispatch経由で動かした場合どういう反応になるんだ
出来ること全く変わらんのだが
0354初心者A2016/01/11(月) 08:26:22.84ID:HLjXNd8w
'ワークシートの存在確認、削除、追加をするプログラム
Option Explicit
Const sheet3name = プロット(■前後のダブルクオテーション略!)

Sub Macro1()
Dim ws As Worksheet
Dim chart1 As Worksheet

Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name = sheet3name Then
If Worksheets.Count > 1 Then
ws.Delete
Else
GoTo Label1
End If
End If
Next
Application.DisplayAlerts = True

Set chart1 = Worksheets.Add
ActiveSheet.Name = sheet3name

Label1:
End Sub
0355初心者A2016/01/11(月) 08:28:53.39ID:HLjXNd8w
ワークシートの存在確認、削除、追加をするプログラム
を作りました。
http://ww10.puny.jp/uploader/download/1452467710.zip
パスワード:abc

■やりたいこと
ワークシートの存在確認、削除、追加をするプログラムを
グラフシートの存在確認、削除、追加をするプログラムに修正したい。
For〜Nextの部分をどう、修正したらいいか、ご教授お願い致します。

修正前(ワークシート)
Dim ws As Worksheet
Dim chart1 As Worksheet
Set chart1 = Worksheets.Add
ActiveSheet.Name = sheet3name
修正後(グラフシート)
Dim ws As Chart
Dim chart1 As Chart
Set chart1 = Charts.Add
ActiveChart.Name = sheet3name 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0356初心者A2016/01/11(月) 10:13:11.60ID:HLjXNd8w
難しく考えすぎました。自己解決しました。

'グラフシートの存在確認、削除、追加をするプログラム
Option Explicit
Const sheet3name = プロット(■前後のダブルクオテーション略!)

Sub Macro1()
Dim ws As Chart
Dim chart1 As Chart

Application.DisplayAlerts = False
For Each ws In Charts
If ws.Name = sheet3name Then
ws.Delete
End If
Next
Application.DisplayAlerts = True

Set chart1 = Charts.Add
ActiveChart.Name = sheet3name
End Sub
0357デフォルトの名無しさん2016/01/11(月) 11:19:37.13ID:eiYfk44d
>>353
素のままのVBAじゃなくて、そういう弄らなきゃいけないところをマイナスポイントにするかどうかで変わってくるな。
むしろプラスポイントと見なす人もいるかも知れんが。
自分は不満点いろいろある。
0358デフォルトの名無しさん2016/01/11(月) 14:09:09.67ID:np4MR6nO
質問お願いいたします。
ノートPCを閉じてスリープ状態になってしまってもvbaプログラムが止まらないようにする方法はありますか。移動や別の仕事で常にPCを開いとくことができません。よろしくお願いします。
0359デフォルトの名無しさん2016/01/11(月) 14:11:54.26ID:6idxIuPk
これってなに?最強の開発環境くるの?
http://blogs.msdn.com/b/ayatokura/archive/2016/01/09/ga.aspx
0360デフォルトの名無しさん2016/01/11(月) 14:32:56.61ID:grtS6L7L
>>359
そんな過去ネタを今更。
ハッキリ言って糞。使いたいとも思わない。
0361デフォルトの名無しさん2016/01/11(月) 14:38:18.74ID:qDZy1U6Z
>>358
スリープって眠るってことだよ
閉じても眠らない設定にしなさい画面だけ消すとか
0362デフォルトの名無しさん2016/01/11(月) 14:49:09.64ID:db4WHs28
エクセル2016からリレーションシップ機能追加ってマジですか?
0363デフォルトの名無しさん2016/01/11(月) 15:21:48.39ID:Fkm8B5dx
>>358
電源オプション→カバーを閉じたときの動作の選択→バッテリー駆動/カバーを閉じた時の動作を「何もしない」に設定すれば
パソコンを閉じてもプログラムは動き続ける
0364デフォルトの名無しさん2016/01/11(月) 15:43:06.72ID:grtS6L7L
>>362
元々、MSQUERYではやれていたが、実に古臭いUIと仕組みだったからねぇ。
どうなることやら。Accessを殺しに来るのかどうかが注目だがね。
0365デフォルトの名無しさん2016/01/11(月) 16:02:56.77ID:Fkm8B5dx
自社製品を殺してどうする
0366デフォルトの名無しさん2016/01/11(月) 16:17:41.70ID:grtS6L7L
>>365
そもそも、前からAccessについてはその存在について、実際に無くすっていう議論は
出てるんだよ。ユーザの間でも有名な話だぞ。2013が出た時はホッとしたがあの直前
当たり、下手するとそろそろAccessはユーザ数も減ってきており、Excelに統合されて
消えるんじゃないかってね。

この手のアプリってAccessしか実質的に存在しないし、Excelよりもとっつきにくいという
こともあってね。既にテーブル機能は実装されているし、ここにクエリーが本格的に実装
となると、Accessのポジションは危うくなる。
0367デフォルトの名無しさん2016/01/11(月) 17:00:49.67ID:d/8QAidv
accessでできることをエクセルでやろうと思わないけど、一般ユーザーは違うのかな
むしろこれからはビッグデータの時代なので、accessは逆に更に改良されていかないのかな
0368デフォルトの名無しさん2016/01/11(月) 17:23:46.95ID:np4MR6nO
>>363>>361
>カバーを閉じた時の動作を「何もしない」に設定
ありがとうございます。
こちらは、プログラムは動きつづけ、バッテリーも若干節約になるという認識でかまいませんでしょうか?
0369デフォルトの名無しさん2016/01/11(月) 19:03:39.63ID:U/eWhfN7
簡易的なデータベースのシートを提供してくれりゃいいのに。

そうすりゃ無駄に空列とか入れるヤツとか排除できる。
0370デフォルトの名無しさん2016/01/11(月) 19:43:34.53ID:Fkm8B5dx
>>368
基本は液晶が消えたままになるだけだから、そんなに節約にはならない
あと機種によっては閉じたまま計算を続けさせると熱暴走するんで、持ち歩くときはケースに入れず通気に注意すること
0371デフォルトの名無しさん2016/01/11(月) 21:16:15.69ID:N366RwDJ
まー、以前は.Net化して欲しいと思ってたけど、今はどうでもいいや。
.Netで使いたければ外部から触ればいいだけの話だからな。

いつまでもこのままって訳にも行かないだろうけど、そもそもモジュールをフォルダ階層化して扱えない
VBAは
クラスとか沢山作って管理するのに向いてない。
0372デフォルトの名無しさん2016/01/11(月) 23:15:43.34ID:JhD6lfDm
>>320
前後のスペースごと置換すればいいんじゃね
0373デフォルトの名無しさん2016/01/11(月) 23:41:08.19ID:6idxIuPk
ちょっと質問です

例えばA1セルとB1セルの値を抜き出し、C1に (A1の値)〜(B1の値) と表示したいときは

Range("C1") = Range("A1").Value & "〜" & Range("B1").Value

となりますよね。
ここでA1とB1の値が必ず小数点第一のくらいで表示したい時はどうすればいいのでしょうか。
例えばA1とB1が下記の値の場合は
A1=40.123
B1=20

上のVBAだとC1には「40.123〜20」と表示されます。これを「40.1〜20.0」と表示するようにしたいんです。
そういう関数ありますか?
0374デフォルトの名無しさん2016/01/12(火) 00:16:04.17ID:w+wRH2JN
Private Sub hoge()

Range("a1").Value = 40.123
Range("b1").Value = 20.1
Range("c1").Value = Range("A1").Value & "〜" & Range("B1").Value

Range("c2").Value = Format(Range("A1").Value, "###.0") & "〜" & Format(Range("B1").Value, "###.0")

End Sub
0375デフォルトの名無しさん2016/01/12(火) 00:28:30.25ID:1Tg2WctI
>>374
おお
なるほど、そうやるんですね。ありがとうー
0376デフォルトの名無しさん2016/01/12(火) 06:54:03.50ID:ZPc78C3i
>>372
A=グローバル変数
って書かれてるともうダメだし
0377デフォルトの名無しさん2016/01/12(火) 07:49:37.59ID:/ZqCERvo
>>376
VBE上では必ず前後に半角スペースが入ると思うが?
0378デフォルトの名無しさん2016/01/12(火) 08:46:16.41ID:ZXe+fB4P
>>367
俺としては消えてほしくないんだけれどねww

ただ、扱えるカラムや行数増やしたのも、その布石。ただスピードがなwww 現時点
では話にならないし、データベース関数も全く充実していない。

ただ随分前からAccess消えるかもって話は出てるね。
0379デフォルトの名無しさん2016/01/12(火) 09:47:13.68ID:MvXD/tOc
>>377
直後がコンマやカッコだとスペースが入らない
0380デフォルトの名無しさん2016/01/12(火) 10:12:53.76ID:/ZqCERvo
>>379
なるほど。
両側スペースと . と , と ( を個別にやればいいかな。
プレフィクス・ポストフィクスなんてないよね?
0381デフォルトの名無しさん2016/01/12(火) 10:34:26.94ID:+GqIZBzh
もういっその事
VBAのコードを変更(置換)する VBAコードを作っちゃえば?
0382デフォルトの名無しさん2016/01/12(火) 10:57:36.37ID:MvXD/tOc
エディタやワードにコピペして単語の置換機能を使った方が早い
0383デフォルトの名無しさん2016/01/12(火) 12:48:46.20ID:ZPc78C3i
>>377
行末には入らないし、>>379 の言うように , ( ) とかもダメ

>>380
そんなことするぐらいなら「完全に一致する単語だけ検索する」にチェック入れた方がいい
0384デフォルトの名無しさん2016/01/12(火) 12:53:56.70ID:ZPc78C3i
>>367
DBの機能が欲しいだけなら SQL-Server の Compact Edition, Express Edition, LocalDB とかでやればいい
Access って入力画面とか帳票をお手軽に作るツールでしょ
0385デフォルトの名無しさん2016/01/12(火) 14:03:34.59ID:kdR1XWYY
>>305
これ実行すると、v(1) => 1, v(2) => 2, v(3) => Nothingにならないんだ。
わかりづらい。
0386デフォルトの名無しさん2016/01/12(火) 14:33:05.97ID:1Tg2WctI
データベースならSQL+Excelで何とななるってきいた
0387デフォルトの名無しさん2016/01/12(火) 15:09:45.03ID:/ZqCERvo
>>383
ああ、「前後の空白」の"後"の方は行末の場合ダメってことか。失礼した。

>>385
うん、データをシフトする訳じゃなくて見かけ上のインデックスが変わるだけ。
だからデータをコピーしたり範囲を広げたり縮めたりするのは本来は不要な動作。
もうメモリを直接書き換えることにした。
0388デフォルトの名無しさん2016/01/12(火) 15:28:05.64ID:WkQGbLg9
非表示のシート数を数えるマクロは作れないですよね。
0389デフォルトの名無しさん2016/01/12(火) 15:50:17.33ID:FWKIiayM
for eachでworksheet参照してvisibleプロパティみればいい
0390デフォルトの名無しさん2016/01/12(火) 16:10:53.83ID:1Tg2WctI
>>38で勧められてたVBAの神様を今読み終わったんだけど、糞つまらなかった
Amazonのレビューもわりと高評価だが、VBAの参考書ならもっと他にいいのあるだろう
0391デフォルトの名無しさん2016/01/12(火) 17:56:50.78ID:wYSSDoUN
VBAの求人161件の平均最低月給223,100円
http://jobinjapan.jp/job-listing/keyword-vba.html
0392デフォルトの名無しさん2016/01/12(火) 19:36:12.43ID:/ZqCERvo
>>390
MsgBox ("こんにちは") の大間違いって何なん?
0393デフォルトの名無しさん2016/01/12(火) 23:53:13.87ID:iltzJQ7p
call忘れてる辺りかな
0394デフォルトの名無しさん2016/01/13(水) 00:08:28.28ID:NbxXZYkh
他の言語で言う hello world をただの挨拶として認識してるってことかと
0395デフォルトの名無しさん2016/01/13(水) 00:12:12.63ID:NbxXZYkh
んで、hello world をVBAでやるんだったら
 Worksheets("Sheet1").Range("A1").Value = "こんにちは"
まだこっちだ
0396デフォルトの名無しさん2016/01/13(水) 05:12:39.94ID:6j8B4A3/
>>395
EXCEL VBAでやるなら、な
他の言語でもhello worldなんて、MsgBoxで表示と大差ないけど

ちなみに間違いってのは
MsgBox (こんにちわ)
が間違ってるって話じゃないのか
0397初心者A2016/01/13(水) 06:27:10.38ID:hFbJh3ij
自分用に作成したVBAですが、アップします。

2点間距離の差(22).xls
パスワード:abc
http://ww10.puny.jp/uploader/download/1452633400.xls
そのうち削除します。

もっと、わかりやすくプロシージャを分けた方がいいんだろうけど。
素人が見様見真似で作成したものです。
アドバイスなどありましたら、コメント願います。
0398初心者A2016/01/13(水) 07:54:34.97ID:hFbJh3ij
全画面表示ボタンを押した後、印刷プレビューボタンを押すと
閉じるボタンが表示されないので、以下のように修正。

Sub 印刷プレビュー()
Application.DisplayFullScreen = False
ActiveWindow.Zoom = True
DoEvents
ActiveSheet.PrintPreview
End Sub
0399初心者A2016/01/13(水) 08:00:33.92ID:hFbJh3ij
ボタンを挿入するの箇所を修正
.Placement = xlMove
.PrintObject = False
を追加


With chart1.Buttons.Add(20, 50, 80, 25)
.OnAction = "全画面表示ON"
.Characters.Text = "全画面表示(ON)"
.Placement = xlMove
.PrintObject = False
End With

他のボタンも同様
0400初心者A2016/01/13(水) 08:31:29.89ID:hFbJh3ij
ちょっと修正
http://ww10.puny.jp/uploader/download/1452641324.zip
2点間距離の差(23).xls パスワード:abc
0401デフォルトの名無しさん2016/01/13(水) 13:48:54.18ID:2tOFPV9B
>>397
またお前か。
人に見てもらうようなコードを書こうとは思わないのかね。
0402デフォルトの名無しさん2016/01/13(水) 14:02:28.80ID:LYjGdwXl
>>400
ひとつの関数に詰め込みすぎ
もっと分割する
そして20行くらいに収めてforやifのネストは2つまでにする
変数も多すぎて見にくい
0403初心者A2016/01/13(水) 15:46:31.62ID:hFbJh3ij
>>402
>20行くらいに収めてforやifのネストは2つまでにする。
>変数も多すぎて見にくい

今後、心掛けてみます。
スクロールしないとプロシージャ全体が見れないのは、
たしかに見にくいですね。

ありがとうございます。
0404デフォルトの名無しさん2016/01/14(木) 04:33:01.66ID:fK8eMzuy
そんなこと気にしちゃダメ
画面を大きくすればいいんだから
0405デフォルトの名無しさん2016/01/14(木) 04:47:09.57ID:5jp4f0T2
関数は機能毎に分けるものであって行数で分けるもんじゃないぞ
関数名や付随するちょっとした説明を見れば中身を見なくても何する関数か分かるようにするのが美しい
0406デフォルトの名無しさん2016/01/14(木) 08:51:34.23ID:hDrEawni
>>403
プロシージャってのは、別に行数が多いから分けるってもんじゃないぞww

例えばループで何度も同じような大きめの処理をするのであるならば、それは
呼び出す形にして切り分けろって事だぞ。ループの中にダラダラと書いてある
と、それは見辛いってこと。

スクロールしないかどうかなんて問題じゃない。
0407デフォルトの名無しさん2016/01/14(木) 09:20:36.05ID:kariNJk1
行数は目安にはなる。
スクロールしなきゃ全体が見渡せないなんて、結局自分がつらい。
0408デフォルトの名無しさん2016/01/14(木) 10:23:19.25ID:lO54s+mO
行数はあくまで目安だからな
関数を分けるのは機能毎
機能=関数名にしてそれ以外のことはするな
同じ関数名になったらそれは関数を見直したほうがいい
同じようなことをやろうとしてるはず
そうすれば大体20行以内になる
ならないからって分割する必要はないぞ
0409デフォルトの名無しさん2016/01/14(木) 12:40:00.28ID:hPr0+y7s
行数か機能の目安になるわけねーだろw
なんつー嘘つくねんこいつww
0410デフォルトの名無しさん2016/01/14(木) 12:52:34.23ID:q8GDBYq3
巨大モニターを使えば行数多くてもスクロールしなくてよくないか?
0411デフォルトの名無しさん2016/01/14(木) 12:53:35.54ID:hDrEawni
>>410
11インチくらいのMBAで作業でもしてるんじゃね?
0412デフォルトの名無しさん2016/01/14(木) 13:04:14.50ID:q8GDBYq3
MBAとは?
0413デフォルトの名無しさん2016/01/14(木) 13:13:29.52ID:lO54s+mO
>>409
行数が機能の目安になるなんて言ってねーだろww
機能を絞れば行数が短くなるって言ってるんだよw
0414デフォルトの名無しさん2016/01/14(木) 13:23:17.24ID:QLA7f99b
>>412
たぶんマックブックエアーの略
0415デフォルトの名無しさん2016/01/14(木) 13:48:12.51ID:kariNJk1
まー作ってるものが違えば長い短いの基準は変わってくるだろうけど。
自分の場合は10行超えたら不満、30行超えたらリファクタリングを試みる。
ただし機能を外出しするためにPrivateなプロシージャを作ることは極力しない、という方針。
それをしたらただ分けてるだけだからね。
0416デフォルトの名無しさん2016/01/14(木) 13:51:57.39ID:q8GDBYq3
1つのSubの中が長くなって短くしようとするときに
そのSub内で繰り返しのコードが見つかったので
それをさらにそのSubから呼ばれるSub(サブSubと呼ぼう)にしたいとき
単にそのサブSubをPrivate Subにするしか方法はないですか?

理想はそのSubからしか呼ばれないからそのSubの内部にそのサブSubを置きたいのですが。
0417デフォルトの名無しさん2016/01/14(木) 14:15:35.60ID:hDrEawni
>>416
JavaScriptだとそういう書き方は無名関数ってのを使ってよくやるけれどね。
VBAで出来るのかね
0418デフォルトの名無しさん2016/01/14(木) 17:11:17.68ID:ZyMeHqvf
>>416
推奨はされてないけど こんなのはある

GoSub...Returnステートメント
http://officetanaka.net/excel/vba/statement/GoSubReturn.htm
0419デフォルトの名無しさん2016/01/14(木) 18:15:46.06ID:QLA7f99b
>>416
いっそのことモジュール単位で考えて、
ひとつのモジュールの内容をそのSubとサブSubだけにしちゃうとか

メインのSub以外全部Privateにしとけば
他のモジュールにあるSubからは呼べなく出来るじゃん
0420初心者A2016/01/14(木) 18:50:08.19ID:sGJ4yhp5
エクセルVBAの表示画面
解像度:1366px×768pxで46行表示可能なんで、
基本、40行以下ならいいかな。1つのプロシージャ

★2点間距離の差(24)
http://ww10.puny.jp/uploader/download/1452764372.xls
Password:abc
そのうち、削除します。
個人用に作成したものなんで、コードはまとまってません。
0421デフォルトの名無しさん2016/01/14(木) 20:14:23.77ID:os+tW4sX
>>416
そう言うことができる言語はあるけど VBA では無理
そもそもそんな機能をつけるぐらいならその前に改善してほしいところは山ほどあるだろ
我慢して付き合っていくしかない
■ このスレッドは過去ログ倉庫に格納されています