1 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 15:42:51 ] ExcelのVBAに関する質問スレです 前スレ pc11.2ch.net/test/read.cgi/tech/1219673793/ ★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)
868 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 10:56:14 ] ネットワーク先が生きてるかどうかってエラーなしで判断できたっけ?
869 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 11:29:33 ] 「生きてる」の定義が問題だが、まぁスレ違いだわな
870 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:05:13 ] >>868 ネットワークを介した共有フォルダorファイル? ネットのURLの有効性? TMネットワーク?
871 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:36:15 ] 画面描画しないとかカーソルを砂時計にするコマンドを使用している場合には on errorは便利だよ。 カーソル砂時計になりっぱなしとか避けられるから。
872 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:31:26 ] >>864 騙されるな。 本当にエラーが出ないほどチェックしてから関数を呼び出すなら、 チェックの部分が無防備なわけないだろ。
873 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:32:30 ] >>867 インラインで処理するのと、何でもエラーを読み飛ばすのとは違うだろ。
874 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:41:12 ] チェックするコードと処理するコードはアトミックじゃないから、普通はどんなチェックを行っても 原理的にはエラーが発生する可能性はある。 if dir("hogehoge") <> "" then 'ここでもうファイルが無い可能性がある end if
875 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 15:03:16 ] on errorで飛ばすんじゃなくて、簡単に予測出来るエラーの場合は条件分岐させて当然。 それでも出るのがエラーなのだよ。
876 名前:859 mailto:sage [2009/02/11(水) 20:39:36 ] 859ですレス頂いた皆さんありがとうございます 人様に売るものでもないんでマクロに産毛が生えたくらいのものしかつくってないんですが ワークシート上で関数で処理するときはエラーになる時はそのセルを参照するときも意識してないといけないですよね VBAでワークシート関数使ってから入力するならOn Errorですっ飛ばせば逆に綺麗に計算できるなと思ったんです エラーになるかどうかの計算をさせる部分が省略できるから返って負荷軽減にはいいかもと勝手に思ってですね あくまでワークシート関数使うときに限る話なんで皆さんのように複雑なプログラム組んでるときには 当て嵌まらないケースが多いんだと思います それでもここまで読んでいて参考になりました
877 名前:デフォルトの名無しさん [2009/02/12(木) 00:25:55 ] 「firefoxで或るURLを開く」をvbaはどう書くの
878 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 01:13:31 ] シェルに渡せ
879 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 13:33:52 ] >>875 >>874 ?
880 名前:デフォルトの名無しさん [2009/02/12(木) 17:23:16 ] firefoxで「或るURL」を開くは、まさにその URLのシェルへの渡し方がわからないので、聞いているんだが。
881 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 18:07:32 ] >>880 firefoxの使い方とか、スレ違いだろ。 普通に。 コマンドラインからやるようにやればいいだろ。 "C:\Program Files\Mozilla Firefox\firefox.exe" www.yahoo.co.jp とか。
882 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 18:31:56 ] たぶん、こういうことだろ? REM 「firefoxで或るURLを開く」
883 名前:880 mailto:sage [2009/02/12(木) 19:53:36 ] >>881 もちろん、VBAの書き方の問題として、"""あたりのことが、気になっていたもので。 大変、参考になりました。所期の目的を達成することが出来ます。サンクス。 いままで、IEでやっていたのをfirefoxでやるにあたって、より難しいとの思い込みが 邪魔してましたw
884 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:33:35 ] お前は一体何を言ってるんだ・・・
885 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:44:56 ] すみませんアホな質問だと思いますがお願いします 標準モジュールで Public Check As Boolean Public Sub hoge() Check = False Load Form1: Form1.Show として、 ユーザーフォームで Private Button1_Click() If TextBox1.Text = "" Then TextBox1.SetFocus Else Check = True ←※ Me.Hide End If End Sub というコードなんですけど、 デバッグで※の所をちゃんと通っているのに、 標準モジュールに戻ってくると値がFalseになってるんですが これは何故でしょうか?
886 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 21:12:24 ] すみませんやっぱりアホでした 標準モジュールでDimで2重に宣言してました・・・ スレ汚しスミマセン
887 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 01:06:50 ] >>884 自分で考えるより他人に聞いたほうが早いと、、、
888 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 18:21:30 ] 質問の文章を書いてると考えがまとまるんだよな。 脳が疑問点を俯瞰するというか。
889 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:33:48 ] その場合 書き込みボタン押す前に やめて欲しい
890 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 20:00:55 ] ボタンを押した瞬間にひらめくんだよ、これが。 脳のどこかが切り替わるんだろうな。 例えば誰かに質問するために電話をかけて、 つながった瞬間解決するとか、誰でも経験あると思うんだけどなあ。
891 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 20:58:22 ] とかいうつまんないやり取りは、くだらん質問よりうざい
892 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 21:05:19 ] >>891 うぜー
893 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 21:25:13 ] てな感じ
894 名前:デフォルトの名無しさん [2009/02/14(土) 06:55:41 ] 携帯からすみません。 一定時間経過したが、何も操作が無かったら、エクセル自体を閉じるコードを考えてます。 これって可能です? ちなみに、エクセル2003です。 VBAは、ある程度使えます。
895 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 08:55:09 ] >>894 Excelに標準で用意されてる関数だけでは無理 APIを使えば可能
896 名前:デフォルトの名無しさん [2009/02/14(土) 11:06:14 ] APIですか〜 それは、手に余ってしまいます。 素直に、作業ブックを閉じるようにします。 ありがとうございました!
897 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:09:38 ] 本で勉強中なのですが for nextの例で下記コードをためしにやってみたところ 変数が定義されていないとエラーがでます。 例と変わらずに打ち込んでいるのになぜエラーが出るのか教えてもらえないでしょうか? Sub ループ() For Cnt = 1 To 10 MsgBox ("こんにちは") Next Cnt End Sub Cntがカウンタ変数って事でよさそうなんですが。
898 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:14:23 ] そのまんまじゃんか。 Cntが宣言されてないんでしょ。 option explicit外すか、dim cntで宣言すれば良いんじゃない?
899 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:14:57 ] ためしに Dim Cnt As Integer を追加してみたところうまく動作しました。 何度みなおしても本には>>897 のコードだけで動くように書いてあるのですが。。 ちなみにEXCEL VBAのコツが面白いほどよくわかるって本です。
900 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:17:39 ] >>898 ありがとうございます。 option explicitってオプションで「変数の宣言を強制する」って奴と関係してるものですかね? ちょっと調べてみますが、この設定のせいだったんですね。 別の本だと「変数の宣言を〜」って設定を推奨してたので チェックしてました。
901 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 18:19:30 ] option explicit無しがデフォルト設定じゃなかったっけ?
902 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 19:17:07 ] 変数の宣言は強制しておけ。 ついでに、きちんと型の概念を持っておくと良いよ。 ただのお遊びマクロで終わるか、仕事で使えるプログラムになるかはそこが大きい。 型を理解してない奴は、ほぼ100%お遊びマクロ。
903 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 19:21:32 ] javascriptもお遊びですね
904 名前:名無しという名無し [2009/02/14(土) 19:21:39 ] 質問なんですけど ExcelってXLSのことなんですか? だとしたらここで質問したいんですけど 間違ってたらいってください 今、Excel viewer2003で XLSのファイルを見ようとしてるんですけど 「コマンドラインオプションの構文エラーです Command /?を入力するとヘルプが表示できます」 とか出てきて訳わかんないんですけど詳しい人がいたら教えてください。 お願いします。 (一応、ググって見ましたが、僕の見る限りなかったと思います)
905 名前:名無しという名無し [2009/02/14(土) 19:24:16 ] すみません上のやつ 書くとこミスりました すいませんがスルーでお願いします 本当にすいませんでした
906 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:22:21 ] すいません。質問なんですが、 Sub test() Range("Q2").Select Do Until ActiveCell.Offset(0, -1).Range("A1") = "" ActiveCell.FormulaR1C1 = "=SUM(RC[-15]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select Loop End Sub このコードの、Do Until の条件式は、「アクティブセルの一つ左のセルが空白である」っていう意味であってるんでしょうか? だとすると、「Offset(0,-1).」の後の「Range("A1")」にはどんな意味があるのでしょうか? 同様に5行目の「ActiveCell.Offset(1, 0).」の後の「Range("A1")」の意味がよく分かりません。 この「Range("A1")」が無いと正しく動作しないのでしょうか?
907 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:26:41 ] 何で自分で調べないの?
908 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:29:02 ] 調べたんですけど分からなかったです。スマンコ
909 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:55:56 ] >>908 Offset()もRange()もRange型オブジェクトを返す。両者の違いは、 Offset()はマイナスを指定できる。相対指定しかできない。1つのセルしか指定できない。 Range()はマイナス(左、または上)を指定できない。相対指定も絶対指定も可能。複数セルからなる領域を指すことが可能。 両者を組み合わせればあらゆる矩形領域を相対的に示すことが出来る。 この場合に限って言えば、Range("A1")は単なる無駄。 わざわざ無駄な式を書くには理由があるはず。あとで別の例題で書き換えて使うんでねーの?
910 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:23:26 ] 調べてない奴の台詞。> 調べたんですけど分からなかったです。
911 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:29:07 ] >>909 なるほど! 調べたけど分からなかったことが分かりました! ありがとうございます!
912 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:50:20 ] ┐(´ー`)┌
913 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:59:06 ] グラフ範囲 =Sheet1!$O$3:$T$3,Sheet1!$O$5:$T$269 をマクロで実行するためにはどうすればいいですか? myC = Range("L2") ActiveChart.SetSourceData Source:=Sheets("Sheet1") .Range("$O$3:$T$3", "$O$5:$T$ & myC") , PlotBy:= _ xlColumns で動きません。 よろしくお願いします。
914 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 23:12:30 ] マルチすんな
915 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 01:10:16 ] 定数戦隊 vbRed vbBlue vbGreen vbYellow vbPink 敵か味方か、謎の戦士 vbBlack
916 名前:デフォルトの名無しさん [2009/02/15(日) 22:38:43 ] エクセルで、全シートに同様の処理を反映させたいのですが Worksheets.Select For 行番号 = 2 To 10 .Cells(行番号, 列合計).Value = _ .Cells(行番号, 列数量).Value * Cells(行番号, 列単価).Value Next 行番号 と書くと「.cellsが不正」と言われます。 どのあたりがおかしいのでしょうか。
917 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 23:04:53 ] with で囲んでないのに、何でピリオドから始まってるの?
918 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 13:53:54 ] 質問させてください 以下の様な入力があった際に A列は(A,1)だけ文字色を黒に、それ以下はすべて指定色に変更 B列は(B,1)が文字色黒、(B,2)(B,3)が指定色 (B,4)が文字色黒、(B,5)(B,6)(B,7)が指定色 になるようにしたいのですが、どのように実装すれば良いのでしょうか A B C ore kimi warota ore kimi warota ore kimi warota ore dare warota ore dare warota ore dare warota ore dare warota
919 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 14:20:01 ] >>918 マクロの記録してから質問しろ
920 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 14:40:30 ] なんか色々アレしてたら突破口が出来ました スレ汚し失礼しました。 JavaとかCを軽くやっただけだったので 喜んで引き受けたんですが スコープは分かりにくいし、なんか予約語?っぽいのがもうわかんなくて。。。 ま、すいませんでした、自力でなんとかしまウィッシュ '2行目から終端までループしましょう For i = 2 To LAST_ROW 'テーマが全項目と同じか調べる '次の行のテーマを変数に入れときます THEME_NEW = Worksheets("Sheet1").Range("A" & i).Value '前の行と現在参照している行が異なる場合 If THEME_NEW <> THEME_OLD Then Worksheets("Sheet1").Range("A" & i).Font.colorIndex = 3 Else Worksheets("Sheet1").Range("A" & i).Font.colorIndex = 1 End If THEME_OLD = THEME_NEW Next