Excel VBA質問スレ Pa ..
[2ch|▼Menu]
855:デフォルトの名無しさん
09/02/10 23:16:14
vba extensibility
URLリンク(support.microsoft.com)
使い方しらないけど、なんとなく近そうな道具

856:デフォルトの名無しさん
09/02/10 23:36:01
>>855
それ、行番号さえ指定すればプロシージャ名は取得できるけど、
自分自身が何行目に書いてあるかってのは結局わからないのよ。

857:843
09/02/10 23:36:52
>>845
>>846
>>847
動きました!いろいろアドバイス頂き、本当にありがとうございました

>>847
ああ・・・エラーの理由がわからないのでできるだけシンプルにしたかったのと
改行制限に引っかかったのでいろいろ削ってたのでこうなってしまいました。
すいませんでした

858:デフォルトの名無しさん
09/02/10 23:59:30
>>855
マクロでコードを書き換えるとか、コードをマクロでチェックする系のレスは全部それ使うんだよ。

859:デフォルトの名無しさん
09/02/11 00:13:55
ビミョーに方向違いの質問ですがすいません
まだおもちゃ程度にしかVBAいじれないんですが
On Error〜がらみは古いかもと思って避けてたんですよ

でもワークシート関数使うときにシート上で使うときはエラー処理が面倒なのに
VBA上だとOn Error〜で簡単にできるのに最近気付いてですね
こんな使い方はどこかに落とし穴があるんじゃあと気になるのと
ここで回答者されてる皆様のOn Error〜への視線ってどんなものかと思いまして

漠然とした質問すいません

860:デフォルトの名無しさん
09/02/11 00:30:21
VBAで飯食わせてもらうくらいちゃんとしたもの使うならちゃんとエラー処理して、
エラー内容をユーザーにフィードバックする。
ちょっとしたマクロ程度ならOn Errorで十分。てか面倒。

861:デフォルトの名無しさん
09/02/11 00:40:07
On Errorは滅多に使わん。
関数を呼ぶ前にちゃんと変数の値をチェックするとか、最初からエラーが出ないように作ってるから。

862:デフォルトの名無しさん
09/02/11 00:44:27
>>860
えーと飯食わせてもらう作業のなかで利用しつつあるって感じなんですが
ちょっとしたマクロ程度でもあるし「使うな」って程でもないならちょっと安心です
ありがとうございます

863:デフォルトの名無しさん
09/02/11 00:48:34
VBA自体を商品にするんじゃなくて、
業務効率化のためのマクロ使用なら
とにかく目的が達成できればいいんだから早く作れるほうがよい。

864:デフォルトの名無しさん
09/02/11 00:54:33
>>861
あっやっぱりプロの方はそうですか・・・
ちょっと前まではVBAなしでワークシート上でやってたんですが
その時も確かにエラーが出ないように工夫はしてたんです
でも例えばFor〜Nextで回す時とか「結果がエラーになるときは飛ばす」って
ワークシート上でやってた時を思うとすごく斬新に思えてですね
もし初心者の私に気付いてない「ありがちな間違い」があればと思ってここにきました

865:デフォルトの名無しさん
09/02/11 01:00:25
>>863
ですよねー
今のところ私のどんくささのせいでマクロ作るのも時間かかるし作らなくても時間かかるし(涙)

866:デフォルトの名無しさん
09/02/11 01:00:51
事前にチェックするのと、事後にエラー処理するのと、どっちがいいかと言えばケースバイケースだけど、
VBAに限って言えばエラー処理が貧弱だから事前にチェックする方が結果的にコードがすっきり書けることが多い。

867:デフォルトの名無しさん
09/02/11 09:02:47
on error resume next はたまに使います。 
いや、完全にデバッグしてから納品するのが当然なのは分かってる・・・。
分かってはいるんだが、ごく希に納品後にデバッグも止む無し、ってケースが・・・。
とりあえず動けば良い。とにかく早く、今日中に!! みたいな場合には。

868:デフォルトの名無しさん
09/02/11 10:56:14
ネットワーク先が生きてるかどうかってエラーなしで判断できたっけ?

869:デフォルトの名無しさん
09/02/11 11:29:33
「生きてる」の定義が問題だが、まぁスレ違いだわな

870:デフォルトの名無しさん
09/02/11 13:05:13
>>868
ネットワークを介した共有フォルダorファイル?
ネットのURLの有効性?
TMネットワーク?

871:デフォルトの名無しさん
09/02/11 13:36:15
画面描画しないとかカーソルを砂時計にするコマンドを使用している場合には
on errorは便利だよ。
カーソル砂時計になりっぱなしとか避けられるから。

872:デフォルトの名無しさん
09/02/11 14:31:26
>>864
騙されるな。
本当にエラーが出ないほどチェックしてから関数を呼び出すなら、
チェックの部分が無防備なわけないだろ。

873:デフォルトの名無しさん
09/02/11 14:32:30
>>867
インラインで処理するのと、何でもエラーを読み飛ばすのとは違うだろ。

874:デフォルトの名無しさん
09/02/11 14:41:12
チェックするコードと処理するコードはアトミックじゃないから、普通はどんなチェックを行っても
原理的にはエラーが発生する可能性はある。
if dir("hogehoge") <> "" then
'ここでもうファイルが無い可能性がある
end if

875:デフォルトの名無しさん
09/02/11 15:03:16
on errorで飛ばすんじゃなくて、簡単に予測出来るエラーの場合は条件分岐させて当然。
それでも出るのがエラーなのだよ。

876:859
09/02/11 20:39:36
859ですレス頂いた皆さんありがとうございます
人様に売るものでもないんでマクロに産毛が生えたくらいのものしかつくってないんですが
ワークシート上で関数で処理するときはエラーになる時はそのセルを参照するときも意識してないといけないですよね
VBAでワークシート関数使ってから入力するならOn Errorですっ飛ばせば逆に綺麗に計算できるなと思ったんです
エラーになるかどうかの計算をさせる部分が省略できるから返って負荷軽減にはいいかもと勝手に思ってですね
あくまでワークシート関数使うときに限る話なんで皆さんのように複雑なプログラム組んでるときには
当て嵌まらないケースが多いんだと思います
それでもここまで読んでいて参考になりました

877:デフォルトの名無しさん
09/02/12 00:25:55

「firefoxで或るURLを開く」をvbaはどう書くの

878:デフォルトの名無しさん
09/02/12 01:13:31
シェルに渡せ

879:デフォルトの名無しさん
09/02/12 13:33:52
>>875
>>874

880:デフォルトの名無しさん
09/02/12 17:23:16
firefoxで「或るURL」を開くは、まさにその
URLのシェルへの渡し方がわからないので、聞いているんだが。


881:デフォルトの名無しさん
09/02/12 18:07:32
>>880
firefoxの使い方とか、スレ違いだろ。

普通に。
コマンドラインからやるようにやればいいだろ。
"C:\Program Files\Mozilla Firefox\firefox.exe" www.yahoo.co.jp
とか。


882:デフォルトの名無しさん
09/02/12 18:31:56
たぶん、こういうことだろ?
REM 「firefoxで或るURLを開く」

883:880
09/02/12 19:53:36
>>881
もちろん、VBAの書き方の問題として、"""あたりのことが、気になっていたもので。
大変、参考になりました。所期の目的を達成することが出来ます。サンクス。
いままで、IEでやっていたのをfirefoxでやるにあたって、より難しいとの思い込みが
邪魔してましたw

884:デフォルトの名無しさん
09/02/12 20:33:35
お前は一体何を言ってるんだ・・・

885:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/12 21:12:24
すみませんやっぱりアホでした
標準モジュールでDimで2重に宣言してました・・・
スレ汚しスミマセン

887:デフォルトの名無しさん
09/02/13 01:06:50
>>884
自分で考えるより他人に聞いたほうが早いと、、、

888:デフォルトの名無しさん
09/02/13 18:21:30
質問の文章を書いてると考えがまとまるんだよな。
脳が疑問点を俯瞰するというか。

889:デフォルトの名無しさん
09/02/13 19:33:48
その場合
書き込みボタン押す前に
やめて欲しい

890:デフォルトの名無しさん
09/02/13 20:00:55
ボタンを押した瞬間にひらめくんだよ、これが。
脳のどこかが切り替わるんだろうな。

例えば誰かに質問するために電話をかけて、
つながった瞬間解決するとか、誰でも経験あると思うんだけどなあ。

891:デフォルトの名無しさん
09/02/13 20:58:22
とかいうつまんないやり取りは、くだらん質問よりうざい

892:デフォルトの名無しさん
09/02/13 21:05:19
>>891
うぜー

893:デフォルトの名無しさん
09/02/13 21:25:13
てな感じ

894:デフォルトの名無しさん
09/02/14 06:55:41
携帯からすみません。
一定時間経過したが、何も操作が無かったら、エクセル自体を閉じるコードを考えてます。
これって可能です?
ちなみに、エクセル2003です。
VBAは、ある程度使えます。

895:デフォルトの名無しさん
09/02/14 08:55:09
>>894
Excelに標準で用意されてる関数だけでは無理
APIを使えば可能

896:デフォルトの名無しさん
09/02/14 11:06:14
APIですか〜
それは、手に余ってしまいます。
素直に、作業ブックを閉じるようにします。
ありがとうございました!

897:デフォルトの名無しさん
09/02/14 18:09:38
本で勉強中なのですが

for nextの例で下記コードをためしにやってみたところ
変数が定義されていないとエラーがでます。
例と変わらずに打ち込んでいるのになぜエラーが出るのか教えてもらえないでしょうか?


Sub ループ()
For Cnt = 1 To 10

MsgBox ("こんにちは")

Next Cnt

End Sub


Cntがカウンタ変数って事でよさそうなんですが。

898:デフォルトの名無しさん
09/02/14 18:14:23
そのまんまじゃんか。
Cntが宣言されてないんでしょ。

option explicit外すか、dim cntで宣言すれば良いんじゃない?

899:デフォルトの名無しさん
09/02/14 18:14:57
ためしに
Dim Cnt As Integer
を追加してみたところうまく動作しました。

何度みなおしても本には>>897のコードだけで動くように書いてあるのですが。。
ちなみにEXCEL VBAのコツが面白いほどよくわかるって本です。

900:デフォルトの名無しさん
09/02/14 18:17:39
>>898
ありがとうございます。
option explicitってオプションで「変数の宣言を強制する」って奴と関係してるものですかね?
ちょっと調べてみますが、この設定のせいだったんですね。
別の本だと「変数の宣言を〜」って設定を推奨してたので
チェックしてました。

901:デフォルトの名無しさん
09/02/14 18:19:30
option explicit無しがデフォルト設定じゃなかったっけ?

902:デフォルトの名無しさん
09/02/14 19:17:07
変数の宣言は強制しておけ。
ついでに、きちんと型の概念を持っておくと良いよ。

ただのお遊びマクロで終わるか、仕事で使えるプログラムになるかはそこが大きい。
型を理解してない奴は、ほぼ100%お遊びマクロ。

903:デフォルトの名無しさん
09/02/14 19:21:32
javascriptもお遊びですね

904:名無しという名無し
09/02/14 19:21:39
質問なんですけど
ExcelってXLSのことなんですか?
だとしたらここで質問したいんですけど
間違ってたらいってください

今、Excel viewer2003で
XLSのファイルを見ようとしてるんですけど
「コマンドラインオプションの構文エラーです
 Command /?を入力するとヘルプが表示できます」
とか出てきて訳わかんないんですけど詳しい人がいたら教えてください。
お願いします。
(一応、ググって見ましたが、僕の見る限りなかったと思います)

905:名無しという名無し
09/02/14 19:24:16
すみません上のやつ
書くとこミスりました
すいませんがスルーでお願いします
本当にすいませんでした

906:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/14 21:26:41
何で自分で調べないの?

908:デフォルトの名無しさん
09/02/14 21:29:02
調べたんですけど分からなかったです。スマンコ

909:デフォルトの名無しさん
09/02/14 21:55:56
>>908
Offset()もRange()もRange型オブジェクトを返す。両者の違いは、
Offset()はマイナスを指定できる。相対指定しかできない。1つのセルしか指定できない。
Range()はマイナス(左、または上)を指定できない。相対指定も絶対指定も可能。複数セルからなる領域を指すことが可能。
両者を組み合わせればあらゆる矩形領域を相対的に示すことが出来る。

この場合に限って言えば、Range("A1")は単なる無駄。
わざわざ無駄な式を書くには理由があるはず。あとで別の例題で書き換えて使うんでねーの?

910:デフォルトの名無しさん
09/02/14 22:23:26
調べてない奴の台詞。> 調べたんですけど分からなかったです。

911:デフォルトの名無しさん
09/02/14 22:29:07
>>909
なるほど!
調べたけど分からなかったことが分かりました!
ありがとうございます!

912:デフォルトの名無しさん
09/02/14 22:50:20
┐(´ー`)┌

913:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/14 23:12:30
マルチすんな

915:デフォルトの名無しさん
09/02/15 01:10:16
定数戦隊
vbRed
vbBlue
vbGreen
vbYellow
vbPink

敵か味方か、謎の戦士
vbBlack

916:デフォルトの名無しさん
09/02/15 22:38:43
エクセルで、全シートに同様の処理を反映させたいのですが

Worksheets.Select

For 行番号 = 2 To 10
.Cells(行番号, 列合計).Value = _
.Cells(行番号, 列数量).Value * Cells(行番号, 列単価).Value

Next 行番号

と書くと「.cellsが不正」と言われます。
どのあたりがおかしいのでしょうか。

917:デフォルトの名無しさん
09/02/15 23:04:53
with で囲んでないのに、何でピリオドから始まってるの?


918:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/16 14:20:01
>>918
マクロの記録してから質問しろ

920:デフォルトの名無しさん
09/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



最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5152日前に更新/259 KB
担当:undef