1 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:16:33 ] ExcelのVBAに関する質問スレです 前スレ pc11.2ch.net/test/read.cgi/tech/1212587819/ ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。 ★2 ExcelのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
687 名前:デフォルトの名無しさん [2008/10/28(火) 10:08:01 ] もう1つ教えて下さい。 選択エリアの全行数は For each r in Selection.Areas rcnt = rcnt + r.Rows.Count Next で求めていますが、一気に知る方法がありますでしょうか?
688 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 18:29:27 ] >>687 一気に知る方法は知らないがそのままだと重複している行もカウントされる 少し前で話題に出たIntersectを組み込んで For Each r In Intersect(Selection.EntireRow, Selection.EntireRow).Areas とかにしたほうがいいんじゃないか?
689 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 21:48:43 ] 初心者って「一気に」とか「1行で」とか好きだよな
690 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 22:14:07 ] コードが長くなると理解できなくなるんだよw
691 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:47:58 ] 関数型プログラミングなら、一気にやるという書き方でも割と珍しくない感じがする。 もちろん面倒なことをやるなら1文あたりが相応に長くなるんだけど。
692 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 01:54:25 ] 学習が下手な奴ほど早く学習する事が1つだけある それは「人に訊いた方がラクだ」という事だ なんちてw >>687 一般的なやり方じゃないかも知らんが一応これで行けそう 重複行込み rcnt = selection.entirerow.cells.count / activesheet.columns.count 重複行抜き rcnt = intersect(selection.entirerow,columns(1)).count
693 名前:デフォルトの名無しさん [2008/10/29(水) 02:45:55 ] ループの中で =average() の引数を可変的に指定する方法を教えてください 具体例: (1)乱数で10個のデータを生成し,列方向に保存 (2)保存したデータから平均を計算し, 2つ下のセルに出力 (3)上記(1)から(2) を n回繰り返す(とりあえずn=3). 上記(2)がうまく計算できません(下から3行目のコード). --------------- Sub dice_siml01() Cells.Clear Dim i As Integer Dim j As Integer Dim n As Integer Dim nobs As Integer Cells(1, 1) = "試行回数" n = 3 nobs = 10 For j = 1 To n For i = 1 To nobs Cells(i + 1, j + 1).Formula = "=randbetween(1,6)" Next Cells(nobs + 3, j + 1).Formula = "=Average(Range(Cells(2, j+1), Cells(2+nobs-1, j+1)))" Next End Sub --------------- 【注】 randbetween(1,6) エラーの場合 rand()で置き換えてお願いします.
694 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 03:31:17 ] >>693 .formula に入れるのはセルにそのまま打ち込める式 範囲指定のところが "B2:B11" とかの形式になるように、 文字列を生成すればOK
695 名前:デフォルトの名無しさん [2008/10/29(水) 09:46:54 ] >>694 どうもありがと。 できれば、具体的な変換方法もお願いします。
696 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:03:37 ] >>695 宿題か何か? デカい誤り指摘してヒントも出したんだから、 そこからもっぺん自分で考えてみような じゃなきゃこんな練習問題やってる意味ないだろ
697 名前:687 mailto:sage [2008/10/29(水) 10:09:55 ] >>688 >>692 有難うございます。 「聞くは一時の恥じ...」 なんちてw セル情報はExcelの基本関数知ってればコード記述で殆ど解決しちゃう けど速度やメンテを考えるとコードは単純な程良い。
698 名前:デフォルトの名無しさん [2008/10/29(水) 10:36:40 ] >>696 これ以上は分からん。
699 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:37:47 ] >>697 あ、速度考えるなら intersect とか濫用しない方がいいよ 10万回ループさせると>>692 より>>687 の方が早いんで
700 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 12:16:46 ] >>697 >けど速度やメンテを考えるとコードは単純な程良い。 これは少し間違ってる気がする 速度を考えるなら処理するデータを単純にした上でコードも単純なものにする 例えばセルのプロパティを変数に入れるとか さらにメモリの使い方にも気を配れればいい 書くと短くても動かすと重たい処理なんてたくさんあるし
701 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:48:37 ] コードの見た目(行数、文字数とか)が単純なのと、 実際の処理が単純なのは違うよね あと>>699 の自己フォローなんだけど、 selectionの状態に依存するわな、、、w areasが2-3ぐらいなら>>687 の方が早いってことで
702 名前:デフォルトの名無しさん [2008/10/29(水) 21:27:30 ] 置換に関しての質問なのですが、 検索した2つ右のセルの文字の最後に1をつけたい場合どうすればいいでしょうか?
703 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:39:33 ] hoge = "あくまで一例" set piyo = cells.find(hoge).offset(0,2) piyo.value = piyo.value & "1"
704 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:57:52 ] 【1 OSの種類 .】 WindowsXP 【2 Excelのバージョン 】 Excel2007 【3 VBAが使えるか .】 超初心者です 【4 VBAでの回答の可否】 VBAでお願いします。 行の挿入、削除を教えてください。 A B A B C A B C 1 1001 1001 1 1001 1001 1001 1 1001 1001 1001 2 1003 1003 2 1003 1003 1002 2 1002 3 1004 1004 3 1004 1004 1003 3 1003 1003 1003 4 1005 1005 → 4 1005 1005 1004 → 4 1004 1004 1004 5 1006 1006 5 1006 1006 1006 5 1006 1006 1006 6 1007 1007 6 1007 1007 1007 6 1007 1007 1007 7 1008 1008 7 1008 1008 1008 7 1008 1008 1008 @ AB列の数字は同じものが入っています。 A C列に数値が入ります。 B C列に合わせて、A列、B列を挿入、削除したいです。 C列には1002がありますが、A,B列には1002が無いため、A,B列に行の挿入が行われ、次にC列に1005が無いため、A,B列の1005は 行の削除がされると言う具合です。 業務の効率化を図りたいので、申し訳ございませんがどなたか宜しくお願いいたします。
705 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:01:22 ] 丸投げはやめようぜ。 自分で作ってみたけど、分からない所が出てきた。とかなら全然かまわないんだけど。 作成依頼所じゃないんで。
706 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:03:28 ] すいません、数値がずれまくりました。 もう一度書き込ませてください。 【1 OSの種類 .】 WindowsXP 【2 Excelのバージョン 】 Excel2007 【3 VBAが使えるか .】 超初心者です 【4 VBAでの回答の可否】 VBAでお願いします。 行の挿入、削除を教えてください。 @ A B A B A B C A B C 1 1001 1001 1 1001 1001 1001 1 1001 1001 1001 2 1003 1003 2 1003 1003 1002 2 1002 3 1004 1004 3 1004 1004 1003 3 1003 1003 1003 4 1005 1005 → 4 1005 1005 1004 → 4 1004 1004 1004 5 1006 1006 5 1006 1006 1006 5 1006 1006 1006 6 1007 1007 6 1007 1007 1007 6 1007 1007 1007 7 1008 1008 7 1008 1008 1008 7 1008 1008 1008 @ AB列の数字は同じものが入っています。 A C列に数値が入ります。 B C列に合わせて、A列、B列を挿入、削除したいです。 C列には1002がありますが、A,B列には1002が無いため、A,B列に行の挿入が行われ、次にC列に1005が無いため、A,B列の1005は 行の削除がされると言う具合です。 業務の効率化を図りたいので、申し訳ございませんがどなたか宜しくお願いいたします。
707 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:05:26 ] >>706 >705
708 名前:デフォルトの名無しさん [2008/10/29(水) 22:22:44 ] >>703 さん ありがとうございます!! A列全部で検索かけたい場合どうすればいいでしょうか?
709 名前:704 706 mailto:sage [2008/10/29(水) 22:27:40 ] 申し訳ございませんでした。 EXCEL総合相談所で聞いてきます。 マルチになってしまいますが、ご了承ください。 レベルが上がったらこのスレに来たいと思います。
710 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 12:42:39 ] >>708 2003だとFindのヘルプにちょうどいい例が載ってるんだが2007では載ってないのか?
711 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 12:45:03 ] 他のレスと混同してた・・・
712 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 21:03:32 ] >>708 cells はセル全部 columns(1) は1列目 ヒントはここまで。
713 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 03:25:08 ] >>706 ズリネタとして結構面白かった
714 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:00:44 ] dim rg as range rg=activecell 処理 この処理後に、元のアクティブセルに戻る文が書けません。 どんなだったか、教えて。
715 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:07:50 ] もう一個、よろしく。 処理の中で範囲を指定してコピー、貼付をしている。 application.screenupdating=false を直前に入れても 画面が動くのですが、画面が動かないようにできませんか?
716 名前:y mailto:sage [2008/11/02(日) 18:36:29 ] >>714 rg.Parent.Activate rg.Avtivate ついでに言うと、>714の2行目は構文ミスでエラーになるので修正が必要です。 >>715 CopyメソッドのDestinationプロパティに貼り付け先範囲を指定して、 一度にコピー・貼り付けを行うと、動く枠線が出ないようになります。
717 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:37:54 ] >>716 久しぶりなので、マクロの記録で、終わってましたorz おかげで、思い出すことが出来ました。 サンクス。
718 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:51:29 ] >>716 その2行目も・・・
719 名前:デフォルトの名無しさん [2008/11/02(日) 20:57:01 ] プログラム用のVBAコードを記述した非表示ブックから、データ用の任意のブック を開き、データブックのイベントに対する処理をしています。 Excel2007はウインドウのタイトル右端の×ボタンが「閉じる」に対応している様 です。 Excel2007でも以前のバージョンと同様に「Excelの終了」にする方法を模索中です。 方法をご教授頂けると有難いです。
720 名前:y mailto:sage [2008/11/02(日) 22:45:44 ] >>718 うは ご指摘ありがとうございます。 >>719 ×ボタンでBeforeCloseイベントが発生するので、 同イベントプロシージャ内に Application.Quit を記述します。
721 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:00:30 ] range型変数にsetしてないってのは突っ込んじゃいけない所? 最近、微妙な空気が読めなくなってきたよ・・・。
722 名前:719 [2008/11/02(日) 23:24:17 ] >>720 自分もそれでExcelが終了すると思っていたのですが、ブックが閉じるだけです。 SnendKeys(Alt+F4)を試したら終了できました。orz
723 名前:719 [2008/11/03(月) 00:23:33 ] 訂正です。 SendKeys(Alt+F4)でもだめでした。 プログラムブック(A)からデータブック(B)を開いて、Bが変更された場合に 変更を保存するかどうかを確認するダイアログが表示されるので、Alt+F4 を送信するとダイアログが閉じられる事になるのでExcelを終了できません。
724 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:25:16 ] >>722 application.quit の前にワークブックの close やってる? 後にしてみたらどうなる?2007はわからんけど、、、
725 名前:722 [2008/11/03(月) 00:44:26 ] >>724 もう少し具体的に教えて下さいませんか。 2007以外は×ボタンでExcel終了が終了するようになっています。 同じブックを2007の互換モードで動かして×ボタンでExcelを終了 したいのです。 この方法が分からないのです。
726 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:21:12 ] >>725 あ、ごめん ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_060.html この辺の問題のことだったの。 2007以外ではいけてるなら関係ないね。失礼した
727 名前:y mailto:sage [2008/11/03(月) 07:57:50 ] >>725 2007で試さずに>720を答えてました。2007ではQuitだとうまくいかないんですね? 一応、Shift を押しながら×クリックすれば一発で終了するので、それで用が済むなら。 VBAでのやり方は、後で職場の2007で探してみます。
728 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 09:09:42 ] range型ってsetしなくても使えるの?
729 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:14:59 ] 範囲指定をしてコピー等をした後、コピーモードををフォルスにした 後のことです。 範囲指定を解除する方法は、どこかのセルをactivateやselectするしか 方法はありませんか。画面のちらつきを少しでも防止したいので、セル指定を したくないのですが、何か方法が無いでしょうか?
730 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:51:57 ] 久々にExcelのVBA触って改めて思ったけど、本当にVBAっていうかVBって糞言語だな。 >>725 724は具体的に言ってるでしょ。 ダイアログが出るために終了できないのならダイアログが出ないようにすれば? どうしてダイアログが出るの? ブックが変更されてるのに保存されてないからでしょ? だったら保存したら? こんなのパソコン初めて一週間のオッサンでも最初に覚えることの一つじゃないか。 >>729 全体的に何がいいたいのかよくわからない気がする。
731 名前:デフォルトの名無しさん [2008/11/03(月) 10:54:12 ] どうしてもわからないので 教えていただきたいのですが、 Book1を起動して Book1のマクロで Book2を開くことはできたのですが Book2の内容をコピーして Book1に貼り付けすることができません よろしくお願いします。
732 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:59:28 ] >>729 ググってもすぐ見つかるし マクロの記録でもすぐ解るようなことを何故聞く? そのものズバリの解除法が簡単に見つかるのに >>731 Bool2を開くと、戻り値としてBool2のオブジェクトが返る あとは好きなようにコピーなりなんなりすれば良い
733 名前:725 [2008/11/03(月) 11:12:00 ] >>730 保存するかどうかはユーザーが決める事で、プログラム側で決められる のは、×ボタンが押されたらWindows2007以外と同様な動作なんだけど。 説明不足?それとも...
734 名前:725 [2008/11/03(月) 11:17:49 ] >>730 719に記述した通りなんだけど...
735 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 11:25:31 ] >>734 だから? ついでに言えば、お前さんの言っている現象はExcel2007に特有の現象でもなんでもないはずだ。 お前さんが検証もせずそう思い込んでいるだけにすぎない。 全く同じ条件であれば、2003以前のエクセルでも全く同じことが起こるはずだよ。
736 名前:デフォルトの名無しさん [2008/11/03(月) 11:43:21 ] >>735 確かに、Excel2000と2007で同じブックを動作した検証で違いが出た だけですが...
737 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 14:48:40 ] API
738 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:06:15 ] もしかして、.saved や displayalerts の値はいじらずに、 組み込みダイアログをそのまま使ってるのかな?>>733 組み込みダイアログ出た後の動作が 2007 とその他で異なる可能性あるし、 ユーザに選ばせるなら自前でやった方が確実かも
739 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:23:48 ] >665 たとえば、セル(4, 3)に '=A1+A2が記入してあり その式をセル(5, 1)に書き込む場合 Cells(5, 1) = Mid$(Cells(4, 3), 1) でどうでしょう?
740 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:33:08 ] いつの話だよ
741 名前:デフォルトの名無しさん [2008/11/05(水) 10:16:29 ] ? ActiveSheet.UsedRange.Rows.Count これを実行後するとワークシート上のUndo(元に戻す)が無効になっていまいます。 これって、仕様ですか?
742 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 11:06:19 ] >>741 イミディエイトウィンドウでやるとVBA動かしたの時と同じでUndoできなくなる ?1+1とかでも同じ でもウォッチ式として使えば問題ない
743 名前:742 mailto:sage [2008/11/05(水) 11:11:33 ] 今試したらウォッチ式でもだめだった orz
744 名前:741 [2008/11/05(水) 15:12:16 ] セルの選択範囲が変更になったとき、最終行を調べたいのですが ? ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row だと、保護されたシートの時エラーになってしまう。 他にUndoを生かしたまま最終行を求める方法あります?
745 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:17:36 ] >>744 ?WorksheetFunction.Max(ActiveSheet.Cells(65536, 1).End(xlUp).Row,ActiveSheet.Cells(65536, 2).End(xlUp).Row,ActiveSheet.Cells(65536, 3).End(xlUp).Row) もしくは Dim lg(2) As Long lg(0) = ActiveSheet.Cells(65536, 1).End(xlUp).Row lg(1) = ActiveSheet.Cells(65536, 2).End(xlUp).Row lg(2) = ActiveSheet.Cells(65536, 3).End(xlUp).Row Debug.Print WorksheetFunction.Max(lg()) でどう?
746 名前:デフォルトの名無しさん [2008/11/05(水) 16:42:43 ] >>745 有難うございます。 ? activesheet.cells(activesheet.cells.rows.count,1).end(xlup).row で出来たのですが、列を特定しないと駄目なのですよね。 自分も気付いたのですが、 保護されているかどうかでUsedRangeとSpecialCellsを使い分けるという方法 もありますね。
747 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:26:47 ] 超初心者なのですが、グラフ作成のところで詰まってしまいました。 B2を起点とするデータ B21を起点とするデータ この二つのデータのグラフを作成しようと以下のマクロを作ったのですが、 Set muSouce2 = Range("B21").CurrentRegion のところでエラーがでてしまいました。 この場合どうすればエラーが取れるのでしょうか? Sub Graph1() Dim mySouce As Range Set mySouce = Range("B2").CurrentRegion Charts.Add ActiveChart.SetSourceData Source:=mySouce, PlotBy:=xlColumns ActiveChart.ChartType = xlLine Dim mySouce2 As Range Set mySouce2 = Range("B21").CurrentRegion Charts.Add ActiveChart.SetSourceData Source:=mySouce2, PlotBy:=xlColumns ActiveChart.ChartType = xlLine End Sub
748 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:13:25 ] >>747 set mySouce = の時は、データの入ってるワークシートが アクティブになっててその書き方で行けるんだけど、 set mySouce2 = の時は先に作ったグラフシートがアクティブになってるから、 range("B21") がどこにあるのかわからんってさ
749 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:51:43 ] >>748 なるほど!!明快な説明ありがとうございます。 つまり、set mySouce2 = の前に、 データが格納されているシートをセレクトすればよかったのですね。 対処だけでなく原因が分かりためになりました!
750 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:11:14 ] >>749 そそ、それでOK。加えるなら、せっかく range型変数を2つ用意してるんだから、 最初にまとめて下準備しちゃえば効率がいいよね selectせずに rangeを取得するやり方もあるけど、少しずつ覚えればいい
751 名前:デフォルトの名無しさん [2008/11/06(木) 18:01:30 ] ある値xをアクティブセルの持つ書式に変換した値を取得したいのですが Dim rng as Range Set rng = ActiveCell rng.Value = x この方法だとアクティブセルの値が変更される為変更前の値の保持が必要になります。 もう少しましな方法を教えて頂けるとありがたいです。
752 名前:デフォルトの名無しさん [2008/11/06(木) 18:14:58 ] >>751 Format(x, ActiveCell.NumberFormatLocal) セルの書式によってはバグるかも試練がw
753 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:35:33 ] そうなんです [G/標準]とかでエラーになる為、セル代入を考えたのですが...
754 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:50:58 ] 「セルの書式に合わせた文字列に変換」でいいのね ? worksheetfunction.text(x, iif(activecell.numberformatlocal="G/標準","General",activecell.numberformatlocal)) とかは?
755 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:12:31 ] TEXT関数か・・・ならば worksheetfunction.text(x, activecell.numberformat) これでどうかな?
756 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:20:37 ] >>755 書式に和暦や曜日が指定されてるとヘンになるよ そういうの無視でいいならいいんだけど
757 名前:デフォルトの名無しさん [2008/11/06(木) 19:35:05 ] しつこいようだけど、頼む。 セルについて指定無しの状態にするすることは可能ですか? set rg = nothing とか試してみたけどだめだったorz
758 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:44:51 ] >>757 ほんとしつこいなぁ、、、って誰?w というか、質問の意味がわからない >>756 自己レス 曜日は関係なかった。組み込みの日付書式で和暦を選んだ時にヘンになる
759 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:50:15 ] >>757 以前やってみようとした事があったけど見つからなかった 本当に出来るのかどうかも不明 >>758 お前頭悪そうだな
760 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:56:56 ] >>759 質問の仕方が悪いのに、慮って答えてやるだけが能じゃないよ
761 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:01:11 ] 質問スレで分かってて答えないのは只の無能だと思われてもしょうがない。
762 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:10:08 ] >>761 そう思いたい奴は思えばいいよ。回答者としてのスタンスは人それぞれだろ 質問スレでいちいち他の回答者をくさすのが有能とも思わないぞ
763 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:46:09 ] 喧嘩は他所でスレ立ててやれよ 目障り
764 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:18:48 ] 自己紹介乙
765 名前:デフォルトの名無しさん [2008/11/06(木) 21:53:02 ] >>763 おまえは引っ込んでろ! このカス。
766 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:10:27 ] 俺も >>757 の質問がよくわからないし つか、前に質問したなら名前欄にレス番とか入れてくれ
767 名前:569 mailto:sage [2008/11/07(金) 06:17:38 ] フォルダの中を検索して特定のExcelファイル(○○.xls)を見つけたいのだが フォルダを作る側が適当で(ここの部分は立場上どうしようもないです・・・) Aフォルダ Bフォルダ ○○.xls というパターンもあれば Aフォルダ/Cフォルダ/○○.xls Bフォルダ/○○.xls というパターンもあり、○○.xlsが無いことも2個あることも5個あることもある。ただ幸い○○.xlsの名前は固定です。 このフォルダ内から存在する全ての○○.xlsを開いて中身から数字を 取り出す機能を持ったVBAを作ろうとしています。 フォルダのパスはFOを使って配列に入れてそれを 全てのフォルダパターンを使って○○.xlsを探そうとしています。 そこで質問なんですがVBAで再帰的な処理ってできるんでしょうか? 階層固定のフォルダ抽出、Excelファイルは問題ないのですが 階層実固定のフォルダ抽出で詰まっています。 例えば手抜きですが↓みたいな流れでうまく出来そうですかね? Private Sub AAA() 今のパスを配列に格納 if フォルダが有る時 then call AAA end if End AAA
768 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 06:18:18 ] すんません。上のやつ>>569 さんじゃないです・・・。名前に入っちゃいました。
769 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 08:44:46 ] >>767 >そこで質問なんですがVBAで再帰的な処理ってできるんでしょうか? 試した? 試してもいないのに質問しに来てない?
770 名前:751 [2008/11/07(金) 09:34:48 ] >>754 >>755 >>758 ありがとうございます.orz 754さんの方法でグーですね。
771 名前:751 [2008/11/07(金) 09:47:36 ] ついでにもう1つ教えてください。 xの値が「=AAA」とかだったりするとエラーになってしまうのですが、これを判別 するにはどうしたらよいのでしょうか? ? Application.WorksheetFunction.IsError(x) だとエラーにならないのですが...
772 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:00:12 ] どういうエラーでそのxが何か分からないと答えられない セル(Range)なのか数値や文字なのか
773 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:09:03 ] >>767 「Excel VBA 再帰」でぐぐれば見本がゾロゾロ出てくるよ
774 名前:771 [2008/11/07(金) 10:50:19 ] 入力したテキストxでAutoFilterの設定・解除をしています。 (フィールドはアクティブセルの列) この時、xの書式をアクティブセルの書式への変換は >>751 さんに教えて頂き実現できましたが、テキストがエラーかどうかの判定に Set rng = ActiveCell: rng.Value = x if WorksheetFunction.Iserror(rng) とすると、アクティブセルの保存が必要になってしまう為もう少しましな 方法を模索中なのです。
775 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:54:09 ] >>769 ちょっと試せない状態だったのでとりあえず聞きました。 >>773 ありがとうございます。ぐぐり方が悪かったのかExcel VBA 再帰で入れたらちゃんと出てきました。 お騒がせしました。
776 名前:デフォルトの名無しさん [2008/11/07(金) 13:14:43 ] 初歩的な質問なんですが、 intの変数にアクティブセルのアドレスを代入していますが、一つ目の変数にしか代入できません。 二つ目の変数に別のアクティブセルを代入するとerror13が現れます。 どなたかご教授願えないでしょうか?
777 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 13:47:26 ] >>776 アクティブセルは1つしかないはずなのに「別のアクティブセル」って何?
778 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 15:38:15 ] >>776 Error 13は「型が一致しません。」だから 単純にint型に文字列(スペース含む)を代入しようとしてるとか? セルが空なら0が入るし
779 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:04:36 ] 膨大な量じゃないならコード貼ってどこでエラーがでたか書いてくれよ
780 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:10:46 ] >>774 x = "=AAA" の時に、Criteria1:="=" & x でオートフィルタかけてもエラー出ないよ? いつどこで出るエラーのことを言ってるんだ?具体的にコード貼ってくれないかな
781 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:27:19 ] 説明が下手な奴大杉
782 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 19:31:54 ] 説明もまともに出来ない不出来な頭だから、問題も自分で解決できずにここに質問に来るんだよ もちろん、本当に難易度の高いことをやっていて、行き詰まって来る奴も居ないわけではないが 殆どが能無しどころか脳無し(調べる考えるという知能的行為そのものが出来ない奴)なんだから ここに居座る(質問者としてではなく)ならそのことは覚悟しなくちゃならない
783 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 19:45:31 ] >>782 よく分からない論理だな。
784 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:12:21 ] わからんではないが、そこまで言い放つことでもない 甘え放題も困るが委縮させ過ぎるのもよくない 意味不明な質問を差し戻したり、時々愚痴るぐらいで丁度いい
785 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:17:57 ] ヒマだからスレ読み返してたらわかったw >>757 =>>729 だね。たぶん>>715 も同じ人っぽい screenupdating = false をやっててもちらつくのは、おそらく on / off のタイミングが悪い たびたび on / off すると、on になった一瞬のスキも見逃さずに画面更新するからちらつく off にしたらしっぱなしになる位置でやらないと 範囲指定を解除(セルが select されていない状態に)する方法だけど、 高さ・幅 0のイメージを用意してそれを select すれば、 selection が range でない状態にすることはできる activecell の参照は直前のまま保持されるけど、シート上の囲み枠は出ない でもさ、解除ができても、指定/解除を繰り返せばどのみちチラチラするよ ちらつき防止なら、screenupdating のタイミングを確認するのがいいと思う
786 名前:デフォルトの名無しさん [2008/11/08(土) 17:49:36 ] >>785 ベリー、ベリー、サンクス お見込みのとおり、その3つは折れです。 展望が開けました。 サンクス。
787 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 08:43:30 ] Enumとして宣言さている列挙型のmember名をStringとして取得できますか?
788 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:32:30 ] 販売管理ソフトから吐き出されるxlsを、マクロで変換して会計ソフト用のcsvに変換するマクロ作った。 ・マクロが記述されたBook1.xlsのA1に読みたいxlsのファイル名を記述 ・実行ボタンを押す ・書き込まれたファイル名のファイルを開いて、同じファイル名のcsvを書き出す
789 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:34:07 ] だれのための、どういう報告なの?
790 名前:788 mailto:sage [2008/11/09(日) 11:36:43 ] 販売管理ソフトから吐き出されるxlsを、マクロで変換して会計ソフト用のcsvに変換するマクロ作った。 ・マクロが記述されたBook1.xlsのA1に読みたいxlsのファイル名を記述 ・実行ボタンを押す ・書き込まれたファイル名のファイルを開いて、同じファイル名のcsvを書き出す そんなマクロなんだけど、毎日販売管理ソフトから吐き出されたxlsファイルをBook1.xlsと同じ階層にコピーして、ファイル名を記述しないといけないのだけど、 xlsファイルをxlsファイルにドラッグアンドドロップとかでファイル名を取得して実行できるようにする方法ってありますかね?
791 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:53:23 ] >>787 スレ違い それはVBAではなくVB言語の質問だ >>790 あるけど、それはWindowsの設定の問題だ
792 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 12:30:57 ] windows弄ったら出来るのかー。 ほんと言うとVisualStudioでEXE形式にできたらいいんだけどね。 VisualStudioからEXCELのコントロールわからんしな;;
793 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 14:49:50 ] できないだろ 無理にやると普通に開けなくなるだろ バッチファイルかWSHにドロップして 引数を環境変数に設定して xlsファイルを開き 環境変数を見る
794 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 15:43:56 ] いつもそんなことやってるの?
795 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 19:34:55 ] >>790 普通にアドインを作れば解決するケースに思えるけど。
796 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 21:03:05 ] アドイン??
797 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 21:16:11 ] >>795 教えてくれ
798 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 21:31:57 ] 「Excel アドイン」でググってトップのところに詳しい説明があるから それを読んだ方がいいよ。 VBAのコードが普通に書ける人ならすぐに理解できると思う。
799 名前:788 mailto:sage [2008/11/09(日) 21:34:13 ] >>795 >>798 まさにこれだ!!! ありがとう!!!
800 名前:655 mailto:sage [2008/11/10(月) 00:15:33 ] >>655 If Weekday(Date) = 7 And (Day(Date) + 7) \ 7 = 3 Then Range("A1").Value = "明日は第三週の日曜日" End If 正直な話、説明がさっぱり理解できてませんでしたが、がんばったらできました。
801 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 10:07:40 ] >>786 書いて良かった。誰?とか言ってゴメンなw >>790 処理対象ファイルが自動的に特定できれば一番ラクそうだけど、 人間が見ないと特定できないの? あるフォルダ内でタイムスタンプが今日付けの .xls とかでも無理? 正直、アドインにする利点がピンと来ない、、、
802 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:51:04 ] >>801 販売管理ソフトから出力する段階で一旦エクセルが開いてそのxlsを手動で名前をつけて保存するんだ。 たとえは今日なら20081110.xlsって手打ちで名前をつけてね。 それをこのマクロの入ったBook1.xlsから呼び出すんだ。 それを、アドインにしておけば、xlsを吐き出すことなく、読み込むcsvの名前をつけて保存すればよくなるだけだなと思ったら、これはいいアイディアだと思う。
803 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 12:55:12 ] >>802 >販売管理ソフトから出力する段階で一旦エクセルが開いてそのxlsを手動で名前をつけて保存するんだ。 保存する前の段階でBook1.xls開いてマクロ動かせばいいだけじゃね? 一々保存してからマクロ動かさないといけない理由でもあるのか?
804 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 12:58:20 ] >>802 なるほど理解した。けど単にツールバーにマクロ登録でいいような、、、
805 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:33:50 ] 今までが無駄過ぎただけだな。
806 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:03:48 ] >>803 保存しないとファイル名がないから別のブックからコントロール奪えないと思ってたorz
807 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:05:19 ] >>804 それがアドインかと思ってたorz orz
808 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:24:04 ] >>804 そのブックは「販売管理ソフト」が吐き出しすものだって言ってるじゃん。
809 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:26:46 ] >>808 ツールバーにマクロ登録すると その販売管理ソフトが吐き出したブックをExcelで開いたときにマクロを動かせます。
810 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:30:27 ] うーんだからマクロっていうのはだなあ.....ってところから説明しないとダメ?
811 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:40:33 ] マクロが記述してあるだけのブックを用意して そのマクロをツールバーに登録するんだよ ネットワーク越しでも大丈夫だし
812 名前:デフォルトの名無しさん [2008/11/10(月) 23:38:11 ] 初心者なので、丸投げでお願いします。 application on timeを使って、 開始したら、 a時に処理1をやって、その20秒後に処理2をやって、その8秒後に処理3を やって、終わる。 というものです。 どうにも、最近、頭が回らなくなって困ってます (~.~)
813 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:48:19 ] はい次の話題
814 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:02:20 ] 812の追記 処理1は、マクロ1。処理2はマクロ2。処理3はマクロ3と いうことでお願いします。
815 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:31:29 ] A1に「08/11/11」と入力されているのをB1に「20081111」と変換させるマクロを作りたいと考えています。 Cで書くと下記みたいな流れになるかなと思うんですが・・・(間違ってるかもしれませんが) abc ="08/11/11"; sscanf(abc,"%d/%d/%d",&a,&,b,&c); printf("20%02d%02d%02d",a,b,c); VBAで書くにはどんな関数使えばいいのでしょう。
816 名前:812 mailto:sage [2008/11/11(火) 01:45:58 ] 自己解決できましたので、 >>812 814はスルーでよろっ。
817 名前:815 mailto:sage [2008/11/11(火) 02:02:40 ] 文字列操作でこうやってみた tmpdate_y = CStr(Left(Sheet1.Range("A" & i).Value, 2)) tmpdate_m = CStr(Mid(Sheet1.Range("A" & i).Value, 4, 2)) tmpdate_d = CStr(Right(Sheet1.Range("A" & i).Value, 2)) tmpdate = "20" & tmpdate_y & tmpdate_m & tmpdate_d スマートじゃねえよなーorz
818 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:09:50 ] >>815 いったん日付型にしてから書式変換するとラクだと思う 文字列→日付型への変換は cdate() 日付型→書式付文字列変換は format() 詳しくはヘルプ読んでね
819 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 19:44:30 ] すいません質問です エクセルのマクロで module1内にコード書くのと sheet1内にコード書くのとでは 動作にどんな違いがありますか? sheet1から他のシートを対象としたselectionメソッドが失敗するようなのですが・・・
820 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 19:50:39 ] 訂正)Selection→Select
821 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:51:01 ] >>445 で解決しましたすいません
822 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:15:30 ] こんばんは 複数のセルの値を一度に比較することってできますか? Sheet1のA1:B5とSheet2のA1:B5のValueが 同じであるかどうか、が分かるだけでokなのですが。
823 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:20:52 ] 各シートは配列のようにアクセスできるが
824 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 01:57:12 ] >>822 配列数式でできるよ
825 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 05:52:03 ] Excel2003を使っています。 羅線の太さを調節する方法ってありますか? できるだけ細くしたいのです。
826 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 06:21:13 ] >>825 マクロの記録使って保存すればおk 単純に細くするだけの質問ならスレチ
827 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 12:48:05 ] Excel2000:WindowsXP/Pentium4(1.8GHz)/RAM512 セルA1とA2を結合したシートに対して 下記のコードの実行時間は 1回目:13秒 2回目以降:54秒 (Pasteに変更すると29秒) 1回目と2回目以降の違いの理由は何なのでしょうか? rows(1).select selection.copy selection.offset(1).resize(20000).select selection.insert shift:=xlDown selection.mergecells = false selection.delete shift:=xlUp range("A1").Select どうやったら速度アップできるか知りたいのですが...
828 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 12:52:09 ] 羅線ってなんだ? らせん?
829 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:26:01 ] 螺旋 罫線 新羅 確かに間違える人は居るかも
830 名前:827 mailto:sage [2008/11/12(水) 14:59:51 ] やりたい事は シート・アクティブ時にコピー挿入し編集 シート・ディアクティブ時に挿入データを削除(元の状態に戻す) なのです。
831 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:02:57 ] > 1回目:13秒 > 2回目以降:54秒 (Pasteに変更すると29秒) 単位、「秒」じゃなくて「_秒」の間違いだよね?
832 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:15:35 ] 秒です。
833 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:17:38 ] セルを結合していなければ1秒未満です。
834 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:20:33 ] いや、結合していても_秒でしょ
835 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:34:39 ] 結合云々は関係なく1秒かからんな データは何かあるのか? とりあえず高速化のために Application.ScreenUpdating=False はやってるよな?
836 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:54:59 ] 新規ブックでセルをマージし、>>827 のコードを走らせただけです。 ScreenUpdating, EnableEvent, Calculation等もやってみています。 マシン・スペック(5年前)の問題でしょうか?
837 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:15:36 ] スペックは漏れのマシンのほうが悪いくらいのはずw 計測方法の問題じゃないか?
838 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:54:32 ] すまん、Mobile Pentium4の間違いだったorz
839 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:23:09 ] Mobile Celeron(1200MHz)512MB RAM Mobile云々は置いといてこっちは1.2GHzなんだよw OSが2kだからってここまで差は出ないよな? 体感でも1秒以上かかってるのか?
840 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:38:52 ] excel2003:WindowsXP/Pentium4(2.8GHz)/RAM512 でセルA1とB1を結合して走らせてみたら 1回目:9秒 2回目:40秒 体感で1秒未満は、セル結合無しの場合だけ
841 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:53:33 ] あぁA1とB1を結合かw それなら確かに遅くなるな
842 名前:827 mailto:sage [2008/11/12(水) 18:00:26 ] >>827 のA1とA2はA1とB1の結合に訂正願います orz
843 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 18:03:34 ] 俺の古典的環境だと1回目20秒、2回目1分40秒w 遅過ぎワロタw
844 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 22:23:38 ] >>830 どこまでが編集前でどこからが編集後? 編集は .mergecells = false の前?後?
845 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 09:30:46 ] *)シート(A1とB1結合)アクティブ時の処理 rows(1).select selection.copy selection.offset(1).resize(20000).select selection.insert shift:=xlDown 'コピー挿入した行に名前を付ける(後で削除の為) *)コピー挿入したデータへの編集 *)シートディアクティブ時の処理(アクティブ時点の状態に戻す) '実際にはSelectionでは無く名前で削除 selection.mergecells = false '<- これ無しだと遅くなる為 selection.delete shift:=xlUp range("A1").Select
846 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 09:40:02 ] メモリ1ギガとか積んでいる人だと1回目と2回目の差が無いなんて事ないですか?
847 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:31:54 ] >>845 了解 多数の結合セルを含む範囲で挿入/削除を続けてやると、後でやる方の処理が遅くなる感じ メモリ上のシート情報がややこしくなるのかな?1回目をやった後ブックを閉じて開き直すか、 シートコピーでリフレッシュすれば2回目が遅くならないけど、イベント拾うならキツイよね オレなりに試してみた限りでは、 挿入時: .insert を使わず、2行目以降にデータがあった場合は 20000行ずらした位置へ コピーし、狭間へ 1行目を 20000行分コピー 削除時: 最初にシートコピーでバックアップを取っておいて、.cells.copy でコピーし戻す ( .mergecells = false もいらない) ってなやり方が一番早かった。1回目は大差ないけど 2回目が 1回目より早くなる
848 名前:845 mailto:sage [2008/11/13(木) 13:26:06 ] >>847 有難うございます 挿入処理は、 insertを使わない方法(Paste)は、定義されている名前がある場合面倒そうです 削除処理は、 ご指摘のシートコピーを戻す方式を実際の処理に組み込んでテストしてみます
849 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:21:48 ] >>848 名前か。それは厄介だ 挿入に insert 使ってコピー書き戻すと名前付き範囲の内容書き変わるし insert だけでも 2回目は遅くなるし 後は、編集時にシートコピーしたシートを使っといて、deactivate されたら シートごと削除とかかなあ。イベントあるからいろいろめんどくなるんだよな、、、
850 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:26:26 ] シートのコピーから戻す方式を試したら更に時間が掛かる様になってしまった
851 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 18:16:20 ] >>850 データ量や数式、書式設定その他によってかなり違うだろうね オレのはあくまで>>827 の条件で試しただけだし
852 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 21:52:40 ] >>847 の処理における名前付き範囲は、挿入時に range("namedarea").offset(20000).name = "namedarea" コピーバックの後に .offset(-20000) で、わりと簡単に対応できた 画期的なやり方は見つからんね。構成とか見直すしかないかも、、、
853 名前:851 mailto:sage [2008/11/14(金) 00:13:24 ] とりあえず、A2:Z3000 をテキトーな数式で埋めて試して見たけど、 やっぱ>>847 のが早かった。calculation 切れば数式なしの時とあんま変わんない とにかく insert (特に 2回目)が遅いんで、insert とコピーバックの組み合わせでは 効果ないかも
854 名前:デフォルトの名無しさん [2008/11/14(金) 21:41:28 ] はじめまして、こんばんは。 今日はじめて本屋にて VBA の存在を知りました。 初心者質問ですみません、例えば、、、これができるようになるとなにができるようになるのですか? 詳しいかた教えてください。
855 名前:デフォルトの名無しさん [2008/11/14(金) 22:05:58 ] >>854 例えば野球データベース 選手名を入力すればその選手のプロでの全成績が一覧表示されるとか インベーダーゲーム作ってる人もいるよ とにかくExcelをVBAプログラムで自在に操れるって事
856 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:22:40 ] >>854 業務で言うと、データベースをexcelに展開して、 色んなチェックプログラムを掛けて品質保証したりとか。 ワークシートで使える関数を作って会社内に配布したり。 excel上に検索エンジン作ってる人もいるし、まぁ、何でもあり。
857 名前:無職カス [2008/11/16(日) 02:50:07 ] みなさん、こんばんは、 >>854 です。 >>855 >>856 さん 返答ありがとうございます。かなり使える機能ですね。 最近アルバイトをやめました。時間はたっぷりありますのでそこそこ使えるレベルまでもっていきます。 これからVBAを勉強していきます。 多々質問すると思いますが、みなさんよろしくおねがいします。
858 名前:デフォルトの名無しさん [2008/11/16(日) 03:45:10 ] 下に全員の成績表があって、 そこから各部門のトップ5を上の小さい表に抽出したいんだけど、 ランクとは違う気がするし行き詰っています。 どなたかご教授願えますでしょうか?
859 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 05:08:38 ] officexpのマクロと関数の処理順(と思われる事項)で知恵を貸していただきたく書き込みいたします。 セルAの値によってセルBの値が変わるよう関数を設定しているの状況で、 セルBの書式が自身の値によって変わるようにマクロを組もうとしています。 (書式は4種類以上なので条件付き書式は使えません) worksheet_changeで書式変更を自動実行するようにしたのですが、 マクロを実行してみるとAの値を変えてもBの書式が変わりません(Bの値は通常通り変わります) その状況で、まったく関係ないセルCの値を変更するとBの書式が変わったので、 マクロ自体には問題はないようです。 おそらく、A変更→マクロ自動実行→関数でBの値変更、という内部処理があるために マクロによる変化が見られない状況であると思っています。 (違っているなら根本から考え直さないといけないかもしれませんが) このような構成の場合、関数による値の変更が反映された後で 書式変更などのマクロが実行されるようにすることはできないのでしょうか? ご教示お願い申し上げます。
860 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:11:55 ] Calculate
861 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:51:08 ] >>860 ご回答ありがとうございます。 5分前にcalculate使えばいいと気づいて、自己解決した旨書きにきたら 既にお答えくださっていたのですね。 初歩的な事でお手を煩わせてしまい、申し訳ございませんでした。
862 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:13:30 ] >>857 基礎を勉強するには独学でも全然問題ないけど、 プログラム未経験で、かつ仕事に就いてないとなると、 プログラムの基本的な事を理解するまでに半年か1年かはかかると思う。 んで、そこから先は明確な目標が無いと無理。 やれる事が多いんだけど、ぶっちゃけた話、特化したプログラムには敵わない。 例えば>>855 でゲームの話が出てたけど、確かに作る事は出来る。 けど、VBAからAPI呼び出してるに過ぎないし、更に言えば タイムラインって概念がある&ドローツールのFlashなんかには到底及ばない。 ExcelVBAはあくまでExcelの処理系統のプログラムだと俺は考えてる。 Excel上での処理に関してはVBAがぶっちぎり。当然だけどね。 何か目標持った方が良いよ。
863 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:15:00 ] >>859 calculate使う理由が分からん・・・。 VBAで処理してるなら、VBAでBの値も弾き出せば良いんじゃないか?
864 名前:独り言(ちら裏) mailto:sage [2008/11/17(月) 01:24:05 ] というか、条件付き書式を複数設定(優先順位付)出来ないExcelの仕様に 問題ありかと... それがExcelのポリシーというのであれば、そういうアプリめいたものを Excelで作ることが間違いだったということになるか...
865 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 10:16:53 ] > 条件付き書式を複数設定(優先順位付)出来ないExcelの仕様に > 問題ありかと... という意見が多いので、2007で設定数が 3 から 無制限 に、 優先順位も設定を書き直さずに変更できるようになった。
866 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 14:02:59 ] ということで、Excel2007以降の購入をお勧め
867 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:07:26 ] てゆーか、条件によって変化するセルの書式の種類は3つに留めておく というのが無難かと
868 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:50:10 ] >>864 selection changeイベントで好きなだけ設定しろ。 おまいのVBAは飾りもんか?
869 名前:デフォルトの名無しさん [2008/11/18(火) 17:07:45 ] これのFSO(FileSystemObject)使ってテキストデータの読み込みすると文字化けします。 ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110.html strRECをUTF-8→SJISにエンコードするには、どう記述したらいいですか?