Excel VBA 質問スレ Part37 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/01/10(土) 07:06:30.56ID:2VZ4g5kC___
___ /____ヽ ____
/____\ | |´・ω・`| | /___ヽ
.l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ
!、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/
ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/
 ̄  ̄ ̄
このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。
コードが嫌な人は別スレ建ててください。
※前スレ
Excel VBA 質問スレ Part36 [転載禁止]©2ch.net・
http://peace.2ch.net/test/read.cgi/tech/1419718732/
※頭のレスの方でキチガイが束縛テンプレを貼る詐欺行為が前スレまで散見されましたので、十分にご注意ください。
0357デフォルトの名無しさん
2015/06/29(月) 07:14:49.86ID:bvi+oDiY0358デフォルトの名無しさん
2015/06/29(月) 07:19:17.63ID:RWXntF+6無駄だよ。結局>>354で言ってた後者に該当して、
一生懸命誤魔化すために定義をすり替えようとしてるの見え見えじゃん。
いつものようになんだかんだ御託を付けて煙に巻こうとする
それがCプラプラークオリティ。
0359デフォルトの名無しさん
2015/06/29(月) 08:01:33.83ID:s7kCM2zI定義あったんか
0360デフォルトの名無しさん
2015/06/29(月) 08:06:21.49ID:2N/zEhbNお前は馬鹿なんだから黙ってろってw
0361デフォルトの名無しさん
2015/06/29(月) 08:28:14.08ID:TRRTpdMkまあ、>>316 みたいな具体的な回答をスルーしてることで実力はお察しレベルなんだろうけど
0362デフォルトの名無しさん
2015/06/29(月) 08:56:57.99ID:s7kCM2zIVBAもしープラプラも全面オブジェクト指向してないから、これの最初の段落のことしか言えなそう。
http://sp.e-words.jp/w/%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9.html
Wikipediaの解説の方は「問題点あり」になってる。
0363デフォルトの名無しさん
2015/06/29(月) 11:50:32.15ID:s7kCM2zIまあSafaArrayCreate 関数が、ってはその通りなんだけど、可変長のものをヒープ以外のところに確保できると思ってたのかねえ>>314は。謎だ。
0364デフォルトの名無しさん
2015/06/29(月) 12:37:41.33ID:TRRTpdMkまあ、ヒープ上に作られた実体をインスタンスって言ってるんだと思うけど...
まあ、オレオレ定義でいいからちゃんと定義晒してもらわないとなんとも言えんわな
>>363
実装方法知ってたらまずそこ思うよね
0365デフォルトの名無しさん
2015/06/29(月) 16:41:03.08ID:s7kCM2zI0366デフォルトの名無しさん
2015/06/29(月) 16:53:34.08ID:ZS1C/3AC師匠って誰だよ?
0367デフォルトの名無しさん
2015/06/29(月) 18:13:06.76ID:n/Ot7XJMVBAの公式の資料で値型/参照型という用語をみたことがないんだが
0368デフォルトの名無しさん
2015/06/29(月) 19:16:29.87ID:s7kCM2zI2.5と^の間にスペースを挟めば大丈夫なんだけど、そうしないと落ちる。
0369デフォルトの名無しさん
2015/06/29(月) 19:53:15.12ID:UcQNe/b5「VBA 値型」で検索したらMSDNで
ttps://msdn.microsoft.com/ja-jp/library/dd314344.aspx
が出てきたけどよく見たら.Netだった紛らわしい。
0370デフォルトの名無しさん
2015/06/29(月) 21:42:09.79ID:/k/OkC/pそれとか、
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard34.htm
とか見て早とちりしたんだろうなって思う
このページも VBA 参照型 でヒットするくせに VB6/VB.NET が混在してて分かりにくいし
0371デフォルトの名無しさん
2015/06/29(月) 21:46:02.65ID:2N/zEhbN0372デフォルトの名無しさん
2015/06/29(月) 22:10:14.97ID:s7kCM2zI0373デフォルトの名無しさん
2015/06/29(月) 22:22:02.06ID:rq2QsCgv・日本語で型指定なし変数宣言
・1サブプロシージャ1000行
・ボタンがたくさんあるのにModule1個
痛くはないけど、解析がとにかく辛かった
0374デフォルトの名無しさん
2015/06/29(月) 23:18:19.68ID:s7kCM2zI0375デフォルトの名無しさん
2015/06/29(月) 23:22:41.60ID:3jcGZRUX0376デフォルトの名無しさん
2015/06/30(火) 00:08:24.22ID:oheNslA50377デフォルトの名無しさん
2015/06/30(火) 07:51:30.16ID:ZBtEU6fC0378デフォルトの名無しさん
2015/06/30(火) 07:59:10.10ID:cuvzrYNR0379デフォルトの名無しさん
2015/06/30(火) 08:15:01.29ID:+uB1KRi8Cell とかのアクセスの方が全然遅いし、そもそも Variant で遅いとか言うほどデータ量でかいなら Access とか SQL-Server 使うべきだしね
地味にいまだに 64KB 制限あったりするし w
0380デフォルトの名無しさん
2015/06/30(火) 09:40:46.17ID:GcuTOY9X「VBA 64kb制限」でぐぐってみたら、小学生並みの文章のgoo質問が出てきてすっかり萎えた。
0381デフォルトの名無しさん
2015/06/30(火) 19:46:24.84ID:K4kCbRr+エクセルと同じデータ持たせて何十倍ってデータ量になって実用に耐えないと感じた記憶しかないんだが。
0382デフォルトの名無しさん
2015/06/30(火) 20:22:54.40ID:YayzGG6jExcelだけじゃ集計処理とか大変だし
SQL使えないし、コード突き合わせもクエリで一発
自分だけ使う分ならAccessで十二分
ただし複数人共有で使うのは論外
0383デフォルトの名無しさん
2015/06/30(火) 21:10:44.20ID:I4Ac0QOzExcel と同じデータで mdb が xls の何十倍になってるならなにか間違えてる
0384デフォルトの名無しさん
2015/06/30(火) 21:11:03.98ID:Ws6hqNxp確か1Mくらいまで使えたような
0385デフォルトの名無しさん
2015/06/30(火) 21:26:58.91ID:Ws6hqNxpアクセスと同じようにJet4.0使うならExcel のシートにもSQL投げられるよ。
それどころかフォーマットさえしっかりしていればCSVにだって投げられる。
0386デフォルトの名無しさん
2015/06/30(火) 22:16:11.34ID:BiTNAw1oxmlとかjsonとかが主流になるよ。
SQLは性能劣化とバグの温床だし。
SQLちょいと書き直すと処理能力10倍とかざらだから。
0387デフォルトの名無しさん
2015/06/30(火) 23:01:31.71ID:fROSMXtx連想配列をセルに代入する場合は、どのようにコードを書けばよいのわからず、ハマっています。
手で入力する場合の、Ctrl+Shit+Enterをどうやればいいのか...
VBAで連想配列処理を行うのではなく、連想配列式をVBAでセルに代入したいのですが、やり方がわからない。。
詳しい先輩方、ご指導くださいませ。
0388デフォルトの名無しさん
2015/06/30(火) 23:18:25.32ID:fROSMXtxFormulaArrayプロパティで設定するんですね。
失礼致しました。。
0389デフォルトの名無しさん
2015/06/30(火) 23:31:59.27ID:tOsGp7lHそれ連想配列じゃなくて配列数式だろ?
連想配列ってmapとかのことだぜ。
0390デフォルトの名無しさん
2015/06/30(火) 23:46:00.56ID:fROSMXtxですね。。
なんで検索しても引っかからなくて、質問しちゃったんですね。
"配列数式"って単語がウル覚えで、
検索したら"連想配列"がいっぱいでてくたもんで...
0391デフォルトの名無しさん
2015/06/30(火) 23:56:03.52ID:tOsGp7lH0392デフォルトの名無しさん
2015/07/01(水) 01:10:32.10ID:jqNSI/h3xamlは流行りませんかそうですか
0393デフォルトの名無しさん
2015/07/01(水) 07:04:49.59ID:6h4b9tb70394デフォルトの名無しさん
2015/07/01(水) 07:53:05.06ID:jqNSI/h3データベースとして使うのに耐えうるものなの?
0395デフォルトの名無しさん
2015/07/01(水) 08:53:19.12ID:D21eOTfg0396デフォルトの名無しさん
2015/07/01(水) 11:52:06.80ID:yoCegXat0397デフォルトの名無しさん
2015/07/01(水) 12:03:15.44ID:tJW6CsdE全くと言っていいほど使い物にならないので、廃れましたよ。
完全敗北です。
いまじゃ、MongoDBのようなものも出てきていますしね。XMLDBが復権する
事はもうありませんよ。
0398デフォルトの名無しさん
2015/07/01(水) 12:04:30.63ID:tJW6CsdE第三形態になったフリーザ vs ベジータの戦いみたいなもの。
もちろんベジータがXMLDBだ。
0399デフォルトの名無しさん
2015/07/01(水) 12:17:10.42ID:mPxMjEr/他のプログラムが出力した XML を読み込んで処理するためのものだと思ってたけど...
要するに CSV の代替じゃないのかな?
0400デフォルトの名無しさん
2015/07/01(水) 12:27:12.70ID:iTWnMbVI0401デフォルトの名無しさん
2015/07/01(水) 12:33:07.87ID:D21eOTfgセル範囲に対して
範囲.Value ってやると2次元配列が取得できて便利だね!
だけど 矩形(長方形)じゃない飛び飛びの範囲だと思わぬ結果になって罠だね!
0402デフォルトの名無しさん
2015/07/01(水) 21:49:36.73ID:r6P8NuLo過去の歴史を勉強したまえよww
0403デフォルトの名無しさん
2015/07/01(水) 22:24:17.39ID:huUe7xTBアホ晒して楽しいのか? w
0404デフォルトの名無しさん
2015/07/01(水) 22:25:12.56ID:r6P8NuLo0405デフォルトの名無しさん
2015/07/01(水) 23:43:00.11ID:s4VVys9R2本目はとっておきだ(´・ω・`)b
0406デフォルトの名無しさん
2015/07/02(木) 05:03:52.50ID:D0UhKb7j具体的な内容を書けないなら無理にレスするなよ w
0407デフォルトの名無しさん
2015/07/02(木) 05:22:03.78ID:9qb5cWlQでも意味づけする為に修飾子が大量にくっついてくるわけだから大型のデータベースには向かないのは確かだろうな。
0408デフォルトの名無しさん
2015/07/02(木) 09:37:50.18ID:CcSdJJgrおまえなんか具体的な事書いてんの?
0409デフォルトの名無しさん
2015/07/02(木) 20:19:18.42ID:RENWNoB4という動きをさせたいのですが、以下の式では、1月以降を指定月日としたシートを開くと、処理が実行されてしまいます。
(年を見ていないので当然ですが・・・)
これを回避するには、どのようにすればよいのでしょうか?
※指定月日を"年月日"にすれば回避できますが、毎年のメンテナンスが必要となるので、それは避けたいです。
Sub Sheetlock()
Dim MyMonth As String
Dim MyDate As Date '指定月日
MyMonth = ActiveSheet.Name
Select Case MyMonth
Case "4月度"
MyDate = "5/10"
Case "5月度"
MyDate = "6/10"
〜略〜
Case "12月度"
MyDate = "1/10"
Case "1月度"
MyDate = "2/10"
Case "2月度"
MyDate = "3/10"
Case Else
MyDate = "4/10"
End Select
If MyDate <= Date Then
処理A
End If
End Sub
0410デフォルトの名無しさん
2015/07/02(木) 20:26:36.22ID:cgPWlYAt指定日はDateと比べるんだから、指定日の年はDateの年を設定すればいい
指定日は終了日だけじゃなくて開始日も必要だろう
0411デフォルトの名無しさん
2015/07/02(木) 20:49:29.04ID:RENWNoB45/10から12/10まで MyDate = year(Date)&"月日"
1/10から4/10まで MyDate = year(Date)+1&"月日" とせよ、
という理解であっておりますでしょうか?
その場合、例えば2016/1/10に"12月度"のシートを開いても、
指定日が2016+1 /1/10 となってしまい、処理は実行されないと思うのですが、、、
0412デフォルトの名無しさん
2015/07/02(木) 20:50:31.63ID:9qb5cWlQPrivate Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim oMonth As Byte, oYear As Integer, oDate As Date
oMonth = CByte(Left(Sh.Name, Len(Sh.Name) - 2)) + 1
oYear = Year(Date)
If oMonth > 12 Then
oMonth = 1
oYear = oYear + 1
End If
oDate = CDate(oYear & "/" & oMonth & "/" & 10)
If oDate <= Date Then
MsgBox "処理A"
End If
End Sub
ThisWorkbookに貼り付け。
0413デフォルトの名無しさん
2015/07/02(木) 21:01:08.22ID:9qb5cWlQPrivate Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim oMonth As Byte
Dim f As Boolean
oMonth = CByte(Left(Sh.Name, Len(Sh.Name) - 2)) + 1
If oMonth > 12 Then oMonth = 1
If oMonth < Month(Date) Then
f = True
ElseIf oMonth = Month(Date) Then
If Day(Date) >= 1 Then f = True
End If
If f Then
MsgBox "処理A"
End If
End Sub
12月度が反応しちゃうけど「いつまで反応し続けるか」が条件にないし、年度管理しないとそんなもんかなぁ。
0414デフォルトの名無しさん
2015/07/02(木) 21:04:45.30ID:9qb5cWlQあ、Dayの指定をテスト状態から戻して無かったわ。
下から6行目の所、
If Day(Date) >= 10 then f = True
にしといて。
0415デフォルトの名無しさん
2015/07/02(木) 21:28:54.52ID:cgPWlYAt12月ってのは、当年のなのか?前年または翌年なのか?
当年の12月なら、2016/1/10において12月度(2016/12/11-2017/1/10)はまだ到達してないから
処理が実行されないのは正常だよね
当年度の12月というのであれば、当日が4/1以降かどうかで当年か前年か切り替えないとダメだろう(年度切り替えが4/1だとして)
0416デフォルトの名無しさん
2015/07/02(木) 21:39:28.39ID:R9hbfqH10417デフォルトの名無しさん
2015/07/02(木) 21:59:38.14ID:cgPWlYAt対象の年度が何らかの方法で確定できるなら、ブックに対象年度が無くても理論的には可能です
たとえば
対象の年度は現在の年度とし、現在の年度はPCの操作時の日付より確定できるときとかな
まあ、対象年度の情報はいらないが、年度に関する何らかの情報は必要かもしれんが
年度確定のための情報(年度開始日)とかな
つか俺VBAの話一切してないなw
0418デフォルトの名無しさん
2015/07/02(木) 22:22:25.92ID:R9hbfqH1それはまた随分非論理的な理論ですね。
どこかで発表されているのでしょうか、その理論は?
0419デフォルトの名無しさん
2015/07/02(木) 23:49:36.87ID:PhnYLcQwうん。俺も無理だと思った。
頭が決まってないんだから、何をもって年が始まったばかりなのか、
1周して来たのかを確定出来ないと思う。
0420デフォルトの名無しさん
2015/07/03(金) 00:18:24.08ID:xQFZnjt90421デフォルトの名無しさん
2015/07/03(金) 08:21:48.74ID:zaw8UGxRもうそういう反吐の出るような作り方してる奴は無視でいいよ。
0422デフォルトの名無しさん
2015/07/03(金) 10:14:07.01ID:bMlB0lViそういう解決法はありありだと思うけどなぁ。
シート名に情報入れといて抜き出すとかも。
0423デフォルトの名無しさん
2015/07/03(金) 10:48:31.53ID:tIDo5nwi「2015」とか書いて読み取るとか。
0424デフォルトの名無しさん
2015/07/03(金) 11:10:15.29ID:zaw8UGxRドキュメントプロパティを使えよ・・・ブック名なんていい加減なもの使わないで。
0425デフォルトの名無しさん
2015/07/03(金) 12:22:12.36ID:xJ8vVgP90426デフォルトの名無しさん
2015/07/03(金) 12:26:17.84ID:vPK10GoBその年度の月度毎のテーブル作るようにしといて、
他のページはそこを参照させるとかなら簡単、というかメンテしやすい
まあ、ページ開くとマクロ実行なんてオレは実装しないんで良いけど
0427デフォルトの名無しさん
2015/07/03(金) 13:20:39.05ID:bMlB0lViドキュメントプロパティの読み込みは時間かかるからね。
例えば、1000ファイルの中の処理対象100ファイルを特定するのに、Dir.glob()系の機能で
探した方が高速でしょ。
ドキュメントプロパティにしか情報が無いと、全ファイルをオープンしないと、処理対象が
わからない。
それと、hoge_2015.xlsxというファイルをコピーして2016年用のファイルを作るとき、大抵の
人ならhoge_2016.xlsxというファイル名にするはず。
ドキュメントプロパティに設定しないといけないなんて、思いつく人はほとんどいない。
ただ、ドキュメントファイル内のメタデータを活用できるツールを使ってるなら、ドキュメント
プロパティは積極的に使うのがいいと思う。
0428デフォルトの名無しさん
2015/07/03(金) 14:04:17.97ID:R//i/7GN同意
ただし、速度とかじゃなくて、大抵の利用者にとってその方が簡単で、分かりやすくて、間違いにくいから
データ量が多いなら >>423 とかもあるけど年号程度ならファイル名で充分
ドキュメントプロパティとか言ってる奴は自称℃玄人の臭いがする w
ユーザーに触らせないちょっとした設定とかを置くにはいいんだけどね
0429デフォルトの名無しさん
2015/07/03(金) 14:05:48.12ID:R//i/7GN>>402 に比べれば >>399 の方がより具体的だろ?
0430デフォルトの名無しさん
2015/07/04(土) 13:21:08.55ID:U38uGtdG0431デフォルトの名無しさん
2015/07/04(土) 14:34:10.54ID:WvwJxr10次にお前は「コピペしたままプロパティ修正漏れの犯人誰だ!? コロセ」という
0432デフォルトの名無しさん
2015/07/04(土) 14:47:41.85ID:n+Lf90L5はっ!!
0433デフォルトの名無しさん
2015/07/04(土) 19:49:31.36ID:CDSb/b0p撃てー!!
0434デフォルトの名無しさん
2015/07/05(日) 01:16:07.81ID:YU79Y+KKmyCell = ThisWorkbook.Worksheets("Sheet1").Range("A1")
このような記述の後は、その都度ブック名やワークシート名を明記しなくても、
myCellがThisWorkbookのSheet1のA1セルであることは保証されますか?
つまりブック名やワークシート名を省略しても大丈夫でしょうか?
0435デフォルトの名無しさん
2015/07/05(日) 01:42:12.25ID:SLIL1g2FSet myCell = ThisWorkbook.Worksheets("Sheet1").Range("A1")
これで大丈夫
0436デフォルトの名無しさん
2015/07/05(日) 03:20:04.46ID:YU79Y+KKありがとうございました。
0437デフォルトの名無しさん
2015/07/05(日) 09:04:41.96ID:vbphD8dyデータファイルを与えたらそれを分析して画像ファイルとして出力してくれるものがあるのですが
これらの操作をVBAのコードで書いて自動化することはできますか?
0438デフォルトの名無しさん
2015/07/05(日) 09:08:34.05ID:vbphD8dy本来ならそのアプリケーションを立ち上げた状態で
ファイル(F)→開くで開いて、そのアプリに特有な操作(といってもツール→出力みたいな操作)をしないといけません。
0439デフォルトの名無しさん
2015/07/05(日) 09:09:42.08ID:vbphD8dy・あるアプリを開く
・そのアプリを操作する (メニューバーからの選択だけのわりと単純)
のコードは書けますか?
0440デフォルトの名無しさん
2015/07/05(日) 09:28:22.63ID:ayYTjQLcコマンドラインからの操作ならWScriptを介せば出来る。ただそのソフトからの出力を直接受け付ける事は出来ない。
0441デフォルトの名無しさん
2015/07/05(日) 09:50:10.08ID:vbphD8dyありがとうございます。
ところでWScriptとはなんでしょうか?
出力はそのソフトが勝手にファイルを作ってくれるなら大丈夫でしょうか?
0442デフォルトの名無しさん
2015/07/05(日) 11:30:21.63ID:XIvEwRaJVBScript (VB)か、JScript (JavaScript)で、
プログラミングする
0443デフォルトの名無しさん
2015/07/05(日) 14:55:03.32ID:CZs4iz8t0444444
2015/07/05(日) 14:55:29.29ID:CZs4iz8t0445デフォルトの名無しさん
2015/07/07(火) 06:53:14.99ID:N5IK5nOl今VB6でExcelのシートを追加して一覧を作成する処理を作ってるんですが
BookやSheetを扱うときはBookやSheet用の変数を用意してそれを使って
最後に必ず解放しないとメモリにゴミが残ると聞きました
RangeやCellsもそうしないとだめですか?
0446デフォルトの名無しさん
2015/07/07(火) 08:28:55.91ID:xJTxnmtV0447デフォルトの名無しさん
2015/07/07(火) 12:33:14.63ID:L2fl7GI9Sheet1.Range()ってやればいいのに、なんでworksheets()ってやる馬鹿が多いの?
シート名変えたら動かなくなっちゃうじゃん。
0448デフォルトの名無しさん
2015/07/07(火) 12:34:16.38ID:IXfNO3Pf0449デフォルトの名無しさん
2015/07/07(火) 12:35:47.32ID:4626lywFオブジェクト名変えたら動かなくなっちゃうじゃん
0450デフォルトの名無しさん
2015/07/07(火) 12:38:02.42ID:L2fl7GI9はw?
シート変えるなら
Sheet2って変えればいいだけでしょ、
コレクションで指定だと、存在しないシート指定してたら実行時までエラーがわからんぞ。
コンパイルで弾くようにしろって。
0451デフォルトの名無しさん
2015/07/07(火) 12:40:05.65ID:L2fl7GI9オブジェクト名変えたら動かなくていいんだよw
シート名変えて、コードないの変えるべきとこ変えないで動いてる方が問題だろw
0452デフォルトの名無しさん
2015/07/07(火) 12:41:29.85ID:L2fl7GI9そういう条件があればそれでいいよ
0453デフォルトの名無しさん
2015/07/07(火) 12:42:58.35ID:L2fl7GI90454デフォルトの名無しさん
2015/07/07(火) 12:43:24.00ID:4626lywF落ち着いて自分のレス読み直してみろ
0455デフォルトの名無しさん
2015/07/07(火) 12:46:45.79ID:L2fl7GI9Sheet1って指定しときゃシート名変えても動くのしらなかった?
名前経由じゃなくてオブジェクトを直接参照してるって仕組みわかってる?
0456デフォルトの名無しさん
2015/07/07(火) 12:46:47.13ID:4626lywF本当に問題があるのは、こうでなければいけないっつー凝り固まった頭。
■ このスレッドは過去ログ倉庫に格納されています