1 名前:デフォルトの名無しさん [2008/06/04(水) 22:56:59 ] すまんが2の人テンプレやって ExcelのVBAに関する質問スレです 質問前に 【 >>2-3 】 あたりを良く読むこと 前スレ pc11.2ch.net/test/read.cgi/tech/1205231499/l50 ★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 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
152 名前:デフォルトの名無しさん [2008/06/15(日) 12:14:27 ] >151 当方WindowsXPのExcel2003ですが、ちょっと確認。 セルC10に1バイト文字の a を入れているのか、2バイト文字の a を入れているのか、 区別してますか? VBAソースにはどちらを指定していますか? セルC10の隣(D10セル)あたりに =code(C10) の計算式を入れてみてください。
153 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 12:39:48 ] 1バイトのAでもaでも2バイトのAでもaでも動くようにStrConvとかLCaseとかいろいろ使えばいいじゃん。
154 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:54:07 ] 回答有難うございます。 >>152 >セルC10に1バイト文字の a を入れているのか、2バイト文字の a を入れているのか これは区別しています。 >VBAソースにはどちらを指定していますか? 開いているすべてのブックに保存しています。 作業中のブックにするべきなのかも。 セルC10の隣(D10セル)あたりに =code(C10) の計算式を入れてみてください。 >やってみました。C10に100をいれると49が帰ってきました。 これが原因かも。codeについて調べてみます。 >>153 助言ありがとうございます。 調べてみますが、全くの初心者のためなんのことか分かません。 すみません。
155 名前:152 [2008/06/15(日) 18:19:46 ] >154 C10セルに a を入れたらどうなるのかを確かめてほしかったんだけど。 それから >VBAソースにはどちらを指定していますか? 開いているすべてのブックに保存しています。 作業中のブックにするべきなのかも。 の件、誤解してます。VBAソースには a(1バイト)、a(2バイト)のどちらを 指定しているのかを尋ねたのです。ソースを記録している場所のことではありません。 あとは153さんが書いているように、大文字・小文字、1バイト・2バイトを 入れてもOKなようにするには工夫が要ります。153に示された関数(?)をググって みてください。私もこの板を含むインターネットでずいぶん教えてもらいました。 がんばってください。
156 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:51:46 ] > 大文字・小文字、1バイト・2バイト Option Compare Textを使うと簡単お手軽な気もするが諸刃の剣 モジュール分ければいいだけの話だけど
157 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 23:43:19 ] >>155,156 回答有難うございます。がんばってみます。 誤解していた件ですが、どちらも1バイトの文字に間違いありませんでした。 "a"ではなく、case 100 のように、数字で指定しても case else 扱いになってしまうのです。
158 名前:155 [2008/06/16(月) 00:13:50 ] >157 うーむ、なんだろ。 考えられる原因としては、C10セルに a_ (_は半角スペースと思ってください)と入力したか、 VBAソースの方の"a"の aの前後どちらか(あるいは両方)にスペースが入ってしまったか、 とにかく比較するふたつが一致しないといけない。 C10セルの書式をプロポーショナルではない(Pのつかない)MS明朝なりゴシックの大きめの フォントに設定して、本当に1バイト文字になっているかを確認してみてください。 それから 100 は数字としてなのか 3文字の"100"なのかでも変わってきます。 case 100 と あるのであればC10セルにも数字の 100 と入力しないといけません。 こちらのExcel2003で151のソースを貼り付けてちゃんと 総務部 と表示されたので、ソースの 内容に間違いはないはずです。
159 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:12:48 ] >Select Case Range("C10").Value >Case "a" そのコードはちゃんとコピペでこのスレに張ったか? この部分にスペルとか何か間違いないか?
160 名前:デフォルトの名無しさん [2008/06/16(月) 01:19:09 ] 出来損ないでスソマソン どうしてもIF文がうまくいかないでつ・・・ F3の値が6で割り切れないとき30行目を削除して割り切れたときはF4の値が6で 割り切れるかみて割り切れないとき40行目を削除ってこれじゃおかすぃ?? Sub limit() If Range("I1").Value = 0 Then Range("I1").Value = 1 If Range("F3").Value Mod 6 <> 0 Then Rows("30:30").delete Range("I1").Value = 1 Else If Range("F4").Value Mod 6 <> 0 Then Range("40:40").delete Range("I1").Value = 1 Else Rows("40:40").delete Rows("30:30").delete End If End If End If End Sub
161 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:42:07 ] Sub limit() If Range("I1").Value = 0 Then Range("I1").Value = 1 If Range("F3").Value Mod 6 Then Range("30:30").Delete ElseIf Range("F4").Value Mod 6 Then Range("40:40").Delete Else Range("40:40").Delete Range("30:30").Delete End If End If End Sub
162 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:48:40 ] >>151 シートの指定がされて無いけど、実行時のアクティブシートが違うとかは無いの?
163 名前:デフォルトの名無しさん [2008/06/16(月) 09:15:05 ] >160 実行結果はどうだったの? それから行削除の処理には関係ないけどI1セルへの無駄な代入文2カ所あり。
164 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:06:32 ] Sheet1の適当なセルにhogehogeと書いて Sub test() Dim r Set r = Sheets("Sheet1").Range("a1:z50").Find(What:="hogehoge", LookAt:=xlWhole, SearchOrder:=xlByRows) Set r = Sheets("Sheet1").Range("a1:z50").Find(What:="hogehoge", LookIn:=xlValue, LookAt:=xlWhole, SearchOrder:=xlByRows) End Sub を実行すると、 WindowsXP SP2, Excell2003 sp3では 1つ目のFindはちゃんと動きますが 2つ目のFindで 実行時エラー'9' インデックスが有効範囲にありません と怒られます。LookInを指定すると怒られるようです。 WindowsXP SP3, Excell2000では問題なく意図したとおりに動きます。 Excell2003でもLookIn:=xlValueを指定したいんですが、どうしたらいいですか?
165 名前:デフォルトの名無しさん [2008/06/16(月) 23:13:54 ] >164 こちら(XP sp2 Excel2003 sp3)でも同様の症状を確認しました。 対策は・・・誰か詳しい人頼みます。
166 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:21:34 ] LookIn:=xlValueをLookIn:=xlValuesとしてみなよ。
167 名前:164 mailto:sage [2008/06/16(月) 23:35:32 ] www.nbcom.co.jp/PC-Support/FAQ/xls/tr/xls052004tr002.shtml Excell2000で動作を確認しました。Excell2003での動作は明日確認します。 >166 ありがとう
168 名前:164 mailto:sage [2008/06/17(火) 21:43:36 ] バッチリ動きました。 ていうか、LookIn:=xlValueで動くほうがおかしい。 もっと言えば、実行時エラーじゃなくて、コンパイル時エラーが出てもいい。 xlValueってグラフで使うやつらしい
169 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:45:25 ] いや、ただの定数だし・・・
170 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:52:11 ] >>169 定数を理解してたらこんなこと書かないって >>168 イミディエイトウィンドウに ?XlValue って打ち込んでEnterキー押してみ、正体分かるから
171 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:24:21 ] >>164 俺はFindメソッドにxlValueを使ってたDQNを知ってる。 グラフが好きだったから使ってたんだろう。 たまたま動作が同じだからって、たとえばSpecialCells(xlCellTypeConstants)の代わりにSpecialCells(xlFilterCopy)なんてやったら ヴァカって言われるよな。 >>169 彼が言うようにグラフで使うときのために用意された定数なんじゃない? x;lAxisTypeクラスってそうなのかな?
172 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:30:53 ] なんか164もDQNみたいな書き込みになったな。 すまんな
173 名前:169 mailto:sage [2008/06/18(水) 06:21:45 ] >>171 何のために用意されたにしても、ただの定数。 結局、メソッドの引数が不正だったってだけの話なんだから コンパイル時エラーじゃなくて実行時エラーなのは当然でしょ、って話。 引数には変数や式も使えるんだし。
174 名前:デフォルトの名無しさん [2008/06/18(水) 10:38:23 ] 最近VBAを触りはじめたのですが、全く分かりません 指定されたファイルがあれば、そのファイルを現フォルダから別のフォルダへ移動させたい。 指定されたファイルが無い場合はマクロを終了。 ファイルを別のフォルダへ移動はできましたが、指定されたファイルを探すのが上手くできません。 別のサイトへ誘導でもかまいませんので、教えて下さい。 よろしくお願いします。
175 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 11:14:01 ] やだ
176 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:22:38 ] >>174 Sub test() If Dir("c:\tmp.txt") <> "" Then MsgBox "存在します。" Else MsgBox "存在しません。" End If End Sub
177 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:57:34 ] 可能でしたらどなたか教えて頂けませんか・・? Aエクセル起動時のUserForm1が起動して 他のエクセルに切り替えた時にそのUserForm1はHideします その後、Aエクセルに切り替えた時に再びShowするのですが UserForm1がアクティブになっているためAエクセルの編集を続行するためには 適当なセルをクリックしないといけません。 試しにShowする時にRange("A1").Select等を試すも結果は同じ 何とか解決する方法はありませんでしょうか?
178 名前:デフォルトの名無しさん [2008/06/19(木) 10:02:27 ] >177 4行目の その後、Aエクセルに切り替えた時に「再びShow」するのですが この「再びShow」が問題では? Aエクセルの編集をするのであれば 「Hide」したままにしておけばいいだけでは? それとも、 他のエクセルに切り替えた時にそのUserForm1はHideします というのが、単に別アプリ(別のエクセル)が前面に出たから見えなくなっただけ なのでは?
179 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 10:22:14 ] 例えば指定の曜日とかは自動的にフォントを赤にしたりできるけど、 やっぱりマクロでも祝日はムリかな?
180 名前:デフォルトの名無しさん [2008/06/19(木) 10:44:34 ] >179 曜日は7日周期だから計算で機械的にもとめられますが、 祝日は機械的にさだまっていません。有名なところでは春分の日、秋分の日。 さらに祝日は法律で定まったり日付そのものを変更したり(成人の日、体育の 日、海の日など)とあるので、エクセルなどに実装するのは無理です。 なので、祝日をマクロで実現するには祝日(たぶん振り替え休日も含めてと 思うが)をリストにしておいてマクロで該当する日をチェックして、エクセル表 の該当する日付のセルの塗りつぶしを行うという手順になります。 リストを用意できるか、リストの変更をどう行うかがカギです。
181 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 11:48:55 ] うい
182 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 13:50:15 ] >>179-180 ttp://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm#VBA
183 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:36:23 ] >>177 です この「再びShow」が問題では? Aエクセルの編集をするのであれば 「Hide」したままにしておけばいいだけでは? UserForm1はAエクセルの作業時に役に立つボタン等を実装しているので Showしておかないと不便なのです。。。 他のエクセルに切り替えた時にそのUserForm1はHideします というのが、単に別アプリ(別のエクセル)が前面に出たから見えなくなっただけ なのでは? ちょっと当方の書き方が不十分だったのかもしれません 大前提としてAエクセルで作業中の時はUserFormはいて欲しく 他のエクセルに切り替えた時にはUserFormは不要なので Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) UserForm1.Hide End Sub で隠します、そしてAエクセルに戻した時には UserFormは必要になるので Private Sub Workbook_WindowActivate(ByVal Wn As Window) UserForm1.Show End Sub で、再び表示されるのですが、その時フォーカスは UserForm側にいてセルにいないので いちいち、セルをクリックしてフォーカスをセル側に切り替える必要がある これが面倒なので、Aエクセルに復帰した時に どうにかならないものか。。。。と思っています。
184 名前:デフォルトの名無しさん [2008/06/21(土) 03:40:55 ] XP Excel2003での質問なんですが If x = 1 Then GoTo LB1 ElseIf x = 2 Then GoTo LB2 と記述しているのに 「Elseに対応するifがありません。」と出ます。 間違っているところはどこなんでしょうか? 必要があれば追加文若しくは全文出します。
185 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 04:39:11 ] >>184 Thenの後は改行してみたらどうですか
186 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 10:45:43 ] >>185 おま…MSに消されるぞ というかGotoなんか使うな
187 名前:186 mailto:sage [2008/06/21(土) 10:46:07 ] >>185 >>184
188 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 13:47:40 ] >>185 ありがとうございます! その部分はそれで解決したっぽいです
189 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 13:26:30 ] Sub Copytest() Sheet2.Visible = xlSheetHidden Sheet3.Copy after:=Sheet1 Sheet2.Visible = xlSheetVisible End Sub こうやるとsheet3(2)がsheet2の後に追加されてしまいます Sheet1の後(Sheet2の前)にSheet3のコピーしたいのです 要は隠されてるシートの前にシートのコピーを挿入したいんです 今はSheet2のVisibleプロパティを一旦HiddenからVisibleに、 copy処理してから再びHiddenに戻すという方法をとってるんですが もっとスマートな方法はないものでしょうか?
190 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 14:51:32 ] >>186 俺はバンバン使ってたよ、20年前に、ポケコンで、懐かしい・・・
191 名前:デフォルトの名無しさん [2008/06/23(月) 18:07:07 ] excel2007でマクロを今は亡きツールバーに登録するマクロが含まれるアドインを使ったら 消せなくなってしまった。消し方を教えてください。 この方法で追加したのを↓ Dim o_cmdbar As CommandBarControl On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("あ").Delete Set o_cmdbar = Application.CommandBars("Worksheet Menu Bar").Controls. _ Add(Type:=msoControlPopup) o_cmdbar.Caption = "い" With o_cmdbar.Controls.Add(Type:=msoControlButton) .Caption = "う" .OnAction = "え" End With 本来はこれ↓で消すはずだった。 Application.CommandBars("Worksheet Menu Bar").Controls("メニュー").Delete
192 名前:デフォルトの名無しさん [2008/06/23(月) 18:08:24 ] ↑だけど追記で。アドインっていうリボンの中に作られたメニューを消したい。
193 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 19:49:14 ] そりゃツールバーじゃなくてメニューバーだ そしてそのコードじゃExcelのバージョンがいくつでもマトモに動かんよ
194 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:32:42 ] >>189 ただ単純にbefore:=sheet2で解決しない? ただし、実際に動作確認してないから分からないけど。
195 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:39:50 ] >>194 実はそれも同じ結果になってしまいまして どうしてもHideされたシートは自身の前位置を譲ってくれません Worksheets.Addで追加する場合は問題ないんですけどね なんなんだろう?
196 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:02:55 ] >>195 じゃあ、コピー処理した後に並べ替え処理したらどうかな?
197 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:20:50 ] ありがとう 並べ替えのループ処理に頼らなくても 一旦VisibleとHiddenを切り替えて、その間コピー処理することで一応解決はできてるんですが なんだか不細工だなあと 仕様ということ納得します
198 名前:デフォルトの名無しさん mailto:age [2008/06/24(火) 18:16:18 ] >>197 その気持ちわかる、俺も別の件ですっきりさせようとしたがむりで仕様ということで納得した
199 名前:デフォルトの名無しさん [2008/06/25(水) 22:00:12 ] VBAでセルの色などを変えようすると”実行時エラー 1004”と出てしまいます。 シートを保護してますが、そのセルのロックは外してます。 他に何か原因はあるでしょうか?
200 名前:デフォルトの名無しさん [2008/06/26(木) 07:54:34 ] その部分のソース貼れ
201 名前:デフォルトの名無しさん [2008/06/26(木) 10:05:57 ] こんなです Private Sub Worksheet_Change(ByVal target As Range) '雇用形態のセル Dim formRange As Range Set formRange = Range("A1") '雇用形態のセルを塗りつぶしなしにする With formRange.Interior .Color = vbRed End With 'オブジェクトの解放 Set formRange = Nothing End Sub
202 名前:デフォルトの名無しさん [2008/06/26(木) 10:49:48 ] 質問です。よろしくお願いいたします。 あるセルに設定されている「入力規則」の値を全て取得することは可能でしょうか。
203 名前:デフォルトの名無しさん [2008/06/26(木) 11:01:15 ] >>201 シートを保護するときに、"セルの書式設定"のチェックを入れないとダメなんじゃ。
204 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 14:39:34 ] >>203 2003とかならそうだと思う。状況からみて2003あたりを使ってそうだけど。 勘違いでなければ、2000あたりはそのチェック項目が無いような気がしたので、汎用性を持たせるなら一回シートの保護自体を解除して処理した方がいいと思う。 そして、処理終了後に再度、シート保護処理を実行する。
205 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 14:41:50 ] >>201 処理と説明が合ってないよ。 塗りつぶしなしにするって書いてるけど、処理自体は赤くするになってるよ。
206 名前:デフォルトの名無しさん [2008/06/26(木) 16:15:33 ] >>203 うまくいきました。 ありがとうございます。 >>204 やはり、その方法の方がいいでしょうか。 ありがとうございます。 >>205 すみません。
207 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 16:38:53 ] 二つのBookを用意して、呼び出し元から、呼び出し先Bookのシートにある メソッドを実行したいと思いますが、出来ません。ご教授ください。 呼び出し元Book.xls Sheet1 Workbooks.Open Filename:="呼び出し先Book.xls" Set wk = ActiveWorkbook Call wk.Sheets(1).DoExecute() 'エラー 呼び出し先Book.xls Sheet1 Public Sub DoExecute() Msgbox "Hello" End Sub 実行時エラー40036:アプリケーションの定義またはオブジェクト定義のエラーです。 と表示されます。
208 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 16:59:59 ] 俺の人生はエラーですがどうすれば直りますか
209 名前:デフォルトの名無しさん [2008/06/26(木) 17:49:55 ] あるPublic関数を、ユーザー定義関数の用法でワークシート上から駆動させたとき、 関数内のWorkbooks.Openメソッドがうまく機能しない、という状況について、 ご意見を伺いに来ました。 ちょっと長文になってしまいましたが、聞いてください。 月ごとの売上データが保存されているExcelブックがあって、 それぞれ次のようなブック名で保存されています。 ( 2007-04.xls, 2007-05.xls, 2007-05.xls … ) これらのファイル群から、ある特定の月の売上金額を抜き出す Uriage関数を書いたんです。 たとえば #2007/4/1# を引数で渡すと、07年4月の売上金額が 戻ってくるような関数です。関数の中身はとても単純で、 1)渡された日付をもとにどのブックを開くべきか判断 2)そのブックを開く(Workbooks.Openメソッド) 3)必要な値を読み込む 4)ブックを閉じる 5)値をリターンする という流れになっています。 この関数、他プロシージャから呼び出して使う分には、 問題なく動作し、なかなか便利です。 そこで、ユーザー定義のワークシート関数として使えるだろうか、 と思い、セルに次のように入力してみました。 =Uriage(2007/4/1) しかし残念ながら エラー値 が戻ってきました。 処理をトレースしてみたところ、2)のところでブックが開きません。 どうやら、Workbooks.open メソッドは、ワークシート上の関数から 駆動させた場合は機能しないようなのです。 どうして、このような挙動になってしまうのでしょうか。 またこの他に、ワークシート上からではうまく機能しないメソッドを ご存知の方はいらっしゃいますか。
210 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 18:39:18 ] これかな support.microsoft.com/kb/170787/ja
211 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 19:08:07 ] >>208 一度、小学生にダウングレードして再起動
212 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 20:32:38 ] ハァハァしかけたけど、野郎なのか。だったら市ね
213 名前:209 [2008/06/26(木) 21:55:59 ] >>210 ありがとうございました。まさにそれです。 そういう仕様になっているということが たいへん良く分かりました。 ちなみに、色々試してみたら、 テキストファイルのopen、read、closeは ユーザー定義関数からでも上手くいくようですね。 Excelブックを開くより、読み込みがかなり速いので、 けっこう重宝しそうです。
214 名前:sage [2008/06/26(木) 22:10:15 ] >>207 Sheetオブジェクトに記述されたプロシージャは、 そのSheetオブジェクト以外の場所からは呼び出せません。 他のブックからも呼び出せるプロシージャを作りたいなら、 まず標準モジュールを追加して、そこにPublic Subプロシージャを 記述します。 作ったプロシージャの呼び出し方については、 "Run"メソッドを検索してみてください。
215 名前:デフォルトの名無しさん [2008/06/26(木) 22:56:58 ] A1からC1までをセル結合した状態でInputBoxを使用してA1〜A3までを選択した場合に、 A1:C3になるのですが、これをA1:A3と取得する方法はありますか?ご教授ください
216 名前:デフォルトの名無しさん [2008/06/26(木) 23:06:09 ] 優秀な方に伺いたいです! あるブックのシートにあるデータを計算して、 他のブックのシートにその結果を出力したいのですが・・・ '結果を書き込むブック Set objWb = Workbooks.Open(strFileName) このようにオープンすると本当に立ち上がって見た目がよくないです。 裏でオープンして出力できる方法はないでしょうか? どうぞよろしくお願いします。
217 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 23:14:13 ] >>216 完璧に画面更新が止まってもいいならapplication.screenupdating=Falseを使用すれば開いてるところは見えないはず。
218 名前:デフォルトの名無しさん [2008/06/26(木) 23:25:25 ] 一つ教えていただきたいのですが、 12 24 35 46 2 34 とあった場合で、 最小値をこの中から探し出し、 その最小値の行番号を出す方法、 もしくは、載っている本を教えていただけますか。 お願いします。
219 名前:教えてください [2008/06/26(木) 23:30:34 ] Excelが大好きな婦女子です。 もっぱらワークシート関数と記録マクロを駆使して 仕事で個人的に利用するささやかな入力フォームを作って楽しんでいますが、 最近ExcelのVBAとAccessに興味を持ち始めて独学中です。 そこで質問ですが、ExcelとAccessのVBAが使いこなせるようになったら "プログラマ"として食って行けるでしょうか? 他の言語は全くわかりません。 現在のところ自分としてはOffice使いに毛の生えた程度の"プチグラマ" だと思っています。 派遣社員でも、正社員でも構わないのですが、諸事情により 残業が月10時間程度しか出来ません。 VBAオンリーのプログラマでデスマ(すなわち残業)を避けて生きていくことは 可能でしょうか? 誰かVBAプログラマの現状を教えてください。
220 名前:デフォルトの名無しさん [2008/06/26(木) 23:30:35 ] >>217 はい、ありがとうございます! これを使ってなんとか工夫してみます!
221 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 00:49:59 ] >>218 もっと簡単な方法があるかもしれないけど、俺はプロじゃないからすぐ思いつくのはこの程度かな。 もし良かったらどうぞ。変数も今、適当に付けたから分かりにくいのはごめんね。 Sub 最大表示() Dim MyRow As Integer Dim MyRng As Range Dim Res As Integer Dim AnsRow As Integer MyRow = Range("A65536").End(xlUp).Row Res = 0 For Each MyRng In Range("A1:A" & MyRow) If Res < MyRng.Value Then Res = MyRng.Value AnsRow = MyRng.Row End If Next MyRng MsgBox AnsRow, vbOKOnly + vbInformation, "結果" End Sub
222 名前:デフォルトの名無しさん [2008/06/27(金) 01:14:34 ] >>221 素早い回答ありがとうございます。 早速使わせていただきます。
223 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 01:22:57 ] 俺が婦女子だったら、VBAプログラマなんて、この世に生まれて来た 価値が何ら見いだせないような悲しい人生しないで、男に頼んで バンバン子供産んで婦女子ならではの人生を謳歌するけどな。
224 名前:デフォルトの名無しさん [2008/06/27(金) 01:45:30 ] >>221 早速参考にして、 作ることができました。 ありがとうございました。
225 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 10:23:26 ] 質問があります VBAで一週間後の日付を出すやり方がありましたら 教えてださい。お願いします
226 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 11:41:23 ] Sub test() Range("A1").Formula = "=TODAY()+7" End Sub
227 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 12:50:27 ] ツールからマクロの記憶を使いグラフを3つ作成して、VBAで設定し表示する事が出来たんですが、全て同じ箇所、重なって表示してしまうんです。 個別に位置を指定して表示する方法ありますか?
228 名前:デフォルトの名無しさん [2008/06/27(金) 14:19:01 ] セルに設定されている、「入力規則」を取得する方法を知りたし。
229 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 17:35:08 ] >>227 '1つ目のグラフの位置設定(???は位置を示す数値) ActiveSheet.ChartObjects(1).Top = ??? ActiveSheet.ChartObjects(1).Left = ??? 'ChartObjects(2)、ChartObjects(3)に対しても、個別に位置を設定する。
230 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 17:50:47 ] >>228 vba validation moug で検索
231 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 17:57:33 ] >>219 > "プログラマ"として食って行けるでしょうか? > VBAオンリーのプログラマでデスマ(すなわち残業)を避けて生きていくことは > 可能でしょうか? 無理、世の中そんなに甘くない 事務職で"ちょこっと重宝"されるくらいで"優遇"すらされない VBAは君ごときでも使えることからも解るように、使える奴は婦女子の中にも腐るほど居る 他言語一切ダメで、基礎から学んだわけではなく行き当たりばったりで覚えたような奴なら尚更 まぁ、OfficeはOfficeでもVSTOを完璧に使いこなせたら、それだけで食っていけるけどな それこそ残業云々どころか出社すらせず在宅労働で食っていける とはいえ、身に付けるだけで食っていけるような技術は、君ごときが容易に手に出来るものじゃないけどな
232 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 19:13:55 ] >>230 ありがとうございます!
233 名前:デフォルトの名無しさん [2008/06/27(金) 20:16:03 ] Userformから呼び出したSubプロシージャ内で 処理を終わらせるにはどうしたらいいですか? 今は戻り値で判定するのに functionで呼び出しています。 イベントプロシージャに戻らない方法を 教えてください。
234 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 21:41:24 ] > 今は戻り値で判定するのに > functionで呼び出しています。 その方法で良いわけだが > イベントプロシージャに戻らない方法を > 教えてください。 無いけど なんでそんなことをしたがるのかねぇ 初心者の考えることはわからん
235 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 21:44:31 ] Endじゃないの?
236 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:04:52 ] 233の説明通りならEndは違う
237 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 23:49:12 ] XPとWin2000でexcel2000を利用しています。 ユーザーフォームのcommandbuttonではあまりに味気ないので マウスクリックやエンターキーの両方でフォーカスを取得して操作できる 画像で出来たボタンを作りたいと考えています (マウスオーバーで色が変わり、クリック時にボタンを押したような画像に差し換わる) 使えるイベントの都合的にframeに背景画像を指定するなどいろいろ考えたのですが どうもうまくいきません(画像が切り替わらない・エンターキーを押しても他のコントロールに抜けられない等) 何かよい知恵もしくはもっと適切なコントロールオブジェクトはないでしょうか?
238 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:30:05 ] >>224 ならよかったよ。 処理が最大値検索になってるのは意地悪したわけじゃないよ…。 最小値を勘違いして最大値で作っちゃった。ごめん。
239 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 04:03:14 ] >>219 単価が安いのを我慢できるんなら。 >>231 のように、必死で新規参入を妨害しないとやっていけないくらい、 誰にでもできるし、実際たいしたことない。
240 名前:デフォルトの名無しさん [2008/06/28(土) 05:59:40 ] >>234 初心者ですみません。 代替案など教えて頂けないでしょうか? よろしくお願いします。
241 名前:デフォルトの名無しさん [2008/06/28(土) 18:22:42 ] H段の階段を「1段」あるいは「1段飛ばし」で上る。上り方は何通りあるか? これはどのような構文を使ったらいいんでしょう?
242 名前:デフォルトの名無しさん [2008/06/28(土) 18:52:01 ] VBAはプログラムじゃないだろ
243 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 18:52:27 ] 6段の階段なら 1−6段飛ばしの6通りってことか
244 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 00:15:51 ] >>242 うん、VBAはプログラムそのものではなくプログラム"言語"だね 更に言えばプログラム言語の中のマクロ言語に該当するものだな
245 名前:デフォルトの名無しさん [2008/06/29(日) 08:06:57 ] >>241 一段飛ばしする回数をnとすると (n+H-n*2)!/(n!*(H-n*2)!) 通りになる nを0からH\2までループして結果を足す
246 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 10:55:55 ] >>243 アホスwwwwww
247 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:20:05 ] >>233 呼び出された処理の最後で Application.Quitすればいいと思う。 初心者のうちはけっこうこの命令を 知らないからね。入門書にも出てこないし。
248 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 23:53:22 ] いいわけないだろ ApplicationをQuitしてどうするよw
249 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 00:00:48 ] >>248 IF文などの中で強制的に処理を打ち切るには Application.Quitしかないと思う。 ExitSubだと呼び出し元に戻ってしまうからね。
250 名前:デフォルトの名無しさん [2008/06/30(月) 02:02:31 ] マクロを編集する時に、例えば赤のフォントにしろと言われても色番号が分からないの ですが、どうしたらいいでしょうか? どなたか教えてください。
251 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 04:12:46 ] >>250 例えば、A1を赤に塗ってみてイミディエイトウィンドに ?range("A1").interior.color 又は、 ?range("A1").interior.colorindex などと打ち込んでEnterキーを押してみる
252 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 11:03:07 ] 誰から赤のフォントにしろって言われるの?