Excel VBA 質問スレ Part39 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/11/27(金) 20:36:45.35ID:9HV+ag/s___
___ /____ヽ ____
/____\ | |´・ω・`| | /___ヽ
.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文字列とかコメントとかまで考えると…
0323デフォルトの名無しさん
2016/01/09(土) 22:01:41.40ID:sD5C6F8wVBAのエスケープやコメント処理って比較的楽な気がするし
既にそういうのありそうだけど
0324デフォルトの名無しさん
2016/01/09(土) 22:02:50.59ID:h3R10OzO割引してくれるの?
0325デフォルトの名無しさん
2016/01/09(土) 22:03:52.65ID:h3R10OzO0326デフォルトの名無しさん
2016/01/09(土) 22:07:18.41ID:sD5C6F8w自分で書けば100%割引でお得だよ
0327312
2016/01/09(土) 22:16:44.24ID:CpCNnIMMお騒がせしましたがうまくいったみたいです。
0328デフォルトの名無しさん
2016/01/09(土) 22:22:59.10ID:sD5C6F8w探してみなよ
0329デフォルトの名無しさん
2016/01/09(土) 22:29:04.87ID:1IbXuGB2コメントが「グローバル変数や、Public Subの名前」の説明だったり、文字列を Eval( ) に渡してるとか…
変換しなきゃいいって訳でもなかったりするし
0330デフォルトの名無しさん
2016/01/09(土) 22:32:15.76ID:h3R10OzOなければ探してもしかたがないもんな。
Do Until 見つかる 〜 Loop の無限ループに入ってしまう。
0331デフォルトの名無しさん
2016/01/09(土) 22:36:03.89ID:sD5C6F8wコメントやEvalがあったら置換した上で警告でも出せばいいんだし
こういう場合どう処理するの?なんて本人にしか判らんこと気にしても仕方ない
0332デフォルトの名無しさん
2016/01/09(土) 22:42:38.50ID:enMYG2pF0333デフォルトの名無しさん
2016/01/09(土) 22:43:54.04ID:sD5C6F8wそれで大きな問題が起きるとは思えないし
0334デフォルトの名無しさん
2016/01/10(日) 00:31:35.36ID:hZikTLMsてか、vba編集するのにeclipse立ちあげるとかキチガイにもほどがある
0335デフォルトの名無しさん
2016/01/10(日) 10:18:26.27ID:MoheO9k00336デフォルトの名無しさん
2016/01/10(日) 13:09:04.97ID:2foMUWB4> それで大きな問題が起きるとは思えないし
よほど小さなソフトしか組んだことないか、ぬるい仕事しかしたことないんだろうな…
うらやましい
0337デフォルトの名無しさん
2016/01/10(日) 13:29:33.20ID:vlDN8AGa0338デフォルトの名無しさん
2016/01/10(日) 13:34:42.61ID:AcnVMiQc0339デフォルトの名無しさん
2016/01/10(日) 15:06:14.04ID:NoYOPUfs普通にExcelで書くよな?背景とか文字色も一応変えられるし
ちなみにおまえらの配色構成どうしてる?俺はこんな感じの配色にしてるんだけど、目疲れに良いおすすめあったら教えて
http://uproda.2ch-library.com/913125j4t/lib913125.jpg
0340デフォルトの名無しさん
2016/01/10(日) 15:21:55.12ID:VlwFWjx70341デフォルトの名無しさん
2016/01/10(日) 17:00:44.21ID:NoYOPUfs0342デフォルトの名無しさん
2016/01/10(日) 17:51:41.19ID:wKvoM5NG他言語どころか
Excelのピボットテーブルも入力規則も使ったことが無い
それどころかワークシート関数すら覚束ない
でもVBAだけで給料もらえるから問題なし
0343デフォルトの名無しさん
2016/01/10(日) 18:07:03.32ID:W+alusTR幾ら貰ってるかは知らないけど。
0344デフォルトの名無しさん
2016/01/10(日) 18:43:22.48ID:KeJgEHCD0345デフォルトの名無しさん
2016/01/10(日) 21:31:31.28ID:NoYOPUfs「VBAがプログラムwwあれをプログラムと呼んだら駄目っしょ笑」みたいな人たまにいる
0346デフォルトの名無しさん
2016/01/10(日) 22:07:49.93ID:fKRpFEpVマイクロソフトは勿体ないよな
ビジネスに発展させるには素人にスゲーと思わせてナンボなのに、
新卒の研修にちょっくら使わせてみるかみたいなイメージになってしまっている
0347デフォルトの名無しさん
2016/01/10(日) 22:08:12.25ID:xRSSZTjvExcelは入出力のインタフェースに過ぎないっていう使い方かな?
>>345
一種のコンプレックスのあらわれなんだろうか。
VBAは言語としてダメな点は多いけどね。
0348デフォルトの名無しさん
2016/01/10(日) 22:55:42.57ID:agiL7Ileエクセルがあればすごいんです(キリ って感じ?
OS上で直接動く言語から見たら頭ポンポンしたくなるだろ
0349デフォルトの名無しさん
2016/01/10(日) 23:08:46.92ID:+vbjBZah0350デフォルトの名無しさん
2016/01/10(日) 23:12:22.88ID:+vbjBZah0351デフォルトの名無しさん
2016/01/10(日) 23:32:51.77ID:nfQKqPqr>>344
0352デフォルトの名無しさん
2016/01/11(月) 01:59:22.45ID:AWAF7CGx0353デフォルトの名無しさん
2016/01/11(月) 07:21:46.06ID:gsKg8O84出来ること全く変わらんのだが
0354初心者A
2016/01/11(月) 08:26:22.84ID:HLjXNd8wOption 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初心者A
2016/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初心者A
2016/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素のままのVBAじゃなくて、そういう弄らなきゃいけないところをマイナスポイントにするかどうかで変わってくるな。
むしろプラスポイントと見なす人もいるかも知れんが。
自分は不満点いろいろある。
0358デフォルトの名無しさん
2016/01/11(月) 14:09:09.67ID:np4MR6nOノートPCを閉じてスリープ状態になってしまってもvbaプログラムが止まらないようにする方法はありますか。移動や別の仕事で常にPCを開いとくことができません。よろしくお願いします。
0359デフォルトの名無しさん
2016/01/11(月) 14:11:54.26ID:6idxIuPkhttp://blogs.msdn.com/b/ayatokura/archive/2016/01/09/ga.aspx
0360デフォルトの名無しさん
2016/01/11(月) 14:32:56.61ID:grtS6L7Lそんな過去ネタを今更。
ハッキリ言って糞。使いたいとも思わない。
0361デフォルトの名無しさん
2016/01/11(月) 14:38:18.74ID:qDZy1U6Zスリープって眠るってことだよ
閉じても眠らない設定にしなさい画面だけ消すとか
0362デフォルトの名無しさん
2016/01/11(月) 14:49:09.64ID:db4WHs280363デフォルトの名無しさん
2016/01/11(月) 15:21:48.39ID:Fkm8B5dx電源オプション→カバーを閉じたときの動作の選択→バッテリー駆動/カバーを閉じた時の動作を「何もしない」に設定すれば
パソコンを閉じてもプログラムは動き続ける
0364デフォルトの名無しさん
2016/01/11(月) 15:43:06.72ID:grtS6L7L元々、MSQUERYではやれていたが、実に古臭いUIと仕組みだったからねぇ。
どうなることやら。Accessを殺しに来るのかどうかが注目だがね。
0365デフォルトの名無しさん
2016/01/11(月) 16:02:56.77ID:Fkm8B5dx0366デフォルトの名無しさん
2016/01/11(月) 16:17:41.70ID:grtS6L7Lそもそも、前からAccessについてはその存在について、実際に無くすっていう議論は
出てるんだよ。ユーザの間でも有名な話だぞ。2013が出た時はホッとしたがあの直前
当たり、下手するとそろそろAccessはユーザ数も減ってきており、Excelに統合されて
消えるんじゃないかってね。
この手のアプリってAccessしか実質的に存在しないし、Excelよりもとっつきにくいという
こともあってね。既にテーブル機能は実装されているし、ここにクエリーが本格的に実装
となると、Accessのポジションは危うくなる。
0367デフォルトの名無しさん
2016/01/11(月) 17:00:49.67ID:d/8QAidvむしろこれからはビッグデータの時代なので、accessは逆に更に改良されていかないのかな
0368デフォルトの名無しさん
2016/01/11(月) 17:23:46.95ID:np4MR6nO>カバーを閉じた時の動作を「何もしない」に設定
ありがとうございます。
こちらは、プログラムは動きつづけ、バッテリーも若干節約になるという認識でかまいませんでしょうか?
0369デフォルトの名無しさん
2016/01/11(月) 19:03:39.63ID:U/eWhfN7そうすりゃ無駄に空列とか入れるヤツとか排除できる。
0370デフォルトの名無しさん
2016/01/11(月) 19:43:34.53ID:Fkm8B5dx基本は液晶が消えたままになるだけだから、そんなに節約にはならない
あと機種によっては閉じたまま計算を続けさせると熱暴走するんで、持ち歩くときはケースに入れず通気に注意すること
0371デフォルトの名無しさん
2016/01/11(月) 21:16:15.69ID:N366RwDJ.Netで使いたければ外部から触ればいいだけの話だからな。
いつまでもこのままって訳にも行かないだろうけど、そもそもモジュールをフォルダ階層化して扱えない
VBAは
クラスとか沢山作って管理するのに向いてない。
0372デフォルトの名無しさん
2016/01/11(月) 23:15:43.34ID:JhD6lfDm前後のスペースごと置換すればいいんじゃね
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+wRH2JNRange("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おお
なるほど、そうやるんですね。ありがとうー
0376デフォルトの名無しさん
2016/01/12(火) 06:54:03.50ID:ZPc78C3iA=グローバル変数
って書かれてるともうダメだし
0377デフォルトの名無しさん
2016/01/12(火) 07:49:37.59ID:/ZqCERvoVBE上では必ず前後に半角スペースが入ると思うが?
0378デフォルトの名無しさん
2016/01/12(火) 08:46:16.41ID:ZXe+fB4P俺としては消えてほしくないんだけれどねww
ただ、扱えるカラムや行数増やしたのも、その布石。ただスピードがなwww 現時点
では話にならないし、データベース関数も全く充実していない。
ただ随分前からAccess消えるかもって話は出てるね。
0379デフォルトの名無しさん
2016/01/12(火) 09:47:13.68ID:MvXD/tOc直後がコンマやカッコだとスペースが入らない
0380デフォルトの名無しさん
2016/01/12(火) 10:12:53.76ID:/ZqCERvoなるほど。
両側スペースと . と , と ( を個別にやればいいかな。
プレフィクス・ポストフィクスなんてないよね?
0381デフォルトの名無しさん
2016/01/12(火) 10:34:26.94ID:+GqIZBzhVBAのコードを変更(置換)する VBAコードを作っちゃえば?
0382デフォルトの名無しさん
2016/01/12(火) 10:57:36.37ID:MvXD/tOc0383デフォルトの名無しさん
2016/01/12(火) 12:48:46.20ID:ZPc78C3i行末には入らないし、>>379 の言うように , ( ) とかもダメ
>>380
そんなことするぐらいなら「完全に一致する単語だけ検索する」にチェック入れた方がいい
0384デフォルトの名無しさん
2016/01/12(火) 12:53:56.70ID:ZPc78C3iDBの機能が欲しいだけなら SQL-Server の Compact Edition, Express Edition, LocalDB とかでやればいい
Access って入力画面とか帳票をお手軽に作るツールでしょ
0385デフォルトの名無しさん
2016/01/12(火) 14:03:34.59ID:kdR1XWYYこれ実行すると、v(1) => 1, v(2) => 2, v(3) => Nothingにならないんだ。
わかりづらい。
0386デフォルトの名無しさん
2016/01/12(火) 14:33:05.97ID:1Tg2WctI0387デフォルトの名無しさん
2016/01/12(火) 15:09:45.03ID:/ZqCERvoああ、「前後の空白」の"後"の方は行末の場合ダメってことか。失礼した。
>>385
うん、データをシフトする訳じゃなくて見かけ上のインデックスが変わるだけ。
だからデータをコピーしたり範囲を広げたり縮めたりするのは本来は不要な動作。
もうメモリを直接書き換えることにした。
0388デフォルトの名無しさん
2016/01/12(火) 15:28:05.64ID:WkQGbLg90389デフォルトの名無しさん
2016/01/12(火) 15:50:17.33ID:FWKIiayM0390デフォルトの名無しさん
2016/01/12(火) 16:10:53.83ID:1Tg2WctIAmazonのレビューもわりと高評価だが、VBAの参考書ならもっと他にいいのあるだろう
0391デフォルトの名無しさん
2016/01/12(火) 17:56:50.78ID:wYSSDoUNhttp://jobinjapan.jp/job-listing/keyword-vba.html
0392デフォルトの名無しさん
2016/01/12(火) 19:36:12.43ID:/ZqCERvoMsgBox ("こんにちは") の大間違いって何なん?
0393デフォルトの名無しさん
2016/01/12(火) 23:53:13.87ID:iltzJQ7p0394デフォルトの名無しさん
2016/01/13(水) 00:08:28.28ID:NbxXZYkh0395デフォルトの名無しさん
2016/01/13(水) 00:12:12.63ID:NbxXZYkhWorksheets("Sheet1").Range("A1").Value = "こんにちは"
まだこっちだ
0396デフォルトの名無しさん
2016/01/13(水) 05:12:39.94ID:6j8B4A3/EXCEL VBAでやるなら、な
他の言語でもhello worldなんて、MsgBoxで表示と大差ないけど
ちなみに間違いってのは
MsgBox (こんにちわ)
が間違ってるって話じゃないのか
0397初心者A
2016/01/13(水) 06:27:10.38ID:hFbJh3ij2点間距離の差(22).xls
パスワード:abc
http://ww10.puny.jp/uploader/download/1452633400.xls
そのうち削除します。
もっと、わかりやすくプロシージャを分けた方がいいんだろうけど。
素人が見様見真似で作成したものです。
アドバイスなどありましたら、コメント願います。
0398初心者A
2016/01/13(水) 07:54:34.97ID:hFbJh3ij閉じるボタンが表示されないので、以下のように修正。
Sub 印刷プレビュー()
Application.DisplayFullScreen = False
ActiveWindow.Zoom = True
DoEvents
ActiveSheet.PrintPreview
End Sub
0399初心者A
2016/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初心者A
2016/01/13(水) 08:31:29.89ID:hFbJh3ijhttp://ww10.puny.jp/uploader/download/1452641324.zip
2点間距離の差(23).xls パスワード:abc
0401デフォルトの名無しさん
2016/01/13(水) 13:48:54.18ID:2tOFPV9Bまたお前か。
人に見てもらうようなコードを書こうとは思わないのかね。
0402デフォルトの名無しさん
2016/01/13(水) 14:02:28.80ID:LYjGdwXlひとつの関数に詰め込みすぎ
もっと分割する
そして20行くらいに収めてforやifのネストは2つまでにする
変数も多すぎて見にくい
0403初心者A
2016/01/13(水) 15:46:31.62ID:hFbJh3ij>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プロシージャってのは、別に行数が多いから分けるってもんじゃないぞ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なんつー嘘つくねんこいつww
0410デフォルトの名無しさん
2016/01/14(木) 12:52:34.23ID:q8GDBYq30411デフォルトの名無しさん
2016/01/14(木) 12:53:35.54ID:hDrEawni11インチくらいのMBAで作業でもしてるんじゃね?
0412デフォルトの名無しさん
2016/01/14(木) 13:04:14.50ID:q8GDBYq30413デフォルトの名無しさん
2016/01/14(木) 13:13:29.52ID:lO54s+mO行数が機能の目安になるなんて言ってねーだろww
機能を絞れば行数が短くなるって言ってるんだよw
0414デフォルトの名無しさん
2016/01/14(木) 13:23:17.24ID:QLA7f99bたぶんマックブックエアーの略
0415デフォルトの名無しさん
2016/01/14(木) 13:48:12.51ID:kariNJk1自分の場合は10行超えたら不満、30行超えたらリファクタリングを試みる。
ただし機能を外出しするためにPrivateなプロシージャを作ることは極力しない、という方針。
それをしたらただ分けてるだけだからね。
0416デフォルトの名無しさん
2016/01/14(木) 13:51:57.39ID:q8GDBYq3そのSub内で繰り返しのコードが見つかったので
それをさらにそのSubから呼ばれるSub(サブSubと呼ぼう)にしたいとき
単にそのサブSubをPrivate Subにするしか方法はないですか?
理想はそのSubからしか呼ばれないからそのSubの内部にそのサブSubを置きたいのですが。
0417デフォルトの名無しさん
2016/01/14(木) 14:15:35.60ID:hDrEawniJavaScriptだとそういう書き方は無名関数ってのを使ってよくやるけれどね。
VBAで出来るのかね
0418デフォルトの名無しさん
2016/01/14(木) 17:11:17.68ID:ZyMeHqvf推奨はされてないけど こんなのはある
GoSub...Returnステートメント
http://officetanaka.net/excel/vba/statement/GoSubReturn.htm
0419デフォルトの名無しさん
2016/01/14(木) 18:15:46.06ID:QLA7f99bいっそのことモジュール単位で考えて、
ひとつのモジュールの内容をそのSubとサブSubだけにしちゃうとか
メインのSub以外全部Privateにしとけば
他のモジュールにあるSubからは呼べなく出来るじゃん
0420初心者A
2016/01/14(木) 18:50:08.19ID:sGJ4yhp5解像度: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そう言うことができる言語はあるけど VBA では無理
そもそもそんな機能をつけるぐらいならその前に改善してほしいところは山ほどあるだろ
我慢して付き合っていくしかない
■ このスレッドは過去ログ倉庫に格納されています