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


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

Excel VBA 質問スレ Part33



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

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プロパティで取得できますが、設定は出来ません。
したがって本来の意味でのプロットエリアの大きさを思い通りに設定するのは、非常に困難であると言えます。






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

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

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