1 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:25:04 ] 過去スレ 01 pc11.2ch.net/test/read.cgi/tech/1054356121/ 02 pc11.2ch.net/test/read.cgi/tech/1168308855/ 03 pc11.2ch.net/test/read.cgi/tech/1180192018/ 04 pc11.2ch.net/test/read.cgi/tech/1189814602/ 05 pc11.2ch.net/test/read.cgi/tech/1197448064/ 06 pc11.2ch.net/test/read.cgi/tech/1205231499/ 07 pc11.2ch.net/test/read.cgi/tech/1212587819/ 08 pc11.2ch.net/test/read.cgi/tech/1219673793/ 09 pc11.2ch.net/test/read.cgi/tech/1228372971/ 10 pc12.2ch.net/test/read.cgi/tech/1235332603/ 11 pc12.2ch.net/test/read.cgi/tech/1241885130/ 12 pc12.2ch.net/test/read.cgi/tech/1247566074/
496 名前:491 [2009/10/27(火) 01:21:41 ] >>494 ありがとうございます。 ただ、そのままするとマイナスの値のときにおかしくなってしまいます。 もうすこし詳しく教えていただけないでしょうか。
497 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:34:34 ] >>496 MSBだけ別の変数にとっとけばいい
498 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:41:11 ] 492はどうみてもJavaSな件
499 名前:491 [2009/10/27(火) 16:25:08 ] >>496 ありがとうござました。 マイナス関係なくできました。 難しく考えすぎてたみたいです。
500 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 19:39:03 ] Sub Main() Dim strPath As String Dim wkb As Excel.Workbook Dim wks As Excel.Worksheet Dim rng As Excel.Range Dim col As New Collection strPath = Excel.Application.GetOpenfilename If strPath = "False" then Exit Sub End If Set wkb =Excel.Workbooks.Open(strPath) Set wks = wkb.Sheets("Sheet1") Set rng = wks.Range("A1") call col.Add(rng) If Not(wkb Is Nothing) Then Call wkb.close: Set wkb = Nothing End If If col Is Nothing Then Set rng = col.Item(col.count) Debug.Print rng.Value End If End Sub 'colって、Nothingじゃないの? 'Is Nothingの対象はRange型のcolでは無くて、col自体を対象としてんのかな。
501 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 20:01:28 ] Dim col As New Collection
502 名前:デフォルトの名無しさん [2009/10/27(火) 22:27:30 ] XP で2003使ってます。 2003及び2000で動いてくれれば・・ アクセス側から、あるワークシートにおいて、 Set myWKS = myWKB.Worksheets("test") With myWKS t = DCount("*", "T1") .Range("A10").CopyFromRecordset myRS .Range("A10:D" & t + 9).Select .Application.ActiveCell.Sort Key1:=Columns("C"), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlSortColumns, SortMethod:=xlStroke .SaveAs "C:\Documents and Settings\Owner\デスクトップ\sample\テスト作成.xls" .End With という処理を行っています。 アクセスを起動後1回目は、ソートが正常に動きますが、2度目以降はうまくソートしてくれません。 次にこのメソッドを使用するときに、引数を指定しなかった場合は、保存されていた値が使用されます。 と、ヘルプにもあるように、ここにひっかかっているのだと考えていますが、 どうにも原因を突き止められません。 どうぞよろしくおねがいします。
503 名前:デフォルトの名無しさん [2009/10/27(火) 23:15:04 ] 解決しました。 理由は先ほどエラーが出ていたときは1度目の実行はうまくいくのにエクセルファイルを閉じても エクセルのプロセスが残ったままになっており2度目はその影響(?)で失敗していました。 コード自体に問題はなく、参照設定のexcelオブジェクトの優先順位を一つ上にあげてやれば、 正常に2度目以降も動くようになりました。 ただ、凄く不安定な正常性ということなので、根本を解決できる何かがあれば 是非アドバイスおねがいいたします。
504 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:45:25 ] 残ってるのはDBSオブジェクトじゃね エラー出たときとか終わるときにちゃんと閉じてる?
505 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:36:54 ] そこでした。 オブジェクト指定をしっかり作ったエクセルアプリケーションにしていなかったり、 いきなり.Rangeにしてたりで、タスマネに5個ぐらいEXCELってありましたw コード多すぎて無理臭いので、クエリのほうから指定することにしました。 以降はいい加減に組まないように注意せねばでした。 ありがとうございました
506 名前:デフォルトの名無しさん [2009/10/28(水) 10:55:56 ] エクセルのマクロの問題に対する質問はここでいいですか??
507 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 11:13:24 ] OK バージョン書いてね
508 名前:デフォルトの名無しさん [2009/10/28(水) 13:01:21 ] ここは宿題かたずけますスレって考えてもいいんですかィ
509 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 13:19:44 ] >>508 質問の内容とタイミングによる 時間帯と曜日によって、宿題は自分でやれってレスが付くだけのこともあるし VBA厨が喜んでプログラムを作ってくれることもある
510 名前:デフォルトの名無しさん [2009/10/28(水) 13:55:04 ] とりあえず書いてみます Excel2003 めっちゃ初歩的です… Do〜LoopかForーNextを使わなければならないみたいです。 1〜10までの整数で 偶数の和をD1 奇数の和をE1 に表示せよ です。
511 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 14:02:20 ] ExcelはスプレッドシートソフトでVBAの練習台じゃ ありません。 VBAの練習をしたいのなら、Accessでやれっつーの (AccessではExcelでやれっていわれるかも) てなわけで、Active BASICがVBAと文法互換だったら いいのになとおねだりしよう 【サーバー各所】ActiveBasicその11【冬眠中】 pc12.2ch.net/test/read.cgi/tech/1241316033/
512 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:07:11 ] >>511 あほか。Access持ってる奴なんてごく少数だろうが。
513 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:22:58 ] ACCは初めにオブジェクトアクセスを経由する必要があるから、VBAの初学には向かないよ、と思ってる エクセルなら(初めの内は)オブジェクト志向を意識しないでコードが組める上、マクロの記録がある マクロの変換じゃなくて、操作をVBAに変換するから、体感出来る点が非常に優位 逆に初めからRecordset操作を理解したほうが後が楽かもしらんけども
514 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 16:37:27 ] >>513 VBA扱う場合はやっぱフォームから入るべきだろ。 テキストボックスで入出力でいいじゃん Excelの場合CellをVBAで扱うのは、VBAだけじゃ不十分で VBAの基本とExcelの基本が十分出来上がって独立 共存できるようになってからじゃないと両方駄目になる悪寒 Accessの場合はVBAが出来てからテーブルやらクエリ やら覚えていく方法がとれる。
515 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 17:06:49 ] 別のスレでやれ
516 名前:デフォルトの名無しさん [2009/10/28(水) 18:30:39 ] VBAを使用してアルバイトの出勤簿を作成しています。 例えば、セルJ6に名前をInputBoxを使って入力した時に、セルJ5にフリガナをカタカナで 自動で表示する場合はどのようにすればよいでしょうか?
517 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 20:57:08 ] フリガナにはそれ用のワークシート関数を使う
518 名前:デフォルトの名無しさん [2009/10/28(水) 21:23:03 ] PHONETIC関数でしょうか? フリガナを表示しないで、氏名(漢字)が表示されてしまいます。
519 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 21:39:35 ] 大した人数でないなら 名前と読み方リスト作ろうぜ
520 名前:デフォルトの名無しさん [2009/10/28(水) 21:44:07 ] 読み方リストを作り、セル参照を使うということですか?
521 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 21:51:46 ] でもなんでも どう料理するかは考えてないけど テキストボックスに名前入れると読み仮名ラベルに表示するとかかな
522 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 21:58:13 ] >>510 宿題なのかな?答え書いたら勉強にならないから、ヒント書いておくね。 for i = 1 to 10 next if i and 1 = true then 奇数 if i and 1 = false then 偶数 cells(4,1).value = cells(4,1).value + i がんばって。
523 名前:デフォルトの名無しさん [2009/10/28(水) 22:07:25 ] ワークシート関数を使うことに決めました。
524 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:08:51 ] Mod 演算子を使わないのは速度厨なせいでつか?
525 名前:517 mailto:sage [2009/10/28(水) 22:16:47 ] detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414375849 なるほど、セルに直接入力しない場合で、phoneticを使用する場合は工夫が必要だね
526 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:40:03 ] ワークシート関数はVBAからでも呼び出せるっちゃ呼び出せる
527 名前:デフォルトの名無しさん [2009/10/28(水) 22:49:49 ] 変更して保存 ↓ Excelを終了 とするにはどういうふうに構文をかけばよいでしょうか?
528 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:59:33 ] >>527 Application.Quit
529 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:49:49 ] そういえばかなり前に1からnまでの和をループを回して求めよってのに For i = 1 To n Next 和 = (1 + n) * n / 2 みたいなのがあったな。
530 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:53:53 ] >>522 ビット演算なんて分るやつあまりいないんだから、そういう知ったかぶりの回答はやめましょうね。
531 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 00:19:50 ] 奇数 = 0 偶数 = 0 For i = 1 To 10 Step 2 奇数 = 奇数 + i 偶数 = 偶数 + (i + 1) Next Debug.Print 奇数, 偶数
532 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 00:26:27 ] >>530 >ビット演算なんて分るやつあまりいないんだから え!そうなの?
533 名前:デフォルトの名無しさん [2009/10/29(木) 00:48:08 ] >>510 教えてくれとは書いていなかったけど、よかったら参考にしてください。 Sub PlzDoHomeworkByYourself() Range("D1").Value = 0 Range("E1").Value = 0 ' The following was written by someone on the net. For i = 1 To 10 If (i Mod 2) = 1 Then '2で割り切れない場合(奇数) Range("E1").Value = Range("E1").Value + i Else '2で割り切れる場合(偶数) Range("D1").Value = Range("D1").Value + i End If Next ' If you're a teacher, you ought to punish your student who didn't do homework himself. End Sub
534 名前:デフォルトの名無しさん [2009/10/29(木) 01:18:45 ] >>533 ありがとうございます!!また頼むかもしれませんがよろしくお願いします。
535 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 01:45:25 ] Sub Main() Dim rng As Excel.Range Dim i As Integer Set rng = Excel.ThisWorkbook.Sheets("Sheet1").Range("D1") With rng '初期化 .Offset(0, 0) = 0 '$D$1 .Offset(0, 1) = 0 '$E$1 For i = 1 To 10 Select Case True Case (i Mod 2) <> 1 '偶数 .Offset(0, 0) = .Offset(0, 0).Value + i Case (i Mod 2) = 1'奇数 .Offset(0, 1) = .Offset(0, 1).Value + i End Select Next i '初期化 .Offset(0, 0) = 0 '$D$1 .Offset(0, 1) = 0 '$E$1 i = 1 Do While i < 11 Select Case True Case (i Mod 2) <> 1 '偶数 .Offset(0, 0) = .Offset(0, 0).Value + i Case (i Mod 2) = 1'奇数 .Offset(0, 1) = .Offset(0, 1).Value + i End Select i = i + 1 Loop End With End Sub
536 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 02:03:47 ] >>510 For i = 1 To 10 Cells(1, 4 + (i And 1)) = Cells(1, 4 + (i And 1)) + i Next
537 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 09:15:12 ] >>532 officeのVBAだと使わないしねぇ vbaだと知ってても使う場面がほとんど無い品
538 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 09:24:31 ] >>529 なにそれ面白い ビット演算とか知識はかろうじてあるけどナニソレ
539 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:14:21 ] 俺ならこうやって高速化するぜ For i = 1 To n Step n Next 和 = (1 + n) * n / 2
540 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:21:10 ] すまんが教えてください vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。 frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。 ExecWBとSendKeysでやってみたが上手く行かなかった。 やり方に問題があるのか、違う方法があるのか? 教えてください。
541 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:21:25 ] おれならこうだな for i = n to n next
542 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:46:51 ] 速さならこっちかな? For i = 1 To n Exit for Next 和 = (1 + n) * n / 2
543 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:08:40 ] さすがにこれは反則だろうな Goto aaa For i = 1 To n Next :aaa 和 = (1 + n) * n / 2
544 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:21:48 ] 和 = (1+n)*n/2 Debug.Print 和 ループ こうか!
545 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 10:22:29 ] 質問させてください。(Excel2003 XP) ExcelでRS-232-C通信を行おうとしております。 大昔に一度、何かを見ながら自作したマクロを参考にやっています。 当時はMSCommを使用しておりましたので、同様にツールボックスから MSCommをフォームに貼り付けると、 「サブジェクトは指定された操作に対して信頼されていません。」 と表示され、貼り付けることができません。 Webで調べると、どうやら ActiveX Killbits に対するセキュリティ更新プログラム (KB969898) を実行したことで使用出来なくなってしまったようです。 対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに 削除して回るのも非現実的です。 MSCommが分かりやすくて簡単ですのでこれを使用したいのですが 更新プログラムの削除や新たに何かをインストールしなくても使用できる 方法はないでしょうか? また他にWinAPIで行う方法もありましたがこちらで行う方法が主流? なのでしょうか? よろしくお願いします。
546 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 13:10:43 ] >ActiveX Killbits に対するセキュリティ更新プログラム (KB969898) >を実行したことで使用出来なくなってしまったようです。 >対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに >削除して回るのも非現実的です。 >MSCommが分かりやすくて簡単ですのでこれを使用したいのですが >更新プログラムの削除や新たに何かをインストールしなくても使用できる >方法はないでしょうか? 自分で何言ってるか分かってる?
547 名前:545 mailto:sage [2009/10/31(土) 15:21:48 ] >546 失礼しました。 >MSCommが分かりやすくて簡単ですのでこれを使用したいのですが >更新プログラムの削除や新たに何かをインストールしなくても使用できる >方法はないでしょうか? MSCommのようなコントロールが分かりやすくて簡単ですのでこの様なコン トロールを使用したいのですが更新プログラムの削除やフリーのアドインなど をインストールしなくても使用できる方法はないでしょうか? (MS系の更新インストールや代替コントロールのインストールは可) WinAPIはサンプルを見てもまださっぱり理解できないので出来れば避け たいのですが、今から作るのであればコントロールではなくWinAPIで行う べきでしょうか? よろしくお願いします。
548 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 19:18:22 ] MSCommを使いたいなら対策は「ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)」を削除
549 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 19:33:45 ] セキュリティパックとは、古く多少リスキーでありながらも 公開されていたDLLとかの機能を殺してしまってモノシリッ ク化しつつある疑似カーネル群のコードを間接的に使うように することだったんでつね
550 名前:デフォルトの名無しさん [2009/11/02(月) 11:29:29 ] >>545 ttp://ziddy.japan.zdnet.com/qa5065179.html これはどう?
551 名前:545 mailto:sage [2009/11/02(月) 22:21:47 ] >550 ありがとうございます。 投稿前にこれも試したのですがVB6が入ってないから ダメと言われました。 WinAPIに挑戦してみます。 ありがとうございました。
552 名前:デフォルトの名無しさん [2009/11/03(火) 05:55:57 ] >>551 EasyCommというモジュールを使うと、素人の自分でも簡単に機能実現出来ました。
553 名前:デフォルトの名無しさん [2009/11/03(火) 13:19:49 ] >>551 VB6のSP6のruntimeのみってvectorとかに無い? #自分はsp5の使ってるけど
554 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 13:36:56 ] Vector のダウンロード数が一番になってるランタイムって、 コメント読んだらシステム破壊の事が書かれてて怖いわw 俺は昨日ソフト更新系のサイトでコレを発見したので入れてみた。 ttp://www.hmpage.jp/vb6rtest.htm セットアップがVB6のプロジェクトのタイプなので、インストール後に アンインストールして、ライブラリ類は全残しでいけた。
555 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 14:58:37 ] Frameworkさえいれておけば.NETの機能って使えるんだな 最近知ったけどStringBuilderとか使えて便利だ
556 名前:デフォルトの名無しさん [2009/11/03(火) 15:35:51 ] >>555 知らんかった・・・・・ #まともなhash使えるとかなりうれしいなぁ
557 名前:デフォルトの名無しさん [2009/11/04(水) 21:19:25 ] AOD.NET って使える?
558 名前:557 [2009/11/04(水) 21:20:45 ] 訂正 ADO.NET
559 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:32:00 ] VBAで使えるのはADOであってADO.NETは使えないんじゃなかった? 俺は2007だけどADOでアクセス(という言い方でいいか)してる。
560 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 23:40:03 ] CreateObjectでインスタンスを無理やり生成してやれば使えるんじゃね まぁ、そこまでしてやるもんでもないと思うしVSTOでも検討した方がいい
561 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:08:12 ] 以前お世話になりました270です。 ネット検索で検索ヒット件数を取得し A1A2・・・にある単語の件数をB1B2・・・に記録したいのですが、 グーグルでは取得拒否にあってしまい、ヤフーで挑みたいのですが、 送信するのに文字を %5%7 とかにしないといけない(どういうキーワードに つなげるかもわからない)みたいなのですが、 この送信ワード yahoo.co.jp/search??????? %5%6 とかの、?????と 文字の変換方法を教えていただける方いらっしゃいませんでしょう か?
562 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:13:04 ] アタックはやめろ
563 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:39:23 ] yahooのデベロッパーのサイトでは一日5万まで使って開発してくれ というのです。別段500でもいいから自動化させたいのですが・・・ そこには例文がなくて・・・どこかにフォーラムでもないでしょうか? developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html
564 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 11:05:12 ] Yahoo! JAPAN Web APIはあきらかにスレ違い
565 名前:デフォルトの名無しさん [2009/11/07(土) 17:28:03 ] excel vbaで他のブックのセルデータを参照するにはどうすればよいの?
566 名前:デフォルトの名無しさん [2009/11/07(土) 17:30:07 ] 上、ちなみにexcel2003です。 Workbooks(“ブック名.xls”).Worksheets(“シート名”).Activate これをやっても、インデックスが有効範囲にありませんが出ます。 どなたかお願いします。
567 名前:デフォルトの名無しさん [2009/11/07(土) 18:13:11 ] フォームのTextboxにドラック&ドロップで任意の列データを持ってくることはできますか? やりたいことは、2つの異なるブックのフォームの列データーを他のブックの列データーと比較をしたいのです。
568 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:06:01 ] >565-567 つマクロの記録
569 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:28:16 ] B列に1万近くの数値があり、そこから特定の範囲(例えば100〜101など)に適した数値を 指定したセルに抽出し、複数ある場合はそのしたに並べて抽出するようなプログラムを作りたいのですが、 どのようにしたらよいでしょうか? Excel2003です
570 名前:デフォルトの名無しさん [2009/11/08(日) 00:32:48 ] VBAでRSSの読み込みって出来ますか?
571 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 09:22:15 ] >>570 こんなとこで聞くよりgoogleで「VBA RSS」で検索すれば よっぽど早く結果に到達できますよ。その上でわからないことを 質問したほうが効率的では?
572 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 09:57:39 ] >>569 import sys, os import win32com.client def main(from_s, from_e, to, rng): if from_s[1] != from_e[1]: print 'error' return if rng[0] > rng[1]: print 'error' return pwd = os.path.abspath(os.curdir) xls = win32com.client.Dispatch('Excel.Application') try: wb = xls.Workbooks.Open(os.path.join(pwd, 'test1.xls')) sheet = wb.Sheets(1) c = 0 for row in range(65535): if row >= from_s[0] and row <= from_e[0]: v = float(str(sheet.cells(row, from_s[1]))) if v >= rng[0] and v <= rng[1]: sheet.cells(to[0] + c, to[1]).value = v c += 1 wb.SaveAs(os.path.join(pwd, 'testout.xls')) wb.Close() except: print sys.exc_info() finally: xls.Quit() if __name__ == '__main__': main((10, 2), (20, 2), (3, 5), (99.0, 1000.0)) # B10-B20 -> E3-
573 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 10:00:45 ] インデント消えてた orz import sys, os import win32com.client def main(from_s, from_e, to, rng): if from_s[1] != from_e[1]: print 'error' return if rng[0] > rng[1]: print 'error' return pwd = os.path.abspath(os.curdir) xls = win32com.client.Dispatch('Excel.Application') try: wb = xls.Workbooks.Open(os.path.join(pwd, 'test1.xls')) sheet = wb.Sheets(1) c = 0 for row in range(65535): if row >= from_s[0] and row <= from_e[0]: v = float(str(sheet.cells(row, from_s[1]))) if v >= rng[0] and v <= rng[1]: sheet.cells(to[0] + c, to[1]).value = v c += 1 wb.SaveAs(os.path.join(pwd, 'testout.xls')) wb.Close() except: print sys.exc_info() finally: xls.Quit() if __name__ == '__main__': main((10, 2), (20, 2), (3, 5), (99.0, 1000.0)) # B10-B20 -> E3-
574 名前:デフォルトの名無しさん [2009/11/08(日) 10:44:08 ] 2003 初心者です。 ワークシートイベントで処理を抜け出すのはどうすれば・・ 一度だけ計算させたいんですが。どこかで見た気がするのに探せない。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Column = 1 Then Target.Value = Target.Value + 1 'この後どうすれば・・・・ End If End Sub
575 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:14:38 ] >574 どっかのセルに実行済みをセットすれば?
576 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 12:57:57 ] >>574 Application.EnableEventsを使うが、実用になるChangeイベントを書くのはかなり難しいよ。 あきらめた方がいいと思うな。 真っ先に考えられる不具合は消した場合でも1になったりすることだな。 問題はこれだけじゃないからかなり難解。
577 名前:デフォルトの名無しさん [2009/11/08(日) 13:35:30 ] >>575-576 どもです。そもそも無茶なことか・・・ 初心者ゆえに「出来る・出来ない」が良くわからない ありがとでした
578 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:05:32 ] staticでも使え
579 名前:デフォルトの名無しさん [2009/11/08(日) 17:28:43 ] シート起動時に、フォームを出してそれを10秒後で消す。 その10秒の間に、フォーム内のTextboxの値を ユーザーの任意で変更できるようにと考えましたが、 タイマーしてる間、フォームが白く固まって値変更ができません。 何か改善策はありますでしょうか。2003です。 Private Sub UserForm_Activate() Dim MyWaitTime As Date '10秒後に閉じる場合 MyWaitTime = TimeSerial(Hour(Now()), Minute(Now()), _ Second(Now()) + 10) Application.Wait MyWaitTime 'マクロを指定の時間まで停止 Unload.対象日数の入力フォーム 'UserFormを閉じる End Sub
580 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:44:47 ] イベントループ拾わんといかんだろ
581 名前:デフォルトの名無しさん [2009/11/08(日) 17:45:47 ] C言語側で扱うためのバイナリファイルをVBAで出力していて 整数値は除算や剰余算を用いてバイト型配列に代入して出力しているのですが、 浮動小数値(単精度)をバイト型配列に含める場合にどう処理すればいいのか分からず困っています。 良い解決策をご教授頂ければ助かります。
582 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 18:10:19 ] ttp://program.station.ez-net.jp/special/vc/atl-com/variant.asp ttp://www.hi-ho.ne.jp/babaq/bstr.html ttp://piza.2ch.net/log/prog/kako/947/947909317.html support.microsoft.com/kb/167668/en-us/
583 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 22:34:13 ] >>581 配列に入れる理由がファィル出力のためだけなら、いちいち配列など使わずに ファイルをBynaryモードで開いて整数も実数もそのまま出力してしまえばいい。 ただし、実数の内部表現が異なる場合は使えない。 どうしてもVBAの中で1バイトずつ取り出す必要があるなら、 Win32APIのMoveMemoryを使うぐらいしか方法がない。
584 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 20:42:51 ] #ファイル番号 でファイルにバイナリアクセスしている時に、 ストリーム位置を取得する方法を教えてください。 (Cのftell()相当の操作)
585 名前:584 mailto:sage [2009/11/09(月) 21:06:44 ] 自己解決しました。 Seek( ファイル番号 ) で取得できました。
586 名前:デフォルトの名無しさん [2009/11/10(火) 15:17:54 ] Private Sub UserForm_Initialize() Dim lastRow As Long Dim ReturnBook As Workbook, TargetBook As Workbook Set ReturnBook = ActiveWorkbook Application.ScreenUpdating = False Set TargetBook = Workbooks.Open("D:\test\sample.xls") With TargetBook.Sheets("Sheet1") ' ListBox1.ColumnHeads = True Me.ListBox1.List = .Range(.Range("B2"), .Cells(.Rows.Count, 2).End(xlUp)).Resize(, 2).Value ReturnBook.Activate Application.ScreenUpdating = True TargetBook.Close End With End Sub 削除区分 コード 商品名 0 1001 りんご 1 1002 みかん 0 1003 バナナ こういう風な外部ブックに対して削除区分が1のデータをリストボックスに 表示しないようにするにはどうすればいいですか?教えてください
587 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 23:44:43 ] b.hatena.ne.jp/articles/200911/553 会社の仕事でマクロを組むのはズル? 事務作業の効率化に意見さまざま
588 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 23:48:02 ] マクロを組むのはズルじゃないが 他人が作ったマクロを勝手に使って 仕事を早く終わらせるのはズルだと思う 少しはリスペクトなりインセンティブなり気を使えと
589 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 15:13:14 ] その理屈でいくとPCも電卓もせめて一度は作ってから使えということになるが
590 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 15:25:27 ] その理屈でいくと家も会社もせめて一度は作ってから住め(従事)ということになるが
591 名前:デフォルトの名無しさん [2009/11/11(水) 22:10:44 ] シート2の表を、シフト+編集で図のコピーを行い、シート1に貼るマクロを組みましたが、 そのシート1の貼りつけた図のコピーを切り取るマクロを組むと、ピクチャー番号が異なるために、できません。どうすれば、解決できますか?
592 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:21:57 ] 以下のような動作をするマクロって、VBAで作成できますか? (実現可能性だけ教えて頂ければ、自力でどうにかしたいと思います) ・処理内容 Outlook2007で、 特定の件名がついたメールは、メール内容表示の際にボタンを出現させて、 ボタンを押すことでExcel2007にメールの内容を転記させる。 例えば、以下のような感じです。 ■Outlook 件名:○○見積書 メール内容: ○○費 \50000 △△費 \100000 ―――- |ボタン|←ポチっとな ―――- ■Excel A1セル:○○費 A2セル:\50000 B1セル:△△費 B2セル:\100000 が転記される
593 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:23:58 ] できるっちゃできる
594 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:28:37 ] シート上に下記のパラメータで長方形のオートシェイプを作りたくて書いたVBAです Sub 四角形2() Dim MyShape As Shape Set MyShape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 40, 425, 355, 90) With ActiveSheet.Shapes.Range(MyShape.Name) .Fill.Visible = msoTrue .Fill.Solid .Fill.ForeColor.SchemeColor = 10 .Fill.Transparency = 0.5 End With End Sub しかし実際にはWith内で指定したパラメータは常に共通で 位置と大きさのみ違う複数のケースでの長方形を作りたいのです。 With〜End WihtをPrivateFunctionに書いて、MyShapeの値を変えて参照させれば良いですか? あと自分で書いておいてなんですが(MyShape.Name)は何を表すんでしょう?
595 名前:デフォルトの名無しさん [2009/11/12(木) 19:57:22 ] 質問です。 あるフォルダに入っているテキスト形式のデータ10個を エクセルで開いていくVBAのプログロムを書いている のですが、エラー文で「データ_i.txtがありません」と表示されます。 私の書いたプログラムは下記です。 Sub テスト() テスト Macro Dim i As Integer For i = 0 To 5 ChDir "C:\Documents and Settings\データ" Workbooks.OpenText Filename:= _ "C:\Documents and Settings\データ\_i.txt" _ , Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _ Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _ TrailingMinusNumbers:=True Next i End Sub このプログラムの目的は、テキストデータの入っているフォルダを 他の名前に変更したときも、その中に入っているテキストデータ10個を エクセルで展開するためです。おそらく "C:\Documents and Settings\データ\_i.txt"のiの部分が間違えていると 思うのですが、どうすればいいでしょうか?よろしくお願いします。
596 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 20:10:08 ] 知らんがな(´・ω・`)