1 名前:デフォルトの名無しさん [2007/12/12(水) 17:27:44 ] ExcelのVBAに関する質問スレです 質問前に 【 >>2-3 】 あたりを良く読むこと 前スレ pc11.2ch.net/test/read.cgi/tech/1189814602/
713 名前:デフォルトの名無しさん [2008/02/10(日) 16:23:57 ] >>704 補聴器買ったほうがいいと思うよw
714 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:36:38 ] 音は出てないから補聴器買ったところで聞こえようが無い
715 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:38:40 ] >>713 >>704 には幻聴が聴こえるようだから精神科を薦めた方が良いのでは?
716 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 16:56:47 ] そんなにいぢめてやらんでも・・・
717 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 17:02:23 ] わかんねーから教習所に通ってんのに、お前らはなんにも教えてくれない自動車教習所の教官。 へたっぴな運転を見てからかってる。
718 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:29:04 ] >>717 ウェ〜
719 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:47:18 ] 違うな、教習場に行けばいいのにこんな場末の練習場に来ている阿呆を見に来ている暇人だな。
720 名前:>711 mailto:sage [2008/02/10(日) 20:01:51 ] やりたい事と合ってるかわ解らんが参考にしとくれ 行を削った後座標がズレるけど良いのか? Sub TEST() For I = 0 To 99 Cells(I + 4, 1).Cut Destination:=Cells(I + 2, 2) Range(Rows(I + 3), Rows(I + 5)).Delete Next I End Sub
721 名前:デフォルトの名無しさん [2008/02/10(日) 21:12:35 ] 質問です。 例えば、Aの列にはデータを10〜20個入れたとして、 B1にデータ一個を入れます。 このとき、Cの列にはC1=A1-B1、C2=A2-B1・・・というように、 AのデータとB1の差を代入したいと思うのですが、簡単なやり方がわかりません。 確かコピペですいすいいけたと思うのですが・・・ ご教授お願いします。 使ってるのはXPsp1のexcel2002です。
722 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:28:24 ] >>721 減算で。 Sub test001() Range("A1").Resize(20).Copy Range("C1").Resize(20) Range("B1").Copy Range("C1").Resize(20).PasteSpecial Paste:=xlPasteAll, Operation:=xlSubtract, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End Sub
723 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:29:34 ] For i=startRow To endRow Cells(i,3).Value=Cells(i,1).Value-Cells(1,2).Value Next つかVBAの質問なの???
724 名前:デフォルトの名無しさん [2008/02/10(日) 21:34:29 ] >>721 C1に=A1-$B$1 C1の右下つかんで下方向にびろ〜んとする
725 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 21:54:21 ] >>722 >>723 すいません、理解できませんwww >>724 ありがとうございます〜
726 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 22:09:59 ] >>720 ありがとうございます。。 というか自分、何やってんだorz
727 名前:デフォルトの名無しさん [2008/02/11(月) 20:33:25 ] プログラミングは詳しくないのですが、どなかたご助力下さい。 (質問内容) フォルダ内で「読取パスワードが設定されいてるEXCELファイルを検索する」 どなかた該当の命令文をおしえていただけないでしょうか。
728 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:00:10 ] DOS窓を表示させないまま、DOS窓のコマンド使って標準出力の内容が欲しい場合ってどうすればいいですか? Execだとウィンドウ非表示にできないし、Runだと標準出力につなげないんですが
729 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:19:36 ] >>728 FAQ
730 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 03:55:12 ] ぐぐれ コンソール プロセスを生成して標準ハンドルをリダイレクトする方法
731 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 04:04:03 ] KB173085
732 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 07:47:07 ] いまだにDOS窓とか使ってるやつおるんかねぇ
733 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 09:13:59 ] >>732 GUIがないソフトがあるんで使ってる。
734 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:20:00 ] DOS窓とコマンドプロンプトは別物
735 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:20:53 ] と言うか、WinXPにDOS窓って存在するの?
736 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:53:06 ] >>735 アレを、ほとんどの人はDOS窓と呼ぶのだ。
737 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:12:58 ] 二つのテキストファイルABを読み取り比較した結果を表示するマクロを作りたい。 Aに行が挿入されてBになっている場合、Aにも挿入した分だけ空白行を入れて表示したいが、いい例はないものか。
738 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:21:08 ] つ[/usr/bin/diff]
739 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:25:56 ] Excel VBAスレでその回答はどうだろう
740 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 13:33:00 ] 抽象的な質問には抽象的な回答を。
741 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:05:52 ] W9x Wme の DOS 窓は文字通り DOS 窓って言って良いんだけど コマンドプロンプトは DOS とは互換性がないからなぁ
742 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:08:38 ] コマンドプロンプトってDOSのエミュレートじゃないの? DOSプログラムは、コマンドプロンプトでは動かないの?
743 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:12:13 ] DOSプログラムも動くからDOS窓でいいじゃん
744 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 14:12:41 ] >>271 本尊乙
745 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:44:34 ] 質問です。 以下のが「スタック領域が不足しています」で通りません。 多分再帰が問題なんだろうけど、よくわかりません。 VistaのExcel2007です If文以降に問題があると思うんですけど… Private Sub Worksheet_Change(ByVal Target As Range) Dim Ein As Integer Dim Fin As Integer Dim Year As Integer Dim Month As Integer Year = Range("C2").Value Month = Range("E2").Value Ein = Weekday(Year & Month & "1", 1) Cells(5, 1 + Ein) = ("1") If Month = 2 Then Fin = 28 Else Fin = 31 End If Cells(10, 10).Value = Fin End Sub
746 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:50:08 ] >>745 Application.EnableEvents = False Cells(5, 1 + Ein) = ("1") If Month = 2 Then Fin = 28 Else Fin = 31 End If Cells(10, 10).Value = Fin Application.EnableEvents = True
747 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:01:08 ] >>746 ありがとうございますm(_ _)m おかげさまで解決しました
748 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:04:58 ] >>742 コマンドプロンプトは純粋なWin32プログラム。 仕様面でDOSの流れを大きく受け継いでいるけど。 コマンドプロンプトの中でDOSプログラムを動かすときには、 NTVDM (NT仮想DOSマシン)でDOS環境をこさえて、 その中でcommand.comを起動し、それから目的のプログラムを実行する。 それ以外だと直接NTVDMから始まるが後は同じ。
749 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:45:34 ] コマンドプロンプトとDOS窓の区別が付いてないやつはVBAとマクロの区別も付いていない 間違いない
750 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:45:26 ] >>727 無理せずテンポラリファイルにリダイレクトして読め
751 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:45:31 ] んなもん、どーでもいい。
752 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:24:27 ] >>738 それをEXCEL VBAでやりたい。 (UNIXでやれよ、というのは不可)
753 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:43:48 ] >>752 行が挿入されたものか、一部改変されたものかの判断って、どうやるつもり? 判別の難しさと、それに伴う処理速度考えたら現実的じゃないと思うが。 前後データまで絡める判別はVBでは実用的じゃないし、ロジックの問題なら他スレ行け。
754 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 11:22:17 ] >>752 私だったらピボットテーブル使う。 それぞれのテキストをA列に、B列にはどっちのテキストなのかわかる記号を入力しとく。後はわかるでしょ。
755 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 11:34:02 ] diffのソース読めばいいよ
756 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 12:21:30 ] アドバイス多謝。 >>753 >行が挿入されたものか、一部改変されたものかの判断って、どうやるつもり? 一部改変については、次の行を比較して、一致なら改変、そうじゃなければ挿入と考えるつもり。 (二行改変は考慮しない) 問題は、挿入か削除か。 そのセルを上方検索し、見つかれば削除、でなければ挿入って判断かな。 ロジックってこの板?
757 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 12:47:07 ] 他人を巻き込んでダラダラやらずに、diffのソース読んだほうが早いって
758 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 13:14:21 ] shell c:\windows\windiff.exe
759 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:50:59 ] つfc.exe
760 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 16:52:35 ] "c:\program files\support tools\windiff.exe" /?
761 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:07:24 ] 良回答認定>>760 だがスレ違い
762 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 09:57:51 ] >>758-760 神認定 と思って報告したら、 「入ってるPCと入ってないPCがある」と言われたorz
763 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 23:26:24 ] winmerge
764 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:36:29 ] cdiff.vbs
765 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:41:39 ] 2つのExcelファイルをdiffするのをVBAでやりたいのですが?
766 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:47:32 ] やればぁ?
767 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:34:31 ] やってくださいよ
768 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:25:09 ] つc:\program files\support tools\bdiff.exe
769 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:52:16 ] エクセルの機能にある、「Webページとして保存」ではなく 1.htmlを記述してあるシートをコピー 2.メモ帳に貼り付け、test.txtとして保存。 3.2のtest.txtをtext.htmlに名前を変更。 というような動作をVBAで自動化できるでしょうか。 もし、似たようなことが可能であれば教えてください。
770 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:58:33 ] できるけどエクセルでやるようなこと?
771 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:05:58 ] メモ帳を自動化するのはむずかしい
772 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:12:24 ] セルの内容をそのままファイルに出力すればいいんじゃ?
773 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 19:16:09 ] >>769 シートの内容をプレーンテキストに出力して拡張子を.htmlにしたいなら メモ帳なんて使うまでもないが、770も言ってるとおりExcelの仕事じゃない >>2 ★3,4 >>771 vbsとかで自動化するのは難しいけど VBAというかVB言語ではSendMessage使えるから簡単だよ
774 名前:769 mailto:sage [2008/02/16(土) 19:51:14 ] ありがとうございます。 具体的な目的を言うと、複数の条件でhtml記述を変化させている シートがありまして、そのhtmlをブラウザでプレビューするのを 先ほどの手順でやっていたのですが、それを簡素ができないものか と思っていたのです。 もう少し考えて見ます。
775 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:19:25 ] >>772 じゃ駄目な理由をまず聞こうか。
776 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:02:38 ] 簡単なSendMessageを使ってもらおうか
777 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 13:24:27 ] 教えてください! Excel2007のOfficeボタンを非表示にする方法ってあるのでしょうか? マイクロソフトのライブラリを見てもまだ情報がなくて……。どなたかご存知の方ご教授いただけませんでしょうか。
778 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:37:44 ] Officeボタンとは何かというところから解説してください
779 名前:デフォルトの名無しさん [2008/02/17(日) 15:39:09 ] OS:XP、Excel2000でワークシート関数を使用したいと思います。 引数にシート範囲ではなくVBAの配列を指定したいのですが そのままでは出来ません。 引数に配列を指定する方法があれば、ご教授願います。 dim a(10) as long dim b as long b = WorksheetFunction.Max(a)
780 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:09:12 ] >>778 様 「Officeボタン」とはExcel2007から追加された、いままでで言う「ファイル」メニューのようなGUIになります。 新しく追加されたGUIのため、Officeボタンのオブジェクトライブラリを操作すれば非表示にすれば良いのか、xmlを編集すれば操作できるのかどうしても判らないんです。 ご存知でしたらご教授戴けると幸いです。 >>779 様 動的配列のサマリを計算するメソッドのようなものがあればそれを代用すれば良いのかもしれませんが、 自分には以下のような方法でいつも計算させてしまっています。 Sub subTEST() Dim a(10) As Long Dim b As Long For inCnt = LBound(a) To UBound(a) b = WorksheetFunction.Max(a(inCnt)) Next a End Sub
781 名前:デフォルトの名無しさん [2008/02/17(日) 19:13:16 ] >>780 ご回答ありがとう御座います。 ただ、そのコードだとa(10)の値がbに入るだけではないでしょうか?
782 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 20:41:33 ] >>780 なるほど あいにく2003なので力にはなれません でもApplicationクラスのどっかにCommandBarsみたいにあると思うから、 地道に探してみるしかないんじゃ
783 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 14:43:42 ] zzって何者? ヴァッカじゃねーのwww 氏ねよwww チラシの裏でスマソ
784 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:39:11 ] >>781 たまたま>780がmax()の仕様を知らなかっただけだろ。 どうしてもワークシート関数を使いたいなら配列を1要素ずつ処理すればいいと言う点では同意。 max()の場合なら、b = worksheetFunction.max(a(inCnt), b)とでもすれば使える。 # average()なんかはそうはいかないけど。
785 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 07:04:05 ] 関数の引数にセル位置を「A1」の形式で入れたいとき、 行を変数にはできないんでしょうか? たとえば変数xをSUM関数につかう場合、=SUM(A1:Ax)としてもエラーになりますよね・・
786 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 08:08:49 ] このすれ頭から読み直せ
787 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 11:53:43 ] HYPERLINK関数で質問です。 HYPERLINK関数では、特定の文字を含むリンクは張れないのでしょうか? 現在、HYPERLINK関数を用いたシートの目次を、 マクロで作成しております。 ですが、シート名に記号を含むと参照できないようです。 (@や#などほとんどの記号は駄目ですが、 アンダーバーだけは大丈夫なようです・・・。) しかし、マクロではなく、編集メニューの [挿入]→[ハイパーリンク]から同じシートを指定した場合は、 参照できるようですorz これら2つの操作は全く別物なのかもしれませんが・・・orz --------------------------------------------- <参照できる例> =HYPERLINK("#シート名!A1", "シート名") <参照できない例> =HYPERLINK("#@シート名!A1", "@シート名") Excelのバージョン:2002(10.2614.3311) --------------------------------------------- 参照できない例のようなシート名で、 HYPERLINK関数で参照する方法はありますでしょうか? 何かわかる方がおられましたら、ご助言ください。 よろしくお願いします。
788 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 12:29:39 ] Officeボタンも知らないヤツが、質問スレで回答側に回ろうとするなよw
789 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:27:23 ] 目先の問題の回答は出来なくても質問の仕方を教えるのはできるだろ
790 名前:デフォルトの名無しさん [2008/02/21(木) 19:44:50 ] エクセルで計算した数値は少数桁何桁精度なのでしょうか?
791 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 19:59:12 ] 3桁
792 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:11:40 ] >>790 IEEE 754倍精度はある。
793 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:07:20 ] Perlについての質問箱スレから誘導されて来ました。 Excel VBAからDOSコマンドを実行することはできますか? 具体的にはPerlスクリプトを実行させて、結果をExcelで受け取って 表示するまでを1クリックで行いたいと思っています。 環境はWindowsXP Home Edition、Excel 2003 です。 よろしくお願いします。
794 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:51:57 ] >>793 >Excel VBAからDOSコマンドを実行することはできますか? ちょいと命令忘れたができる。 VBAからPing送ったりbatを呼び出したりしたりもできるから間違いない。 >具体的にはPerlスクリプトを実行させて、結果をExcelで受け取って >表示するまでを1クリックで行いたいと思っています。 上の内容を具体的にしたつもりだろうが、上ができたとしてもこちらは関係ないだろ? PerlからExcelにイベントでも起こさせられれば可能。
795 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:06:30 ] XPにDOSは載ってません
796 名前:793 mailto:sage [2008/02/22(金) 01:09:30 ] >>794 ありがとうございます。では情報があることを信じて 再びgoogleの海へと漕ぎ出すことにします。 >上ができたとしてもこちらは関係ない 言われてみたらその通りでした。 いつPerlの処理が終わったかExcel側で知る必要がありますもんね。 >>795 すみません、XPではコマンドプロンプトでしたか。
797 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:46:04 ] >>793 >>728-731
798 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 02:00:35 ] active perlはどう?
799 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:22:22 ] >>792 つまり何桁ですか?
800 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 20:07:05 ] >>792 倍精度の前のIEEE 754って、何を規定した規格の番号ですか?
801 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 21:39:25 ] >>800 ググれ 浮動小数点数の規格だ
802 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:55:17 ] >>800 Excel2000辺りは倍精度だけど、2003辺りからは拡張倍精度になっているから要注意。 前者は10進数で概ね15桁、後者は10進数で概ね19桁の精度があることになる。
803 名前:693 mailto:sage [2008/02/23(土) 16:40:39 ] 解決したよ。 Origin句を定数xlWindowsから、 Shift-Jisのコードページである"932"へ変更してみたところ 文字化けなく開くことができたのでご報告。 その辺の細かな挙動の違いにだいぶ時間使いました・・・。 今後の何かの参考になれば、ということで、ひとつ。
804 名前:デフォルトの名無しさん [2008/02/23(土) 16:45:14 ] VBAやEWCELのlog関数で計算して、その答えから逆算してもとに戻してみたら3桁精度しかなかったのです。 精度をあげる方法がありましたら教えてください。
805 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:30:23 ] 寡聞にしてEWCELなるものは存じ上げませんが、VBAでやってみたということでしたら ソースをご提示願えませんでしょうか。
806 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:44:19 ] EXCELの前身のアプリじゃね
807 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:11:53 ] WinXP+Office 2k7です。 ワークシート上部のいくつかのセルに任意の数値を入力するとそれに基づいて全体が計算されるシートを作りました。 B8というセル(自分で数値を入力する)の値がいくつならセルI818が0になるか、というのを探すためにLoopを使ったのですが、 Dim x As Integer x=0.1 Do x=x+0.0001 Range("B8").Value=x Loop Until Range("I818").Value=0 とやってもI818が0になっても普通に通り過ぎてしまいますorz ひょっとしてワークシート上でI818が計算されるのを待たずにLoopが続いてしまうんでしょうか。。? お知恵をお貸しください
808 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:23:28 ] お前、小卒か? 整数って意味を知ってるか?
809 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:28:32 ] あ、integerじゃなくてdoubleでした。 こっちに書くとき間違えた\(^o^)/
810 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:33:09 ] > B8というセル(自分で数値を入力する)の値がいくつならセルI818が0になるか 自分でマクロ書かなくても、それはExcelのゴールシークを使えばいいのではないかと思う。
811 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:36:45 ] >>810 うは・・・全然知りませんでした('A`) お手数おかけしました。ありがとうございます
812 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:00:13 ] すれ違いでしたら誘導お願いします。 「マクロを有効化する」を出さずfor文相当の機能を実現しようと思ってます。 直接forは使えないので、富豪的にセルのマスを記憶装置にする方針です。 やりたいことは、以下の状況で 「列Bが「新」の行の数値を抜き出して それをコンマで連結して指定のセル(例えばD100)に入れる」です。 列A 数値(1ずつ増えていく) 列B 「新」「旧」のどちらかの文字 一旦、以下の式をC列に入れて、ドラッグでオートフィルします。 =if(B1="新",A1,"") これはうまく行き、C列には「新規」の行のみに数値が表示されます。 次に、D列の先頭にC1の値を入れます(forの初期条件) 次に「同じ行のC列に値があれば、一つ上のD列の値をコンマで連結」 「同じ行のC列に値がなければ、一つ上のD列の値をそのまま表示」 をforのステップ条件としてD2にかき、D100へオートフィルしようとしたのですが =CStr(D1) & "," & CStr(C2)やCStr(val(D1)) & ..といった式ではうまくいきません。 アドバイス頂けないでしょうか 以上長文失礼しました。
813 名前:812 mailto:sage [2008/02/24(日) 11:03:55 ] ↑訂正「新規」ではなく「新」ですね
814 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 11:37:49 ] Vlookupじゃね?
815 名前:デフォルトの名無しさん [2008/02/24(日) 12:12:23 ] >>804 > VBAやEWCELのlog関数で計算して、その答えから逆算してもとに戻してみたら3桁精度しかなかったのです。 log関数は数値が小さいと精度は悪くなる。 少し値が変わると急激に値がかわるからな。 自分で精度のよい関数を作るのがよい。 級数展開とかやれば作れる。 >>805-806 おまえら厨房だな。
816 名前:デフォルトの名無しさん [2008/02/24(日) 13:44:03 ] 質問なのですが適当な大きさのユーザーフォームを作成してフォームの中にラベルや ボタンを設置します。設置したラベルやボタンが常にフォーム幅の真ん中に設置 させる方法はありますでしょうか?フォームの大きさを後で変更しても真中に自動で なるようにしたいです。
817 名前:812 mailto:sage [2008/02/24(日) 15:25:46 ] >>814 それだとコンマをくっつけることができませんでした。 しかし、結局、こんな感じで解決しました if(C2<>"",concatenate(D1,",",text(C2,"#")),D1)
818 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:05:38 ] >>816 算数レベルで処理
819 名前:800 mailto:sage [2008/02/24(日) 22:00:00 ] >>802 Thanks。概ねという留保付けは、このせいですか? Excel で浮動小数点演算の結果が正しくない場合がある 2007年3月19日 support.microsoft.com/kb/78113/ja
820 名前:デフォルトの名無しさん [2008/02/24(日) 22:38:32 ] 816さんどーゆうことですか?
821 名前:802 mailto:sage [2008/02/24(日) 22:49:22 ] あーそうそう、そこの精度の欄にある、暗黙と仮数を足した53ビットを10進で表わすと概ね15桁ってこと。 つまり、log2(2^53)≒15.95=15~16桁。
822 名前:デフォルトの名無しさん [2008/02/25(月) 10:04:55 ] 教えていただきたいのですが、エクセルで、Aの列に任意のセルのカーソルが ある場合のみ(B列やC列ではプログラム自体が稼動しなくしたいのですが) FANCTIONを実行したいのですが、うまくいきません。 どうしたらうまくうごくのでしょか?
823 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 11:18:34 ] >>822 もうちょっと分かるように説明しる。あと、どんなFUNCTIONよ? ボタン押したときに、カーソルが特定の列にある場合にのみ処理を有効にしたいってことか?
824 名前:デフォルトの名無しさん [2008/02/25(月) 11:38:48 ] 822です。 >カーソルが特定の列にある場合にのみ処理 まさにこの事です。エクセルの行列のデーター をVBで計算させてるのですが、キーの列をA列にして そこからActiveCell.Offset(0, x)とActiveCell.Offset(0, x+1) を足してActiveCell.Offset(0, x+2)へ答えを出しなさいとしてるのですが、 いかんせん、キーにしているA列以外にセルがある場合も実行していまうので ActiveCell.Offset(0, x+2)の書き込みたいところデーターのあるActiveCell.Offset(0, x+3) とかに上書きしていまうので、何とかしたいのです。FANCTIONは ActiveCell.Offset(0, x+3)=ActiveCell.Offset(0, x)+ActiveCell.Offset(0, x+2) を変数にしたものです。
825 名前:デフォルトの名無しさん [2008/02/25(月) 11:42:10 ] すいません。間違いました。FANCTIONは ActiveCell.Offset(0, x+2)=ActiveCell.Offset(0, x)+ActiveCell.Offset(0, x+1) を変数にしたものです。 です。
826 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:17:05 ] >>825 単にFANCTIONとやらの先頭で、ActiveCellがA列じゃなければ終わればいいだけじゃね?
827 名前:825 [2008/02/25(月) 12:58:53 ] ActiveCellがA列じゃなければが、 書けないのです・・・
828 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 13:12:22 ] そもそも>824のxはどこから出てきたのか知らんが、 offsetプロパティに辿り着けるくらいならcolumnプロパティくらい見つけられるだろ。 試しにmsgbox activecell.columnして味噌。
829 名前:825 [2008/02/25(月) 14:11:10 ] If ActiveCell.Column = 1 Then で出来ました! 828さん ありがとうございます。 感謝 感謝!
830 名前:デフォルトの名無しさん [2008/02/25(月) 15:57:11 ] 基本的な質問でスミマセン! ワークシートに新しい埋め込みグラフを作成(Addメソッドによる)したいのですが Dim co As ChartObject Set co = Worksheets("sheet1").ChartObjects.Add(50, 40, 200, 100) は正常に動くんですが Worksheets("sheet1").ChartObjects.Add(50, 40, 200, 100) は、構文エラーになります。なんで? わざわざ変数に格納しないと、機能しないのはなぜなのでしょうか? 詳しい人おられましたらご教授いただけないでしょうか?
831 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 16:00:26 ] そういう構文だからだろ。疑問を持つところじゃない。
832 名前:デフォルトの名無しさん [2008/02/25(月) 17:16:37 ] Rng AS Range Rng1 AS Range Rng2 AS Range Rng=Range("A1:G10") このRngから一番右の範囲をRng1に入れたい。 またRngから一番右の列を除いた範囲をRng2に入れたい。 どのようにすればよいでしょうか?
833 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:32:27 ] union
834 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:45:36 ] >>830 Callステートメント
835 名前:デフォルトの名無しさん [2008/02/25(月) 18:49:27 ] >>832 Rng1=Rng.Resize(Rng.Row.Count-1,Rng.Columns.Count).offset(1,0) Rng2=Rng.Resize(1,Rng.Columns.Count).offset(1,0)
836 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:51:26 ] >>830 Worksheets("sheet1").ChartObjects.Add 50, 40, 200, 100
837 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:07:06 ] ところで君たちは未だにVB独特のハンガリアン記法を守っているのかい? 今度VBAをメンテすることになって読みにくいなあと思ってるんだが・・・。
838 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:21:31 ] なんでExcelでシステムハンガリアン使うん?
839 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:40:24 ] >>835 はぁ? >>832 Set Rng1 = Rng.Columns(Rng.Columns.Count) Set Rng2 = Rng.Resize(, Rng.Columns.Count - 1)
840 名前:デフォルトの名無しさん [2008/02/25(月) 23:55:21 ] 質問です、デスクトップでユーザーフォームだけ残してエクセルは最小化する方法はありますでしょうか?
841 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:00:18 ] 任意のxisファイルを2個各シートに読み込みたいのですが どうやってもできません・・・ ファイルの読み込みってどうやればいいのでしょうか?
842 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:17:49 ] >>841 ブックを開いておいて、シートを移動すれば医院で内科医。
843 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:27:13 ] vbaを使用してRS232cで計測するはめになったんですが、エクセルのvbaはvb6のようなタイマがないので、 擬似的なタイマを作成するときに、何か注意点とか欠点教えてください
844 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:28:18 ] ご愁傷様。
845 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:30:47 ] >>842 VBAでボタンでファイルを選択って出したいのです! でも参照とか選択ってBOXの出し方すら分かりません・・・
846 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:56:58 ] >>845 ファイルを開くダイアログ ttp://www.serpress.co.jp/excel/vba030.html
847 名前:デフォルトの名無しさん [2008/02/26(火) 01:14:15 ] 質問です、デスクトップでユーザーフォームだけ残してエクセルは最小化する方法はありますでしょうか?
848 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:15:58 ] >>846 おお、これでBOX造れるんですね!どうも! またちょっと頑張ってみます
849 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:10:38 ] >>847 こういう事? Private Sub UserForm_Initialize() Application.Visible = False UserForm1.Show End Sub
850 名前:デフォルトの名無しさん [2008/02/26(火) 08:29:10 ] Dim a As Integer a = Count("a1:a4") For i = 1 To a Beep Next i シートのデーター数だけ繰り返し処理したいのですが a = Count("a1:a4")ここんとこがエラーになってしまいます。 どう処理したらいいのでしょう?
851 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 12:43:24 ] a = WorksheetFunction.Count(Range("a1:a4")) でどう? 試してないけど。
852 名前:デフォルトの名無しさん [2008/02/26(火) 16:50:49 ] 851さん 850です。動きましたありがとうございました。
853 名前:デフォルトの名無しさん [2008/02/26(火) 19:00:35 ] Renge(RefEdit1.Value)と使いたいのですが RefEdit1.Valueを『セル範囲』かどうか調べる方法はありますでしょうか? よろしくお願いします。
854 名前:デフォルトの名無しさん [2008/02/26(火) 20:10:29 ] フォームから入力するVBAを作成しました。 プログラムを走らせ、フォームがでますが、 何も入力せずに放置するとFrame内だけが白くなります。 改善する方法はありますでしょうか?
855 名前:デフォルトの名無しさん [2008/02/26(火) 21:57:03 ] 830です。 >>834 さん なるほど!。値を渡す構文になってしまっていたのですね! >>836 さん 本当だ!動きました。ありがとうございました。 834さん。836さん。お陰様で疑問が解決しました。感謝!感謝!
856 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:29:04 ] >>854 気にすると体に毒だぞ
857 名前:デフォルトの名無しさん [2008/02/27(水) 09:51:07 ] >>856 つまり対策はないと?
858 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:52:18 ] モニタの色温度を変えると白を赤っぽく変えたりできるよ
859 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 18:33:00 ] >>857 俺ら低レベルではわからないんだよ。
860 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:33:21 ] >>854 再現する最低限の構成で、ブックもしくはユーザーフォームモジュールをうp 情報全く無しじゃ、さすがに改善法どころか改善可能か否かすらもわからんわな
861 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:22:06 ] 俺らはそれだけVBAをさわってないってことさ。
862 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:26:29 ] 現実の出来事かどうかすらあやしい
863 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 05:23:21 ] 他のフォームでも同じ現象になるのか検証したの?
864 名前:デフォルトの名無しさん [2008/03/01(土) 04:27:20 ] エクセルで作った表を画像として保存するマクロってありますかねぇ?
865 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:55:31 ] >>864 VBAの範囲だけじゃ無理だけど実現可能
866 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 08:15:23 ] >>864 (っ´▽`)っ 暇なので作ってみたよ☆ Option Explicit Private Declare Function GetVersionExA Lib "KERNEL32.DLL" ( _ ByRef pVersionInfo As OSVERSIONINFO _ ) As Integer Private Declare Sub keybd_event Lib "USER32.DLL" ( _ ByVal bVk As Long, _ ByVal bScan As Long, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long _ ) Private Const VK_SNAPSHOT As Long = &H2C Private Const VK_MENU As Long = &H12 Private Const KEYEVENTF_KEYUP As Long = &H2 Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type (次レスに続く)
867 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 08:16:12 ] (>>866 の続き) Public Sub printScreen() Dim pVersionInfo As OSVERSIONINFO pVersionInfo.dwOSVersionInfoSize = Len(pVersionInfo) If pVersionInfo.dwMajorVersion >= 5 Then Call keybd_event(VK_SNAPSHOT, 1, 0, 0) Else Call keybd_event(VK_MENU, 0, 0, 0) Call keybd_event(VK_SNAPSHOT, 0, 0, 0) Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0) Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0) End If End Sub
868 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 08:36:24 ] (っ´▽`)っ >>866-867 はPrintScreenするマクロだよ。 あとは任せた☆(っ´▽`)ノシ
869 名前:デフォルトの名無しさん [2008/03/01(土) 08:41:50 ] 割り込みで申し訳ないですが、パラレルポート制御を 考えているんですが、VBIOSCMみたいなDLLってVista対応版は ありますか? その他でパラレル制御の方法はありますか? 是非ご教授願います。
870 名前:デフォルトの名無しさん [2008/03/01(土) 10:07:39 ] PC内のフォルダおよびファイルを全て エクセルシートに書き出したい。 DIR関数でやってみたけど、 フォルダを見つけたら階層を掘って、掘り尽くしたら戻って… て処理が上手く行かない。 ご協力頼んます
871 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:10:05 ] (っ´▽`)っ はプロかな?凄いな
872 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 10:21:41 ] >>870 (っ´▽`)っ ヒント:再帰
873 名前:入院中の側近 ◆0351148456 [2008/03/01(土) 10:28:33 ] >>870 (っ´▽`)っ こういう関数を作る。 引数:フォルダ 処理 ・引数のフォルダの情報をワークシートに書き出す。 ・フォルダ内の全てのファイルの情報をワークシートに書き出す。 ・フォルダ内の全てのサブフォルダに対し、それを引数として当関数を呼び出す。 (っ´▽`)っ ちなみにエラーをキャッチしておかないと、 参照不可のフォルダ、ファイルのところで処理が止まるよ。 ファイル、フォルダに関してはScripting.FileSystemObjectを使うといい。
874 名前:870 mailto:sage [2008/03/01(土) 11:16:18 ] >(っ´▽`)っ ありがとう。やってみます。
875 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:25:08 ] なんだ、ファイルを全て書き出したいと言うから中身を書き出したいのかと思ったぜ。 単にファイル名を書き出したいだけなんだな。
876 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:36:05 ] FSOに慣れておくとASPにもVBSにも使えるからオトクです(^ω^)
877 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:32:26 ] >>870 ttp://www.atmarkit.co.jp/fwin2k/win2ktips/310filelist/filelist.html
878 名前:デフォルトの名無しさん [2008/03/02(日) 23:54:52 ] 物凄く基本的な事で申し訳ないのですが・・・、処理待ちでスリープを掛けたく、 WScript.sleep (250) と記述していますが、エラー424 オブジェクトが必要です というエラーが出るのです。 何か参照設定が足りないんでしょうか。。
879 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:56:42 ] ググれよ・・・
880 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:01:10 ] >>878 WScript.exeを参照設定しろー
881 名前:デフォルトの名無しさん [2008/03/03(月) 00:45:53 ] >>880 ありがとうございます。 WScript.exeを参照し、Windows Script Host(Ver5.6)を参照設定に加えたのですが やはり同じエラー出ました。 参照の問題では無さそうなので、設定も含めた他の部分をもう一度見直して見ます。 >>879 当然質問前に検索したのですが、WScriptの参照設定について記述されたページが見つからなかったもので・・・。 すみませんでした。
882 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:15:50 ] Win32 APIのSleep関数を使えばいいじゃない。
883 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:22:50 ] >>878 それって、Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)じゃいけないの?
884 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 10:54:00 ] 自分が過去に作ったソースをよく探すんですけど、 Excelファイルが散在してるし、開いてからAlt+F11を押す手間とか効率悪いです。 GoogleDesktopSearch用Excel VBAプラグインってないもんですかね?
885 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:52:08 ] 別にプラグインじゃなくてもブックファイルからVBAを抽出するだけでもよさそうな。 まぁ、そういうものがあるかどうかって話になるけど。
886 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:59:12 ] >>885 VBAのコードは、マクロでファイルにexportできるから、作ろうと思えば比較的簡単に作れる。 ただし、そのexportしたものがGDSでIndexingされるかどうかは、別の話。
887 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:43:25 ] こう? officetanaka.net/excel/vba/vbe/index.htm 保存するとき拡張子に.txtを追加してあげればいいよね。 とりあえず何とかなりそうな気がする。どもども。
888 名前:できたよん mailto:sage [2008/03/03(月) 18:53:27 ] VBAソースをいっぺんに吐き出すマクロ(Excel2003) 準備 ・A列にファイルリストを作る 参考:ttp://www.vbalab.net/vbaqa/data/excel/log/tree_199.htm ・ツール→マクロ→セキュリティ→信頼できる発行元 のVBプロジェクトへのアクセスを信頼するをON ext(1) = ".bas": ext(2) = ".cls": ext(3) = ".frm" Set xl = CreateObject("Excel.application") xl.Application.Visible = True xl.AutomationSecurity = msoAutomationSecurityForceDisable 'マクロ無効 For i = 1 To 9999 bookName = Cell(i, 1) If bookName = "" Then Exit For Set bk = xl.Workbooks.Open(bookName, False, True) With bk.VBProject.VBComponents For j = 1 To .Count If .Item(j).Type <= 3 Then _ .Item(j).Export bookName & "_" & .Item(j).Name & ext(.Item(j).Type) & ".txt" Next End With bk.Close SaveChanges:=False Next
889 名前:デフォルトの名無しさん [2008/03/04(火) 12:34:14 ] すいません。KILLの使い方が分かりません。 たとえば、BOOK1のファイルごと、削除したいのですが どうゆうコードで書いたらいいのですか?
890 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 12:41:43 ] killはファイルを消すときに使う
891 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:15:20 ] kill "your.xls"
892 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 16:57:42 ] Kill "BOOK1.*"
893 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:30:59 ] 質問させてください。 .value = "hogeの値は" + hoge + "です" の表記をしたいのですが、""テキストと、変数を並べて表記する方法が分かりません。 +で結合ではありませんでした。 VBAでのテキストと変数の表記方法を教えてくださいませ。
894 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:00:21 ] >>893 VBの文字列結合は &
895 名前:デフォルトの名無しさん [2008/03/05(水) 12:44:58 ] Private Sub CommandButton1_Click() Kill "BOOK1.*" End Sub book1のファイルのコマンドボタンでこれを実行すると、ファイルが みつからないとエラーだでてしまうのですが・・・ ファイルをかっこよく消したいです。
896 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:14:45 ] >みつからないとエラーだでてしまうのですが・・・ かっこわりw もしかして、ワイルドカードが使えないんじゃないの?
897 名前:デフォルトの名無しさん [2008/03/05(水) 13:17:44 ] *←これでしょ? でも使えないの・・・
898 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:18:02 ] * これを見るだけでなんか恥ずかしくなってしまうよな
899 名前:デフォルトの名無しさん [2008/03/05(水) 14:42:21 ] 違うの?
900 名前:デフォルトの名無しさん [2008/03/05(水) 15:30:35 ] すいません、ExecuteExcel4Macroで、ループを使わずに 一気に範囲データを読み込むことは出来ないのでしょうか?
901 名前:デフォルトの名無しさん [2008/03/05(水) 17:00:06 ] Dim d(100,100)AS Douale3Dim rng AS Range rng=Range("A1:C3") このrngから配列dに行列を入れ替えて代入する方法がわかりません。 どのようにすればよいでしょうか?
902 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:06:38 ] Excel VBAとかマジわかんないけど If ActiveCell.Column <> 1 Then Exit Function End If じゃだめなの?
903 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 17:29:47 ] >>901 訂正します。 Dim d(100,100)AS Double Dim rng AS Range rng=Range("A1:C3") d=(double)Transport(rng) ↑ このrngから配列dに行列を入れ替えて代入する方法がわかりません。 どのようにすればよいでしょうか?
904 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:34:08 ] >>900 おれも尻鯛
905 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:17:08 ] >>900 まずはどうしてもループが使えない事情があるなら説明してみろ 単に使いたくないとか時間が掛かるとかなら帰れ
906 名前:900 mailto:sage [2008/03/05(水) 21:19:31 ] >>905 お前に言う必要は無い。 わからないならレス不要
907 名前:900 mailto:sage [2008/03/05(水) 21:38:46 ] 自己解決しました。 お前らマジ役立たず
908 名前:900 [2008/03/05(水) 21:39:40 ] なんだか偽者出てるみたいですが、900です。 >>905 ループで一度データをコピーするプログラムを作成したのですが、 開始から終了までかなり時間がかかってしまうことが分かりました。 処理時間を軽減できないかと考えて、範囲ごとコピーできないかと考えた のが理由です。
909 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:43:04 ] 縦横変換したものを一旦シートに貼り付けて、それから変数に代入しろ
910 名前:デフォルトの名無しさん [2008/03/06(木) 02:28:41 ] >>900 速度向上のためにはSelectするな!withを使え! Rangeで取り込んで配列に一括取り込み。
911 名前:デフォルトの名無しさん [2008/03/06(木) 02:32:43 ] >>903 まず型変換して代入で可能 d=CDbl(rng) あと行列逆転はFor〜Nextで1セル毎にループでできるが、一括でできる方法はないかな?
912 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:45:45 ] 速度気にするなら、まずExecuteExcel4Macroでやろうってのが間違いだと気付け
913 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:06:42 ] >>908 ExecuteExcel4Macroなんか使って読みにくく、また他に使い途もないコードを書くより、 ADO使って"SELECT * FROM [Sheet1$]"みたいにやった方が、将来的に考えて 色々と応用できて幸せになれる確率が高いぞ
914 名前:900 mailto:sage [2008/03/06(木) 09:50:11 ] 御回答ありがとうございます。 ExdcuteExcel4Macroは使わない方針でいってみたいと思います。
915 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:59:52 ] >>911 >>909
916 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:11:06 ] Publicで宣言したプロシージャを ツール→マクロ→マクロとメニュー選択した際のダイヤログボックスに 表示させない方法があったと思うのですが、 どうやればいいでしょう????
917 名前:初心者 [2008/03/06(木) 11:40:13 ] 初歩的な質問かと思いますが、可能な限り過去の書き込みを検索しましたが、解決できませんでしたので、質問させていただきます。 A1からA10に数値の値が入っているとします。 もしこのA1からA10までの値がすべて0だったら、○○というプログラムを実行する、というマクロを組みたいと思っています。 If Worksheets("Sheet1").Range("A1:A10") = 0 Then Call ○○ End If というふうに自分では作ってみたものの、うまくいきません。 アドバイスの方よろしくお願いします。
918 名前:デフォルトの名無しさん [2008/03/06(木) 15:42:25 ] >>915 シート作成は速度の関係上できるかぎり避けたいのです。 関数やプロパティで行列を逆に入れ替える方法はないでしょうか?
919 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:47:34 ] >>918 計測してから物を言え。
920 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:12:20 ] >>917 dim i as integer for i = 0 to 9 if worksheets("sheet1").range("a1")..text <> "0" then exit for next if i == 10 then call *** end if
921 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:13:18 ] あ、思いっきり間違ってた。 if worksheets("sheet1").range("a1")..offset(i,0).text <> "0" then exit for が正解。
922 名前:デフォルトの名無しさん [2008/03/06(木) 16:47:13 ] >>919 シート作成するのが通常よく使うよね。 VBAではあまり速度を問われないことがおおいから。 私もそうですし他の方法しか教えられない。 >>918 気長にVBAスペシャリストを待ちましょう。
923 名前:919 mailto:sage [2008/03/06(木) 16:53:13 ] スペシャリストの俺に喧嘩売ってんのか?
924 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:02:20 ] 取りうる方法は三つしかない。 ・行列を変換しながら1セルごと配列にコピー ・rangeを配列にまるごとコピーした後に、行列を変換しながら別の配列に代入 ・行列を変換して別のシート(同じシートでもいいが)にコピーしてから、rangeを配列にコピー 実行する内容や量やExcelのバージョンやPCのスペックによって変わるから、 自分で測って一番速い奴を使え。
925 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:24:23 ] んなこたーない。 dim rng as range dim d as variant set rng = worksheets("sheet1").range("a1:c3") d = application.worksheetfunction.transpose(rng)
926 名前:デフォルトの名無しさん [2008/03/06(木) 18:43:57 ] 教えて先生!! あたしシートの追加をしたいのぉ Sub Macro1() Dim unko As String unko = "ウンコ" Sheets.Add ????? End Sub 変数名を取得して、その変数名をシート名としたシートを追加したいというかぁ リネームじゃなくて、ダイレクトに追加できればいいなぁとおもうの。 エロイ人おしえてーー。
927 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:07:32 ] >>901 dがVariant型でよければ、 d = WorksheetFunction.Transpose(Range("A1:C3")) でdには縦横入れ替えた2次元配列が格納される。
928 名前:927 mailto:sage [2008/03/06(木) 20:10:40 ] よく見たら>>925 でがいしゅつじゃねーか。
929 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:38:03 ] >>916 そういう時は、dummyで使わない引数をプロシジャの()の中にセットする様にしているけど邪道か?
930 名前:デフォルトの名無しさん [2008/03/06(木) 21:14:07 ] >>925 dim rng as range dim tmp as variant dim d as double set rng = worksheets("sheet1").range("a1:c3") tmp = application.worksheetfunction.transpose(rng) 最後に forループで tmp(i,j)からCDbl(d(i,j))に代入しました。 かなり速度が改善しました。 ありがとうございました。
931 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:15:09 ] クラスを書く習慣を付ける
932 名前:916 mailto:sage [2008/03/06(木) 22:26:58 ] >>929 問題なしです!ありがとうございました!
933 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:06:52 ] >>895 book1を開きながらbook1ファイルは削除できまい。 あと、book1は何処に保存してあるのか。
934 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:08:32 ] >>931 誰に言ってるの? 必要ならつけりゃいいが、必要ない場合もある。 たとえばシートモジュールでMe.なんてウザイだけ。
935 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:24:40 ] >>934 何だよヴォケ! クラスを明示するの当たり前だろ? >>925 みたいなコードもブックから明示してないからまだまだだね。 ブックの上のApplicationも明示しないとね。
936 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 03:21:54 ] 相手の欠点はよくみえるが自分の欠点はみえないんだよ。 こどもじゃあるまいし、書いてることをそのまま実行したりはしないよ。 ヒントがわかれば十分。
937 名前:926 mailto:sage [2008/03/07(金) 05:40:25 ] うぅ・・・分かる方、いらっしゃいましたらhelpです・・・>< もしくは、追加→リネーム の方法がベストなのでしょうか。 bookを開いてから、何枚のシートを追加したかの監査変数を使う事が避けられれば理想なのですが・・。 皆さんどのようにしているのかも興味があります。 何卒よろしくお願いします。 お礼にこれあげます。>+(
938 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 07:08:02 ] >>937 sheets.Add().name="ウンコ"
939 名前:938 mailto:sage [2008/03/07(金) 07:12:38 ] >>937 試してみたら()も省略できた sheets.Add.name="ウンコ"
940 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 08:30:45 ] >>937 一応マジレスしておくと、質問するならふざけるな。 ふざけないで質問してたらきっと即レスついたはずだ。
941 名前:895 [2008/03/07(金) 09:04:48 ] 933さんありがとうございます。 >あと、book1は何処に保存してあるのか。 これは、C:\Documents and Settings\xxx と指定すればいいのでしょうか?
942 名前:895 [2008/03/07(金) 09:17:12 ] それと、例えば、エクセルのファイルネーム”あ”.xlsのファイルにパスワード を設けて(例えばパスワードは10)他の人に勝手に開かれないようにしてるのですが 人のPCのデータを除き見るやから達からデータを守る為、パスワードの入力を 例えば3回失敗したらファイルごと、どこのディレクトリに合っても強制削除したいのですが どうコードを書いたらいいのでしょか?
943 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 10:34:01 ] 自分自身のマクロでそれをするのは無理。
944 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:05:26 ] >>935 おろ? 君は>>925 と>>931 じゃなかったの? 似たようなこといつも言ってるMougの馬鹿を一人知ってるんだが。 ってか彼はうるさい割にはいつもシートからしか明示しないがね。
945 名前:925 mailto:sage [2008/03/07(金) 11:16:26 ] なんだか知らんけど、俺を巻き込まないでくれ・・・
946 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:19:45 ] 質問です。私の持っているVBA本に 「同一モジュール内に同名の行ラベルを設置できない」 って書いてあったので、検証しようと思い以下のサンプルコードでテストしました。 ' プロシージャ「p1」 Public Sub p1() On Error GoTo ErrHandler Err.Raise 10 Exit Sub ErrHandler: Debug.Print "エラー発生@" End Sub ' プロシージャ「p2」 Public Sub p2() On Error GoTo ErrHandler Err.Raise 10 Exit Sub ErrHandler: Debug.Print "エラー発生A" End Sub 同一モジュール内にプロシージャ「p1」も「p2」も「ErrHandler:」という行ラベルを設置していますが、 それぞれの「On Error GoTo」はきちんとプロシージャ内の「ErrHandler」へ処理しています。 これってどういう事なんでしょう? 私の持ってるVBA本が間違っているのでしょうか???
947 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:46:18 ] >>946 はい、その通り間違っているので、書名を公開してみんなが不幸せになるのを防ぎましょう。
948 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:56:10 ] マクロの中で自分のファイル名(フルパスで)を取得するにはどうすればよいですか?
949 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:02:21 ] thisworkbook.pathとname
950 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:29:13 ] >>942 Sub hoge() Dim a As String Dim w As Object Dim v As Object a = ThisWorkbook.Path & "\" & ThisWorkbook.Name Set w = CreateObject("WScript.Shell") Set v = w.exec("cmd.exe /c del """ & a) Application.Quit ' Do Until v.stdout.atendofstream ' MsgBox (v.stdout.readline) ' Loop End Sub
951 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 22:47:43 ] >>950 それ、マクロ無効にすると開けちゃうから。
952 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 23:48:02 ] 「クラスを書く習慣をつける」って書いたの俺なんだけどさ(>>935 じゃない) 別件(Public云々)にレス付けたつもりだったんだが、曲解した挙げ句に意味不明な粘着を発揮してるキチガイが居るな なんだよ「Mougにホゲホゲ」ってよ 見えない敵が見えてる系のキチガイの考えることはマジで分からんw > 934 名前: デフォルトの名無しさん [sage] 投稿日: 2008/03/07(金) 00:08:32 > >>931 > 誰に言ってるの? > 必要ならつけりゃいいが、必要ない場合もある。 > たとえばシートモジュールでMe.なんてウザイだけ。 > 944 名前: デフォルトの名無しさん [sage] 投稿日: 2008/03/07(金) 11:05:26 > >>935 > おろ? > 君は>>925 と>>931 じゃなかったの? > 似たようなこといつも言ってるMougの馬鹿を一人知ってるんだが。 > ってか彼はうるさい割にはいつもシートからしか明示しないがね。
953 名前:デフォルトの名無しさん [2008/03/08(土) 00:04:09 ] Excel2003 XP SP2 ブックを非表示にして、フォームをタスクトレイに常駐させてタイマー処理は実装可能でしょうか? 教えてエロい人
954 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 04:24:55 ] YES
955 名前:944 mailto:sage [2008/03/08(土) 04:39:19 ] >>952 とぼけても無駄無駄w お前はMougでも感じ悪いけどこっちでも感じ悪いな。
956 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 05:04:10 ] NO
957 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 08:28:43 ] とぼけてるのがいるなw
958 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 12:35:40 ] 見えない敵と戦う聖戦士がム板にも湧いてきて、粘着してくるとは思わなんだわ 悪いことは言わないからMougとやらで聖戦に興じてろや 釣りにしてもキモすぎるし、真性だとしても治療に付き合う義務はない
959 名前:デフォルトの名無しさん [2008/03/08(土) 15:06:06 ] アクティブじゃないシートの選択しているセルの値ってとれないでしょうか? シート名が特定できれば、一旦アクティブにして値をとって戻るとか出来るのですが いろいろなシート(名)を対象に出来るようにと思っています よろしくお願いいたします
960 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:48:31 ] >>958 いらんおせっかい書くからだよ。 つまらん自説を述べるから粘着される。
961 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 23:07:05 ] VBEで挿入できるものに、ユーザーフォーム、標準モジュール、クラスモジュールの3つがあるけど、 クラスモジュールだけ使ったことがない。これってどういう時に使うもんなんです? Excel2002ですけど。
962 名前:デフォルトの名無しさん [2008/03/08(土) 23:37:13 ] そのまんまクラスを書くモジュール VBAだと継承ができないんで、独自イベントを実装したいときとか、 構造体代わりに使うとか、コントロール配列を実現させたいときに 使うぐらいしかないけどね(^ω^;)
963 名前:961 mailto:sage [2008/03/09(日) 08:10:28 ] んんん、、、判らん w スマソ まだ俺のレベルでは必要ないって事すかね www
964 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 10:25:51 ] ExcelVBAごときにクラスなんかいらん
965 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 10:39:07 ] strategy patternを使いたいときとか
966 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 15:28:15 ] コントロール配列を実現させたいとき=継承 だったと思うから 「継承代わりに使いたいときだけ」 しか使わん
967 名前:デフォルトの名無しさん [2008/03/09(日) 18:58:31 ] CSVの書き出しに関して、教えてください。 EXCELデータを、カンマ区切りの改行コードつきCSV形式で書き出したいのです。 ↓このような感じ 項目1,項目2,項目3,改行コード(vbcrlf)項目1,項目2,項目3・・・ print # でコード記述 データの最後は改行コード(vbcrlf)で終了しなくてはいけないのですが、 そうすると当然のことですが、最後に余分な空白行ができてしまいます。 改行コードで終了するが、最後の空白行はなくす、ということは可能なのでしょうか? 「もう。無理です・・・」と泣きを入れてみたのですが、なんとかしろ、 とのお達しがあり、もし、良い方法があれば伝授いただければ助かります!! 宜しくお願いします。
968 名前:エスパー君登場 mailto:sage [2008/03/09(日) 19:20:08 ] 最後に余分な空白行が出来ているというのは気のせい。
969 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:26:29 ] 「余分な空白行」というのは、CRLFCRLFのことだが、もしファイル末尾がそうなっているとしたら、 それはコードのバグ。 ファイルの末尾がCRLFで終わっているなら、余分な空白行など存在しない。
970 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:58:51 ] ぐぐれ 最後の改行 vb
971 名前:デフォルトの名無しさん [2008/03/09(日) 20:08:08 ] ありがとうございます 「EXCEL VBA 改行コード」で検索していたのですが、 良い方法を見つけることが出来ず、悩んでいました。 頑張って挑戦してみます
972 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:55:39 ] 最後の改行と余分な空白行というのは違う意味だと思う
973 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:06:19 ] >>971 ちょっと待て。何をどう挑戦するつもりなんだ?
974 名前:側近中の側近 ◆0351148456 [2008/03/09(日) 21:56:06 ] (っ´▽`)っ EOF直前の改行は本来必要なものと考えるが。 たまにEOF直前の改行がないテキストファイルを見るが、あれはどうなの? ちなみにviだとエラーメッセージが出るぞ。
975 名前:側近中の側近 ◆0351148456 [2008/03/09(日) 22:01:32 ] (っ´▽`)っ??? >>967 のいう「余分な空白行」ってこういうことだよね? "aaa\r\nbbb\r\nccc\r\n"(\r\nは改行コード) これを "aaa\r\nbbb\r\nccc" にしたいってことでしょ?多分。 「『なんとかしろ、』とのお達しがあり」 ってあるけど、その「なんとかする」理由は何だろうね? 何もないのに言ってるなら、その人にもうちょっと勉強しろって言いたいんだけどね。
976 名前:側近中の側近 ◆0351148456 [2008/03/09(日) 22:02:33 ] (っ´ω`)っ おもいっきりスレ違いだね いきててごめんね
977 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:01:20 ] 「余分な空行」という夢オチ
978 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:18:21 ] CSVファイルはRFC 4180の仕様だと、 最後のレコードの後には改行はあってもなくてもいいらしい。 オレの場合は最後のレコードの後には必ず改行付けるけどね。
979 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:25:11 ] 975のようなテキストをメモ帳か何かテキストエディタで開いたとき、 aaa bbb ccc I ← ここにカーソルが移動できる ということを「最後に余分な空白行ができてしまう」と言っているんだと思った。 だとしたら、それは最後にCRLFを置いているからだとしか言いようがない。
980 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:26:00 ] excel2003 xp 他のシートの複数セルのSetの仕方がわかりません。 Dim Rng AsRange Sheets("sheet2").Activate Set Rng = Range(Cells(1, 1), Cells(2, 2)) Sheets("sheet1").Activate Set Rng = Nothing こう書けば一応動くのですがWithを使い With Sheets("sheet2") Set Rng = Range(.Cells(1, 1), .Cells(2, 2)) End With と書いてもsheet1のA1: B2が入ってしまいます。 よろしくお願いします。
981 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:40:10 ] Set Rng = .Range(.Cells(1, 1), .Cells(2, 2))
982 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 02:39:29 ] Unix文化ではうんたらかんたら
983 名前:デフォルトの名無しさん [2008/03/10(月) 12:48:36 ] 「#N/A」のようなエラーセルの値を変数に入れようとすると 「型が一致しません」というエラーが出るのですが、 例えばエラーセルの値をコンスタントに、「""」として処理するような 事は可能なのでしょうか? VBAがセルのエラー値をどのように扱っているのか、 msgboxで出すことも出来ないので 困っています。 お知恵拝借できると幸いです。
984 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:04:33 ] トラップ処理すれば
985 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:38:14 ] If(IsError(...
986 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 13:39:51 ] ttp://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/if_is.htm#is
987 名前:983 [2008/03/10(月) 14:27:26 ] >>984-986 ありがとうございます。 どちらかの方法でやってみようと思います。
988 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 16:59:57 ] Ctrl+セルクリックで選択範囲を追加していけますよね それをVBAで行うにはどうしたらいいですか? 例えば.Cells(i,j)が選択してある状態で、さらにCells(i+10,j)を追加で選択するにはどうしたらいいですか? .Cells(i,j).Select hoge .Cells(i+10,j)Select ←ここで、それまでの選択範囲に追加する形にしたい
989 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 17:23:03 ] selectionでrange取得 rangeに新cellを追加 追加したrangeをselect
990 名前:988 mailto:sage [2008/03/10(月) 18:07:51 ] >>989 >rangeに新セルを追加 はどうやって実現するのですか?
991 名前:デフォルトの名無しさん [2008/03/10(月) 19:46:03 ] Excel2003 XP SP2 結構でかいファイルのI/Oやコピーなどの処理をワーカースレッドで行なうことは可能でしょうか?
992 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:46:02 ] >>990 union
993 名前:デフォルトの名無しさん [2008/03/10(月) 20:52:13 ] 勉強中の者です。初歩的な質問で申し訳ないのですが、お力添えをお願いします。 条件分岐で、"A1"セルに何か入っている場合に実行、 空欄の場合はエラーメッセージを出したく思います。 if range("A1") = true then msgbox("実行") else msgbox("空欄です。") end if としてみたのですが、思うように動作致しません。 てっきり、false = 0 、 true は何か要素がある。と頭にあったのでやってみたのですが、 VBAの壁にぶちあたっております。 何卒、ご助力を賜りたく存じます。よろしくお願いします。
994 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:57:49 ] =""
995 名前:デフォルトの名無しさん [2008/03/10(月) 21:21:05 ] If Range("a1").Value <> "" Then MsgBox "何か入っている" Else MsgBox "空欄" End If
996 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:35:39 ] false = 0 、 true = -1 0 = false、 0以外 = true
997 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:03:18 ] if Typename(Range("A1")) <> "Empty" then 〜 ではどうか
998 名前:デフォルトの名無しさん [2008/03/10(月) 22:47:48 ] みなさんありがとうございます。 検証してる間にスレ落ちしてしまうと申し訳ないので、お礼だけ先に。 明日検証いたします。 本当にありがとうございました。
999 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 08:20:17 ] .
1000 名前:小倉優子 ◆YUKOH0W58Q mailto:sage [2008/03/11(火) 08:20:37 ] 1000ならジュースでも飲むか
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。