1 名前:デフォルトの名無しさん mailto:sage [2012/07/12(木) 19:03:00.57 ] VBAを使った質問ならなんでもござれ 本来の対象であるオフィスアプリを操作する以外の話もOK ゲーム作り、Webアクセス、外部アプリの操作 COM(ActiveX)、Win32API、.NET Framework、DirectXなどなど VBAで実行するものであればなんでも質問してください VBAを開発環境としていろいろ作っちゃいましょう 関連スレ Excel VBA 質問スレ Part25 toro.2ch.net/test/read.cgi/tech/1341722983/ Access VBA 質問スレ Part1 toro.2ch.net/test/read.cgi/tech/1328536426/ VBプログラマ質問スレ(Ver.6.0 まで) part58 toro.2ch.net/test/read.cgi/tech/1328782534/
577 名前:18 mailto:sage [2013/12/30(月) 12:38:10.77 ] >>576 >>574 の指摘内容が理解できてないの? (w
578 名前:デフォルトの名無しさん mailto:sage [2013/12/30(月) 12:38:38.33 ] すいません。 事の発端の>>570 です。 自分のやりたいことを詳細に書き込まず、予想して補完してもらうような、質問をして申し訳ありませんでした。 >>572 さん>>573 さんありがとうございました。
579 名前:デフォルトの名無しさん mailto:sage [2013/12/31(火) 10:44:06.16 ] >>577 まぁ、、、がんばれw
580 名前:18 mailto:sage [2013/12/31(火) 11:12:02.61 ] >>579 理解できてないのか... て言うか、普通インテリセンスが効くから 0 なんて書くわけないと思うんだが。
581 名前:デフォルトの名無しさん mailto:sage [2013/12/31(火) 13:03:01.75 ] もしかしてAddress(False, False)って書け、なんてレベルの話? しかし、Addressの第一、第二引数は、規定値がTrueとはいえ、Boolean型ではなくVariant型で それ故にインテリセンスも効かないし、そういうコードの明示性で言うなら、25や75を定数化しろって方が先な上に こういう金を貰えるわけでもない場では明示性や読解性を犠牲にしてでも簡略化するのは常套手段なので Addressの第一、第二引数には効かないインテリセンスがどうこう言ってることからしても、 0ではなく、Falseや相対参照を意味する定数を定義してそれを使えなんて単純な話じゃないよね? いったい、どう書くのが正しいと言いたいのだろう?
582 名前:デフォルトの名無しさん mailto:sage [2013/12/31(火) 20:31:10.76 ] あんまり虐めるな
583 名前:デフォルトの名無しさん mailto:sage [2013/12/31(火) 20:45:45.07 ] エクセルは表計算が少しできます。マクロとかは知りません。 VBAをマスターしたく本屋へ行きましたがたくさんあり悩みました。 「10日間でマスター・・・」みたいなのがありましたが初心者でも大丈夫で しょうか?そもそも10日間でマスターできるほど簡単?とは思えないのですが 初歩ですかね?
584 名前:デフォルトの名無しさん [2013/12/31(火) 21:05:06.28 ] >>581 は虐めてはいないだろ >>574 が井の中の蛙なだけ 小山の大将が、飛行機から見下された
585 名前:デフォルトの名無しさん [2013/12/31(火) 21:19:31.20 ] >>583 初心者の入門用には、その程度から始めるのが良いかも。 ただ、同時に分厚いVBAの辞書みたいなのも買う事を勧める。 少しできるようになったら、疑問が出るだろうから本を買足すのも良いだろう。 また、「参照設定」での機能を説明している本は少ないので、 そこら辺はネット併用で情報収集して行けばよいと思う。
586 名前:デフォルトの名無しさん mailto:sage [2013/12/31(火) 21:41:38.76 ] >>583 そもそも何がしたいかなんて人によって違う デカい本屋で一日潰して立ち読みでもしてみて、一番自分がやりたいことが 分かるように書かれてる本を買え ただ関数・メソッドの癖なんかは一々細かく覚えてられんので、リファレンス本は持っておけ
587 名前:583 [2014/01/01(水) 10:02:50.80 ] 皆さん、ご丁寧に回答頂きありがとうございます。
588 名前:デフォルトの名無しさん [2014/01/01(水) 10:42:09.00 ] >>585 「参照設定」を話題にするということは、これはものすごく便利なものということですね? IEを操作するという本で見たことだけはあるけど これは何のために使い、何が便利なのですか?
589 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 16:04:34.73 ] >>588 キーワードが分かってるなら少しはggks 便利かどうかは自分で判断しろ
590 名前:588 [2014/01/04(土) 10:07:28.34 ] >>589 そりゃないよかあちゃん。 参照設定とはなにかどなたかおしえてくださいませんでしょうか?
591 名前:デフォルトの名無しさん mailto:sage [2014/01/04(土) 10:44:10.13 ] >>590 アプリケーションを「インストールする」みたいなそれ単体では無意味な言葉w
592 名前:588 [2014/01/04(土) 10:46:02.02 ] >>591 レスありがとうございます。 ん、どういうことでしょう? 言葉の意味がよくわからないのですが・・・
593 名前:デフォルトの名無しさん mailto:sage [2014/01/04(土) 12:43:00.21 ] アプリケーションをインストールするとは、広義では、アプリケーションを実際に使える状態にすることをいう レジストリ登録は必須ではない
594 名前:デフォルトの名無しさん mailto:sage [2014/01/04(土) 12:48:49.63 ] USBメモリに入れて持ち運べるアプリケーションも それを入れたUSBメモリを接続すること自体がインストール
595 名前:588 [2014/01/04(土) 13:10:34.76 ] ?
596 名前:デフォルトの名無しさん mailto:sage [2014/01/04(土) 15:59:41.71 ] SDDのインストロールをファイルしてディスクトップのコピペをオーエスするんだよ
597 名前:デフォルトの名無しさん mailto:sage [2014/01/07(火) 16:30:54.74 ] >>588 別に詳しいこと知らなくても使い方だけ知ってればそれでいいじゃん 俺も知らないけど特に困ってないよ。 とりあえずエクセルの標準的な設定では使えない機能が ライブラリっていう形で用意されてて、 それを参照するように設定することでライブラリの機能が利用できるようになるってことらしいよ。 参照設定の内容はブックごとに保存されるから別のPCにコピーしても同じように動く。 ただし、用意されてるライブラリはエクセルのバージョンごとに違ってるから コピー先のマシンにインストールされてるエクセルのバージョンによっては エラーが出て動かない場合もある(らしい)。 あと、参照設定しないでライブラリの機能を利用することも出来るけど、 その時はインテリセンスが働かないからコード書くときにちょっと面倒だったりする。 一例としてFileSystemObjectを使うときには Microsoft Scripting Runtimeっていうライブラリを参照設定しておくと Dim fso As New FileSystemObject って宣言するだけでFileSystemObjectが使えるけど、 参照設定してないと Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") みたいに書かないといけない。 そして、参照設定していればコード中でインテリセンスが働くから fso.とタイプしたらその後に続くメソッドとかが表示されるけど 参照設定してないとそれが出てこない。 大体こんな程度しか知らないけど、今のところ特に困ってない。
598 名前:デフォルトの名無しさん mailto:sage [2014/01/07(火) 17:40:10.13 ] >>588 プログラミングの学習は、いくら言葉を覚えて知識だけ詰め込んだって全然ダメだ。 最初はサンプルの丸写しでもいいから、とにかく手を動かせ。
599 名前:デフォルトの名無しさん mailto:sage [2014/01/07(火) 19:49:40.93 ] > ただし、用意されてるライブラリはエクセルのバージョンごとに違ってるから エクセルではなく大抵はOSやIEな よく使用されるのは、Excelに付属するライブラリより、OSやIE付属のライブラリだから 例に挙げてるFSOも、Excel付属ではなく、OSに付属するIEに付属するWSHに付属するライブラリだから
600 名前:597 mailto:sage [2014/01/07(火) 20:31:40.45 ] >>599 そうなんですか、それは知りませんでした。 (この辺が良く知らないと言う由縁) 教えていただきありがとうございました。
601 名前:デフォルトの名無しさん mailto:sage [2014/01/08(水) 04:38:24.94 ] FSOはもともとOS付属ではなかったが 参照設定は、ある共通ルールに従って作られたプログラムを使用するために使うもの 別に何かの付属のライブラリじゃなくても良いんだぞ
602 名前:デフォルトの名無しさん mailto:sage [2014/01/08(水) 05:17:40.58 ] FSOが付属するようになったのはWin98SEからだっけ? 確かWin95やWin98だと、IEのバージョンアップするか、WSHの単体パッケージ入れる必要があったような
603 名前:デフォルトの名無しさん mailto:sage [2014/02/07(金) 11:57:08.30 ] intにキャストすると小数部四捨五入するのやめれ。
604 名前:デフォルトの名無しさん mailto:sage [2014/02/07(金) 13:53:01.88 ] >>603 暗黙の変換に頼る方が悪い 適切な関数なり数式なりで処理しろ
605 名前:デフォルトの名無しさん mailto:sage [2014/02/07(金) 14:09:14.80 ] ところがclng()より速いのがVBA
606 名前:デフォルトの名無しさん mailto:sage [2014/02/07(金) 23:57:24.63 ] >>603 四捨五入じゃないんだけどな それ以前にintにキャストってそれホントにVBAの話か
607 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 00:51:47.10 ] CType関数は小数点以下丸めることがあるから、小数切り捨てたい場合は使ったらあかんのね。
608 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 01:19:57.82 ] >>607 切り捨ては丸めの方法の一つだから、その日本語はおかしい
609 名前:デフォルトの名無しさん [2014/02/13(木) 14:00:02.20 ] テキストボックスに文字を設定する時に 通常はチェンジイベントで設定された文字を処理するように書いてますが とあるタイミングではチェンジイベントを実行したくないのです その、とあるタイミングの前に、テキストボックスのEnabledプロパティをFalseにすれば チェンジイベントが発生しないのかと思ったら発生しますね そうなると、とあるタイミングの前に、グローバル変数を設定して イベントの中でその変数を見て抜けるようなベタな方法しかないですか?
610 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 14:12:23.89 ] >>609 そこで一時的に全部のイベントを殺してもいいのならEnableEvents 止めたいのがテキストボックスのチェンジイベントだけなら自前でフラグ変数を用意しかない
611 名前:デフォルトの名無しさん [2014/02/13(木) 14:24:24.41 ] >>610 VBAにはそんなのがあるのですか、良いですね VB6のスレが無かったので、同じだろうと思ってここでお聞きしましたがVB6にはないようでした ありがとうございました
612 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 14:56:01.33 ] EnabledがFalseでイベント発生したっけ? イベントが発生してから無効にしてるんじゃないかと言う気がするが
613 名前:デフォルトの名無しさん [2014/02/14(金) 12:48:25.84 ] 説明が足りませんでした Enabled=Falseでユーザー操作はできなくなりますが コードからは操作できて、その時にイベントが発生してしまいます
614 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 13:24:45.38 ] VBAならAfterUpdate使え それ以外なら知らん
615 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 20:19:21.38 ] Enabled=Falseの時のイベント発生を除外したいなら、 イベントハンドラでEnabledの値を確認すれば解決。
616 名前:デフォルトの名無しさん [2014/02/16(日) 07:35:43.11 ] なるほど、本来の使い方ではないけど、それでいいわけですよね 対象のコントロールが少ないならグローバル変数を用意するよりスマートだし
617 名前:デフォルトの名無しさん [2014/02/16(日) 21:56:15.35 ] スマートは大事
618 名前:デフォルトの名無しさん mailto:sage [2014/03/12(水) 02:35:55.66 ID:oH1Ugruw] ID発行記念カキコ
619 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 07:03:26.55 ID:FLjN0SBh] 実現の可否が分からないため、質問させて下さい。 Excel VBAでShell関数を使い、Powershellを呼び出し、その出力結果をtxtに出力して取り込んでいます。 Powershellを走らせて待っている間、Powershellの処理に時間がかかる場合に「(応答なし)」が表示されます。 待っていると動いてくれるので「(応答なし)」は表示させたくないのですが、DoEventsを使ってもだめでした。 「(応答なし)」を表示させない方法はあるのでしょうか。
620 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 07:37:44.08 ID:kKPzvMNA] 「Powershellを走らせて待っている間」について詳しく
621 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 07:47:18.40 ID:IpiW3W82] ついでに、その応答なしってどこに表示されるかも
622 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 10:15:49.53 ID:FLjN0SBh] >>620 >>621 powershellで「compare-object」という比較のコマンドを実行しています。 比較するデータと結果の差分が多いと出力に時間がかかり、作成したユーザフォームの左上にあるcaptionに「(応答なし)」と表示されてきます (10秒位経っただけで表示されてしまう印象)。 その「(応答なし)」を表示させない方法があるのかどうか、知りたいと考えています。
623 名前:622 mailto:sage [2014/03/15(土) 10:19:01.52 ID:FLjN0SBh] 処理の流れとしては、 ユーザフォームでファイルを選択させて、 もろもろのオプションを指定した上で、 実行してpowershellを呼び出してcompare-objectで比較して出力、 という内容になります。
624 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 10:33:33.89 ID:bmQ5jObQ] VBA側のCaptionに表示させたくない文字列の内容が分かってるなら、 単に条件分岐させて消すなりなんなりすればいいじゃん
625 名前:622 mailto:sage [2014/03/15(土) 11:08:40.69 ID:FLjN0SBh] >>624 すいません、正式名称が何というのか分かっていなかったのですが、「タイトルバー」ですかね、、、 Captionの右側に「(応答なし)」が表示されてきたので、622の箇所ではCaptionと書いてしまっています。 622の質問の段階で、Captionで意味が通じているようであれば、 条件分岐をさせて「(応答なし)」を出さない方法がよく分かっていないです。
626 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 11:52:35.81 ID:kKPzvMNA] 『待っている間』について詳しく
627 名前:622 mailto:sage [2014/03/15(土) 14:12:17.82 ID:FLjN0SBh] >>626 コードの必要な箇所を抜き出すと以下になります。 ====================== Public Const PROCESS_ALL_ACCESS As Long = &H1F0FFF Public Const INFINITE As Long = &HFFFF Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _ ByVal dwMilliseconds As Long) As Long Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long If 〜 Then Dim TaskId As Long Dim hProc As Long DoEvents TaskId = Shell("powershell " & Chr(34) & "& { " & 〜 & "}" & Chr(34), vbMinimizedNoFocus) hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, TaskId) If hProc <> 0 Then Call WaitForSingleObject(hProc, INFINITE) CloseHandle hProc End If End If ====================== 実のところ、shell関数の所で止まっていると思い込んでいたのですが、確認したところだと、powershellというよりは後続の同期処理、「Call WaitForSingleObject(hProc, INFINITE)」のところで起きているようでした。 おそらくこの部分を変えてやればうまくいくと思うのですが、しかしどうすればいいのか、分からない状況です。
628 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 16:15:36.48 ID:3ah5yf0J] >>627 同期処理用のAPIではどうしても応答なしになってしまう Powershellのスクリプトの最後で、処理の完了を通知するぐらいしか思いつかない たとえばテンポラリファイルを使うとか原始的な方法で
629 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 16:37:06.66 ID:IpiW3W82] >>627 > WaitForSingleObject 一番最後の引数に 1000 ぐらいを指摘して、1秒毎にポーリングすればいい。 タイムアウトかプロセスが終了したのかは戻り値を見ればわかる。
630 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 16:42:00.26 ID:bmQ5jObQ] >>628 Function findMyBook($bookname) $books = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application") foreach ($mybook in $books.WorkBooks){ if ($books.Name -eq $bookname){ return $mybook } } 実行するVBAのブック名が固定されるんなら、PS側の必要な処理が終わった後に PS側でそのブック名見つけてやればいいんじゃないかね多分
631 名前:622 mailto:sage [2014/03/15(土) 22:02:16.82 ID:FLjN0SBh] >>629 VBAを以下のように修正し、応答なしが出なくなったことを確認しました。 ====== (前) If hProc <> 0 Then Call WaitForSingleObject(hProc, INFINITE) CloseHandle hProc End If ====== (後) Dim RC As Long If hProc <> 0 Then Do RC = WaitForSingleObject(hProc, 1000) DoEvents Loop While (RC = &H102) If RC <> 0 Then Exit Sub End If CloseHandle hProc End If ====== >>630 VBAの方でうまくいったのでpowershellの方は試していませんが、別の機会に試してみます。 皆様、ご協力ありがとうございました。
632 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 22:29:46.48 ID:IpiW3W82] >>631 > If RC <> 0 Then > Exit Sub > End If > CloseHandle hProc RC <> 0 の時もハンドルクローズしないとリークするよ。
633 名前:デフォルトの名無しさん mailto:sage [2014/03/16(日) 09:30:39.93 ID:cyT7e+/z] >>632 ご指摘助かります。 入れておきます。
634 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 01:09:57.92 ID:HkRxLSsC] 配列(A,B,C,D) 配列(123,456,789) これを下記のようにDebug.Printしたいのですが、コードをご教授ください。お願いします。 A123 B123 C456 D456 E789 F789
635 名前:ピラフ [2014/03/30(日) 02:33:17.39 ID:aRmbpBvo] >>634 ピラフが教えてあげちゃう。 Dim A A = Array("A", "B", "C", "D", "E", "F") Dim B B = Array("123", "456", "789") Dim I I = 0 Dim E For Each E In B Debug.Print A(I) & E Debug.Print A(I + 1) & E I = I + 1 Next
636 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 03:21:41.62 ID:HkRxLSsC] >>635 ピラフ様 あなたが私を救って下さいました。ありがとう。(心臓)
637 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 07:21:17.99 ID:5cM6x3wc] 二人ともよく見ろ できてないじゃん タオパイの自演か?
638 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 01:17:01.74 ID:+/Q0rb5y] Debug.Print A(I + I) & E Debug.Print A(I + I + 1) & E
639 名前:デフォルトの名無しさん [2014/03/31(月) 13:20:56.18 ID:dIVDD8y4] 天津飯が好きです@22歳OL
640 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 19:39:21.01 ID:+xOJ5BKc] >>638 なんじゃそりゃw ふつーは I = I + 2 だろ
641 名前:桃白白 ◆9Jro6YFwm650 [2014/03/31(月) 21:27:38.02 ID:N162Y8AS] >>639 桃白白のことは?好き?
642 名前:デフォルトの名無しさん mailto:sage [2014/03/31(月) 21:47:20.15 ID:DtbGifhU] 桃(も)白(ちろ)白(ん)
643 名前:デフォルトの名無しさん [2014/04/01(火) 23:08:43.56 ID:iMQ7tFIo] Excel VBAで、シートのOELobjectsとしてファイルを追加しましたが、 そのファイルをまたファイルとして出力する方法がよくわかりません。 ご教示いただけないでしょうか。 一時的なバックアップとしてファイルをシート上に保管して、問題があったらそこからファイルを復元しようとしてます。
644 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 08:27:13.26 ID:112XWAfL] ここは貼ってもいいんでしょうか? 作ったものが全く思い通りに動かず悩んでます。 初心者なので別スレがあるのであれば教えていただけますと移動いたします。
645 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 09:14:36.93 ID:jEbNeAxo] 短いのならここに直接貼ってもいいよ 長いのはコード貼るサイト使った方がいいと思
646 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 10:04:40.69 ID:112XWAfL] ありがとうございます。技術が無いので無駄に長くなってしまっています。
647 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 10:12:07.35 ID:jEbNeAxo] とりあえず、コード貼れるサイト https://friendpaste.com/ 選択肢にVBAがないからVB.netでも選んどいて
648 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 23:00:50.17 ID:s+35q5Om] >>644 コードまだー? 俺も初心者だから他人の書いたコードを参考にしたいんだよー
649 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 07:31:38.50 ID:4zlYEuTE] 自己解決しました どうも
650 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 20:07:42.26 ID:xveRB+Bl] ExcelのA1〜F1に任意で入れた数字を降順で並べたいんだけどよくわからん… バブルソートさせるのはわかるが、表から数値を持ってくるにはどうしたらいいんですか?
651 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 20:44:27.34 ID:ZM+hJQpr] >>650 a = Range("A1:F1")
652 名前:デフォルトの名無しさん mailto:sage [2014/04/24(木) 00:53:35.48 ID:m6J4LtNe] >>651 sub sort() Dim a As Integer Dim i As Integer Dim j As Integer Dim min As Integer a = Range(A1:F1) Do While j < a - 1 i = j + 1 Do While i < a End Sub よくわからん
653 名前:デフォルトの名無しさん mailto:sage [2014/04/24(木) 01:40:46.12 ID:nXU9pvpI] >>652 aは配列 Rangeは初心者にはおすすめしない Dim a() As Integer Dim i As Integer For i = 1 To 6 a(i) = Cells(1, i) Next 宿題は自分でやれ
654 名前:デフォルトの名無しさん mailto:sage [2014/04/24(木) 18:08:41.31 ID:NeL4TUu8] デフォルトプロパティ省略するのやめた方が良いぞ
655 名前:デフォルトの名無しさん [2014/04/24(木) 18:30:46.52 ID:ZALVHb/C] >>654 それはなぜですか?
656 名前:デフォルトの名無しさん mailto:sage [2014/04/24(木) 19:43:11.79 ID:nXU9pvpI] 左辺がVariantじゃないから大丈夫
657 名前:デフォルトの名無しさん mailto:sage [2014/04/24(木) 20:07:59.57 ID:mnsZs1hI] 今時学校でVBAを教えるところがあるのか
658 名前:デフォルトの名無しさん [2014/04/29(火) 17:43:11.79 ID:cd9z2Wuk] PDFで問題となっているものを、マクロを使って以下のように以下のようにできますでしょうか? もし、可能ならばご教示ください。 1、PDF上の問題記号を選択すると解答選択肢が出てくる。(リストボックスのように) 2、その中から解答を選択できる。 3、最後に正答率、間違ったところの答え、間違ったところの根拠表示
659 名前:sage [2014/04/29(火) 17:44:53.56 ID:cd9z2Wuk] すいません。上げてしまいました。
660 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 17:55:04.83 ID:KFswrGoL] すいません。
661 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 17:59:31.75 ID:AVYTmVui] >>658 とりあえずPDFのサンプルをどっかにアップしてください
662 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:09:22.14 ID:KFswrGoL] www.pref.kochi.lg.jp/soshiki/310601/h24itijisinnsamondaitokaitou.html の一番上にある教職・一般教養 [PDFファイル/1.93MB】です。 よろしくお願いします。
663 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:21:18.11 ID:/qylVqTc] >>658 そのPDFの内容のうち、どこが問題記号でどこが解凍選択肢か、正解はどれか そう言った情報が機械的に判断できる必要があるんだが、それは可能なのか?
664 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:25:24.29 ID:8Pfgcz1/] >>658 ttp://pdf-file.nnn2.com ここでも嫁
665 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:35:52.24 ID:hNJPTToz] >>663 そうですね。確かに正解と回答を参照することが頭から抜けていました。正解は正解のPDFを元に手打ちで、Excelに打ち込もうかと思うのですが、良い方法はありますでしょうか?
666 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:37:58.44 ID:hNJPTToz] >>663 >>>658 >そのPDFの内容のうち、どこが問題記号でどこが解凍選択肢か、正解はどれか >そう言った情報が機械的に判断できる必要があるんだが、それは可能なのか? このすべてどうやればいいかわかりません。
667 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 20:11:16.39 ID:7Qss/xhP] 対象のPDFが最初の1本だけの場合、問題数は28、回答のパターンは5つかな? この分量だと全自動化は非効率すぎる コード書く手間を考えると手動でリストボックスを並べてった方が早い 全文をコピペしたあと、カッコの中に丸付き数字が入った部分を文字列検索してリストボックスに置き換え これぐらいはVBAでできるな 選択肢は丸数字、スペース、単語、スペースの繰り返しになってる行を検索、それ以外のパータンは手動で設定
668 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 20:13:02.51 ID:7Qss/xhP] よく見たら全部画像じゃねーか まずはOCRからか こんなもんVBAの質問の範疇じゃないわ
669 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 20:16:41.15 ID:zpOcxqmE] 何万回も計算とかするためにセルに入力されてる1000単位のデータを、いちいちシートから参照すると時間がかかりそうだから二次元配列に格納して取り扱ってるんですが、やっぱり計算に時間がかかるんで配列より早い方法ってないですか? そもそもシートから参照したほうが早かったりしますかね。
670 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 20:20:45.14 ID:6uPX0+EP] その前にシートに計算式がてんこ盛りなら再計算をストップしてからするとか
671 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 20:53:57.75 ID:Ucenml3N] >>669 すくなくともセル参照よりは配列を参照する方が早いというのが通説 頻繁に参照する場合は配列に入れてアクセスするのは常套手段 時間かかってるのが参照ではなく計算そのものなら、参照早くしてもあんまり効果ないだろ
672 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 21:13:46.07 ID:pGt2sRew] >>669 計算量が多くてスピードが重要ならVBAじゃなくてせめてVBを使え
673 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 21:20:32.55 ID:BzVjbdP5] >>66 > そもそもシートから参照したほうが早かったりしますかね。 1000単位のデータの内使うのがひとつだけとかの特殊な状況でない限り、ぜ〜〜〜っていあり得ない。 つーか、今配列使ってるならセル参照に変えてみなよ。
674 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 22:48:42.50 ID:zpOcxqmE] どうも回答ありがとうございます。 配列のほうが早いみたいですね。 シートでの計算も一切してませんし、会社のPCなのでVBを導入することも難しいので 計算式を見直して速度を上げたいと思います。
675 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 23:04:23.60 ID:pGt2sRew] まともなコンパイラも許可せずに、そんな大変な計算をさせるなんてどんなブラック企業だ
676 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 23:53:50.92 ID:8kppz192] >>674 計算式を見直すんじゃなくて、処理を見直したほうがいいと思う
677 名前:デフォルトの名無しさん mailto:sage [2014/05/04(日) 10:30:37.54 ID:A7LETp9o] エクセルVBAのunicode文字列をdllに渡す処理のことで質問があるんだけど このスレでOKですか?
678 名前:デフォルトの名無しさん [2014/05/04(日) 10:46:31.65 ID:PkGldEjn] 構造体の変数が2つあるんですが 1つを他のもののコピーとしたいんですが 単に代入すると同一のものの参照となります。 そうじゃなくて構造体の全メンバの変数の値をコピーするにはどうするのが一般的ですか?
679 名前:デフォルトの名無しさん [2014/05/04(日) 10:47:16.38 ID:PkGldEjn] Structure Student Dim name as String Dim age as integer Dim sex as String Dim first_time_sex_date as Date End Structure Dim student(2) as Student student(1).name="Taro" student(1).age=16 student(1).sex="Male" student(1).first_time_sex_date="2012/7/7" student(2)=student(1) student(2).name="Jiro" みたいにすると変になる。
680 名前:デフォルトの名無しさん [2014/05/04(日) 10:48:20.51 ID:PkGldEjn] VBAでIEを操作するとき タブ(複数開いてる)でアクティブになっているページをgetするためには どういうコードになりますか?
681 名前:デフォルトの名無しさん [2014/05/04(日) 10:49:41.57 ID:PkGldEjn] あ、そういえばExcelで他シートをActivateしたらそのシートでActiveCellになるはずのセルのアドレスを そのシートをActivateせずに取り出す方法を以前発見したのですが それはどういう方法だったのでしょうか?
682 名前:デフォルトの名無しさん mailto:sage [2014/05/04(日) 14:59:19.38 ID:ifQjgP9H] >>678 構造体の全メンバをコピーする関数はないの? クラスによくある、cloneとか コピーには、Shallow Copy(浅いコピー)と、 Deep Copy(深いコピー)の2つがある 構造体の中に、構造体の参照があったらどうする? クラスの中にクラスの参照とか、または相互に入っていたら? さらに、2重、3重になっていたら? 深いコピーだと、参照なら本体を新しく作って、 本体もコピーするが、 浅いコピーだと、参照をコピーするだけなので、 本体は同じものを使ってしまう
683 名前:デフォルトの名無しさん [2014/05/04(日) 15:10:16.41 ID:PkGldEjn] >>682 すんません、なにも知らんです。 ExcelのVBAには全メンバコピーの方法ってないのですか? cloneってなにかのクラスのメンバメソッド? あれ、VBAはクラスって使えるの? ところで他言語でクラスの勉強はじめたけど、よく考えたら構造体とクラスって似てるよな。
684 名前:682 mailto:sage [2014/05/04(日) 17:21:28.68 ID:ifQjgP9H] VB.netには、Copy, Cloneがあるが、 VBAはV6仕様なので、無いかも? クラスはある クラスモジュールにクラスを定義して、new して使 なので、ここにCloneを自分で定義したら? 漏れもよく知らない 検索で調べただけだから、自分でも調べて それと、複数のスレで同じことを聞く、 マルチポストは禁止なので、どちらかを取り消すこと
685 名前:デフォルトの名無しさん mailto:sage [2014/05/04(日) 18:18:53.17 ID:MnWuoZnQ] >>683 >ところで他言語でクラスの勉強はじめたけど、よく考えたら構造体とクラスって似てるよな。 ちょっと待て。VBAは普通構造体というとユーザー定義型のことを指すけど、 VB.NetやC#の構造体とごっちゃに考えていないか? VB.Netとかの構造体でクラスと似ていると言うなら、 そりゃそうだろとしか言いようがない。と言うか、 どういう時にクラスを使ってどういう時に構造体を使うのかを調べれば すぐに分かると思う。
686 名前:デフォルトの名無しさん mailto:sage [2014/05/06(火) 22:58:33.18 ID:moIIdFlD] かなり低レベルな内容だとは思いますが、判らないので教えてください。 日付をmm/dd/yy形式で出力してくるログをyyyy/mm/dd形式で取り込みたいのですが、 普通にformat(date,"yyyy/mm/dd")みたいにするとうまくできません。 (たとえば05/05/14は、2014/05/05とならず、2005/05/14となってしまいます) とりあえず仕方なく前6桁と後ろ2桁で分離してくっつけなおすという格好悪い方法でやってますが、 もっとスマートなやり方があったら教えて欲しいです。 よろしくお願いします。
687 名前:デフォルトの名無しさん [2014/05/06(火) 23:12:00.35 ID:Avr/JzZk] 低レベルとは 0100011011010101 みたいな話だ。
688 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 00:35:08.77 ID:uh4oWvq+] >>686 前5桁じゃなくて6桁? ログってことはテキストファイルだろうから、テキストファイルウィザードで日付→MDYを選択すればいい imo73.eek.jp/up/imo0105.png
689 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 07:35:46.76 ID:SH7lri32] >>688 即レスありがとうございます。 そうです5桁でした。 そして対象が行ごとに違う内容が入ってくるログなのと、 読み込んだ日付を基準に処理を分岐させたいのでその方法は使えないです。
690 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 08:31:27.71 ID:FZZA6k3k] >>689 > とりあえず仕方なく前6桁と後ろ2桁で分離してくっつけなおすという格好悪い方法 で、やれてるんじゃねーのかよ。 まあ、条件後だしする奴にはなに言っても無駄か...
691 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 12:49:17.67 ID:oO9n6rpk] 次の行が読めなかったんだな。可哀想に。
692 名前:デフォルトの名無しさん [2014/05/07(水) 13:43:37.48 ID:rXgxEPuc] セールスマン問題にアニーリング法をうまく組み込めない…
693 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 14:17:10.39 ID:uh4oWvq+] >>692 VBA無関係 データ構造,アルゴリズム,デザインパターン総合スレ 2 toro.2ch.net/test/read.cgi/tech/1362301811/
694 名前:デフォルトの名無しさん [2014/05/07(水) 14:52:43.45 ID:eMxnpyoF] >>689 方法はあまり変わらんけど、こんなのも有るよ moto = "05/07/14" Debug.Print "moto= " & moto moto20 = Left(moto, 6) & "20" & Right(moto, 2) Debug.Print Format(moto20, "yyyy/mm/dd") 2099年までこの方法は使える、2007では識別出来たけど、他Verは判らない。
695 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 18:18:55.57 ID:MZ01fZnX] ゴミ
696 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 22:57:09.28 ID:VZywwylY] >>686 Splitで"/"で分割して、年の部分だけ頭に"20"でもくっつけて、 順番かえて"/"で結合するようなんじゃダメ?
697 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 00:00:54.73 ID:UhAEWxzw] 年が2000年代固定ってどうなのよ ログで99年が2099年ってどこの未来から来た人ですか
698 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 00:46:43.35 ID:E+ainyFV] それはシステムの特性によって切り分ければいい話だ どのみち入力の年が2桁の時点で判断は必要になるわけで
699 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 01:06:45.17 ID:8vH2dr8E] 年数の二桁→四桁変換はOSの設定に任せとけば良い。 とか思ったけど、書式指定でDateに変換する方法が無い罠だった。
700 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 16:40:16.01 ID:UhAEWxzw] スマートなやり方ってのがどんなのをご希望か知らんが moto = "05/07/14" Debug.Print "moto= " & moto saki = DateSerial(Mid(moto, 7, 2), Mid(moto, 1, 2), Mid(moto, 4, 2)) Debug.Print Format(saki, "yyyy/mm/dd") まあこんな感じか
701 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 18:22:31.60 ID:uOW3clqT] どうやっても大差ない moto = "05/07/14" saki = DateValue(Right(moto, 2) & "/" & Left(moto, 5)) Debug.Print Format(saki, "yyyy/mm/dd")
702 名前:デフォルトの名無しさん [2014/05/09(金) 10:23:43.29 ID:QVvO9eKk] ノートン 問題 裁判 ノートン 問題 裁判 ノートン 問題 裁判 ノートン 問題 裁判
703 名前:デフォルトの名無しさん [2014/06/12(木) 22:38:54.01 ID:JGtl8L6J] 日別の購入データの通し番号から、マスターを参照してジャンル分けして、ジャンルごとの合計金額を出したいです。 light.dotup.org/uploda/light.dotup.org28231.png ↑ データはこのような画像の通りにシート3つに分かれて存在しています。 どのようなマクロを組めばいいかお教え願いたいです。 ジャンルごとに変数というものを持たないといけないのでしょうか? 実際は母が使うので、ボタン一つで出来るのだとありがたいのですが・・・ 大変面倒な質問ですが、お願いします 具体的なコードを教えてください 本当に困っていますお願いします
704 名前:デフォルトの名無しさん mailto:sage [2014/06/12(木) 22:54:39.12 ID:LMWZ0+/Q] >>703 ピボットテーブル使うってのは? 答えに全くなってないわけだが、、、、
705 名前:デフォルトの名無しさん [2014/06/12(木) 22:55:17.66 ID:JGtl8L6J] >>704 ボタンひとつで計算してくれるようにしたいんですが そのコードを教えてください
706 名前:デフォルトの名無しさん mailto:sage [2014/06/13(金) 00:07:26.49 ID:3uExzG0V] 凄まじいマルチw
707 名前:デフォルトの名無しさん mailto:sage [2014/06/13(金) 10:30:47.32 ID:jJMpWNsU] >>705 コード作ってもいいが保守するのが大変。 まずは標準の機能でできないものかトライするよろし。
708 名前:デフォルトの名無しさん mailto:sage [2014/06/14(土) 15:16:41.92 ID:UnUM1hDE] こんにちは。セルの不一致部分を取り出して、1から並べ直し、 修正したデータを入力するというマクロを作成しているのですが、 同じ列で複数の間違いがあった場合、iを進めないように、コメントアウトしているif文を入れたのですが、 そうすると、2行目で 実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです が表示されてしまいます。 列に間違いは2つ以上ないということで、コメントアウト部分を削除したままなら問題なく稼働するのですが、 この1文を入れるとどうしても進みません。 Arrayには、不一致部分のセルの座標が入っています。 全然ここから進まなくて困っていますので、どうかご教授お願い致します。 Do ws.Cells(Array_l(j), Array_r(j)).Value = s1.Cells(i + 1, Array_r(j)).Value 'B1の数値を修正する ws.Cells(Array_l(j), Array_r(j)).Interior.Color = xlNone 'B1のセル背景を元に戻す ws2.Cells(Array_l(j), Array_r(j)).Interior.Color = xlNone 'B2のセル背景を元に戻す 'If Array_l(j) = Array_l(j + 1) Then i = i - 1 'End If j = j + 1 i = i + 1 If Array_l(i) = Empty Then Exit Do Loop
709 名前:デフォルトの名無しさん mailto:sage [2014/06/14(土) 15:23:57.74 ID:UnUM1hDE] コメントアウトしている部分は i=i-1 の部分です 'つけ忘れです、すみません。
710 名前:デフォルトの名無しさん mailto:sage [2014/06/14(土) 16:30:49.01 ID:Je/qq0DA] >>708 省略してる部分が多すぎて何がやりたいかわからん ステップ実行するかなんかでロジック追ってみたら 昔ならこれフロー書いてみろとか言われるんだろうな しかし、変数名って大事だなと思うわ
711 名前:デフォルトの名無しさん mailto:sage [2014/06/14(土) 17:00:57.85 ID:UnUM1hDE] >>710 返信ありがとうございます iを調節するIF文を入れるとなぜか s1.Cells(i + 1, Array_r(j)).Value にエラーが出るんです。 s1.Cells( 2 , 4 ).Value という風に変えてもエラーが出るんです。 IF文を消せば消えるんですが。
712 名前:デフォルトの名無しさん mailto:sage [2014/06/14(土) 17:23:19.85 ID:UnUM1hDE] 事故解決できました!ありがとうございました!
713 名前:デフォルトの名無しさん mailto:sage [2014/06/14(土) 22:49:14.29 ID:jhtRx4NU] KING SOFTのVBAは完全互換ですか?
714 名前:デフォルトの名無しさん mailto:sage [2014/06/15(日) 06:28:01.21 ID:sZLgElUH] >>713 何と?
715 名前:デフォルトの名無しさん mailto:sage [2014/06/15(日) 15:24:53.85 ID:+yTvRbGG] まったく同じプログラムなのに保存したらファイルサイズが違った これでは完全互換とは言えない
716 名前:デフォルトの名無しさん [2014/06/17(火) 03:20:53.05 ID:HVt3rccc] >>715 エクセルでブックを別PCにコピーして開き、 何もせずにそのまま保存してもファイルサイズが変わることがある