[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 06/22 18:33 / Filesize : 201 KB / Number-of Response : 717
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

VBAなんでも質問スレ



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にコピーして開き、
何もせずにそのまま保存してもファイルサイズが変わることがある






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<201KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef