Excel VBA 質問スレ Part37 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/06/10(水) 16:18:49.84ID:T4wZlTyk★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 質問スレ Part36
http://peace.2ch.net/test/read.cgi/tech/1420790342/
関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0693デフォルトの名無しさん
2016/04/09(土) 19:53:00.63ID:omWqeBLWどうして意味のないウソつくの?
0694デフォルトの名無しさん
2016/04/09(土) 20:51:46.13ID:oFwBMxXqOption Explicit
Sub アクティブセルの位置を調べる()
Dim 現在位置列
Dim 現在位置行
Dim アドレス
Dim 値
'ワークシートをアクティブにする ※1
現在位置列 = ActiveCell.Column 'アクティブセルの列番号
現在位置行 = ActiveCell.Row 'アクティブセルの行番号
アドレス = ActiveCell.Address 'アクティブセルのアドレス ※2
値 = ActiveCell.Value 'アクティブセルの値
MsgBox アドレス & 値
MsgBox 現在位置列 & 現在位置行
End Sub
0695デフォルトの名無しさん
2016/04/09(土) 21:07:50.44ID:NkRGPRMb0696デフォルトの名無しさん
2016/04/09(土) 21:51:44.53ID:NkRGPRMb(例)
10.xls → 10
0697デフォルトの名無しさん
2016/04/09(土) 21:53:43.85ID:omWqeBLW0698デフォルトの名無しさん
2016/04/09(土) 22:08:20.41ID:dqL4NvwQファイル名の拡張子を消したいなら
FSO(File System Object)の GetBaseName()
又は
Left(ファイル名, InStrRev(ファイル名, ".") - 1)
単純に 後ろ4文字削除したいだけなら
Left(文字列, Len(文字列) - 4)
0699デフォルトの名無しさん
2016/04/09(土) 22:31:22.73ID:omWqeBLWそれは前から数えて4文字短かい新しい文字列を作ってるだけだろ
0701デフォルトの名無しさん
2016/04/09(土) 22:38:30.19ID:dqL4NvwQご高説ありがと ではどうしたらいいの?
"ググレかす"はなして
0702デフォルトの名無しさん
2016/04/09(土) 22:40:51.92ID:dqL4NvwQ×"ググレかす"はなして
○"ググレかす"はなしで
0703デフォルトの名無しさん
2016/04/09(土) 22:44:12.54ID:omWqeBLWク グ れ か す
0704696
2016/04/09(土) 22:56:06.66ID:TesuAEt0よって ググレかすっていってる奴がカスなんだよ
わからないのかな?そこの「ググレかす」君!
0705デフォルトの名無しさん
2016/04/09(土) 23:21:33.47ID:QOjje/I20706デフォルトの名無しさん
2016/04/10(日) 03:52:45.83ID:ExCsBl9HIEの保護モードの影響で整合性レベルが切り替わる時
CreateObject("InternetExplorer.Application")
で接続したオブジェクトが無効になる。
対策方法はいくつかあるけどVBAだけで対策するなら
GetObject("new:{D5E8041D-920F-45E9-B8FB-B1DEB82C6E5E}")
で接続すればよい。
0707デフォルトの名無しさん
2016/04/10(日) 07:45:39.42ID:Lt2F89As下のコードをworksheets(1)をactiveの状態で実行したいのですが5行目で1004エラーがでます。
worksheets(2)をactiveの状態で実行するとうまくいきますが、worksheets(1)をactiveの状態で実行したいです。
5行目の範囲指定をRange("C1:C7")かColumns(3)にするとworksheets(1) activeでもうまくいきますが、
実際のデータは数千行の可変なのでRaneg()では最終行が求められませんし、Columns()では重くなるので、cellsで範囲指定したいです。
よろしくお願いします。
Sub test()
With Worksheets(2)
.AutoFilterMode = False
.Range("A1").AutoFilter Field:=2, Criteria1:="a"
.Range(Cells(1, 3), Cells(7, 3)).Copy Worksheets(1).Cells(1, 1)
End With
End Sub
0708デフォルトの名無しさん
2016/04/10(日) 07:52:07.40ID:5ptKitBG0709デフォルトの名無しさん
2016/04/10(日) 07:52:41.10ID:Fj4/7GGtまたザバーを装ったC++erか。いい加減にしとけ。
VBAにはガベージコレクションの概念はないよ。
普通はスコープが切れればそこで参照は断ち切れるから問題ないけど、
COMでやってたりするときちんとNoting設定してあげなければいけないのはjavaやC++でも同じだろう。
ま、心配なら使い終わったObjectはNotingしとけばいい。
あとこっちはVB6で出来ることは全てスレ違いらしいからな。他所でやるのが筋だろう。
0710デフォルトの名無しさん
2016/04/10(日) 07:55:32.83ID:Lt2F89Asありがとうございます。うまくいきました。
0711デフォルトの名無しさん
2016/04/10(日) 10:19:14.00ID:KQiea6Cc意識高い系
つまり、ヴァカって事ですね。ヴァカは相手にしたくないんで、消えろ小僧
0712tasukete
2016/04/10(日) 10:33:08.30ID:1I5jwrs3■概要
「そうですねabcの次はdefですね笑」
上記文章のdefにマッチさせる正規表現文字列をご教授下さい。
■ロジック
「***笑」の「***」の中に存在する「最後の」半角英数文字を取り出したい。
■現在の正規表現文字列
0714デフォルトの名無しさん
2016/04/10(日) 11:23:33.43ID:1I5jwrs3以下で解決しました。ご回答ありがとうございます。
"([0-9a-zA-Z!-~]+)([^0-9a-zA-Z!-~]*)(笑)"
0715デフォルトの名無しさん
2016/04/10(日) 15:06:06.71ID:r0zhudqC検索文字列が見つかりませんでした。エラーの原因と対処方法を次に示します。
指定された検索適用範囲の開始点から終了点までの間に、一致する文字列がありません。
検索を続ける場合は、検索の適用範囲を広げてください。
パターン マッチング式で左かっこが指定されていません。
左かっこを指定します。
詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。
0716デフォルトの名無しさん
2016/04/10(日) 17:42:09.90ID:h6VSGqHpどっちにしても違ってる気がするけど
0717デフォルトの名無しさん
2016/04/10(日) 19:01:22.63ID:zU852X9x1 プロパティウィンドウを表示
2 イミディエイトウィンドウを表示
3 VBEウィンドウ最大化
した状態でVBEを閉じ、次にVBEを起動しても1,2,3の状態が保持されません。
VBEを開くたびに1,2,3をするのが面倒なのですが解決策がありましたら教えて下さい。
0719デフォルトの名無しさん
2016/04/10(日) 19:32:19.02ID:Y5yf6QHK1,2,3を自動化するツールを常駐させておく
0720デフォルトの名無しさん
2016/04/10(日) 19:38:18.50ID:zU852X9x他に方法がなければそれも検討しますが・・・
他にありませんか?
0721デフォルトの名無しさん
2016/04/10(日) 19:42:11.74ID:jDmPqXB1そもそも引数の括弧の必要性が一貫してないことに意味はあるのでしょうか
0722デフォルトの名無しさん
2016/04/10(日) 19:49:43.74ID:Fj4/7GGt厳密に言うと挙動が変わっちゃう場合があるからねぇ
括弧付ける時は前にCall付けとかないとねぇ
0723デフォルトの名無しさん
2016/04/10(日) 20:53:02.90ID:TaPFtU7EVBEを閉じない
0724デフォルトの名無しさん
2016/04/10(日) 21:05:55.36ID:fppF2dqS0725デフォルトの名無しさん
2016/04/10(日) 21:30:42.88ID:h6VSGqHpLotus 1-2-3
0726デフォルトの名無しさん
2016/04/11(月) 01:07:36.81ID:mNSepyo/マイクロソフトを買収して最優先ですぐに直すように開発チームに命令する。
0727デフォルトの名無しさん
2016/04/11(月) 01:16:39.75ID:FRetIr0G0728デフォルトの名無しさん
2016/04/11(月) 06:55:56.76ID:MF2TZXcE.Value = .Value & 3
End With
空セルでこれを実行すると、1回目→3が入る・・・・16回目→なぜか0が入る。17回目→3.33333333333333E+153という値になり
期待した結果が得られません。(期待する結果としては、3333333333333333333333333と延々と続いてほしい)
実行すると、「現在のセルの値を拾って、一文字(数字)を付け足す」というのを延々と繰り返してほしいのですが、
簡単な書き方を教えてください。
よろしくお願いします。
Excel2010です。
0729デフォルトの名無しさん
2016/04/11(月) 07:07:01.65ID:siKElAn4まずそこのセルの書式はどうなってるの?
文字列でないと当然制限は受けると思うけど
後は & 3 ってなってるところを & "3"として繰り返せば要件満たせるよね
0730デフォルトの名無しさん
2016/04/11(月) 07:29:25.01ID:c3d7+hIFtextとダブルクォート使えばいいんじゃない
0731デフォルトの名無しさん
2016/04/11(月) 08:13:16.14ID:Tjd5GnSG.Text = .Text & "3"
0732デフォルトの名無しさん
2016/04/11(月) 08:31:44.40ID:gJM7Zl86それぞれに共通のプロシージャがあるとき
それをうまく単一の場所に保存して修正の必要が発生したときに修正は一ヶ所だけにするにはどうすればいいですか?
0733デフォルトの名無しさん
2016/04/11(月) 08:44:59.34ID:8qeonQG2特定のブックのマクロをどのブックからも利用可能にするには?
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9114.html
0734デフォルトの名無しさん
2016/04/11(月) 08:47:40.18ID:Tjd5GnSGApplication.Run
注意点はここ
http://blog.sen-i.jp/vba/excel-vba-common-module-file.html
0735デフォルトの名無しさん
2016/04/11(月) 10:44:34.46ID:liIxp6L/今は手動で最新のをインポートしなきゃいけない。
0736デフォルトの名無しさん
2016/04/11(月) 15:04:40.97ID:MF2TZXcEうっかり忘れてました・・・。
>>730
>>731
.Text = .Text & "3"
にすると、オブジェクト指定しろって文句言われてダメでしたので
文字にすることで逃げました・・・
ありがとうございましすた。
0737デフォルトの名無しさん
2016/04/11(月) 15:34:57.92ID:Tjd5GnSG.Value = .Text & "3"
かな?
0738デフォルトの名無しさん
2016/04/11(月) 19:05:18.20ID:VX+C6Bv4普通のメソッドを使っても同様の機能を持たせることができてるみたいです
わざわざプロパティープロシージャを使う理由は何でしょうか
0739デフォルトの名無しさん
2016/04/11(月) 20:05:19.94ID:qE1DLczHReadOnly のプロパティなら Functionでも代用可能だね
プロパティに値を入れる時どうする?
Public変数使う? それなら
>>普通のメソッドを使っても同様の機能を持たせることができてるみたいです
↑これすら不要になるね
さてどうしましょうか?
0740デフォルトの名無しさん
2016/04/11(月) 20:53:44.76ID:8qeonQG20741デフォルトの名無しさん
2016/04/11(月) 21:24:10.68ID:liIxp6L/いやべつに記述が簡単になるだけっすよ先輩。
0742デフォルトの名無しさん
2016/04/11(月) 22:40:03.89ID:+pegrb/D実質プロパティとメソッドで出来る事に大差はないけど
使い分けについて、.NETでの解説だけど一度読んどくと良い
プロパティとメソッドの選択
https://msdn.microsoft.com/ja-jp/library/ms229054(v=vs.80).aspx
VBAかVBでの記事も見た気がするんだがみつからん
0743デフォルトの名無しさん
2016/04/11(月) 22:51:27.02ID:yNx//VK9「メンバーが型の論理属性を表す場合は、プロパティを使用することを検討してください。」
→これはちょっと難しいね。翻訳の問題だろうか?誰か教えて!
「操作が Object.ToString method などの変換操作の場合。」
なんで?いいじゃん?
0744デフォルトの名無しさん
2016/04/12(火) 00:32:03.58ID:sXpv9NYnクラス上でPublicな変数を設定することは結合度の問題があるから避けた方が良いかな。
ましてやVBAの場合、多態性を持たせるのに継承が使えないから
インターフェースを使って処理の移譲(委託)を行うことがある。
この場合、シグネチャをインターフェース上に記述しないと使用出来るプロパティやメソッドから除外されてしまう。
標準モジュール上からならまぁいいかも知れないけど、
一応記述に一貫性を持たせると言う意味合いでプロパティやメソッドにしておいた方が良いかもしれない。
けどこれは理想論であって、実際に標準モジュール上で
例えば構造体(ユーザー定義型)とかをプロパティで
引っ張り出せるかと言うと無理だったり、
難点も色々あるのも確か。
0745デフォルトの名無しさん
2016/04/12(火) 01:16:26.34ID:lRmEmyeQ0746デフォルトの名無しさん
2016/04/12(火) 02:02:23.64ID:6wI8o2z50747デフォルトの名無しさん
2016/04/12(火) 02:59:53.21ID:k6A/HJ44>一般的に、メソッドは操作を表し、プロパティはデータを表します
って書いてある通り
オブジェクトの属性はプロパティで定義する
オブジェクトそのものの操作はメソッドで定義する
って言うのが基本
一つ目はつまり
オブジェクトの属性はプロパティで定義する
って言ってるだけ
二つ目は、型変換はオブジェクトそのものの操作で属性の変更じゃないからメソッド使えってこと
0748デフォルトの名無しさん
2016/04/12(火) 08:37:48.05ID:btagnXsu0749デフォルトの名無しさん
2016/04/12(火) 08:39:09.79ID:WtnI9BntそもそもVBAでする話じゃないわなwww
0750デフォルトの名無しさん
2016/04/12(火) 08:53:38.95ID:qfYIdiLt0751デフォルトの名無しさん
2016/04/12(火) 09:00:24.79ID:BmESo+NV冗談じゃない
0752デフォルトの名無しさん
2016/04/12(火) 09:12:16.27ID:1wVIN9qnというよりそもそもVBAerはそういう話題を嫌う。理由は3つくらいあるんじゃないか。
0753デフォルトの名無しさん
2016/04/12(火) 10:56:46.57ID:tcSQ2kyUActivesheet.Shapes.Add(何書くか細かくは忘れた).Select
としたあとに
Selection.ShapeRange.Text="アホ"
としなきゃならないみたいです。
でも単純にActivesheet.Shapes.Add(何書くか細かくは忘れた).ShapeRange.Text="アホ"
とできない理由はなぜですか?
エラーが出る。
このへんのしくみがよくわからない。
0754デフォルトの名無しさん
2016/04/12(火) 11:01:32.95ID:tcSQ2kyUActiveSheet.Shapes.AddShape(msoShapeOval, 100, 100, 100, 100).Select
Selection.Characters.Text = "うんこ"
だった。
これを
ActiveSheet.Shapes.AddShape(msoShapeOval, 100, 100, 100, 100).Characters.Text = "うんこ"
とできないのはなぜ?
0755デフォルトの名無しさん
2016/04/12(火) 11:03:19.06ID:tcSQ2kyUShapeRangeってどういうときに使うんでしょう?
このへんのこと詳しく書いてる本ってないかな?
0756デフォルトの名無しさん
2016/04/12(火) 11:05:46.41ID:tcSQ2kyUそこに書かれている文字列を取得したり書き込みしたりするのにSelectを使わないでやる方法はないのですか?
0757デフォルトの名無しさん
2016/04/12(火) 11:08:01.22ID:BmESo+NV0758デフォルトの名無しさん
2016/04/12(火) 11:14:46.74ID:DUyuWo3I0759デフォルトの名無しさん
2016/04/12(火) 12:54:34.46ID:Zq/wNYgfエラーになるのはShapeにはCharactersはないから
分けると動くのは
AddShapeが返してるオブジェクトと、Selectionが返してるオブジェクトで種類が違う
前者はShape、後者はOvalとかいう隠しタイプになってるな
一発でやる方法はしらん
0760デフォルトの名無しさん
2016/04/12(火) 14:00:20.14ID:Juix7VHFありがとうございます。
さすがくわしいかたのようですね。
そういうことはどうやってお調べしましたか?
あとSelectを使わずにこの種のShapeの文字列を自由自在にコードから操る方法ってあるでしょうか?
0761デフォルトの名無しさん
2016/04/12(火) 14:22:15.40ID:4cgDrrMQ0762デフォルトの名無しさん
2016/04/12(火) 14:52:47.07ID:Juix7VHFすばらしい!
ありがとうございます。
しかしそのコードはどうやって発見しました?
それを言っていただけないと単にすごいことができるぞという自慢だけで
後輩は育たないと思うんですよ。
0763デフォルトの名無しさん
2016/04/12(火) 14:56:33.44ID:csTZz+jGhttps://msdn.microsoft.com/ja-jp/library/office/ff193908.aspx
0764デフォルトの名無しさん
2016/04/12(火) 14:57:40.62ID:Juix7VHFActiveSheet.Shapes.AddShape(msoShapeOval, 100, 100, 100, 100).TextFrame2.TextRange.Text = "しっこ"
でも同様な効果が得られるみたい。
0765デフォルトの名無しさん
2016/04/12(火) 14:59:58.93ID:Juix7VHFSub test()
Dim s As Shape
Set s = ActiveSheet.Shapes.AddShape(msoShapeOval, 100, 100, 100, 100)
s.TextFrame.Characters.Text = "うんこ"
s.TextFrame2.TextRange.Text = "しっこ"
End Sub
のサンプルコードをF8のステップイン実行で実行させてやるとどうなるでしょうか?
0766デフォルトの名無しさん
2016/04/12(火) 15:04:55.97ID:Juix7VHFActiveSheet.Shapes.AddShape(msoShapeOval, 100, 100, 100, 100).TextEffect.Text = "まんこ"
0767デフォルトの名無しさん
2016/04/12(火) 15:07:06.27ID:lcRE+/VX0768デフォルトの名無しさん
2016/04/12(火) 15:50:02.95ID:v+pMiFFp0769デフォルトの名無しさん
2016/04/12(火) 16:10:55.28ID:STTwnrpw0770デフォルトの名無しさん
2016/04/12(火) 16:15:50.58ID:fzvKu7Wbだ・か・ら その制約のないスレがあるだろ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
0771デフォルトの名無しさん
2016/04/12(火) 21:54:25.08ID:fGIKSfok2003ではエラーになった
0772デフォルトの名無しさん
2016/04/12(火) 22:25:34.76ID:nCbKxQn+VB.NetやC#を関数型言語に片足突っ込んだObject指向言語にしてるのが何ともなぁ。
クラスも多態性を持たせるために使うどころか単純に生成して使うことすら拒絶反応起こす人もいるし、
VBAではクラス使えば確かに便利な局面は多々あるけど、
別に使わなければ使わないでそこまで困るもんでもなし。
ただVBA上で使えるものを毛嫌いだけで真っ向否定するのもちょっとなぁ。
0773デフォルトの名無しさん
2016/04/12(火) 23:55:40.34ID:bWko/EWY0774デフォルトの名無しさん
2016/04/13(水) 00:16:04.53ID:dn9c0fAI0775デフォルトの名無しさん
2016/04/13(水) 08:08:12.84ID:0jY11d3Z0776デフォルトの名無しさん
2016/04/13(水) 08:10:47.45ID:HK9IN9G5誰がこんな糞言語好んで使うんだ
0777デフォルトの名無しさん
2016/04/13(水) 09:01:56.70ID:845RQjl0要は開発ではないってことだろ
そんな奴がVBAが使えるアプリ以外のどんなもののインストールを望んでいるんだ?
まさかそのVBAでデカいシステム組まさせられるって訳じゃないんだろ?
糞言語と罵る前に自分の糞立場わきまえたらどうだ。
0778デフォルトの名無しさん
2016/04/13(水) 09:15:25.53ID:OrR/ddjyJavaScriptは使えるんじゃね?
ブラウザで動くし
0779デフォルトの名無しさん
2016/04/13(水) 09:47:35.90ID:N3hRKpiTVBAのようにローカル扱いたいなら、Node.jsのインスコは必須だよ。
0780デフォルトの名無しさん
2016/04/13(水) 10:14:51.33ID:OrR/ddjy自分でNode.jsと同等機能を実装したのとセキュリティ観点ではほぼ同じじゃね?
jqueryも
0781デフォルトの名無しさん
2016/04/13(水) 10:26:45.62ID:N3hRKpiTNode.js実行環境を君は作れるというのか?
0782デフォルトの名無しさん
2016/04/13(水) 10:31:07.56ID:2GMFnytb変わった会社だな
0783デフォルトの名無しさん
2016/04/13(水) 11:13:32.08ID:OrR/ddjycscript使えば良いんじゃね?
powershellもあるし
0784デフォルトの名無しさん
2016/04/13(水) 12:27:25.79ID:TwQUWgB2開発???
それってどんな組織内のどういうポジションのことなの?
0785デフォルトの名無しさん
2016/04/13(水) 12:36:06.37ID:uOfWIXveインストールするソフトは(容易に把握できるから)気を付けるが、VBA でのローカル開発は黙認
って会社は普通にあると思うが
0786デフォルトの名無しさん
2016/04/13(水) 12:39:56.50ID:NE882Qtz0787デフォルトの名無しさん
2016/04/13(水) 12:49:02.04ID:TfhFpJny彼がやらされているのは「VBAで効率化できる程度の簡単な仕事」だぞ
0788デフォルトの名無しさん
2016/04/13(水) 12:56:57.54ID:2l+iut8i構うなよそんなやつに
0789デフォルトの名無しさん
2016/04/13(水) 12:57:51.65ID:OrR/ddjy普通はメーカーの製品開発部門かな
ソフトウェア製品とかIT関係とか家電メーカーとかの製品として販売されるものの開発
0790デフォルトの名無しさん
2016/04/13(水) 12:59:37.02ID:OrR/ddjyライセンスとかも気をつけると思うが
製品にオープンソースが入ったりすると面倒だし
0791デフォルトの名無しさん
2016/04/13(水) 13:18:50.34ID:roiJsbfQExcel操作以外が目的で(Excel)VBAを選択する奴はそもそも言語選択まちがってるし
来るスレも間違ってる
0792デフォルトの名無しさん
2016/04/13(水) 13:21:07.69ID:TwQUWgB2>>777の言う糞立場ってどんなものを想像してるんだろね?
■ このスレッドは過去ログ倉庫に格納されています