1 名前:デフォルトの名無しさん mailto:sage [2013/10/17(木) 22:04:40.64 ] ExcelのVBAに関する質問スレです ___ ___ /____ヽ ____ /____\ | |´・ω・`| | /___ヽ .l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ !、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/ ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/  ̄  ̄ ̄ 前スレ Excel VBA 質問スレ Part32 toro.2ch.net/test/read.cgi/tech/1381151717/ このスレはコード書き込みOKです。 作成依頼もOKですが、作成依頼限定ではありません。 コードが嫌な人はこちらのスレへ toro.2ch.net/test/read.cgi/tech/1381151995/l50
331 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 21:20:43.09 ] >>329 そもそもワークシート関数にCellsなんて無いから
332 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 04:14:19.51 ] >>329 ワークシート上の数式にCellsは使えないけど、 VBAでは使えるからコード中でCells(20,5)を指定させる事なら出来た。 ただし、絶対参照になっちゃったけど。 Worksheets("データシート").Cells(n1, 6).Formula = "=IfError(Hyperlink(VLookup(" & Cells(20, 5).Address & ", $Q$2:$R$10, 2, True)), """")" 相対参照で書きたければFormulaではなくFormulaR1C1を使えば良いと思う。
333 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 07:35:53.62 ] >>328 あなたにプログラムを依頼した人にもらえばよいと思います
334 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 01:34:21.73 ] 数式の中で参照のあるツールいじるのこえー シートAのA1に名前A1とつけたとき $A$1 = 名前A1なのかな? =A1の相対参照で行列の挿入して参照がずれる アンチパターンの整理ができてないわ
335 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 15:56:19.01 ] ループ処理について質問ですが Do Until 親 = 20 '20回ループ Do Until 子 = 10 '10回ループ '子くり返し処理内容 子 = 子 + 1 Loop '親くり返し処理内容 親 = 親 + 1 Loop このようにネストさせる事は可能なのでしょうか? とりあえず作ってみたら動きませんでしたが出来ると説明されている解説サイトもあるようで 一体どうやって書けば良いのでしょうか?
336 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 16:27:41.93 ] >>335 親の二回目のループで 子 の内容どうなってる?
337 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 16:31:18.92 ] 親も子もゼロに初期化しないといけないんじゃね?
338 名前:335 mailto:sage [2014/02/23(日) 16:32:17.71 ] >>336 親の計算結果の数値を子に渡して詳細分析を10パターン行うと言ったないようですが これってプロシージャをわければ解決でしょうか? そんな気がしてきました。
339 名前:335 mailto:sage [2014/02/23(日) 16:34:27.48 ] >>337 初期化定義はつけてあります。
340 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 16:52:35.73 ] >>338-339 ごたくはいいから >>336 を確認しろよ
341 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 17:15:19.70 ] >>335 わからないならコードを削らず貼ろう
342 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 17:45:19.18 ] >>340 >>341 チェックしたところ子のループ処理が終了したところでVBAの実行が終了いるようで、、 やはりネストは無理か??
343 名前:デフォルトの名無しさん [2014/02/23(日) 17:53:58.08 ] >>342 ネスト自体はできるよね。 コード見直したがいいっすよ。 Dim Parent As Long Parent = 0 Do Until Parent = 20 Dim Child As Long Child = 0 Do Until Child = 10 Debug.Print Parent & " " & Child Child = Child + 1 Loop Parent = Parent + 1 Loop
344 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 17:54:51.09 ] >>336 >>340 >>341 なるほど!!親処理1回ごとに子の変数を初期値に戻さないと子の処理がすべてスルーされているわけですね、修正するとばっちり動きました。 超初歩的な間違いでした。。どうもありがとうございました!
345 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 17:56:18.66 ] >>343 ありがとうございますm(_ _)m
346 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 18:03:05.91 ] >>344 VBA は変数の初期値が決まってるからいいんだけど、こんなケースもあるから明示的に設定した方がいいよ。 あと、今回の場合なら For 〜 Next 使った方がいいと思う。
347 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 18:29:53.38 ] >>346 どうしてですか?
348 名前:335 mailto:sage [2014/02/23(日) 18:33:31.05 ] For 〜 Next は使った事がありませんが勉強してみます。ありがとうございます。
349 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 19:26:51.74 ] >>347 どこを質問してるんだよ...
350 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 21:43:02.28 ] >>349 すみません 後半部分についてです
351 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 21:54:19.10 ] ループの回数判ってんだろ? 実行時でないと判らないってんなら Do Unti の方でないとダメだろうけど判ってんなら For Nextの方が良いに決まってるl
352 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 21:57:31.13 ] >>350 今回みたいな初期化漏れや Parent = Parent + 1 の入れ忘れがなくなるから。
353 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 22:04:00.80 ] >>351-352 ありがとうございます ヒューマンエラーを低減させるためにFor〜Nextの方が良い、ということだったのですね ちょっと深読みしすぎていたようです
354 名前:デフォルトの名無しさん mailto:sage [2014/02/24(月) 20:49:02.56 ] 質問です。 複数のインスタンスでExcelが起動していて、それぞれのインスタンスに 未保存の新規ブックがひとつずつ開いています。 これらのブックは未保存のまま、すべてのブックのオブジェクトを取得する方法は あるのでしょうか? VBAでできるに越したことはないのですが、別の方法でもOKです。 よろしくお願いします。
355 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 07:33:56.81 ] >>354 インスタンスを生成したあと コレクションに格納しておいて ループでコレクションの中身を取得するようにしとけば?
356 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 09:28:04.02 ] excel2010 vbaの参照設定で一度フォームを使ったら Microsoft Forms 2.0 Object Library のチェックを外すこと出来なくなるん? フォーム使ったら自動でチェックが入るけど、いらなくなったんで フォームを解放してついでに参照設定のチェックをoffにしようとしたら 「使用中のコントロールまたは参照を削除することはできません。」 って出るんだけど
357 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 11:01:09.75 ] >>356 エクセル2000だけどおなじ症状が出てる
358 名前:デフォルトの名無しさん mailto:sage [2014/02/25(火) 15:26:49.43 ] >>356-357 2007で試したけど、保存して開き直したら消えてる
359 名前:356 mailto:sage [2014/02/25(火) 17:00:57.86 ] こっちは消えないなぁ?? ってか、参照設定を解除するのを教えてもらったんで、それで消しましたた^^; Sub testRef() Dim Ref As Object For Each Ref In ThisWorkbook.VBProject.References Debug.Print Ref.Name If Ref.Name = "MSForms" Then ThisWorkbook.VBProject.References.Remove Ref End If Next Ref End Sub
360 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 13:49:18.84 ] Microsoft、「Microsoft Office 2013 Service Pack 1」を公開 ttp://www.forest.impress.co.jp/docs/news/20140226_636988.html
361 名前:デフォルトの名無しさん [2014/02/27(木) 13:32:25.19 ] Excel2007で www.hatinosu.net/camp/archives/okinawa/ www.hatinosu.net/camp/archives/1200/ こういうページが複数あります (下のURL) これをExcelの表にまとめてしたいと思っています 場所1 料金1 期間1 関連1 備考1 場所2 料金2 期間2 関連2 備考2 場所3 料金3 期間3 関連3 備考3 場所4 料金4 期間4 関連4 備考4 htmlで表を取り込む方法はわかったのですが まとめてやる場合はマクロが必要なのでしょうか 参考になるサイトなどありましたらご教示ください
362 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 14:21:41.96 ] >>361 ホームページに書いてある内容から必要な部分だけ取り出す方法は色々あるけどVBAを使った方が楽だと思う ただ、人間の目で必要な部分を探すのは簡単だけど、それをコンピューターに自動でやらせるのはものすごく大変 参考サイトを見た程度でできるような物じゃない 手順としては (1) URLの一覧を作る (2) HTMLを読み込む (3) タグとテキストを解析して必要な情報を取り出す (4) 取り出したデータをシートに並べる どれも専門的な知識が必要なんで、どこまでわかっているのか細かく確認しながらじゃないと教えるのも大変
363 名前:デフォルトの名無しさん mailto:sage [2014/02/27(木) 14:24:27.05 ] >>361 ホームページから情報を取り出してワークシートにコピーする例 www.happy2-island.com/excelsmile/smile03/capter00721.shtml
364 名前:デフォルトの名無しさん mailto:sage [2014/02/28(金) 00:02:45.20 ] 「表示されたGoogleの検索結果一覧から、一番最初の検索結果をクリックする」 という処理はどのようにすればよいでしょうか。 検索結果のページタイトル一覧は ol#rso > li > div > h3.r > a……(結果毎にli繰り返し)となっていたので、 「ol id="rso"内の、一つ目のh3 class="r"をクリックする」という処理が できればと思うのです。 i'mfeelingluckyに渡して取得していたのですが、一部直接飛べないものがあり、 このような処理をしたいと思いました。
365 名前:デフォルトの名無しさん mailto:sage [2014/02/28(金) 00:27:30.76 ] >>364 クリックしなきゃいけないの? aタグのURLをブラウザに直接渡せばいいじゃん まあGoogleの場合はちょっと文字列の加工が必要だけど
366 名前:デフォルトの名無しさん [2014/02/28(金) 23:51:48.43 ] ユーザーフォームを使って、名簿に入力しようとしましたが、上手くいきません。 デバックしてみると、アプリケーションまたはオブジェクト定義のエラーですと言われWith Cells(Rows.Count, 1).End(x1Up).Offset(1)の部分が黄色く反転しています。 どのように修正するとよいのでしょうか?また、今、シートは中1、中2、中3という名前のシートがあります。 ユーザーフォームで学年を中1を選択した場合には中1のシートに入力(中2、中3も同様に)する場合どのように修正すればよいか教えていただきませんか?
367 名前:デフォルトの名無しさん [2014/02/28(金) 23:55:12.51 ] これがコードです。 Private Sub cmd終了_Click() Unload Me End Sub Private Sub cmd登録_Click() Dim RowNum As Long With Cells(Rows.Count, 1).End(x1Up).Offset(1) .Value = Text生年月日.Value .Offset(, 1).Vulue = schoolyears.Value .Offset(, 2).Vulue = Text氏名.Value .Offset(, 3).Vulue = Textフリガナ.Value .Offset(, 4).Vulue = Text中学.Value .Offset(, 5).Vulue = Text郵便番号.Value .Offset(, 6).Vulue = Text住所.Value .Offset(, 7).Vulue = Text自宅tel.Value .Offset(, 8).Vulue = Text生徒携帯.Value .Offset(, 9).Vulue = Text生徒アドレス.Value .Offset(, 10).Vulue = Text保護者氏名.Value .Offset(, 11).Vulue = relations.Value .Offset(, 12).Vulue = Text保護者携帯.Value .Offset(, 13).Vulue = Text緊急連絡先.Value .Offset(, 14).Vulue = Textメールアドレス.Value .Offset(, 15).Vulue = Text備考ス.Value End With End Sub
368 名前:デフォルトの名無しさん [2014/02/28(金) 23:56:00.50 ] Private Sub UserForm_Click() End Sub Private Sub UserForm_Initialize() schoolyears.AddItem "中1" schoolyears.AddItem "中2" schoolyears.AddItem "中3" relations.AddItem "父" relations.AddItem "母" relations.AddItem "その他" End Sub
369 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 01:27:58.58 ] >>366 ○ XlUp × X1Up
370 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 01:37:04.38 ] デバック
371 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 01:56:54.39 ] >>367 ○ Value × Vulue
372 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 01:58:05.73 ] >>367 「備考ス」?
373 名前:366 [2014/03/01(土) 02:25:07.81 ] >>369 ,>>371 すいません、英語が苦手なもので。 >>372 それは「備考ッス」のタイプミスです。
374 名前:sage [2014/03/01(土) 02:28:01.51 ] >>369 ありがとうございます。初歩以前のミスしてしまいました。 >>370 すいません。 >>371 間違ったものをコピペしてしまったのが原因です(泣)ありがとうございます。 >>372 オブジェクト名確かに変ですね。備考に直しました。ありがとうございます。
375 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 02:32:30.20 ] >>373 代わりに(?)フォローしていただきありがとうございます。
376 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 14:57:19.03 ] >>365 レスありがとうございます。 現状、i’mfeelinglucky検索で取得ページ移動、表示されているページタイトルとURL取得、 としていたので、VBAもあまり慣れていないため、 クリック動作さえ加えれば問題なくなるかと思ったのですが、難しいものでしょうか。。。
377 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 16:44:08.18 ] >>365 レスありがとうございます。 現状、i’mfeelinglucky検索で取得ページ移動、表示されているページタイトルとURL取得、 としていたので、VBAもあまり慣れていないため、 クリック動作さえ加えれば問題なくなるかと思ったのですが、難しいものでしょうか。。。
378 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 21:17:15.14 ] 漢字に振られているカタカナのふりがなを一気に平仮名に 変換する方法ありますか?出来ればブックの全シートを一気に。
379 名前:デフォルトの名無しさん [2014/03/01(土) 21:30:56.91 ] StrConv
380 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 22:05:09.76 ] >377 getElementById('rso').getElementsByTagName('a')[0].click みたいなことVBAでできないのでしょうか。 それを聞いてるんだよと言うのならスマン。
381 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 22:58:29.98 ] >>380 できるよ
382 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 18:09:03.96 ] 数十のセル範囲を選択してブック1からブック2へコピペする単純なコマンドを作ろうとしていますが Workbooks("1.xls").Sheets("Sheet1").Range("a1":"z1").Value = Workbooks("2.xls").Worksheets("Sheet1").Range("a1":"z1").Value このように書くと数値が極端な桁のマイナスになっていたりエラー値に変化しているセルが発生するのですが 元の数値のセルは =c1 =c2 ・・・といったような単純なセル参照の羅列で数値は小数点入りの正数で計算式やらセルの特殊指定は 一切はいってないので何故化ける箇所が発生するのか謎なのですが 原因は何なのでしょうか? 上記のコマンドに xlPasteValues 値を貼り付けの指定を追加するにはどう書けばいいのでしょうか?
383 名前:382 半分自己解決しました mailto:sage [2014/03/02(日) 18:54:41.58 ] >>382 よく見直してみますと元セルの セルの書式設定- 表示形式- 数値 の箇所が homepage3.nifty.com/gakuyu/excel/syosiki2_fig03.gif 小数点ありの負の数値で選ばれていました。 これが原因のようですお騒がせしました 全部が負の数値になっていたらすぐわかるのですがほとんどは正数のままで 所々負の数値に置き換わっているのは謎です
384 名前:デフォルトの名無しさん mailto:sage [2014/03/03(月) 07:39:32.84 ] >>382 値の貼り付けでいいならVariant変数に入れてから貼り付けるのが簡単でいいと思う。 たとえば382の例なら Dim v As Variant v = Workbooks("2.xls").Worksheets("Sheet1").Range("a1":"z1") Workbooks("1.xls").Sheets("Sheet1").Range("a1":"z1") = v こんな感じ こっちのほうが普通にコピーするより実行速度も速いらしい ただし、コピーできるのは値のみ、書式とか数式とかは引き継がれない
385 名前:382 mailto:sage [2014/03/03(月) 20:27:40.83 ] >>384 素晴らしいですね!的確な回答を頂きましてありがとうございます。助かりましたし勉強になりました。
386 名前:384 mailto:sage [2014/03/03(月) 22:19:34.69 ] >>382 今更だけど、>>382 の式はおかしいよ ブック1("1.xls")からブック2("2.xls")にコピーするなら 「イコールの右」から「イコールの左」に代入するんだから Workbooks("2.xls").Sheets("Sheet1").Range("a1":"z1").Value = Workbooks("1.xls").sheets("Sheet1").Range("a1":"z1").Value だよ (>>382 は式の右と左が逆)
387 名前:デフォルトの名無しさん mailto:sage [2014/03/03(月) 23:57:40.67 ] >>384 それって>>382 と同じだよ
388 名前:384 mailto:sage [2014/03/04(火) 00:20:39.61 ] え、そうなの? Variantに入れると速いってOfficeTANAKAに書いてあったけど
389 名前:デフォルトの名無しさん mailto:sage [2014/03/04(火) 07:29:55.48 ] ネットに書いてあることはすべて真実です
390 名前:デフォルトの名無しさん [2014/03/04(火) 08:07:22.59 ] >>389 >>387 もOfficeTANAKAもどっちも「ネットに書いてあること」なんだが?
391 名前:デフォルトの名無しさん mailto:sage [2014/03/04(火) 08:25:07.77 ] >>388 どこのページよ URL 晒して
392 名前:デフォルトの名無しさん mailto:sage [2014/03/04(火) 12:53:57.87 ] >>390 うん、それを皮肉ったつもりなんだけどわからなかった?
393 名前:デフォルトの名無しさん [2014/03/04(火) 20:15:07.96 ] >>392 うん、それを分かってて茶化したつもりなんだけどわからなかった?
394 名前:デフォルトの名無しさん mailto:sage [2014/03/04(火) 21:51:23.58 ] >>393 うん、さすがにそれは無理がありすぎてわからなかった
395 名前:デフォルトの名無しさん [2014/03/04(火) 22:07:20.57 ] >>394 修行が足りない
396 名前:デフォルトの名無しさん mailto:sage [2014/03/05(水) 00:20:10.55 ] >>388 そう同じ だから速くはならん
397 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 00:13:33.22 ] 入力作業中の100メガぐらい有るブックを任意のタイミングで瞬間的にLAN接続された3台のPCで閲覧できるようにすることは可能でしょうか? 現在VBAで別名で保存した場合1回数十秒 LAN経由で開くと応答無しになるのでそれぞれのローカルへコピーして開くと又数十秒かかり 数台へ配布するのになんだかんだ数分ぐらい時間がかかっています。 閲覧側は見れれば何でも良いです。(Excelブック形式だと尚良い)
398 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 00:35:31.08 ] >>397 不可能 大量のデータをLAN越しに同時に閲覧したい場合はAccessを使うのが普通
399 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 00:39:25.86 ] >>397 数式がてんこ盛り盛りならVBAで全部コピーして値だけ張り付けて別名保存する、ぐらいかな 処理にどのくらいの時間がかかるかは知らんけど 数式がほとんどなくてデータだけで重いのなら画像に出力してPDF化かな
400 名前:397 mailto:sage [2014/03/10(月) 00:55:43.48 ] >>398 >>399 無理っぽいのですね。ありがとうございます。 データてんこ盛りなのでアクセスやSQLなのでしょうかねぇ 使った事ありませんが、、
401 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 01:18:59.92 ] 普通の人は100メガの情報は一度にはみれない ほんとにそのサイズでやり取りする必要があるのか良く考えた方がいいんじゃね
402 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 06:46:54.06 ] >>397 ブックの共有じゃダメなの? そもそも Excel で 100MB って言うのも色々危険な香りがするが...
403 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 06:57:20.42 ] >>400 文字データだけならCSVで吐いて 閲覧者がブックを開いたら取り込むとかはどうよ セル書式は予め設定しておいて、不足なら自動書式で グラフも置いてあるなら範囲を名前定義にして取り込み時に名前定義をちょろっと修正すればいい >>402 >LAN経由で開くと応答無しになる に該当するんじゃないの?しないの?
404 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 07:46:59.95 ] >>403 > に該当するんじゃないの?しないの? 共有ブックはもう少し賢いけど、正直 100MB クラスのブックを共有で使ったこと無いから試してみてくれとしか言いようがない。 共有特有のトラブルもあるし。
405 名前:デフォルトの名無しさん [2014/03/10(月) 22:22:30.84 ] まー、あんまり無茶な使い方しない方が無難だよね
406 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 22:31:12.02 ] 画像貼りまくりでWORDみたいな使い方をしていると想像 せめてシートごとに分割したほうがいいと思うが 変な規定でもあるんだろう
407 名前:デフォルトの名無しさん mailto:sage [2014/03/10(月) 22:42:00.56 ] 100MBのファイルコピーするのに数十秒かかるLANってすごいな それを瞬間的に閲覧するようにできるExcelVBAって万能だな
408 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 10:45:11.04 ] >>407 100Mbpsで理論値maxでも100MBをコピーするのに10秒程度かかる。 実効値20Mbps位だったらその5倍かかるわけで、100MBのコピーに2,30秒かかる環境があってもおかしくない。
409 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 20:16:20.38 ] >>408 細かいことだけど100Mbpsなら8秒じゃないの?
410 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 21:30:20.38 ] >>409 実測してみるとわかるけど、固定IPで他のネット機器をすべて切り離して回線が独占できる状態を作ってやっても オーバーヘッドがあるから最高でも表示の8割〜9割ぐらいの速度になる 実用に使ってる環境だともっと遅くなる
411 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 21:44:28.36 ] >>409 細かい事をいうなら ネットワーク回線を流れてるのはデータだけじゃない 実データの1バイトが8ビットの情報として流れているとは限らない
412 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 21:47:49.12 ] でも論理値maxでって言ってるじゃん
413 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 22:23:55.06 ] 理論値なんて一番速い時の値だから、無線 LAN なんて理論的にも絶対その値は出ないしな。
414 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 22:41:58.20 ] 理論値にはいろんな取り方があるからな ファイル転送の理論値マックスは回線上の理論値マックスからいろんな層のオーバーヘッド分下がるのが当然
415 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 18:19:11.62 ID:wdy6oLTC] VBA初心者ですが VBAの命令だけを書いた空のブックと、 分析したいデータが書かれたブックを分離して運用することは可能なのでしょうか? 現状データの書かれたブックが数十に同一処理をさすためにそれぞれにVBAを記述していますが 処理方法を変更する場合全ブックの同じVBAコードを書き換えていて手間がかかっています。 ならば空のVBAだけを書いたブックを1つ動かしておけば済むのではと思ったのですが ここにいらっしゃるプロの方はどうされているのでしょうか?
416 名前:415 mailto:sage [2014/03/15(土) 18:22:17.82 ID:wdy6oLTC] >>415 又、空のブックで運用ができるのであればよく使う命令を個別にモジュール化して連携やネストさせるような運用方法も可能なのでしょうか? これができるとなるとデータの書かれているシートにVBAを書くのは大量のブックを処理する場合は非合理的かと思いましたがどうでしょうか?
417 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 18:34:24.97 ID:IpiW3W82] >>415 > 分離して運用することは可能なのでしょうか? 可能 Excel アドイン 作成 とかでググると幸せになれるかも
418 名前:415 mailto:sage [2014/03/15(土) 18:47:05.31 ID:46w16LKJ] >>417 アドイン、、こんな便利な物があったのですね。ありがとうございます。 大幅な合理化が図れそうです
419 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 04:12:41.18 ID:NI0yZz+J] 以前こちらでマクロを作っていただき、とても重宝して使わせていただいていたのですが 少し仕様の変更が出てきてしまったため、再度作成か手直しをしていただきたいのですが お願いできますでしょうか。 以下のマクロで月初から月末の所を、月初から翌月の3日までにしたいのです。 どうか宜しくお願い致します。
420 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 04:15:10.22 ID:NI0yZz+J] Sub SheetCopy() Dim firstDay As Date Dim lastDay As Date Dim targetDay As Date On Error GoTo Error_Handler With ThisWorkbook '月初日を取得 firstDay = .Sheets("1日").Range("B1").Value '月末日を取得 lastDay = DateSerial(Year(firstDay), Month(firstDay) + 1, 0)
421 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 04:18:35.64 ID:NI0yZz+J] '月初日のシートは既に存在しているので、 '先にシート名とシート色を設定してしまう。 '.Sheets(Sheet1.Name).Name = Format(.Sheets(Sheet1.Name).Range("B1").Value, "m月d日") If Not .Sheets("祝日").Cells.Find(firstDay, LookAt:=xlWhole) Is Nothing Or _ Weekday(firstDay) = vbSunday Then .Sheets("1日").Tab.ColorIndex = 3 End If
422 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 13:25:21.94 ID:vj1XNX0y] >>419-421 これコードの一部分だけだよね? 月末日を保持しているであろう変数"lastDay"をどこで使うのか分からないけど、 (ここに貼られている範囲では月末日を取得してるだけでそれを使用していない) lastDay = DateSerial(Year(firstDay), Month(firstDay) + 1, 0) を lastDay = DateSerial(Year(firstDay), Month(firstDay) + 1, 3) に変更するだけで翌月3日までにはなる。 ただし、それをどのように利用するのかはこのコード以外の部分に書いてあるので 単純にこれだけでそのコード全体が正常に(あなたの意図した通りに)動くかどうかは分からない。
423 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 22:24:00.94 ID:iQzGYjkh] >>422 やる気のないやつに解釈垂れても意味ないぞ。 そんな解釈より動くコードしか興味ないからコード書けって言ってるんだから。
424 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 23:26:36.86 ID:vj1XNX0y] >>423 いや、別にどんな相手でも良いっすよ こっちが好き勝手に書いてるだけだし。 ところで、垂れるのは解釈じゃなくて講釈ですね。
425 名前:デフォルトの名無しさん mailto:sage [2014/03/18(火) 00:01:33.11 ID:YCsGrVX8] すみません419です。 昨日はなぜかエラーが出たあと、バイさるになったまま書き込みができなくなり 続きのコードを貼る事が出来ませんでした。 このあとの続きのコードは、シート名の指定と日祝の色指定のコードになっているのですが シート名を1日、2日、3日、となるように指定しているため、これだと翌月の3日分が重複してしまうためか 422さんの仰るMonth(firstDay) + 1, 3では、エラーになってしまい上手くいきませんでした。 要は、月初から翌月の3日までのシートを作りたく、その際、日祝を赤字にし 尚且つ各シートのB1セルに○月○日と表示したものを作りたいのですが 何か上手くいく方法はありますでしょうか。 よろしくお願い致します。
426 名前:422 mailto:sage [2014/03/18(火) 00:51:31.95 ID:Riw4xitA] >>425 シート名に月も入れるとか翌月の3日分のシート名に翌月って付け加えるとか、 やりようはそれなりに有るんでないかい? その程度の修正は元のコードさえ曝せば このスレの人達なら簡単に出来るだろうけど、 肝心のコードが無けりゃ誰にもどうにもなんないよね。 ちなみに俺は寝るんで今日はもう出来ないです。
427 名前:デフォルトの名無しさん mailto:sage [2014/03/18(火) 01:11:58.51 ID:YCsGrVX8] >>426 早速のレスありがとうございます! 修正でも新規に作成でも、作っていただけるのなら どちらでも大変嬉しいのですが、一応続きのコードを晒しておきますので お時間のある時に、どうか宜しくお願い致します! 因みにシート名は、1日、2日、3日、、、としたいため 翌月3日分は「翌月」と付け加える方向でお願いしたいと思います。
428 名前:デフォルトの名無しさん mailto:sage [2014/03/18(火) 01:13:33.38 ID:YCsGrVX8] 'ひと月分のシートをコピーし、 'シート名、シート色の設定を行う。 For targetDay = lastDay To firstDay + 1 Step -1 .Sheets("1日").Copy After:=Sheets("1日") .ActiveSheet.Tab.ColorIndex = xlNone .ActiveSheet.Range("B1").Value = targetDay .ActiveSheet.Name = Format(ActiveSheet.Range("B1").Value, "d日") If Not .Sheets("祝日").Cells.Find(targetDay, LookAt:=xlWhole) Is Nothing Or _ Weekday(targetDay) = vbSunday Then .ActiveSheet.Tab.ColorIndex = 3 End If Next End With Exit Sub Error_Handler: '例外時はエラー内容を表示する。 MsgBox Error End Sub
429 名前:422 mailto:sage [2014/03/18(火) 08:56:33.08 ID:Riw4xitA] >>428 こんな事言っちゃなんだけど、>>419-421 の時点で薄々感じてたとおり やっぱり糞コードだったw(気を悪くしたらゴメンネ) いろいろ突っ込みどころ満載なんだけど、とりあえずこのままやるんだったら 例えば>>428 の .ActiveSheet.Name = Format(ActiveSheet.Range("B1").Value, "d日") を If Month(targetDay) = Month(firstDay) Then .ActiveSheet.Name = Format(ActiveSheet.Range("B1").Value, "d日") Else .ActiveSheet.Name = "翌月" & Format(ActiveSheet.Range("B1").Value, "d日") End If に変更するととりあえず動くよ。 根本的にコード全体を書き直したほうが尚更良いとは思うけど、 そういうのは俺みたいなアマチュアじゃなくて お金を払って誰かきちんとしたプロに頼むような話になるんじゃないかな。
430 名前:デフォルトの名無しさん mailto:sage [2014/03/24(月) 00:24:00.84 ID:mInA5lgN] 実行中のマクロを停止させたいときにはESCか、Ctrl+PauseもしくはCtrl+Breakとのことですが、 両者に違いはあるのでしょうか?また、どれを試しても停止しない場合の対応策ってあるんですか?
431 名前:デフォルトの名無しさん mailto:sage [2014/03/24(月) 12:27:01.03 ID:KuNBiX6y] >>430 ぐぐったらこんなん出てきた detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1149563081 まぁ、なんで動作が違うのかは読んでも分からんかったけど。 あと、ESCとかで停まんないときは おいらはしょうがないからタスクマネージャからエクセルごと停止させてる
432 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 16:33:15.72 ID:e3FYqT1N] 1万行×5列 の生データを元に、1万行×100列の中間データをひとまず作成し、 その後、中間データを諸々の処理に使う。 今は、VBAで中間データを計算させている。中間データはワークシート関数で計算させることもできる。 今のように中間データはVBAで計算させるのがいいのか、 それとも中間データはワークシート上で計算させVBAで計算結果を読み込んでその後の処理を行うのがよいのか?
433 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 19:49:34.25 ID:OpDSuCZS] 善し悪しの判断基準が曖昧だよ。 ブックの動作の軽さを求めるならVBAで処理して セルには値だけを入れるほうが良いけど、 セルに数式を入れてあればどういう処理をしているのか目で見て確認できる。 これはVBAが分からない人を相手にする時には結構重要なことで 俺も勤務先で自分で使うブックはVBA使いまくりだけど マクロ知らない上司に提出するものは出来る限りマクロを使わずに処理してる。 というか「マクロ使ったものは何をやってるか分からないから信用できない」 といわれて提出できない。
434 名前:432 mailto:sage [2014/03/29(土) 21:33:41.21 ID:e3FYqT1N] >>433 このブックは私だけが使うものです。重視したいのはマクロが高速であるかどうかということ。 VBAの高速化に関するウェブページを読むと、 コーディングの方法によりマクロ終了までの時間が大きく変わり、 又、worksheetFunctionは比較的高速であるとの情報もありました。 そこで、下手にVBAで全部処理させるよりもワークシート関数で計算できるところはワークシートで処理させるほうが 今より早くなるのかなと思ったわけです(VBAは独学のためあまり自信がないのです)。 ちなみに、生データは1日に1行ずつ増えます。処理は毎日実行します(会社休日は実行しない)。
435 名前:433 mailto:sage [2014/03/29(土) 23:51:13.09 ID:OpDSuCZS] >>434 あぁ、どっちみちVBA自体は使う前提で、 VBAのコード中でワークシート関数を使うかべきかどうかって話だったのね そんなの好きにしたら良いじゃん ワークシート関数使った場合と使わない場合を両方試して 速いほう使ったらいいんじゃないの
436 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 00:25:58.15 ID:v4CA15kT] 大量のデータをブックに貯めこむんじゃなくデータベースに入れてエクセルは 必要なデータだけ持ってきて計算にのみ使ったほうが良いんじゃないかい ま、1万行くらいなら大丈夫ではあるんだろうけど
437 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 00:31:57.51 ID:4kZGo4f6] VBA使う前提ではないんじゃない VBA使うか、ワークシート関数でゴリゴリやるか、どっちかが早いかって話なんじゃ? 全部再計算させて、中間結果必要ないなら、多分VBAでやった方が早くできると思うけど それなりにVBAがちゃんと使えるなら、って前提だが まあ今時のスペックなら1万×5ぐらいならワークシートでも気にするほどではないと思うが
438 名前:432 mailto:sage [2014/03/30(日) 01:17:55.49 ID:hXPzlqPD] >>435-437 レスありがとうございます。どちらにしてもVBAは使います。 今VBAで行っている計算の一部をワークシート関数で置き換えるべきかを検討中なのです。 VBA高速化関連のページは一通り目を通して以前に比べれば格段に早くなったのですが、 それでも数時間かかる処理もあって更なる高速化を目指しているところなのです。 一概には言えないようなので時間を測定してみます。 データの持ち方についてもいい方法を模索しています。ありがとうございました。
439 名前:デフォルトの名無しさん [2014/03/31(月) 00:10:35.50 ID:ymkB1Ks5] すみません、質問です Formula1:="=IF(A2="""",A2,INDIRECT(A2))" A2の部分をを cells(1,2)という形で指定できないでしょうか? やりたいことはプログラムのループでA2を B2,B3と変えたりしたいのです、アドバイスお願いします
440 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 00:57:57.69 ID:+/Q0rb5y] >>439 B2、B3・・・としたいなら For b = 2 to 9 (略) Formula1:="=IF(A2="""",A2,B" & b & ")" Next みたいにすればB2〜B9になる 本筋とは関係ないけどIFでA2が""の時A2を返すのってなんか無駄っぽい
441 名前:デフォルトの名無しさん [2014/03/31(月) 01:05:38.55 ID:ymkB1Ks5] >>440 さん アドバイス頂き有難うございます。 もうひとつ質問させて頂きたいのですが、 Bという位置が不定の位置なので変数で値を決めたいのですが可能でしょうか? お手数をおかけして申し訳ございません。
442 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 01:15:24.40 ID:+/Q0rb5y] >>441 文字列型の変数に入れて Retsu = "B" こうする (略) Formula1:="=IF(A2="""",A2," Retsu & b & ")" B列以外だとbって変数名は不適切かな
443 名前:デフォルトの名無しさん [2014/03/31(月) 01:22:00.80 ID:ymkB1Ks5] >>442 さん 何度もアドバイス頂き有難うございます。 夜遅いのにご返事有難うございました。 今、エクセルを試す環境がないので明日試してみます。 また、質問があったら相談させて頂きます。
444 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 01:55:50.99 ID:nFhjZp0H] >>438 処理に数時間もかかるの? それなら、変わらない部分をメモ化すれば? 1日に1行ずつ増えるんでしょ? 前日までの行が変わらないなら、 その結果をファイルに書いておけばよい 出来れば、毎回する同じ計算を避ける(メモ化)
445 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 15:01:50.77 ID:Ial2Eqsw] >>444 いや、そういうことするより、まず何にどれだけ時間がかかってるか計測するのが先。
446 名前:デフォルトの名無しさん [2014/03/31(月) 16:48:16.50 ID:3GCmwtHU] エクセルで256×256のセルに数字が入っている状態で BMPの画像を作るにはどうしたらいいでしょうか?プログラミングの技術が ないと不可能でしょうか?
447 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 17:05:56.79 ID:r3mdI7xZ] C言語でBMP作るのは、そういうのがあるってことは知ってる。それと同じことをvbaでやりたいってことなら (それがvbaで出来るかどうかは知らんけど)当然 >プログラミングの技術がないと不可能 じゃないの?
448 名前:デフォルトの名無しさん [2014/03/31(月) 18:23:52.03 ID:L50LbWDs] そうですよね・・・ 自分には敷居が高そうなので諦めます。すみません
449 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 18:28:43.68 ID:8V+7Or/W] はい敷居きた
450 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 18:31:32.29 ID:Ial2Eqsw] >>448 「セルに数字」じゃなくて実際に色を付けて、セルの幅と高さを1:1に保って小さくして、枠線を消して クリップボードにコピーして、BMPで書き出せば?
451 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 20:37:19.25 ID:S+MvAbw+] 図としてコピー あれVBAからつかえんの?
452 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 01:26:03.72 ID:5tQShRLT] 三項演算子とか連想配列を最近知ったものですが 上記のような便利機能が他にも紹介されてるサイトってないですか
453 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 00:30:48.39 ID:+8s/Qgvh] If Not IsNumeric(data) Then ElseIf (data > 0) Then ElseIf (data < 0) Then Else End If 数値か文字として渡されるdataの判定を上記のようにしたんですけど、 冗長なのでSelect Caseにしたいです。どうしたら良いですか?
454 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 00:53:09.51 ID:9+cif8YO] >>453 Sgn
455 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 01:25:50.89 ID:+8s/Qgvh] >>454 おお、ありがとうございました!
456 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 19:04:50.32 ID:zCQPlUhY] ちょっとズレるけど ここのセミナーってどうなの? ステマとかじゃなく純粋に気になった ttp://sugoikaizen.com/
457 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 19:07:13.30 ID:Crk62Mwa] >>456 すごくおすすめだよ 行っておいでw
458 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 20:05:46.77 ID:eYN2DOjD] VBAをVBE以外で書きたいんですけれども、誰かVBE以外のエディターで開発されてる方いますか? いる方は、何をお使いになってますか? VBEで以下の不満があり、関数のアウトライン機能がないこと、列挙体変数をTabで選択せずそのまま入力するとその入力された変数名に変更されてしまうなどがあり、困ってます
459 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 20:06:57.56 ID:FLwMWrjy] dir を使って、配列にいれたファイルをチェックするマクロを作りたいのですが、 「インデックスが有効範囲にありません」というエラーがでてしまって困っています。 Sub チェック() Const Target As String = "C:\Users\user\Desktop\格納\" Dim tmp() As String tmp = Split("Scr14", "Scr16") For i = 1 To 2 If Dir(Target & tmp(i) & ".txt") <> "" Then '←エラーの出る場所(tmp部分) Else MsgBox tmp(i) & vbCrLf & "が存在しません" End If Next MsgBox "確認できました" End Sub Dirに配列を使ってチェックするのは無理なのでしょうか?ご教授願います。
460 名前:デフォルトの名無しさん [2014/04/20(日) 20:12:33.50 ID:I6Nwishv] >>459 配列のアクセスに関するエラーだからDirは関係ないかな Split("Scr14", "Scr16")は、Split("Scr14,Scr16", ",")の間違いだとして、 tmpは tmp(0) = "Scr14" tmp(1) = "Scr16" こうなってる なんで、ループは0 To 1にしなきゃいけない
461 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 20:26:26.65 ID:FLwMWrjy] >>460 回答ありがとうございます。 配列に関しても理解が足りてなかったようです。 単純に文字の配列を作りたいだけなので、 Dim tmp() As String = {"Scr14", "Scr16"} のようにしたいのですが、 = のところで、コンパイルエラーが出てしまいます。(修正候補:ステートメントの最後) どのように修正したら良いでしょうか。
462 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 20:36:06.91 ID:kzevG+UG] >>461 VBAではVBみたいな書き方はできない Dim tmp tmp = Array("Scr14", "Scr16")
463 名前:デフォルトの名無しさん [2014/04/20(日) 20:36:17.19 ID:I6Nwishv] >>461 VBAでは変数は宣言時に初期化できないので、これで Dim tmp(1) As String tmp(0) = "Scr14" tmp(1) = "Scr16" Variantでよければ Dim tmp tmp = Array("Scr14", "Scr16")
464 名前:alchemist ◆IOGp1zS1sA mailto:sage [2014/04/20(日) 20:41:04.41 ID:FLwMWrjy] >>462 >>463 ありがとうございました。成功しました。
465 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 11:33:23.29 ID:/2+x+Vgo] Excel VBAでpowershellを実行し、その結果を取り込みたいと考えています。 powershellで実行したいのは以下のコードです。 $drive = Get-WmiObject -Class Win32_LogicalDisk | where-object {$_.deviceid -eq 'Y:'};$drive.providername txtファイルに出力してから取り込めばうまくいくことは分かるのですが、できればtxtファイルを経由せず、直接取り込みたいです。 直接取り込む方法があれば、ご教示いただけないでしょうか。
466 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 11:50:34.55 ID:HGvdUff0] tech.guitarrapc.com/entry/2013/07/19/200702 のサイトで見ただけなんでそれが出来るのかどうかは知らないけど 結果をクリップボードに送り込めるなら、後はそのデータをapiを使うなりDataObjectオブジェクトを使うなりで クリップボードから取り出せる
467 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 12:31:02.08 ID:ZM+hJQpr] >>465 ほい PowerShellの出力をワートシートのA列に取り込むサンプル ' OpenProcess Declare PtrSafe Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Const SYNCHRONIZE = &H100000 ' WaitForSingleObject Declare PtrSafe Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Const WAIT_OBJECT_0 = &H0 ' CloseHandle Declare PtrSafe Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Sub sample2() Dim hProcess As Long, lret As Long lret = Shell("powershell ""Get-WmiObject -Class Win32_LogicalDisk|Clip""", vbHide) hProcess = OpenProcess(SYNCHRONIZE, 0, lret) Do Until WaitForSingleObject(hProcess, 100) = WAIT_OBJECT_0 DoEvents Loop lret = CloseHandle(hProcess) Cells(1, 1).Select ActiveSheet.Paste End Sub
468 名前:465 mailto:sage [2014/04/23(水) 15:48:54.72 ID:05nonx0d] >>466 >>467 返信ありがとうございます。 >>467 試したのですが、ネットワークドライブのリモート名に日本語が含まれている場合は?に化けてしまい、うまく回らない状況です。 (含まれていない場合はうまくいったのですが)
469 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 18:28:55.92 ID:ZM+hJQpr] >>468 Shell("powershell ""$OutputEncoding = [console]::OutputEncoding;ほげほげ
470 名前:465 mailto:sage [2014/04/25(金) 00:24:01.06 ID:dAeKMCVg] >>469 返信ありがとうございます。 >>467 Declareのところだけ既に同名の宣言をしてあったのでそれを活かす形式にし(何故かPtrSafeがうまくいかなかった)、 $OutputEncoding =〜も使わせていただいたところ、 今のところ問題なく回っています。 皆さんご協力ありがとうございました。 助かりました。
471 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 00:48:38.11 ID:97MfQF5y] >>470 PtrSafeは64bit環境
472 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 19:43:27.59 ID:IKtZUAxC] お願いします シート名「uriae」の F2に入っている関数をF列の下へ向かってオートフィル で関数をコピーしていくVBAをお願いします。 関数のコピーは、同じシートのA列に文字が入力されているので A列の文字が入力されている最終行までコピーしたいと思います。
473 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 01:31:25.36 ID:w0bO41GV] >>472 ここは質問スレであって作ってくれる場所じゃないから まずは自分でどうやろうとしたかを書いてみればいいと思うんだ
474 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 01:08:06.58 ID:Z51g+zsH] うりあえ?
475 名前:デフォルトの名無しさん mailto:sage [2014/05/05(月) 00:35:51.93 ID:UkI77+Fd] すみません、初めてVBAを作っているのですが詰まってしまいました。 <やりたいこと> ・セルに商品NOを入力して、そのセルがロストフォーカスしたタイミングで、 入力された商品NOで別シートの商品表から、商品名をもってきたい。 <困っていること> "Worksheet_Change"イベントを使用して、ロストフォーカスのイベントを 拾うことはできたが、ロストフォーカス前に選択されていたセルの内容を 拾えない。 (ActiveCell.Valueで取得しようとしたが、ロストフォーカス後に選択された セルの内容を取得してしまう。) もしよい方法があれば、ご教授いただけませんでしょうか。
476 名前:デフォルトの名無しさん mailto:sage [2014/05/05(月) 01:55:30.65 ID:uFaF33P2] >>475 SelectionChangeイベントで、カーソルが動くたびにセルの座標をいちいち独自の履歴に溜めていく だけど普通は商品NOが確定すると同時にChangeイベントで商品名をセットするもんだよ ワンテンポ遅らせる理由がわからない 初心者ならなおさらセオリー通りにやった方がいい さらに言えば、商品名をセットする程度の処理ならVBAを使うまでもなくVLOOKUPとかで可能だし
477 名前:デフォルトの名無しさん mailto:sage [2014/05/05(月) 04:35:04.82 ID:UkI77+Fd] >>476 vlookupなんていう関数あったんですね・・・ これで解決できそうです! ありがとうございました!
478 名前:デフォルトの名無しさん mailto:sage [2014/05/05(月) 18:42:40.78 ID:AK1zskjW] Excel2013です。複数のページからクエリでデータを取得したいです。 Sheet1のA列から下へ取得したい先のURLが入力されていて、クエリでデータを取得し、新しいシートA1に貼り付けする。 Sheet1のA列のセルが空白になれば処理を終了する。 VBAでクエリを実行する事が出来る所までは出来たのですが、上記の様にしたいのですが知識が乏しく躓いています。 今、出来ているのは下記になります。 Sub クエリ抽出 () With ActiveSheet.QueryTables.Add(Connection:= _ "url;取得データがあるURL", _ Destination:=Range("A1")) .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "1" .Refresh BackgroundQuery:=False End With End Sub 宜しくお願いします。
479 名前:デフォルトの名無しさん [2014/05/11(日) 20:01:24.57 ID:0QNYDm24] 申し訳ない、このスレの趣旨とはズレてると思うんだけど、総合スレ的なものがどこにあるか分からないから聞かせてほしい。 参照元のないセルにデータ(数式ではない)を入力したときに循環参照のエラーが出てしまうんだけど、EXCEL 2010にはそういうバグがありますか? 参照先のセルを見てもさっぱり原因がわからなくて困ってます。 周辺のセルはオートフィルで埋めてるので数式は大差ないのに、ある一つのセルだけどうしてもエラーになってしまいます。
480 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 20:34:18.27 ID:9n+Ded1d] 総合スレならビジネスsoftの方に Excel総合相談所 113 toro.2ch.net/test/read.cgi/bsoft/1398901813/l50 ってのがあるけど
481 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 20:39:46.70 ID:0QNYDm24] >>480 ありがとうございます。そちらで質問させていただきます。
482 名前:デフォルトの名無しさん [2014/05/11(日) 21:08:18.06 ID:valH51XC] WordVBAスレがないんでここで質問させてください フォルダに画像がたくさんあります。 これをWord文書の1ページに1枚貼り付けたいです。 貼り付け方は左上に合わすだけでいいのでたぶんそんなに設定はしなくていいんじゃないかな。 貼り付け方も行内でも四角でもどちらでも変わらないと思うし。 でも今後の発展のため仮に画面の中央のどまんなかにあわせ、挿入方法は「四角」だとどうなるでしょう? 幅・高さは、どちらかが外周に接するところまでひきのばし/縮めるとします。縦横比はオリジナルと同じにして。 ExcelVBAからでもCreateObject("Word.Application")みたい感じでWordを操ることができると思うのでお願いいたします。
483 名前:デフォルトの名無しさん [2014/05/11(日) 21:09:51.81 ID:valH51XC] まあ画像のフルパス("C:\Users\USER\Desktop\pic01.jpg")みたいなのを Excelのセルにあらかじめ書き込んでるとしましょう。
484 名前:デフォルトの名無しさん [2014/05/12(月) 01:23:50.26 ID:DXQGbXMr] 質問です。 VBAの講習を受講して思ったが、簡単な実務に生かすために、短時間で習得するための方法。 これあってますか? ★マクロを組んで、マクロで処理できない条件処理の構文を追加することを覚えることが、 一番楽で簡単なエクセル処理には向いてますか? それとも、すべて手打ちすることを覚えるほうが、かなり有用ですか? 状況 簡単なマクロ等の自動処理がしたい。 スキルは、VBAの勉強は講習で30時間ほど。まったく身につかなかった。 関数等は普通に使える。
485 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 11:17:08.22 ID:tYXPKjS8] 今の自分が必要とするもの…で無い限りモチベーションに苦労しないか? 実務に活かす事が目的なら今の仕事を自動化するにはどうればいいかを考えれば良いと思う >すべて手打ちすることを覚えるほうが ってのが何を言ってるのかわかんないけど。
486 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 13:02:48.27 ID:OiSoC7y/] マクロの記録と手書きで違うものだと思ってるのかな
487 名前:デフォルトの名無しさん [2014/05/12(月) 22:03:47.06 ID:1mlAXgHL] マクロ自動記録で出来る事できない事は把握してるようだけど。。。 要は「簡単なマクロ等の〜」簡単がどこまでかでしょう。 最初はきちんと教えてもらった方がいい。 観念的だが、ゼロ→1は難しく1→2は比較来容易
488 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 02:43:20.87 ID:/l0lTNTz] 俺にはこの人の文章が理解できないが 30時間も講習うけてまったく身につかなかった人だぞ うける講習まちがってるか、絶望的に向いてない人かどっちかだ
489 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 11:32:08.29 ID:VmzA9yq/] >>484 の★部分の意訳 マクロの自動記録をして 自動記録では処理が出来ない条件分岐等をVBAで追加するという方法が、 エクセルでの処理の自動化には有効ですか? それとも、自動記録に頼らず、 全てVBAで記述することを覚えたほうが良いでしょうか? ということだと思う。 俺なりの回答としては、自動記録を使おうが使うまいが VBAの基本的な知識はどっちみち必要だし是非覚えるべき。 VBAで出来て自動記録で出来ないことはたくさん有るけど 自動記録で出来てVBAで出来ないことはない。 もちろん、自動記録で出来ることならVBA使わずにやったって構わないし、 自動記録で記録したほうがコード手書きするより早い場合もある。 でも、VBAを知ってないと やりたい作業を自動記録でやるのとVBAでやるのと どっちが楽かとか判断できない。
490 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 12:55:48.39 ID:V6Rb20LO] 再利用性とか考えると、シートからのデータ抽出、主処理、処理結果の反映って作りになる だからマクロの記憶はベースとなるものではなく、Excelオブジェクトの操作方法を調べる時ぐらいしか使わない
491 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 16:35:43.02 ID:JkOdWH0g] Sub A() Range("D11").Select Selection.End(xlDown).Columns("H").Select ActiveCell.FormulaR1C1 = "1" End Sub (H列,Dの最終行)に1を入れたいんですが(K列,Dの最終行)になってしまいます。 どうすればいいんでしょうか。
492 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 16:49:49.69 ID:VmzA9yq/] Selection.End(xlDown).Columns("H").Select ってところが問題 これだとSelectionが"D11"で、.End(xlDown)がそこからの最終行(つまりD列の最終行)となるんだけど、 次の.Columns("H").Selectはそこを1列目(A列)として右に8列目(H列) (つまりD列の7列右でK列)を選択している。 解決方法はまぁとりあえず.Columns("E").Select とか .Columns(5).Selectにしたり、 列の指定と行の指定を別々にやったり色々ある
493 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 18:00:38.46 ID:JkOdWH0g] Hの文字を内部に使いたいんですがその場合はどういう方法がいいでしょうか
494 名前:デフォルトの名無しさん [2014/05/13(火) 18:51:25.04 ID:r+9o8GUq] あるセル範囲 (行も列も複数ある) の値を配列変数に入れるには、どういう方法が一般的ですか? 行と列の二次元だけれど、配列は1次元とします。(順番はどうでもいい。セル範囲のセル数が要素数となる。)
495 名前:デフォルトの名無しさん [2014/05/13(火) 18:52:46.12 ID:r+9o8GUq] ついでに空白セルがあった場合はそのセルは無視します。
496 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 19:01:16.72 ID:VmzA9yq/] >>493 列と行を別々に指定する。 つまり、列はH列で決まってるわけだから Cells(Selection.End(xlDown).Row, "H").Select とかでいいじゃん。 Selection.End(xlDown).Row で、Selection(つまり"D11")から下に探した行を取得して、それを指定 列はそのまま"H"でH列を指定 ということ
497 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 19:08:16.70 ID:JkOdWH0g] >>496 ありがとうございます
498 名前:487 [2014/05/13(火) 21:08:23.50 ID:wn45zDPA] >>488 すまん、30分と間違えた
499 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 21:32:17.40 ID:ph3+WM+5] 30分www まぁ手書きで
500 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 15:02:32.44 ID:CuHF+7gT] 何方か>>478 をお願いします。 検索してみたら、同じ様な事をしたい人が居たのですが、解決には至っていませんでした。 どうか、宜しくお願いします。
501 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 17:08:56.86 ID:ZCY9UWx+] >>500 実行するたびにシートが増えるが、そこはどうにかしろ。 Sub foo() Dim r As Range Dim sheet As Worksheet For Each r In Range("A1").CurrentRegion Set sheet = Worksheets.Add クエリ抽出 sheet, r.Value Next End Sub Sub クエリ抽出(ByRef sheet As Worksheet, ByVal url As String) With sheet.QueryTables.Add(Connection:= _ "url;" & url, _ Destination:=sheet.Range("A1")) .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "1" .Refresh BackgroundQuery:=False End With End Sub
502 名前:500 mailto:sage [2014/05/15(木) 01:25:42.71 ID:Gz+0SdGV] >>501 ありがとうございます。 今夜、早速試してみます。
503 名前:デフォルトの名無しさん [2014/05/17(土) 08:01:53.07 ID:nXU1UeAN] 2次元配列の要素の数を調べるにはどうすればいいですか? 普通のはUBoundでいけるけど、2次元だと詰んでる。
504 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 08:07:13.92 ID:bGHl19aa] それぐらいぐぐれよw
505 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 08:10:05.17 ID:q+MS9gLN] ヘルプで十分
506 名前:500 mailto:sage [2014/05/17(土) 09:11:27.80 ID:kSvc6BWF] >>501 実際に動作を確認しました。 シートが一枚一枚、増えるのはこちらの希望通りで、問題ありません。 期待していた通りになってくれました。大変助かりました。 重々、お礼申し上げます。ありがとうございました。
507 名前:デフォルトの名無しさん [2014/05/17(土) 18:55:01.51 ID:nXU1UeAN] じゃあ 2次元配列の要素数を動的にして あとでReDimで変更するにはどうしたらいいですか? 2つのうち両方とも変更したいです。
508 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 19:03:56.16 ID:q+MS9gLN] >>507 そんなもん自分でやってみりゃいいじゃん なんでもかんでも聞くなよ Sub test() Dim a() ReDim a(3, 3) ReDim a(5, 5) End Sub さあ、どうなった?
509 名前:デフォルトの名無しさん [2014/05/17(土) 19:54:30.60 ID:nXU1UeAN] >>508 あれ、できるじゃないか。 おかしいな。 2次元動的配列は、最終の2次元目のみ要素数を変更できると書いてあったのに。
510 名前:デフォルトの名無しさん [2014/05/17(土) 19:57:07.95 ID:nXU1UeAN] 実際こうしたらエラーが出たぞ。 Sub test2() Dim a() As String ReDim a(3, 3) ReDim Preserve a(5, 5) End Sub
511 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 20:48:25.73 ID:q+MS9gLN] >>510 ヘルプぐらい読め ていうかまず一番にヘルプを読め ヘルプでわからなかったらググれ それでもわからなかったら人に聞け
512 名前:デフォルトの名無しさん [2014/05/17(土) 21:35:47.99 ID:nXU1UeAN] ヘルプ見つからず、検索出てこず、ここで人に聞いても回答なし。 詰んでる。
513 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 21:43:18.79 ID:E1N9nGHa] PreserveなしのRedimは次元数も要素数も変更できる Preserve付きのRedimは次元数は変更できず、最後の次元の要素数のみ変更できる
514 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 22:28:57.78 ID:q+MS9gLN] >>512 Excelが入っててヘルプが入ってないわけないだろ
515 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 22:40:38.76 ID:bGHl19aa] これすら見つけられなかった? Redimステートメント msdn.microsoft.com/ja-jp/library/w8k3cys2.aspx
516 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 22:42:59.11 ID:bGHl19aa] VS2013?間違えた
517 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 23:06:02.53 ID:q+MS9gLN] msdnだと日本語のリファレンスが見つからないんだよなあ (VBはあるけどVBAが見あたらない) msdn.microsoft.com/en-us/library/gg251578%28v=office.15%29.aspx 探し方が悪い気もするんだけど、ようわからん
518 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 11:25:50.87 ID:f0QDfVej] 正直、ヘルプMSDNとかよりもググって誰かの書いた説明の方が わかりやすいと思ってしまう俺はド素人なんだろうな。
519 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 11:52:19.34 ID:rUx0aG1K] とりあえず動けばいいレベルのマクロを作るだけなら何を参考にしてもいい 想定外の動作をしてバグか仕様か自分の勘違いかわからない時は、結局はmsdnやヘルプを確認するしかない時もある もちろん公式文書にも間違いはあるので注意が必要だけど、>>510 みたいにヘルプにちゃんと書いてあることを あたかも大発見みたいに書かれると萎える
520 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 16:00:29.34 ID:1/it3LsY] >>518 英語力の問題では?
521 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 16:47:32.55 ID:0bx4PTQ0] >>518 ヘルプやMSDNがわかりやすいと思ったら、だれもそんな解説書かないだろ ヘルプみてわけわからんなら解説探せばいいけど、公式情報みるのは最低限必要
522 名前:デフォルトの名無しさん [2014/05/18(日) 21:22:16.26 ID:UBuQU1Du] toro.2ch.net/test/read.cgi/tech/1382015080/
523 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 22:00:39.47 ID:H/JD4vj2] MSDNも、機械翻訳版だと無意味に近いし、 人間が訳したのは英語版の重要なところを こっそりスッ飛ばしてる場合があるから要注意だ。
524 名前:デフォルトの名無しさん mailto:sage [2014/05/21(水) 22:23:52.70 ID:BFHFMym8] 俺ほどの人間は、自分で調べるなんて愚行しない。 ここに書いて手っ取り早く解答得るのがベスト。
525 名前:デフォルトの名無しさん [2014/05/22(木) 17:38:55.74 ID:OR1KcKew] そして素人の書いた適当なレスに騙される
526 名前:デフォルトの名無しさん mailto:sage [2014/05/22(木) 18:09:40.63 ID:jxaWow30] 情報とか手がかりじゃなくて解答というあたりが・・・
527 名前:デフォルトの名無しさん [2014/05/24(土) 10:53:14.15 ID:eu02DRrY] Excel2013 の PDF保存のコードについて教えてくださいませ。 名前をつけて保存、で複数シートを1つのPDFに保存するコードを書きましたが なぜか動く動きません。 Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Sheets("Sheet1").Activate ActiveSheet.ExportAsFixedFormat type:=xlTypePDF, Filename:= "C:\Sheet123.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Arrayで最初に選択したシートのみが出力されてしまいます。 2行目の Sheets("Sheet1").Activate を削除しても結果は変わらずでした。 マクロで記録しても、上記と同様のコードが記録されます。 しかしこの記録されたマクロを実行すると、やはり最初に選択したシートしかPDF出力されません。 何が足りないのでしょうか?
528 名前:527 mailto:sage [2014/05/24(土) 10:56:45.70 ID:eu02DRrY] ごめんなさい!出来ました!ワ〜イ ウィンドウを複数開いてたのが原因でした
529 名前:デフォルトの名無しさん mailto:sage [2014/05/25(日) 22:23:52.52 ID:8sEJJ/Xn] VBAを使ってπの道の桁数の計算に挑戦することは可能ですか?
530 名前:デフォルトの名無しさん mailto:sage [2014/05/25(日) 22:24:17.44 ID:8sEJJ/Xn] >>529 道→未知・・
531 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 10:24:59.73 ID:xBqIirxp] 挑戦するだけなら可能でしょ 成功はしないけど
532 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 12:13:08.87 ID:ptXAqcmg] たぶん未知の領域に到達する前に 後から来る人に追い越される
533 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 12:26:24.18 ID:dlApJPlM] 道の桁数の計算方法が確定しているなら その計算に必要なリソースが確保できるなら可能
534 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 15:34:56.33 ID:EGdbrytd] いや、未知の桁数に達するまで太陽系が存在出来るかを問題にしないと
535 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 19:57:34.24 ID:dlApJPlM] >>534 挑戦出来るかどうかと聞いてるから、そこは問題にならない
536 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 20:30:26.14 ID:9XuuTI4K] Excel VBA 量子コンピューター版が出れば最初に的確に着手した人なら達成出来る? it.impressbm.co.jp/articles/-/10453 D-Wave はコンピュータではないらしい。 計算を高速化する独自の数式や手法を発見すれば現在のExcelでも可能?
537 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 20:39:03.08 ID:JsbqvBWY] 考えてみればExcelは1つじゃない 手に入るだけの台数の高速なPC(数千・数万台とか)とExcelで並列処理させればできるか? VBAが何所まで並列処理にむいているかはやったことが無いのでわからんが。
538 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 20:51:31.05 ID:LCv9Wl+A] >>529 VBA は 64KB 壁があったりして棘の道だと思うが君ならきっとやれる。
539 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 23:11:20.50 ID:Ed2uGBCo] 仕事で自動化したくてOLEオートメーション使いたいのだけど これってもう古いの? どこ探してもよくわからない おすすめの本ってある?
540 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 23:43:24.09 ID:7NSDbYse] >>539 質問の意味が良くわからない 何を自動化したいのか 「オートメーション」という言葉を何か勘違いして受け取っているようにも見える
541 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 23:47:12.46 ID:Js6v2rIN] ActiveXでぐぐれなさい
542 名前:デフォルトの名無しさん [2014/05/27(火) 11:36:41.29 ID:CQuE4vUS] VBAで満足しているんですが、 ほかのプログラム言語覚えるとなにかいいことありますか? VBAじゃ出来ないことある?
543 名前:デフォルトの名無しさん mailto:sage [2014/05/27(火) 12:10:21.53 ID:pK8lgo+n] >>542 もちろんVBAにできないことはたくさんあるけど、他の言語にもそれぞれ苦手な分野があるんで 自分のやりたいことがVBAじゃ大変だとわかってから、その作業に最適な言語を探した方が無駄が少ないかもね
544 名前:デフォルトの名無しさん [2014/05/27(火) 12:29:28.96 ID:CQuE4vUS] >>543 そうですかぁ 目的はっきりしないうちに、 ほかの言語覚えるのも大変ですよね・・ VBAの限界がみえるまではVBAだけで行きます!
545 名前:デフォルトの名無しさん [2014/05/27(火) 12:39:03.97 ID:JkwAmhtq] >>542 JAVAとかCとかだと求人が多いけどVBAじゃ求人が少ないから つぶしが利かない
546 名前:デフォルトの名無しさん [2014/05/27(火) 12:44:54.08 ID:CQuE4vUS] >>545 なるほど、 仕事じゃなく個人で使うだけならVBAで十分かな? 足りなくなったら、DLL?とかほかの言語で作って、 VBAで呼び出せばいいか・・
547 名前:デフォルトの名無しさん mailto:sage [2014/05/27(火) 13:18:47.16 ID:1WWRQ+yd] Excel VBAで作ると、出力先がほぼシートになるから結構便利なのよね グラフとか後でくっつければ良いだけだし sheet1、使い方の説明とか入力用 sheet2、出力用テンプレート sheet3以降、出力先 って感じで作れば、使い方とか後で訊かれる事も少ない インターフェイスの設計とか悩まなくて済むのはメリット
548 名前:539 mailto:sage [2014/05/27(火) 21:24:50.12 ID:ynAF/lre] >>540 Excelに数値を入れてCADでそれに沿った図面を作成したいのです。 OLE自体をあまり理解してないのですが、 アプリケーション自体が公開しているメソッド(CADでもソフトによって違う) を使用するということでしょうか
549 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 06:25:58.57 ID:am2JQYoj] つまり、CADソフトをOLEオートメーションでEXCELから操作したい、と OLEオートメーションって言葉は古いな。間違ってはないが VBAの命令としてはそのCADソフトのオブジェクトを生成するCreatObjectって言う命令だけ それ以外は普通のEXCEL VBAの入門書でだいたい事足りるかと あとはそのCADソフト側で用意されてるメソッドなり何なりを操作する それはそのCADソフト側の問題なんでそっちに聞いてください
550 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 09:41:47.76 ID:BSb9yGb4] ああ、昔AutoCADで似たような事やったな VC++だったけど CAD側の文字コードに注意してやらないと、文字化けとか大変な事になる予感 使い方としては、549の言ってる通りでいけると思うけど、 Excelで数値入れるのが果たして使いやすいかというと、 実はそうでもなかったりしがちになるので、 必要な要件はきっちり洗い出す必要あると思うよ
551 名前:デフォルトの名無しさん [2014/05/28(水) 11:36:19.19 ID:tvrcqpPe] VBAの標準関数のソースを見たいのですがどこに記述されているのでしょうか?
552 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 11:42:23.21 ID:mspF09G9] 非公開じゃないの
553 名前:デフォルトの名無しさん [2014/05/28(水) 11:52:24.90 ID:tvrcqpPe] そりゃないよかあちゃん
554 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 16:09:51.90 ID:PxoSlPb7] excel vba実行中の画面のちらつきは Application.ScreenUpdating で 抑えられたが それでもタスクバーがちらついて困っていた。 タスクバーのちらつきは Application.ShowWindowsInTaskbar で抑えられるのが分かった。 ShowWindowsInTaskbar って昔からありましたっけ?
555 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 18:00:58.65 ID:pq9FJS3g] >>554 > ShowWindowsInTaskbar って昔からありましたっけ? なんでググらないの?
556 名前:デフォルトの名無しさん [2014/05/28(水) 19:31:12.32 ID:tvrcqpPe] あるセル範囲を選択してて その中にあるセルで (1) 空白なら除外する (2) 同じ値があれば1つを残して他は除外する の操作をしたあと 各セルの値をString型の配列変数として入れたいんです。 そのためにはどういうコードを書けばよいでしょうか? さあ、書きなさい。
557 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 19:51:40.59 ID:6RxarYIU] rangeをOLEで取得するとarrayになるようですが VBA以外の言語とデータをやり取りするにはどうすれば良い?
558 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 20:35:31.75 ID:aALl0Wxc] >>557 Variant型はExcelやVBAだけで使える型じゃなくてWindowsシステム全体で定義されてるんで たいていの言語でそのまま扱うことができる
559 名前:539 mailto:sage [2014/05/28(水) 21:11:33.80 ID:tkho5s2n] >>549-550 詳しい解答ありがとうございました。 非常に分かりやすかったです。 描くのは直線だけでなるものなので業務の時間を短縮できるのかなと。 あとはCADソフト側の命令の仕方ですね、頑張って探してみます。 ありがとうございました。
560 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 23:52:38.39 ID:am2JQYoj] >>556 あるセル範囲を選択してて その中にあるセルで (1) 空白なら除外する (2) 同じ値があれば1つを残して他は除外する の操作をしたあと 各セルの値をString型の配列変数として入れる こういうコードを書けばよいよ 要件定義が甘いが、どこがわからんかわからん
561 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 00:20:40.78 ID:pIxlUzsM] >>556 Dictionary使うのはどう? Existで調べて、無かったらAdd これを繰り返して最後にString型の配列変数に入れる
562 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 00:22:14.59 ID:pIxlUzsM] スペル間違えた × Exist ○ Exists
563 名前:デフォルトの名無しさん [2014/05/29(木) 08:48:17.68 ID:/DaeRAwK] Do DoEvents Sleep (100) Loop Until flag = True な無限ループをイベント監視用にユーザーフォームで走らせているんですが, フォームのタイトルバーを捕まれるとループが止められてしまいます。 ループ用にvbModelessなフォームをHiddenで隠して回しても, 他のフォームのタイトルを捕まれると止まってしまいます。 タイトルを捕まれてもマクロが止まらなくなる方法ってありますか?
564 名前:デフォルトの名無しさん [2014/05/29(木) 12:02:11.02 ID:Amp5ddSE] >>561 ありがとうございます。 あなたはこのスレにときどき登場するDistionary厨のかたですね? これを機会にDisctionaryの使い方を理解してマスターしようと思うのですが いいサイトか本はないでしょうか?
565 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 14:29:26.90 ID:sq7Ykhg/] >>563 残念ながらExcelVBAはマルチスレッドに対応しておりません というか、止められると言っても、終了してしまうのではなく中断するだけだろ? タイトルバーを掴んでいる間さえも中断しちゃまずいって、いったい何を監視しているやら? それに、ユーザーフォームの移動なんて、そう頻繁に行うことでも、長時間行うことでも無いじゃん それとも、自分が使う物ではなく他人が使う物で、タイトルバーを掴んだままにすることで 意図的に監視を一時停止出来ちゃうと困るとかなのかな? だとすれば、パス掛けたところで簡単に破れて、ソース弄れば監視の無効化も、もっと簡単に 一時停止できるようにすることも可能なVBAでそういうものを作ること自体が不適切 それに、タートルバーを掴んでいる間、つまりExcelの操作をしていない間も監視が必要って事は、 監視対象はExcel上のものではないんだよね? だとすると、その辺に別の対処法の突破口があるかもしれないな
566 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 15:11:02.01 ID:dLhscPPS] >>563 Sleepを消せば少し改善されると思う 空のループはDoEventsだけで十分
567 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 15:20:33.17 ID:mJj+KV4g] タイトルバーを掴んでる間はDoEventsが戻ってきてないようだが
568 名前:563 [2014/05/29(木) 17:38:29.96 ID:/DaeRAwK] >>565 やりたいことは測定器からのデータ取得(GPIB)で,2秒に一回のイベントを監視する目的です。 具体的には AD変換完了のイベント発生 -> 測定値の取得コマンド発行 -> 測定値の転送 という流れで,イベントが発生したら2秒以内に「取得コマンドの発行->転送」をしないと データを取りこぼしてしまいます。 そこで,フォーム(中断イベント発生用ボタンを表示)がじゃまだと画面の脇によける動作をすると ループが止まって取りこぼすので困っておりました。 その後,WindowsAPIのSetTimer/KillTimerを試しまして,今回の目的(2秒)なら 行けそうな感じで収まりました。 >>566 >>567 のとおり,つかんでいる間は帰ってきてくれないようです。
569 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 18:03:06.09 ID:mJj+KV4g] そのAD変換完了のイベントってのがどうなってるかしらんが それで空ループまわして待つ意味がわからんし、時間制限があるのに変換完了イベントから 取得コマンド発行までの間でDoEventsする必要もわからん
570 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 19:47:40.83 ID:sq7Ykhg/] >>568 そういうのは普通、測定器→ローカルデータ、ローカルデータ→Excelって二段構えでやるもんだよ ユーザーフォームのタイトルバーを掴む意外にも、ループが一時停止される要素はあるし Excelのエラーで強制終了して再立ち上げするにも、2秒以内じゃまず無理なので取りこぼしが出る だからまずはデータをローカル(HDD)に保存するってことだけに専念したアプリやスクリプトを走らせて それが保存するローカルデータをExcelで監視するってのが常套手段 それなら、Excelの監視が止まっている間にイベントが2回発生しようと3回発生しようと HDDにはその2回なり3回分なりのデータが保存されたままになるから、後からいくらでも読み出し可能
571 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 19:57:52.53 ID:dLhscPPS] それこそ外部プログラムからOLEでワークシートにデータを書き込んで、Changeイベントで処理すべきだろ リアルタイムで処理する必要があるかどうかは知らんが リアルタイム性が必要なければファイルにCSV保存して、あとから加工なり分析なりすればええ
572 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 21:38:45.66 ID:pIxlUzsM] >>564 Dictionaryでググレばいいと思うよ 俺もそうした
573 名前:デフォルトの名無しさん mailto:sage [2014/05/29(木) 22:25:02.22 ID:MJP51S+k] "プロジェクトまたはライブラリが見つかりません"のコンパイルエラーが発生したので以下のページを参考にして解決しました。 www.moug.net/tech/exvba/0150128.html お聞きしたいのは、参照不可となった原因です。あと、参照不可となっていたライブラリのチェックを外すことで今後問題が起きないのか?ということです。 ちなみに、開発環境と実行環境は同一のPC1台のみです。よろしくお願いします。
574 名前:563 [2014/05/30(金) 08:43:27.05 ID:VsNT1DP0] >>569 イベント=グローバル変数のビットが立つだけでなので, 単純にループを回し続けてグローバル変数を確認し続ける処理となってます。 また,DoEventsは中断/終了処理のためにフォームのボタンを押す必要があるためです。 >>570 ,571 CSVを吐かせるのが一番容易ではあるんですが,他者がメンテするときに開発環境等 構築の必要がないVBAのみで完結させたいなというのがありまして。
575 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 09:28:42.64 ID:ztZ/Ok0F] >>574 悪い事は言わん、計測器関連はVBAでやるの止めとけ 今はVisualStudio Expressもあるし、無料で環境構築できるんだから、 Excel に拘らない方が良い どっちかつうと、VB側からExcel吐き出しする方が経験上楽で確実
576 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 09:34:30.18 ID:tZceHJTB] Excel2個起動したらマルチで動くよ
577 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 10:03:47.61 ID:gm611zV1] そのグローバル変数を書き換えてるプロセスはいったいどこで動いてるんだ?
578 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 15:23:03.23 ID:g1Pwsqem] >>574 >単純にループを回し続けてグローバル変数を確認 グローバル変数セットするときにイベント起こすなり特定プロシジャ呼ぶなりすれば良い話 ループで変数監視とかどう考えても設計がおかしい >DoEventsは中断/終了処理のために 変換完了イベントから取得コマンド発行までの間は中断できないようにすれば良いだけ 要求される仕様にもよるけど設計がおかしい
579 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 15:38:13.41 ID:g1Pwsqem] >>573 >参照不可となった原因 たとえば参照設定されていたプログラムをアンインストールしたら当然参照不可能になるわな お前のPCに起こった事がそれだけの情報でわかるわけがないだろう >今後問題が起きないのか お前のプログラムが何をどうやってたかわからんのに、わかるわけがないだろう コンパイルしてみてエラーが無いようなら、一応問題が無いと言えるかもしれんが ライブラリの中身が変わって参照設定が無くなってたりしたら、そのライブラリに 互換性の問題があったりするかもしれん
580 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 15:45:03.61 ID:9Pr1vy7p] いつもの 「設計が不適切だから、実現が困難になる」 という、初心者がよくハマる罠ですな
581 名前:デフォルトの名無しさん [2014/05/30(金) 16:06:49.06 ID:VsNT1DP0] >>575 テンプレート作っておいて最終的にcom使って吐き出させるのが確実ですかね。 >>577 すみません,私の勘違いでグローバル変数が変わるのではなく, ループ中で測定器のステータスを読みに行くコマンドを送り, ADデータが更新されたかのフラグを自分で立てていました。
582 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 21:06:21.63 ID:uIjyT6t9] 具体的な記述は自分で考えますので方向性だけお力をおかしください 現在、シート1にデータの羅列を手入力しています その後、いくらかの計算を経てシート2に転写しています このとき、シート1は月日関係なく羅列が続いているのですがシート2は月末ごとに集計したいと考えています ↓へ続く
583 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 21:07:57.55 ID:uIjyT6t9] イメージとしては ・シート1 1/1 5 1/10 3 1/25 6 1/31 10 2/3 5 2/20 2 3/2 4 シート2 1/1 5 1/10 3 1/25 6 1/31 10 ---------- 1月最大 10 1月最少 3 1月計 24 ---------- 2/3 5 2/20 2 ---------- 2月最大 5 2月最少 2 2月計 7 ---------- 3/2 4 こんなイメージです、初めは文字通り転写していたのですがそうするとあとから月末の集計を挟むとずれるのでそのあたりヒントをいただけたらと思います
584 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 21:20:31.98 ID:9Pr1vy7p] クラス使って構造化すれば良いだけやん 因みに最大の反対は最小で、最少の反対は最多な
585 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 21:36:10.28 ID:e0LBlZuD] 転写後に集計行を挿入する。 転写元と転写先の行指定を同一にしないでわける。 (Row1行目をRow2行目に転写)
586 名前:デフォルトの名無しさん mailto:sage [2014/05/30(金) 22:04:39.86 ID:FUgryqqJ] >>583 分かり易いコードだったら シート1の上から月の変わり目まで値をシート2に代入して、 その間最大と最小と月計を求めておいて、それをシート2に書き込んだら また次の月を処理してやればいいんだけど、 別にそんなことしなくてもピボットで行けるんじゃないかと思う。
587 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 01:24:27.59 ID:BIC+yzDE] ひとまずシート1からシート2へ、 全てのデータをコピーする 次にシート2へ、最大値・最小値・合計を、 後ろの行から追加していくと、 行の数え間違いが減りそう
588 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 08:16:56.63 ID:Ym0wh1sa] エクセルの2003で作ったマクロを2013で使用したいのですが、 そのままコピーをしても使えません・・・ 互換モードで変換しても、上手く起動してくれません。 どうしたらよいでしょうか?
589 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 08:31:34.05 ID:hcRtMx6V] >>588 使えないってのどういう状況? コピーって、何をどうコピーしたんだ? それは本当に2003で作ったマクロなのか? 情報が足りなすぎて何とも言えん エスパーするならセキュリティセンターの設定で行ける気がするが
590 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 10:11:58.90 ID:0hCJmlYV] >>588 エスパーすると、 信頼できる場所、拡張子(マクロ有効ブック)、参照設定、PtrSafe あたりかなあ?
591 名前:デフォルトの名無しさん [2014/05/31(土) 17:06:26.42 ID:vfwWW6a6] 質問でございます。 エクセルVBAで効果音を鳴らすにはいかにすればよろしいでしょうか? また、画像を張ったり、消したりするにはどのようなコードを書き込めばいいものでしょうか?
592 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 17:57:42.27 ID:Ym0wh1sa] マクロの制作代行(修正)を3000円位で行ってくれる所ないかな? 既にあるマクロに機能追加してもらいたいんだけど、 スキルがなくて困っています。
593 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 18:03:54.56 ID:MZZ4d7NB] >>591 www13.plala.or.jp/kymats/study/multimedia.html
594 名前:デフォルトの名無しさん [2014/05/31(土) 18:15:17.55 ID:xW/2bai/] >>593 いまいち、理解できないっす。 要するにどういうコードを書き込めばよいのでしょうか? そして音源はどこにあるのでしょうか?
595 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 18:24:22.00 ID:6LzyMI+6] >>592 翌日以降に発覚した瑕疵等は別途見積もり・請求させていたたきます
596 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 18:42:36.10 ID:ROAafTCn] >>592 マッチングサイトなんてググればヒットするでしょ
597 名前:デフォルトの名無しさん mailto:sage [2014/05/31(土) 20:08:49.36 ID:ENgUpqsf] >>594 ググるという発想はないの?
598 名前:デフォルトの名無しさん [2014/06/01(日) 00:30:52.76 ID:1fLVc9/2] エクセルに画像を取り込もうとすると、テキストファイルウィーザード「選択したデータは区切り文字で区切られていま」 というエラー?が出て、画像が取り込めず、文字列がだーっと出る画面になるのですが 保存された画像を普通に貼り付けるにはどうすればいいのでしょうか 保存の仕方がわるいのでしょうか?
599 名前:デフォルトの名無しさん [2014/06/01(日) 00:44:57.06 ID:J9cZPePT] >>592 その値段では、誰も引き受けてくれんぞ。30万出せば、金に困っている 連中の誰かは、受けてくれるだろうが。
600 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 01:56:31.76 ID:4/q6rSuq] >>598 君は諦めた方がいい
601 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 10:15:57.44 ID:Vdytlm3J] >>592 相談料 3000円 (120分以内)なら考えてもいい
602 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 10:28:28.23 ID:mo4nCN9m] >>601 120分3000円でいいならもうボランティアでやってやれよw
603 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 10:39:07.65 ID:m+nDoAYH] >>598 まず最初にここは Excel VBA質問スレ この時点でアウト 君が相談すべきスレは、ビジネスSOFT板のExcel総合相談所 113 ちなみに注意としてExcelのバージョンとどういう操作をしたのかくらい書けよ Excel2007(2010)だとして、挿入→図からファイルを選択すれば良いのをなんでテキストファイルウィザードなんてもんが出てくる?
604 名前:デフォルトの名無しさん [2014/06/01(日) 12:52:54.92 ID:QlI1F8ze] すいませんです Excel2010で、ゲーム製作をしてましてVBAで画像が自動的に出たり消えたりと言うプログラミングを 設定しているのですが、画像がうまく開かないで苦心しておりました
605 名前:デフォルトの名無しさん [2014/06/01(日) 14:52:48.34 ID:ycdnLEoX] Excel2007です。 Excel2003で動いていた、グラフの書式をコピーするVBAを実行すると、 データまでコピーされてしまうようになり、困っています。 ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.ChartArea.Copy ActiveSheet.ChartObjects("グラフ 2").Activate ActiveChart.Paste Type:=xlFormats ヘルプにはxlPasteFormatsを指定とあるので、修正してみたのですが変わりませんでした。 グラフ選択→コピー→グラフ選択→形式を選択して貼り付けの書式を選択で、 シートに対してPasteSpecialを使えば元の動きになることはわかったのですが、 もともと使っていたPasteは使えなくなったのでしょうか? それとも使い方がわるいのでしょうか?
606 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 15:23:51.99 ID:WV5hG6M3] Excel2003ですが VBAでくり返し操作するときは自動保存をOFFにしたいのですが オプション設定はVBAで操作できるのでしょうか?
607 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 17:18:12.48 ID:XKcLg8fj] >>606 Application.AutoRecover.Enabled = False
608 名前:606 mailto:sage [2014/06/01(日) 21:41:47.16 ID:5iy05h8R] >>607 これは便利ですねぇ知りませんでした。 ありがとうございます。
609 名前:デフォルトの名無しさん mailto:sage [2014/06/02(月) 18:30:40.65 ID:YbWwqAFD] 教えてください。キーワードだけで構いません。 チャートオブジェクトの横幅と高さをVBAで変更することはできますが、 グラフオブジェクトの中のグラフ表示範囲(?)を変更する方法がわかりません。 ワークシートに複数のグラフがあり、これらのグラフの横幅を揃えたいのです。 チャートオブジェクトの横幅は揃っているのですが、図中に矢印で示すグラフ表示範囲がずれてしまっています。 手動ではなくVBAで自動的に揃え直したいのですが方法がわかりません。 よろしくお願いします。 i.imgur.com/fSS5gf9.png
610 名前:デフォルトの名無しさん mailto:sage [2014/06/02(月) 19:36:28.50 ID:Qua9WhFM] >>609 PlotArea.Width
611 名前:609 mailto:sage [2014/06/02(月) 22:43:18.89 ID:QcqSJ9d9] >>610 ありがとうございました。 今試せる環境ではないので明日試してみます。 とりあえずググったところ下のように書いてありました。 厳密に複数グラフの横幅を揃えるのは難しそうですね。 www.moug.net/tech/acvba/0020000.html プロットエリアの位置や大きさは、Top/Left/Height/Widthプロパティで設定しますが、 これらのプロパティで設定する領域は、プロットエリアの書式設定の際に参照される領域よりも大きくなります。 差が出るのは、軸/軸の目盛ラベル/データテーブルの領域分です。 これらを除いた領域の位置、及び大きさはInsideTop/InsideLeft/InsideHeight/InsideWidthプロパティで取得できますが、設定は出来ません。 したがって本来の意味でのプロットエリアの大きさを思い通りに設定するのは、非常に困難であると言えます。